gsequencer-0.6.37/0000755000175000017500000000000012633241336010754 500000000000000gsequencer-0.6.37/gsequencer.share/0000755000175000017500000000000012612232516014213 500000000000000gsequencer-0.6.37/gsequencer.share/images/0000755000175000017500000000000012612232516015460 500000000000000gsequencer-0.6.37/gsequencer.share/images/ags.png0000644000175000017500000006352512612232516016673 00000000000000PNG  IHDRuFgAMA abKGD pHYs--tIME tEXtCommentCreated with GIMPW IDATx]Yl\u8 3Mi%Y$kpiA (оcCiЦ m4c'[,Y[WY8r~syd?0R޹_s$` KXD*B> Z&455hnnRu*JKzX,hZT*B!hZXV455mlEk!z^zt J62 J<,<2T*ZZZ ÁbsAR)9sT%A7 R JEfB*鴐t:-$ !V}{O(˂ҨT*B\f9ҥKBR~ JEr$z4MMMH$կ~mZ Jl6/ _ZZZ3 # A>rrַ~X,VE{{;z{{!2 ? ]fOL&A\"q'?ɺٯT*^u!JrRfffxVkyAfbZVQ|J%" LɓhmmegDU}{g_|QvR؃ ctt^xvr* ,&&&cddT xFBLJe\r'OTܚAB*]FLTb1h}ׄl6+U\. |P^򟛙Fo~۷aeeEXZZVWWb(]hp:s  MMM(Jx7/t?Gyl[4}X/~ 9r{A(*YR bRZFٳgqQ4P(PT"2Դ:}T*!N#ɚ8j& PTT*H$H$wLMJJbzL1Ija0`X`a6"J\.?)v;Ο?v ᡇb&@\F.t j5=D"ytvvX,رc_Ff |8vrqi=z9luJ"?EgA[[r 㣏>Ÿ~m>|x}}}_2??gbϞ=h4hjjbA{{;z=^/Dp)ٳgɛ4@\~ BA|SSTzKD"ºE^s>oZ&|P|OVڵk\gfv|Ibݻ* ܌~w{ P(`ddDևWTҗp8 /8u" g&{S:մ $f3Z-N'^}U& N' wwױX,})˟~<̆yss3jCO^z .\#<JF0x'_(xioKKK˥lBsѣx.J̄/}6ARʕ+8z( B=q%<ӵ/xzJZn__>@$dckMMM1_駟ҬJ333x@ eǕ+W/y2OZZZ$A23 f3\tZW:|>H$b>C&<6&3d2M;fz0^hb^yIAVVVFk$%W;fp:h4|KKK~:b1::> ãihT8u@H$ NQTt:-?N:%DQT* |^^{5! nw_]B\rp5}{JՃst/^N#BXāP,c޽BP nݺX,BP%rzzz`2RL&qYcxx0L8x ,e_ϋJd"L$׋}sUヒt:ÇcttFs* "B8$NX,nT*5\gΜ۷~tuu1/ h40LByT*/#Ncbb7n@4ydӊbZ`0۷}}}w)e\|'NbN;BBnb nXÓ^.X,6Vߏ'|s4---ػw/_|; Jш#G`#fT*;w~!> @wܵZ-/N}޽f#KJX,"arr?8N<Тr9|[8FFFk.hZ_{it1JٌcǎF̰ KV@^/K_<OCRpa??Y"(>,}ٚ}8x`C\yr!# "\.CjtnF}088XӉ* xwQTpl6e,../ R sssxwpIA h4n#HR闿%l6 EE0`@gg'l6[] X,5Aq *Qjx`ZLi;F"~fU)HT*z=l6<aZ g|dO>yŐ $455h4񠧧v(tD;B")t br9B!>}O=˘X\\ĭ[|Do&L&ZZZ[ R >gΜ@[pmmmصkn߾SNAӡjtSSShmmɓ'75(ҥK,F#z=\.nϺ!dzzS@ǞRCbdJb^j# bzzvH$ğɟfP Z0|>_ֆ~,h0L1DR^r|ۇ_|M8Py9M_P*J/"FFFT* Zæi?1vލu;o6ͬB*ѕnC=SNattPH`bcR, F# b.H&xK/z^^M`6WnT*|_4UňthmmE>gA7Z{ v]V3E '$~* ڻwoUޗFH~񠵵uNJfC:ްH\׮]Õ+WϢ%RQKԄV ƍ8rHUFOO>ŵ`_טġC;ai4 Juɣ ΍, fX]]C&A:^}Ն"A}K`5rƍb\Kӡ XYYadbb 8~8;paJ^'Y'b,Xǃ˿ YH;J0+RFZx7SOappލ(( fl|'łnV?%"4 4\^{jq:Єʥ^L&:tXlnZVjFNe,.. vBOOOU-$?[$dŘL&VO7oVYY8VC>FTP9O!F199 .Z[[d~Nj2f3# ȂеZ ,E. F񮕩hnns= f\*G=$V&&& 0L upU RoDz2"JV07.ZB?d0 H$?y3E]~`׮]p8 U*d 033'|/B( h+ X[[G}/}K^@ !+z뭷f/Qؿ?ø/h46,N֖: &''204 { F{3B.ñcvL:A`2`Z??GGlp |xObhhN)BroyZ6>)е5D"*:zp\U2+*`v#|bCr" V(R<_q^/Zvhooh䓭)٘Q|*ŪŠMv;_%uRBF^t t:pO&a% b^d8t3jp#J>Nʐ7r(ސ;I% ;cGb팝qXxpF-¬ͬ}@x7S.asj3JHύ?垽J#%<Ǘ H͉sS*5xMAcKB|L<܂5jmZfCӡUWt r9b^hHK.`~HUcԑjqxl3 H L"Bt:L&~$<(Dā49HpHhdf%m-%4K1ͦ50ptpb "&*Jrì8:QKa#J/qt##H #jE (7.h EdV1<< F%x^ . U%V(Jܾ}bk{'NM_&Ri&Õ+Wߏ.8N<;8m5~B)#ceeH&xꩧYU|NonzÁݻwcqqݻwq4`s^SSSrWdz=L[丗ed2x^b1x<*@كj#GpyX,sO~ Jczz +T*d2L&b?%Q:yu;NI& zUv^]vnٳaqv2U~?~~mܼH>`Sk4j5pnΛddZi}uYGֆR;ɍb*Sgkjj޳@ j'eիXYYje҄ߴ|QCvF*y( L"!LbطoZ Fł~7AGGr Z򑍦,odl[n͛HLMb ڑ6|5#KiZ ǃ~ZXidchnHK H٧\d5be[8tV+|ޱl􁕒jč@)D"XYY/~ 'R\ ^2o4k3T*!H۸x"8:;;vqqƴ"O{.^/){w>ex;Cc޽<]gfU-!@MYVEKK F#, R,I))5'*hb9*].ɶX,@^Wnȑ#%"^d2~\v e %}:|-ltvj&09Nv:tb\\Npmtki#RRlp7n@6eđPWD !fNPV$e IDATG9T3n4a2Ql'o\l@X^^FGG:::0<<)xѩ,~੧BOO, olr 8׋wy5b#68&=z$hptMB!X]]<mvJr7 0mb}\t:l6VXLoQ f3La1xt q g?[ykX=䩧•+WpY~twwp05Ty7ROs5,.."W^aǶbpit:7޽Gb/M~F`0tDX z*RR~Ҟ|Lb !;::4B5Ѡ>(>#fڶT͈DZ~Pz`4a4%і zA@1$"ك'x]]]ԅm$Sᅬ9F*Cj~CC(ΉmzTbvA/ղ&6i˗cǎᡇRDP7SPup&h4V#,vtz6_jqT ٬籰?XLd2r 0UNjͫ97A24Ll6:MOOge7^1h&R4ܓ7> |G*Ղ 㬪Bv#X,2HBp9ܛ)Ȕ#_H4\)SۮFI4*x Tf0LbQޠmHRF|XZZB&a}U)U,qm`Ku/Ẽ+w(d 8T > X\\D$n.*0wxgq99svBGGGTa2md2H$@ ׋!8qRExgx*甲 FkaS2i$2fggӃ-Y4J]-۵5|Ǹx"xpС*>/p0o>4y!USPp?ÇcaaSSSOhJEj|!looݻ166QE$-lZVnB>wq= iI ̩!Y4xTeerl%z'IrIp8˗/ʕ+?rpA.4K)>o&O0r0L&ӺFè"t---رc,%!ͲG;hj"✢Z=2.JHӌ4 " !2+eH͓8£gZFV8zhU׫튣 aZ/BAi@9jnnկֆ'O6(=zfN ~l6GE{{ &T*!̙3H&a>Iv݈F裏jƲU6..|ߙp9dY v3H$1??D"z>hUBjԜWY|oƙ3g022RUVl6 ڵkhnnjERA(˗{J2E7x JV8tuuԩSHR8tz{{4S>o D"LNNbrrv0`6`fX,6'KKK~ݎ{28W.qpzWlV 4Z2#Egg'+{ ,cɾ۸V-~ƍ;r]BIŋC?㘬VJ#d2d.n7ژi"UQ/M&FD"D"bZ߈\Jf. E)z⃕NŪʎ#I2`|LI)[@{xDvvs^؄2VWW]A>9FԋIVRSl)j}J<{I@I\pq"DGnӥ&[DZ@Ȓ8D &Vy! ifNqJίR_Rte"biU}EnOKVKKK q%H=jQ2n^zl$ndgo41PܧUobUv9t9N\'vG?c+nAw3v;;cg3v;dg;ADڵ n˗Y+i ۷V3T1HmzntV[V8k׮_b`NX,cnWW0??ϚU%<#سgky7iFS勴̙36J2z^d2<3T%—^'IB!>|fJFtuuիH$ʰAx@ E<ec#ln͒I{A:͛7Y+27d|>=z1|mk2g|<:u,pT#tl6l6#H VO hkk:Q#-(b^M_FzX,V;+Oڊ܋-žXS|>_B*>0f0͒tf+:!Ygbz)l6^ <G]nsd7 \u:CdS& F*1ۇ7p:4:::)_-=;wǜm4%^/=Q)os#r93kJ3mż5OKU8V+d;[GB!! !@-kՑ"fcMk M@ss3\.f33#x~h{jQDܻgELhnnn8<2U^RArOd aZ@oG;FFҏ$5>eIF ~?&&&pU455nn[ RPXSlif:F8pp\?Eť+^ x+++t:vМ+I[[[ڽ5\3F`޽Nc~l#[kq"1mAHAbf! P.\zzzRe򈹳rrnFxwQ,Cf)7553[Ēt;aR4t:1::HͤTʧ &Iů6Jjž}N1==|7~0ޔZyi<K*L#K E8SR)͛bz'$ۜlejsy5+e?׭Է]$amm 7oĕ+Wt:166vмN\ěsrfVgg'{1l6\~^VpnB>4 r`Z(b)B@ x<~JRO M4>^*jw=Fa20:: V/QWՂyvzɄ~8Ig%0L&twwgn tJ7n ɰFObSMEaٱ|VFŋN֔t:}[6?(d011itwwmmmZlFWz0 ZpݘD{{{3@`4:{#_s4p88}40lɟ@Tqw{"._]/,1N8i a\Ly;? `ZB)};[o&h4D6ťK`X&pJSIiFuOvv%ө򫶫KH$X܂ ̹ Eɗ_cB.,n޼rQ8Ϊ.PrHRн$}=ڊ^LLL  tJAT#FD",×|ľݘFl# ʅB!,..bvvkkkLԪj҂]vl6W(|{!M6 b||UJ cqv>lF__fggH$0%e+٨mmm"A{[}HxS2Ox O?VCP`&׮]C>xU`O\`0X*okog2DpyT*3yIڜ|cVFVpsNv\rURlL+9Xj6 C8:tc+D"7n`rr{Aww7cyDD.n5Ey@lȱ0Nl6dYdYd2)x^%/<[ . chhVLsLARaYihii$_%&fp'f2$ l68qwdIs[5"|>\^|iP){{+\vq/ F,7R6.ϳ B}6N8Al!jzESjݻ ǫTU-$&zش`Xw\UR"r9@ӱ"^x\2mL&3OJ|P(1Q#L߃rl6F#nݺWflkW\Fٌ F&E؜~.vkE{`3 , 3ACnSk)QPTRP(͛صkK6O&߁{!fEt:-Dx_OC߱XQFj2tĖʮgXJTB2MoǼU9Rɛ3 {/iNq^ >Njp8@ ׋h4.hZܺu mmml9tA6R̅'3LX]]evG$Aj1[Cc,JU54[Ȥ"wuuo߆ij> ۍ&cNv J˯^dōlKT)Ӫi 1"v;DrdzG=sb7" 8* CCC,GvnJ12!c))hԱ(#N3S (Li;$A:::000ˊA`XjO)SARkO 9jyf0x011T*Řk4e7Kdx]]],!ދ a,..baa^|~3R`2Յtvvl6*Ij5v;ۇz T*rePy2ԂI\'ҌR'N`hh)kVa2 C(9݈|0H0)رc0*b144Fـ%XGjw ^YYan===^ *%RHӘٳgQ,166tȞ y9 arr8t6N*QZ 8<< Ʉ`iidh[a2"ɠ8~8)Geub]RZG)sBPX[[ك$*dټlt:9:u Fx<NI łUWc=Qm9$z~]R TRk0>>`0%# <&giZL& kXXMIrRZ&"d2YIԊBԄÇ3!+ǨU1bo#rrXZZӧڊttttk HٳgQ*o߾-=$|/nͩjT:rforɋRiba"+޼!ĈpP1d2u=L-93. ###,ud2mQTfY4bi§n&/x"ߏN8)2i&&rf?ChZݻwCdrd2[nAղW E)ǪVp'=X,U%nT)H$XXX ,g2p8,..Bb||.J󊹃L*)v aY, Wu)sAB36W<Ǎ7D0<<Ƈ%97>ۗ?P|Z-!٬x I9\r{f: X5jX~m)\pwfs@f OCKdhh}VNn Ż &IM `0JӘō7gttt Zá4!r`Ϝ9R!l6ܺ^%:8<:;;DVV}h4Ckk&Enf(bƹsLcLi\.1A EB +T yݎY Ll6?}}}̬p; R.\@0n:4Qt:;wf===p\UcT*wehj4 $8D= 033twwv3KNsVϵ6}Jl@.]cbj0p\H&8ń1<< u IDATZ%PRDͷdPA|y& XW\:w(n@D~Hb---p8̀Pnɉ}98""HU69& |;Hxph4p8Z$ h4[IUm6\g}5eTfc~v;Ŭ$t=jIi+b:PPje7Vc>RKe5Nvxv%o82 A>bB͢Rg2Eqr&|#n[-R)d2TF:Dmc(|?4C5h/hOP/TM^);Wi6aZ'O a5%xอ(3\#ڨ%IA~m5 Ey]8!ᩆK,XJArd-m?󬑴nXX; M7f7J26>6(lo)z&7yIHߊ*Xz^[rS).N79r>B=k#CjOT} bJZI2%m}]&{+G=$D5Wj zK3J=a]zKi^j/W%OdH譢ב,Hs3Fەf=F8l\/ U]dgw?Kϻ~ӝ3vRng v9 ;cgX;cg쌝3v,3v; dg쌝3vƎ;cg쌝3v;cg쌻{񥵲ե(4ors!E?#U ƵпuT'չC<_ft,,f+ѾBZ=ba!.n"WVo!(wfzVfJzSt3>CTԆRb S*4W6QiRP(}fIK lmPRK.).)z7z+q*IF˟g2!fJ v@B=]Ӓs^+(/ w4YLĿv)!Ŝ(;w{Y\G!?4GJ׵ĝ h:j(o}BP{@+%oQ7"\UZqI4 ЧbPD|[.>#nFO-;CRFGG PM\]$pZUQ J#$%4B0\.ytttH6DގYXrʗFh0`Xt:xz1;;y\.8N]d2R@AboAb1ڵ hkk[5w/Ĩ}(8.ҵ#ȞffR}(ʚG"b1jJqAXedm!bddYSmDhcQ !fwJ)*OwbfggYP[U0o=H$022*[;\/T jrH$zX]]df>Vr!eVbUPTj0 Zp8X]]h``ЪFs8,;0~?2N[[g~Aej7+)!NGN9RiYP~սct|_ty!Dkk+Zgz zSʝp@bV,FqIR0䉴1Ț7&_HX,,--!HTebޑy߽cHSKy-NڔP|cccLhcg2/[\lojgbIVԠF^(/R+(qNLFFss3N':;;tbBq!~^y#<\*G@<|x"J= 5 xu)UFRsiA8IfYb1,//cqqXՋL&Se.5!J],Oj\1==rv.}#>/x![Ros) 9᡻x<>l:7l6@u=OɚUK,1dի6 !`0z=077x&'2Ć).^^4BfJh4 ̬>`ii ^)Rb%Ry/G5\d"22x\(Hd!,=SʕpFa :Bx^333bAGGV+l 9Q9ZٔU/_I!|>rN'z}Ê\Jh>hʠxOHi|>,.."l6j[_86:Vޚ "/hZR)d2T(z"3p:gS$aLu*t.e$IA,..QmPn:U/pڈBV..SF ~\.l6 ״R)DQAj&i D=rF o0P.bwR UӘ40[ű7,áQZ*GОD"zXZZNc ʲxErIH7zx!4 KKr?SisfIT| (tUσ,RYkR/tχ5h4X, V) )]\#)݋}U^y yojjn޼昼6qjwZ taݎ6tvv X\\D:f7bϮj4Qzf|O=VA:0Ji\96!5CJx H$@ \.шV 0PګkJ~?:4g2r0088(s`Ix /hzSSSF\|b4 l6\.|>L&)RO3'Ґ*#t˧9SgD*ϽD8n޼7n f {7U|Q:OgYK6u"j~M8Ppd2¡\.@ 2|8rApJ+ J-Fҩ =8/  " LBRUe u'RpɖPR"R(@5Jve^*ŹbSJ`J!!z*(wi]]]GW$j!U[@\.xXZZjHE=+x^{~Z,p)<)(sMQb(hC=>VPW=7QqP2fv]]]UCQۻڟĎ.. *͚4Mi4m]-/"|:{WDnb9g69i*u6)цK:aQ l\.f@~) ~4ϐ$rMvCk''hl}-˜R 2#L"˗/==@H>"a{{۠AB m3VfKPGy<<< c vm5kk {kd9m>)LZ8>>>V )!>?bw۶o-h5K+51t $#UU9l..&l=::2fX__G<G${eM{ t2v&Sps27٭sssXYYA:ƧO3 *T6 v@) Mtn!GVCPϱd2ixg#{dt%'K\h D%/+۬v]/u/Oy}PDN%]ӧOF,P'-!jW'j %x<(HdSRdAI$4.[jp}}m{\%ytI [#0IMl^%凇: 9/)(XFAà'qx~/iC"B'ts433c8HX'hHt#R0&W%e^'U~N*ggg8>>65nξO 2ARHOBŞ\2Cq̸5nS$˛j5u,//kvF4cvvGLiD^rFP6:PK'kuS"t-Q0|Ϙ t]XX0bbjaNIӓ)ezy> {>_JkIn.M9ԛOOOr_{Dnd2H$ TfQ>4 2^N,eD&M&.|>o曣h$u* J ~;%B#T:666t:X,#ZKO X,t:ު]*i۴F%xؼx$(+ 220r$)їkЇ0AzyybVeH.2X<,~<4dҐ2*B_6 {~Fz/OVVVp||_\.#&:H/Se 3?%Tऩ ۈm֘&q@2?d2it|M i| "Bh6=}(/t&l]-ǥvMsFTBTB4r8ߤ cHe>\.'''( Ɵ{N,TfZesMR)$ ~lq"$9y HΆ2T*m\\\|nȬs\Z;]Λ4yٮ KP(h4jX\sd1 a52~6^j6*g_=N%O{Бӓ L+++fgE'7w $wrro߾h ǏV$ƃ(+8<<,,666J80]!UI]r=釽jT*;U]ٰH4ޑsRgfK2dhE0[^Vɸ9n6L3Dء &>Ag2ϟd2U:N', rM G>!Zְad,zZ«#4BDdd2-J5ٳJC0ڴ"VWW59QaZمg2ɓ>/W;)UONem_鴀H&Lgz0m;,?Dr\h4g0NI$㵻;#1%qDs2ءP虨FR cssSA@loTʬ7(+ ~7$ loocsskkkFgޣ$^@^7@zHb6xfv{{k6^3glI(O:heךT\~]~ס=].~PP~h F:qhA Ah6Np8ld:bqzzmd2b1s ?7MT*jTʈR/l6 Y @ ܠl2gq8h#J%$ b /=p$5 )T*T*Bd2q>.> RB8Vj3bzzgON/L{5(xlsii 777XN R |5!>IDAT:u*_d`mB(R#L(P E65*5Yf,^_,..SG;i٧ sssXZZ2nR?jL& AD56#yTVf`eel埅zV v?2hAcƮDtKVGF:6{3O <"9sjj = Zb#|ცJ\^ &I-.."`uuXbmm ldhpY6| hRl6 湡y\y˒|GGGrX__75d/1FckS_h899VVVi5|M-q$F}.(!_kSRP(`v (dIZhahWWWB ;>>F(ܡ_phdnʺ&Ѩ؄ f`^\hlP( |^VcտyPSKKK=fX4$R*PVl63 *<\< 0~]e|yr$D#GGQXRI[{'j07(5XÃQO* >:;PJK A˥p9үMdz%[%Jg$ZC^繸ApV6 -iMQ^k(WiEfe/jjƚ3i5rOtKNLT*t:i$ ,//8lH{mҚ צ۠6O`U,֯5DuBlbaa'}=$W |OM RZ>3|4X(Hw8[Di$]{45 ~rRC?(sѸ6Lx11c5Vo!'w399sdOȃ%2qND|_%jڲ m9(wou%2b+_ڛyR)h6 kmQ )s;I|aT2CǂFx|hkGppK V~]$˴tY\mA 2Ԓs,5;4OL\cB^dG*eS_VU6z9Ҧ+6 ̐&l,緔%jLe) QykSp.a|yC[7%_9jƭ v*զ嫜Y%%Hl~m\K+ ۂɖx։WP t[M tɊEB O=y1zkmlzYFR%G/-1&a:ic;I5$khZqh58*l~ﱷMPAwN ALo%~=ͿǸFm/C^ @&ndoihzkiJ6T?a}?kF2}b@&\kru&C0&\k@&\kr}ɒ:uIENDB`gsequencer-0.6.37/gsequencer.share/icons/0000755000175000017500000000000012612232516015326 500000000000000gsequencer-0.6.37/gsequencer.share/icons/jumper.png0000644000175000017500000005371312612232516017267 00000000000000PNG  IHDRP+j &gAMA abKGD pHYs--tIME  5HiTXtCommentCreated with GIMPd.e IDATx}yx\ŕvjd˒lcHB&2$03̛0$$@ncےM$k߷ۋz]d#N`K}nU:uSB!#wE555p8X,)}Ͷiҥ$!d`hh~``ոkdŊM&3guK>~/p@AT\.WG}TQQQl6 t: .K\w&]w8o裏H8ن?=sݻwCfKD(}kهz\S*|0ۋH haNp3^z^ttt}vB^)׿& [СC>IbXMXlp8fٔJ6?\⮮.foqh``x^4sd2zR|IG{{;9zzzIOO$sϑ }|>,k]]^o+B*l߾TWWc%3O?+w[n555ׯ_{ooFMMozgd`` g${9^iJ꿔v"PS}>D"ƍOytvtt_ڲe Yr呏>hڵkQRRB&011A~m"J!LOl6d2|+xVp0 " ;wG>LJ%xۉFA}}=5sرFXVlOqq1v܉naZ~Z6 hnnhĒ%K>Fu*VZ}LPQQL71 3O?5\C?~jz/LV^MdӲ?!8 x衇2~">?22` r, z{{a6Ɇ B0   A4f[dP^^~IRԊ+ݻロx>ro޼D{{(~cɒ%=;vPoذF Z#?Sy۷@ `F嫯J)d=n:Gyd( CCCKRAϫg;v 4MCRaʕg|zR)\lB~?^JT2<(++tzJ0Dgg' e .k3SHe˖F={buuu;w.uUo?A*ʕ+Q^^4M|>?yd2_D"bd8|G@Rvccc;۷oq~٬i1 hN;dɒ%o,L$Ball >4MCף&i-MӻJl~衦&_>^]]-yȃ>xnn,\<7Rǎ#Z---CѼy^vر j,l6;kb1̛7BͰZH$`YH@K,t{kVebbWf7lܸo~C ͛7}{j4gd2'IISSu]GacppfzlH&Jx`Z*G⦦c7|{e{2Ch`bb& & 4Mw?#uǏx^tww'xtGՑ2a<3S`moo'l[/ڷo瞅}}}$fE"K(njjj3V'm6! .Ϸc^*]`MG%K,I{{;PSSC͆! [Zgs:::Ə?rx<~0oppvۡ@ pVn^ǙI'l!uV200kjjvlݺ믿~^7 b3_kPwwY+'/t8_$V^xYp8v?W_%7x#z6HO޽{V* rT*U,Ko@:^O Aaa!-[F {[o4͙PRQQ1=-<G0w\$I]Ve;P<޽;ЀBp8\:222T*EE/"w9rdd… 3L˲Qb:tVCCCaX$۷oE"Qvnd2j^ڟH$t}}}g!ϓQ_B3)56ӄu\|I244DlBvI\.bw^z۴iaFU[4<,aF󞐦&ߟ>C^u//d||lڴ߿^xà3!P($޼y3F¿K/zqYV7g%7o>Ǐ'_rirr|j9~8laV`ڏ|j\|e^ѿ;,F:RFJBH$zO$}OP.``0BG"RdPgpIET -‡~D"^"zH$i\.h4WRuXV {. N,B&d2aFK&C:tuu(4 v;`4=4N?099Y6221<P(={

߼NӉq\.*VwL)>CCC(++y-5B @2ldf Bftn> ٳ?>b<B1zIz?E4Euu5f"R~^xa5kPXX_*~#NFGGIss3|r st?9rh4 a>V)P#6{^vZ<7o***`6P(~j?tww.{VypT</o]LebA"ʕ+|>_844Ypu:ݯ?PrmRՍ>Naҥ:Sac?)SYY,N&r7,/pr` a2j!˳4MvcttaZޖh4z||mkkZ x%dxxB Fse||?NXիW(oHӿپ}_WNE"eoook׮Q^^t?YyСCNNN"""B$A,O_ym+i:B{|> B1p܏\.O>񠪪 wF:Ɔ P^^c~u2s&~s̹j߾}$͢ PH2 J|>\.(Mju4I^PP9!ϭr1k /"e".##!H N#3r  ! J!PPPTZEfjaF̝;qN"H X211q$Nh`x1m޼,[l_ BII ,t+===EDǹꛘ ͘;w. s5( U[[ϟs0ͷ_L1vPɄh4SU0XhѬ@9"L~BR)J; D"Q>";UUUN'^- ,`E D;v7ͅBr\}A\xp6 lllD(BAA$i&vY#KKK)wX 'D* pt5&''?}Æ P4j.UNw$xFQPP9s8Fyƌ)[[[qw?BbոgϞϬV5xx8zi:hD8, br9~ꫯxzIOO*++Q[[ˣ(*sXp8\K/ ]uUp\brXhϟdٮXp!V+vm6[ő#GPUU+VpE"QbIqm}_###6L&2 PZZi jdd뮻>W_y]Xy2 l6|. A"H뮻. bsΝ^Hcc#VXJχ'N@рeY̟??\UUuAQ҂I$I`0(DQ$ p8p\x<LaRtN;0 Rkpw7UVj E" 4͓H$lQ1BM66lBhhn, Ʉr4a [o}D"A>|k_N>^ىl6jr)M-OͽWvvv555B{~?0w_j[N,eۺڴ,~V\"J ~)ދ)6m"֭7"r8?~sl @, ˖-Nki~ŧ~;3k.… !YC4R@ @?P(rtUjq6?ە@7n{މ={VX/A6oLQTTdB^\.tMI緻+ VMkk+ , JI$D'}~P/C}}=u:|H$'NPr9|ԱcH~TUUq(½f h4~l6_a 199I>3\jEMMAPxf{(|2)0"0w\UuP}ѥ\.x^,\g E*"}}}rĹ:[[OLL0p8p8LOOhVFRT*?tϟˣv1?˲JBwa266f;rlyyl _f@ `^`R,;y!xRtF鸬 #Gu]ӉÇC.b`Μ9P(rD"$`Z]ft>/lO =\Z T p8`dd֭T*G|\.wݡj߿073 Sxt:  p XJaGbժUhkkCqq1\.8@ l6e˖h4۳g0 wlP*hcc#7͢& "  hvLY@]]݇\.7dLF˲eYs2NNN" ab1dYp\i_JZ\.ST~] /tn t:122X,߱`[ :::H8Ɗ+hLH$"HӴBr9U6-rulvy"|>t,ݧ/I}} ҋ& 9qf3P[[ {s&!ٙٳggY7|-Zm箽{%%%t}&iH$zAݎ~;v ^{-Losܴrʕd`00|8qP(y/ |>(aDDx˗/+///-|||ݻW_>hXԗLmPD5550*<,몾Ǐ_zJx<|L&QSS*tfѸ",6|{7(r:BRJ,/IAzӉL&EEExW`4aX`6T*!| s W>S^{-jkkWi4K! LIb|L*NO*&Ϗ>h¡(ꕿu]%K B)"qJjT*P(V0%0 ~!QTTJD"x<@ VXV\}P*~'éiZu.b8?~HP`rrL!6KQZ)R.[1<<Ç}5@p'`ZT̼?N####j\b01 2xާ"q1t:~ꫨAuu5֮] V4baEQ|n۶ B0u˲( "*b+;v L&}Çr!Mǎ]w[|F@ L&>X, B~RySPr-?hkkL&1>>|߅dB,C:ISET* ^"o_2 7.~k.DQ䗡:WssQTμaѢE@"PwAtA+noo;c:)l Lƚd~L&ÛoM6iffB$r0`||LFs\.^Ê+^da hP(h|oH$F_Y]O AP@RvYVVLybLy1<<&" ى *3 SF!G3 (B&˅X,P(\l@ \.Vw|~4Fy FqlL&0 wy֭C:_dypܝ[Q8FYYv;i[ZvnjQW^y%'NS d t=mV^R ߇atww#"OgV$(4 @pP(D"c QPPc4k@}gDatttWt LJP!s@ @P캘JRurr< őHdtTd2t:'D"QR>;@鏏; B׿pmkkc||B(**Jkr҄q.fYvi,B!z||6 fL&:HvqFbt:̟?p:Bp8L9@ًX .vMM In aT`c2]p 뇇/T(Jp8Xz5jR(g`?iڌnŋQVVX,a H~L!p8Ν+ϿueyBW5\t:!_:z(կdYy!mrCo\pj5o6ڵkQXXXCt~;eYLm~\Er|>8wll cccb1,YСCXbVk݅t555;ؒL&gJsz>|Xߏp80 C)J: !&IV<;/KiD"xg. S'D;J͟?_lٲoݠX}ng^3رcZq8vlܸqg ÀBr8oݺucUU099.p8{ 'Zi2\nS:?OQcMlP(5kDZvW  QSSbv477d2a0LJZ%ĢEPWWGD(>j6/9>Bqٖ6xа/>y$n7*++a00 Z[[`,]R;mmmE!Q7ώrݔߤYSSÈD"U!H$XjUBG6o J ZE, Bwvwwb7o}v"0iXd rTfAQKKKe˖[k֬dāf͚tSgèbNSor8ذaß!P`Xj O|&UUUEQXj,Y2WxSAȁpUW\uV"HpE˶d4d221ׇ~u]r;jRS)vA͛S|>z{׮]ǏR)466bdd|>J/.`2`01[[CɓF_ 9۶mjZչf_`\`Y&UM<ѣGA׿ .;x&,J7|}~rW|M?6_jL9r߇pBTUUyA611!H&P*D"Xh(2ےdL&|ĉG ju,hW$ɘzjX,4M2m/WE3K)HZ?VbΜ939N@& n;= O%IH$bKX/ab]]]JɄCPE,7oe… P(VvL&K3 C0ä8<enP(dۖ`qp/{g$A<G>-& 1\.w/>S*#3oYVaax\.v;\. DHDH$Jџ"(:N%fT{5wFQS<*J]Ųt6Nst\]>A(N E"Vm!8XDтt:]t2<oPPb`0hb~_ϸ>u4R?+$r>&)*rT*%bp8oM<V,naiH$tΟt:X,h4`0ߝ4=( \.wPp8^lS*\E9)p8@ H$7ƛ! ,{[&eD"d2wp#J!͂ib(|nJF3e`0h=>Ot:a٠0z~C.C~~2!<d:M\.D"@ 8%L&`VZD"yAVRDAAftr'#\d2yM0@,C*$x< ykl)EQ:Gpxg~OM)W~Njq4Mo-((8p)f&[2̏SԼX,IDQaB!D1OgL\.WxJJϹ aaXl$HJBee%8:::@9eP( Sb;Z훳, pXD Ï`||,˞rvL&D"P( 4?RΙAv|׎"͢%C2̓ϘzǍt0Xs5rl63˲x!/eս J!J%H$Mpܗ|~#^L%ɹLL&d2)FFB @jBRYRytp86vtt?<ŢR0H~u\'`kZ011V ^N\~`0\;do󅪸~R'Q8N BR+lZ MLLNjdL&_վ PFH$>j*" ~&><ϔNsa a0 \.$VBLK)pzs^0-YfN! dp8vtB$T H4mUF.;݆|ɟR>SdYd2d2,;}0F(..g/JKVz>@ (hllDUUJKKRh4 0  p$n7p8099 V X|V}R~<(GFF011+%%%_l6ۛ0 tnC"`-B\PxD @Rg,-eM&h>ŋQRR7(?f^ykWtϱW_'''g2HRXVBV(vttt`ttdrZ=˫j3e5S0Yl!BqH&b<|~3}YY4z_#v1o!S"T /^\.X6]r{8οtg7K=<͖EGG*++Q__̼^SR0>IJ?qi F), B1W&E"[ x<^ MӇbQXW P(<=z hnn@aa!PZZ9s@Rl0>ǟ C@Qr9t: d2#:7Grttmmm;4˲bEHdڀ F3gf3JD"X"<5[2wFD"L&s;˲TH_eP(! *AEP@*f|w9.lVdVbnhjQPPŷꏆ{*L&***VW_Ly tN PjДZBh4p80gZjɒJ~HPPL? {6}lhhFMM /^?(*=11FKK 2 ; \7+3 42 NÑH( UUU7o^DPl7 QK"ɂ0445fYve:X,H$p8h4 eՅ`0ZNXp!bqJ 4  cx|4EJzz:N#,C$sgn[H$BEEF#D"vhBxww78X0WT7R l<tRY'F?f"l㔣?9CY5Ha|> -JYQNl_9UfnW* ܖoO(%?)k---p:FJa0pQi tH$zPV,[7X"蓂ǗBr\]>#LB(BAV5Krݍi6 a,;z*Z}:N1۽LVZ7>>or7ofsd{6f+عs'a\s5X,/,PPH̲$h\dHR+hC6Fd#i4W& d LOSV(>YRsomm4<<Ϥ"r/\d2;84^r^VE.\.JJJxR7xHoccc0PTf|Alm"@4… T*rjn8|X χND"YuiJIDAT8jlugX^z%<;>xuP(hͦjeYȲ(nYGeY^j _'Oċ/R ?uJ [|N-[F,YՊfFyp?X]׿W.EJR)yjAt:R)LMMbn?p8FZ9B9scccn&Q*CՅB (~kfn0 , {9;op8 χFIpmahhfe `nnnfϞ=}vxV~|}50V^%K|F1qܱݻwd2a``~/rnx<!F}vj,QAL&h4Gh8$'z]i-zIcGH\:[4Mj5OA~e2J_mZ$و i$¼\.##ZI#t ySL&)AX h4bE4===5JQa0 s,˧[ g2 i$Id2)gzx`~ɲrCbb,3:u J֭`PjFż!3At[R*EQTKRT*UIRe:gi> BtT& Cͺ68jP(P$X>U VŎ;ՅnAx<w=7=@Rԋ|Oz>~j]LRqLLLdwލK*fcL (p8H,t*jjE!^ 7V_lRTVZG].3oR-yjj |wygcpp5bbQl6= :IIR,1<$Vzk[_Z;vGIw~qG_R)ϋ aST?n'].Ws,:]T*]ԩSWz,˖-C(BP@"x n~zo{3N*r]EȲY,Zd^+T, a4o6LբnLA$YƢ^}B&b>ajj $a˖-1B$Z6j1t$HAD} S;.ҥ'"XHUfzHjfh4nx<tR[x<T*:L 9rV4AQzqYt:X,v}H>ħi#z{2^zAZ|ӠL&S pI4MZ<* j`Zt:w]ky~A&V[nPOO9qR郤d/ bt:eٜjj?t8.y~E|oѸ\.<"`YFZ :~@@gt:݇)jW$M_144|>Q `ao_5jm -,^!>sw8q8nx:KV@ yNdzZ BDW:yFy4 EQR%[,:C8bSSSG*"TX}JVX,l$3g ppx70(~ַ'|tl6)1;;KMOOCPG:KGYilIђe9 T*S>qZ-ab(V6j=FQTLV?l W(K&&&BF4-k4YFIZzrl$ (BEHAf8NB?s!L&sR\.GR)DQe]ݟz_tZɓ'rJ^I2|R.,,hΞ=jdt:udYE컺 ˲2hZqw- xDbݠȋj~|RSETAx'Q!NnV + E30X%* 2E53v[) z=w("CUEeY\V$yE! on2 \*d2_DT͛ >t'CQ?L&d2 JףjP( L(zށ_JL&b3yfxޥ#233#۷OS.ׇ@ KeBuъRt<*8jZZv? 3AZN177RC `xZO^XXaXd, rV>l6?PT* l6Gرc曱~z|^.Rv|>?n]4MXVh'N?>977t:uֵ\.69zץRim>7'Ij~~ZMQteBǡj) X0 j') 8HR 6mB 0m\}}}dw]hťTYI. Vh40LlQ}cdd,ˢlbaaX ~;(sȚf[qܱ{zzzaZhڍF"l* 4Mc۶m3WtxAwyeX)=V YQ. 8WN(:"T!$dYnWNݮrZc4M?rj?Jam2D$AXƍx<;pۋP(a8m60HnS$=l6nj^.A$I})D?F199 ZχBߗNߟL&o>%0Hij5yBaʕxnEױX Hj`fl6t㸕Jh9yVXXX@`.KH|յZ#4Mow:Te>_177f7e[no `0a$p8rx ,Z'N_~eEf=l2((JEF>kIi% dի0,˾|1H8nxǭ7>_ #&(bt<#   t~ .rǏN8xb0zdk[fŊ0͏Ito<WܴZ x<$lu]񞞞%L}p8wh4Eps\ؘ_k'@t:xqeyɓjǏ#J8twwcڵp:nl6 ^4m6[\$LR'rX:R`ΝUGFa.H nwTJ׃e٣6mrff9˲0LPO_T*h49~}ݓxٽ{69Ӊe˖,{/JR\.J50333sNJ%L&Ȳ ш~,]Vu˲ϥiR+N!~~~~08þ} avzw^ ǧ' jժtO>}!Xސ=EQ<0<< V. SN!vd2}v?q-_?A`f7tN7jwhjqKZī}χaD"lذ>:;;uaNo\TDcYnLNN*NPvq/wjiqFAoo/VZt8N-}=8Ņ,vT4UdPm6(8B3r@Zn4MO:cȥWERL&f^] ӗjRD5 ?0׿]<ϓT*T*t:vM_:w|}]_uMZp@kZIENDB`gsequencer-0.6.37/gsequencer.share/icons/ags.xpm0000644000175000017500000000401112612232516016542 00000000000000/* XPM */ static char * ags_xpm[] = { "32 32 57 1", " c None", ". c #C0C0C0", "+ c #C1C1C1", "@ c #BEBEBE", "# c #BDBDBD", "$ c #C2C2C2", "% c #C3C3C3", "& c #C7C7C7", "* c #FFFFFF", "= c #E9E9E9", "- c #E5E5E5", "; c #E7E7E7", "> c #E6E6E6", ", c #F5F5F5", "' c #FCFCFC", ") c #A9A9A9", "! c #EAEAEA", "~ c #E8E8E8", "{ c #F4F4F4", "] c #BCBCBC", "^ c #E4E4E4", "/ c #DADADA", "( c #B3B3B3", "_ c #A6A6A6", ": c #FEFEFE", "< c #F9F9F9", "[ c #A1A1A1", "} c #EBEBEB", "| c #F3F3F3", "1 c #C5C5C5", "2 c #C6C6C6", "3 c #E2E2E2", "4 c #B7B7B7", "5 c #A7A7A7", "6 c #B0B0B0", "7 c #BABABA", "8 c #B4B4B4", "9 c #AAAAAA", "0 c #D6D6D6", "a c #BBBBBB", "b c #E0E0E0", "c c #B6B6B6", "d c #B2B2B2", "e c #C8C8C8", "f c #ACACAC", "g c #C9C9C9", "h c #CCCCCC", "i c #B5B5B5", "j c #D2D2D2", "k c #D3D3D3", "l c #D5D5D5", "m c #CBCBCB", "n c #DBDBDB", "o c #D8D8D8", "p c #D4D4D4", "q c #CFCFCF", "r c #CACACA", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " .++++. @#@@.+$ % ", " &*=-;>-,') *****!!~ {] ", " ^/ *(_:*<=[ }|1&222&% ", " 3} 4*(5*6 @.@;****+", " 3*'<*****(5' 7 ****&", " -> 8:***(9:04a]#&*b 8cde****1", " 4 fgha ijklllk2 mnopqrer$ ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}; gsequencer-0.6.37/Makefile.am0000644000175000017500000007762512632675357012766 00000000000000AUTOMAKE_OPTIONS = foreign # SUBDIRS = src doc AM_CPPFLAGS = -I$(top_srcdir)/src -DDESTDIR=\"$(DESTDIR)$(datadir)\" -DPACKAGE_VERSION=\"$(PACKAGE_VERSION)\" -D_FORTIFY_SOURCE=2 # what flags you want to pass to the C compiler & linker CFLAGS = @CFLAGS@ LDFLAGS = @LDFLAGS@ # this lists the binaries to produce, the (non-PHONY, binary) targets in # the previous manual Makefile noinst_LIBRARIES = bin_PROGRAMS = gsequencer midi2xml EXTRA_DIST = gsequencer.share acsite.m4 gsequencer.1 midi2xml.1 README gsequencer-documentation CLEANFILES = man1_MANS = gsequencer.1 midi2xml.1 appdatadir = $(datadir)/applications appdata_DATA = gsequencer.desktop EXTRA_DIST += gsequencer.desktop.in CLEANFILES += $(appdata_DATA) docdir = $(datadir)/doc/gsequencer doc_DATA = README # documentation userdoc = \ doc/usersBook.xml \ doc/appa.xml \ doc/usersBook/appb.xml \ doc/usersBook/chap1.xml \ doc/usersBook/chap2.xml \ doc/usersBook/chap3.xml \ doc/usersBook/chap4.xml \ doc/usersBook/preface.xml userdocimages = \ $(top_srcdir)/doc/images/ags_export_window.png \ $(top_srcdir)/doc/images/ags_machine_properties-input.png \ $(top_srcdir)/doc/images/ags_machine_properties-resize_channels.png \ $(top_srcdir)/doc/images/ags_navigation.png \ $(top_srcdir)/doc/images/ags_synth.png \ $(top_srcdir)/doc/images/ags_audio_preferences.png \ $(top_srcdir)/doc/images/ags_ffplayer.png \ $(top_srcdir)/doc/images/ags_ladspa_browser.png \ $(top_srcdir)/doc/images/ags_machine_properties-link_input.png \ $(top_srcdir)/doc/images/ags_matrix.png \ $(top_srcdir)/doc/images/ags_panel.png \ $(top_srcdir)/doc/images/ags-toolbar.png \ $(top_srcdir)/doc/images/ags_drum.png \ $(top_srcdir)/doc/images/ags_generic_preferences.png \ $(top_srcdir)/doc/images/ags_machine_properties-output.png \ $(top_srcdir)/doc/images/ags_mixer.png \ $(top_srcdir)/doc/images/ags_performance_preferences.png \ $(top_srcdir)/doc/images/ags_server_preferences.png EXTRA_DIST += $(userdoc) $(userdocimages) EXTRA_DIST += $(top_srcdir)/src/ags/file/ags_file.dtd $(top_srcdir)/ags.xsl # library libags_a_CFLAGS= $(GOBJECT_CFLAGS) $(LIBXML2_CFLAGS) libags_a_SOURCES = # application gsequencer_CFLAGS= $(CFLAGS) $(UUID_CFLAGS) $(LIBASOUND2_CFLAGS) $(LIBAO_CFLAGS) $(LIBXML2_CFLAGS) $(OPENSSL_CFLAGS) $(SNDFILE_CFLAGS) $(LIBINSTPATCH_CFLAGS) $(GOBJECT_CFLAGS) $(FONTCONFIG_CFLAGS) $(GDKPIXBUF_CFLAGS) $(CAIRO_CFLAGS) $(GTK_CFLAGS) $(XMLRPC_CFLAGS) $(XMLRPC_UTIL_CFLAGS) $(XMLRPC_SERVER_ABYSS_CFLAGS) $(XMLRPC_SERVER_CGI_CFLAGS) $(XMLRPC_SERVER_CFLAGS) $(PTH_FLAGS) gsequencer_LDFLAGS= -ldl $(LDFLAGS) $(UUID_LIBS) $(LIBASOUND2_LIBS) $(LIBAO_LIBS) $(LIBXML2_LIBS) $(OPENSSL_LIBS) $(SNDFILE_LIBS) $(LIBINSTPATCH_LIBS) $(GOBJECT_LIBS) $(FONTCONFIG_LIBS) $(GDKPIXBUF_LIBS) $(CAIRO_LIBS) $(GTK_LIBS) $(XMLRPC_LIBS) $(XMLRPC_UTIL_LIBS) $(XMLRPC_SERVER_ABYSS_LIBS) $(XMLRPC_SERVER_CGI_LIBS) $(XMLRPC_SERVER_LIBS) -lm -lrt -pthread gsequencer_LDADD = gsequencerheaders = \ src/ags/audio/ags_audio.h \ src/ags/audio/ags_audio_signal.h \ src/ags/audio/ags_channel.h \ src/ags/audio/ags_channel_iter.h \ src/ags/audio/ags_config.h \ src/ags/audio/ags_devout.h \ src/ags/audio/ags_effect.h \ src/ags/audio/ags_garbage_collector.h \ src/ags/audio/ags_input.h \ src/ags/audio/ags_libao.h \ src/ags/audio/ags_notation.h \ src/ags/audio/ags_note.h \ src/ags/audio/ags_output.h \ src/ags/audio/ags_pattern.h \ src/ags/audio/ags_port.h \ src/ags/audio/ags_recall_audio.h \ src/ags/audio/ags_recall_audio_run.h \ src/ags/audio/ags_recall_audio_signal.h \ src/ags/audio/ags_recall_channel.h \ src/ags/audio/ags_recall_channel_run_dummy.h \ src/ags/audio/ags_recall_channel_run.h \ src/ags/audio/ags_recall_container.h \ src/ags/audio/ags_recall_dependency.h \ src/ags/audio/ags_recall_factory.h \ src/ags/audio/ags_recall.h \ src/ags/audio/ags_recall_id.h \ src/ags/audio/ags_recall_ladspa.h \ src/ags/audio/ags_recall_ladspa_run.h \ src/ags/audio/ags_recall_recycling_dummy.h \ src/ags/audio/ags_recall_recycling.h \ src/ags/audio/ags_recycling_container.h \ src/ags/audio/ags_recycling.h \ src/ags/audio/ags_synths.h \ src/ags/audio/ags_task.h \ src/ags/audio/ags_timestamp_factory.h \ src/ags/audio/ags_timestamp.h \ src/ags/audio/file/ags_audio_file.h \ src/ags/audio/file/ags_audio_file_xml.h \ src/ags/audio/file/ags_ipatch.h \ src/ags/audio/file/ags_ipatch_sf2_reader.h \ src/ags/audio/file/ags_sndfile.h \ src/ags/audio/recall/ags_amplifier.h \ src/ags/audio/recall/ags_buffer_audio_signal.h \ src/ags/audio/recall/ags_buffer_channel.h \ src/ags/audio/recall/ags_buffer_channel_run.h \ src/ags/audio/recall/ags_buffer_recycling.h \ src/ags/audio/recall/ags_clone_channel.h \ src/ags/audio/recall/ags_clone_channel_run.h \ src/ags/audio/recall/ags_copy_audio_signal.h \ src/ags/audio/recall/ags_copy_channel.h \ src/ags/audio/recall/ags_copy_channel_run.h \ src/ags/audio/recall/ags_copy_notation_audio.h \ src/ags/audio/recall/ags_copy_notation_audio_run.h \ src/ags/audio/recall/ags_copy_pattern_audio.h \ src/ags/audio/recall/ags_copy_pattern_audio_run.h \ src/ags/audio/recall/ags_copy_pattern_channel.h \ src/ags/audio/recall/ags_copy_pattern_channel_run.h \ src/ags/audio/recall/ags_copy_recycling.h \ src/ags/audio/recall/ags_count_beats_audio.h \ src/ags/audio/recall/ags_count_beats_audio_run.h \ src/ags/audio/recall/ags_delay_audio.h \ src/ags/audio/recall/ags_delay_audio_run.h \ src/ags/audio/recall/ags_down_mix.h \ src/ags/audio/recall/ags_echo.h \ src/ags/audio/recall/ags_envelope_audio_signal.h \ src/ags/audio/recall/ags_envelope_channel.h \ src/ags/audio/recall/ags_envelope_channel_run.h \ src/ags/audio/recall/ags_envelope_recycling.h \ src/ags/audio/recall/ags_loop_channel.h \ src/ags/audio/recall/ags_loop_channel_run.h \ src/ags/audio/recall/ags_mute_audio.h \ src/ags/audio/recall/ags_mute_audio_run.h \ src/ags/audio/recall/ags_mute_audio_signal.h \ src/ags/audio/recall/ags_mute_channel.h \ src/ags/audio/recall/ags_mute_channel_run.h \ src/ags/audio/recall/ags_mute_recycling.h \ src/ags/audio/recall/ags_peak_audio_signal.h \ src/ags/audio/recall/ags_peak_channel.h \ src/ags/audio/recall/ags_peak_channel_run.h \ src/ags/audio/recall/ags_peak_recycling.h \ src/ags/audio/recall/ags_play_audio_file.h \ src/ags/audio/recall/ags_play_audio.h \ src/ags/audio/recall/ags_play_audio_signal.h \ src/ags/audio/recall/ags_play_channel.h \ src/ags/audio/recall/ags_play_channel_run.h \ src/ags/audio/recall/ags_play_channel_run_master.h \ src/ags/audio/recall/ags_play_notation_audio.h \ src/ags/audio/recall/ags_play_notation_audio_run.h \ src/ags/audio/recall/ags_play_note.h \ src/ags/audio/recall/ags_play_pattern.h \ src/ags/audio/recall/ags_play_recycling.h \ src/ags/audio/recall/ags_stream_audio_signal.h \ src/ags/audio/recall/ags_stream_channel.h \ src/ags/audio/recall/ags_stream_channel_run.h \ src/ags/audio/recall/ags_stream.h \ src/ags/audio/recall/ags_stream_recycling.h \ src/ags/audio/recall/ags_synths.h \ src/ags/audio/recall/ags_volume_audio_signal.h \ src/ags/audio/recall/ags_volume_channel.h \ src/ags/audio/recall/ags_volume_channel_run.h \ src/ags/audio/recall/ags_volume_recycling.h \ src/ags/audio/task/ags_add_audio.h \ src/ags/audio/task/ags_add_audio_signal.h \ src/ags/audio/task/ags_add_line_member.h \ src/ags/audio/task/ags_add_note.h \ src/ags/audio/task/ags_add_point_to_selection.h \ src/ags/audio/task/ags_add_recall_container.h \ src/ags/audio/task/ags_add_recall.h \ src/ags/audio/task/ags_add_region_to_selection.h \ src/ags/audio/task/ags_append_audio.h \ src/ags/audio/task/ags_append_audio_threaded.h \ src/ags/audio/task/ags_append_channel.h \ src/ags/audio/task/ags_append_recall.h \ src/ags/audio/task/ags_apply_synth.h \ src/ags/audio/task/ags_apply_wavetable.h \ src/ags/audio/task/ags_audio_set_recycling.h \ src/ags/audio/task/ags_blink_cell_pattern_cursor.h \ src/ags/audio/task/ags_cancel_audio.h \ src/ags/audio/task/ags_cancel_channel.h \ src/ags/audio/task/ags_cancel_recall.h \ src/ags/audio/task/ags_change_indicator.h \ src/ags/audio/task/ags_change_tact.h \ src/ags/audio/task/ags_channel_set_recycling.h \ src/ags/audio/task/ags_display_tact.h \ src/ags/audio/task/ags_export_output.h \ src/ags/audio/task/ags_free_selection.h \ src/ags/audio/task/ags_init_audio.h \ src/ags/audio/task/ags_init_channel.h \ src/ags/audio/task/ags_link_channel.h \ src/ags/audio/task/ags_open_file.h \ src/ags/audio/task/ags_open_single_file.h \ src/ags/audio/task/ags_remove_audio.h \ src/ags/audio/task/ags_remove_audio_signal.h \ src/ags/audio/task/ags_remove_note.h \ src/ags/audio/task/ags_remove_point_from_selection.h \ src/ags/audio/task/ags_remove_recall_container.h \ src/ags/audio/task/ags_remove_recall.h \ src/ags/audio/task/ags_remove_region_from_selection.h \ src/ags/audio/task/ags_resize_audio.h \ src/ags/audio/task/ags_save_file.h \ src/ags/audio/task/ags_scroll_on_play.h \ src/ags/audio/task/ags_seek_devout.h \ src/ags/audio/task/ags_set_audio_channels.h \ src/ags/audio/task/ags_set_buffer_size.h \ src/ags/audio/task/ags_set_devout_play_flags.h \ src/ags/audio/task/ags_set_output_device.h \ src/ags/audio/task/ags_set_samplerate.h \ src/ags/audio/task/ags_start_devout.h \ src/ags/audio/task/ags_start_read_file.h \ src/ags/audio/task/ags_toggle_led.h \ src/ags/audio/task/ags_toggle_pattern_bit.h \ src/ags/audio/task/ags_unref_audio_signal.h \ src/ags/audio/task/recall/ags_apply_bpm.h \ src/ags/audio/task/recall/ags_apply_sequencer_length.h \ src/ags/audio/task/recall/ags_apply_tact.h \ src/ags/audio/task/recall/ags_set_muted.h \ src/ags/file/ags_file_gui.h \ src/ags/file/ags_file.h \ src/ags/file/ags_file_id_ref.h \ src/ags/file/ags_file_launch.h \ src/ags/file/ags_file_link.h \ src/ags/file/ags_file_lookup.h \ src/ags/file/ags_file_read.h \ src/ags/file/ags_file_sound.h \ src/ags/file/ags_file_stock.h \ src/ags/file/ags_file_thread.h \ src/ags/file/ags_file_util.h \ src/ags/file/ags_file_write.h \ src/ags-lib/object/ags_connectable.h \ src/ags/lib/ags_combo_box_text.h \ src/ags/lib/ags_container.h \ src/ags/lib/ags_list.h \ src/ags/lib/ags_log.h \ src/ags/lib/ags_parameter.h \ src/ags/main.h \ src/ags/object/ags_applicable.h \ src/ags/object/ags_async_queue.h \ src/ags/object/ags_countable.h \ src/ags/object/ags_concurrent_tree.h \ src/ags/object/ags_dynamic_connectable.h \ src/ags/object/ags_effect.h \ src/ags/object/ags_main_loop.h \ src/ags/object/ags_marshal.h \ src/ags/object/ags_mutable.h \ src/ags/object/ags_packable.h \ src/ags/object/ags_persistable.h \ src/ags/object/ags_playable.h \ src/ags/object/ags_plugin.h \ src/ags/object/ags_portlet.h \ src/ags/object/ags_runnable.h \ src/ags/object/ags_seekable.h \ src/ags/object/ags_soundcard.h \ src/ags/object/ags_stackable.h \ src/ags/object/ags_tactable.h \ src/ags/object/ags_tree_iterator.h \ src/ags/plugin/ags_ladspa_manager.h \ src/ags/plugin/ags_plugin_factory.h \ src/ags/plugin/ags_plugin_stock.h \ src/ags/server/ags_registry.h \ src/ags/server/ags_remote_task.h \ src/ags/server/ags_server.h \ src/ags/thread/ags_audio_loop.h \ src/ags/thread/ags_audio_thread.h \ src/ags/thread/ags_autosave_thread.h \ src/ags/thread/ags_channel_thread.h \ src/ags/thread/ags_devout_thread.h \ src/ags/thread/ags_export_thread.h \ src/ags/thread/ags_gui_thread.h \ src/ags/thread/ags_history.h \ src/ags/thread/ags_iterator_thread.h \ src/ags/thread/ags_mutex_manager.h \ src/ags/thread/ags_record_thread.h \ src/ags/thread/ags_recycling_thread_callbacks.h \ src/ags/thread/ags_recycling_thread.h \ src/ags/thread/ags_returnable_thread.h \ src/ags/thread/ags_single_thread.h \ src/ags/thread/ags_task_completion.h \ src/ags/thread/ags_task_thread.h \ src/ags/thread/ags_thread_pool.h \ src/ags/thread/ags_thread-posix.h \ src/ags/thread/ags_timestamp_thread.h \ src/ags/util/ags_id_generator.h \ src/ags/widget/ags_cartesian.h \ src/ags/widget/ags_dial.h \ src/ags/widget/ags_expander.h \ src/ags/widget/ags_expander_set.h \ src/ags/widget/ags_hindicator.h \ src/ags/widget/ags_htimebar.h \ src/ags/widget/ags_indicator.h \ src/ags/widget/ags_led.h \ src/ags/widget/ags_menu.h \ src/ags/widget/ags_menu_item.h \ src/ags/widget/ags_option_menu.h \ src/ags/widget/ags_ruler.h \ src/ags/widget/ags_segment.h \ src/ags/widget/ags_table.h \ src/ags/widget/ags_timebar.h \ src/ags/widget/ags_vindicator.h \ src/ags/widget/ags_waveform.h \ src/ags/X/ags_audio_preferences_callbacks.h \ src/ags/X/ags_audio_preferences.h \ src/ags/X/ags_editor_callbacks.h \ src/ags/X/ags_editor.h \ src/ags/X/ags_export_window_callbacks.h \ src/ags/X/ags_export_window.h \ src/ags/X/ags_generic_preferences_callbacks.h \ src/ags/X/ags_generic_preferences.h \ src/ags/X/ags_ladspa_browser_callbacks.h \ src/ags/X/ags_ladspa_browser.h \ src/ags/X/ags_line_callbacks.h \ src/ags/X/ags_line_editor_callbacks.h \ src/ags/X/ags_line_editor.h \ src/ags/X/ags_line.h \ src/ags/X/ags_line_member_callbacks.h \ src/ags/X/ags_line_member_editor_callbacks.h \ src/ags/X/ags_line_member_editor.h \ src/ags/X/ags_line_member.h \ src/ags/X/ags_link_collection_editor_callbacks.h \ src/ags/X/ags_link_collection_editor.h \ src/ags/X/ags_link_editor_callbacks.h \ src/ags/X/ags_link_editor.h \ src/ags/X/ags_listing_editor_callbacks.h \ src/ags/X/ags_listing_editor.h \ src/ags/X/ags_machine_callbacks.h \ src/ags/X/ags_machine_editor_callbacks.h \ src/ags/X/ags_machine_editor.h \ src/ags/X/ags_machine.h \ src/ags/X/ags_menu_bar_callbacks.h \ src/ags/X/ags_menu_bar.h \ src/ags/X/ags_navigation_callbacks.h \ src/ags/X/ags_navigation.h \ src/ags/X/ags_pad_callbacks.h \ src/ags/X/ags_pad_editor_callbacks.h \ src/ags/X/ags_pad_editor.h \ src/ags/X/ags_pad.h \ src/ags/X/ags_performance_preferences_callbacks.h \ src/ags/X/ags_performance_preferences.h \ src/ags/X/ags_plugin_preferences_callbacks.h \ src/ags/X/ags_plugin_preferences.h \ src/ags/X/ags_preferences_callbacks.h \ src/ags/X/ags_preferences.h \ src/ags/X/ags_property_collection_editor_callbacks.h \ src/ags/X/ags_property_collection_editor.h \ src/ags/X/ags_property_editor_callbacks.h \ src/ags/X/ags_property_editor.h \ src/ags/X/ags_property_listing_editor.h \ src/ags/X/ags_resize_editor.h \ src/ags/X/ags_server_preferences_callbacks.h \ src/ags/X/ags_server_preferences.h \ src/ags/X/ags_window_callbacks.h \ src/ags/X/ags_window.h \ src/ags/X/editor/ags_file_selection_callbacks.h \ src/ags/X/editor/ags_file_selection.h \ src/ags/X/editor/ags_inline_player_callbacks.h \ src/ags/X/editor/ags_inline_player.h \ src/ags/X/editor/ags_machine_radio_button.h \ src/ags/X/editor/ags_machine_selection.h \ src/ags/X/editor/ags_machine_selector_callbacks.h \ src/ags/X/editor/ags_machine_selector.h \ src/ags/X/editor/ags_meter_callbacks.h \ src/ags/X/editor/ags_meter.h \ src/ags/X/editor/ags_notebook_callbacks.h \ src/ags/X/editor/ags_notebook.h \ src/ags/X/editor/ags_note_edit_callbacks.h \ src/ags/X/editor/ags_note_edit.h \ src/ags/X/editor/ags_pattern_edit_callbacks.h \ src/ags/X/editor/ags_pattern_edit.h \ src/ags/X/editor/ags_sf2_chooser_callbacks.h \ src/ags/X/editor/ags_sf2_chooser.h \ src/ags/X/editor/ags_toolbar_callbacks.h \ src/ags/X/editor/ags_toolbar.h \ src/ags/X/editor/ags_toolbar_mode_stock.h \ src/ags/X/machine/ags_cell_pattern_callbacks.h \ src/ags/X/machine/ags_cell_pattern.h \ src/ags/X/machine/ags_drum_callbacks.h \ src/ags/X/machine/ags_drum.h \ src/ags/X/machine/ags_drum_input_line_callbacks.h \ src/ags/X/machine/ags_drum_input_line.h \ src/ags/X/machine/ags_drum_input_pad_callbacks.h \ src/ags/X/machine/ags_drum_input_pad.h \ src/ags/X/machine/ags_drum_output_line_callbacks.h \ src/ags/X/machine/ags_drum_output_line.h \ src/ags/X/machine/ags_drum_output_pad_callbacks.h \ src/ags/X/machine/ags_drum_output_pad.h \ src/ags/X/machine/ags_ffplayer_callbacks.h \ src/ags/X/machine/ags_ffplayer.h \ src/ags/X/machine/ags_matrix_callbacks.h \ src/ags/X/machine/ags_matrix.h \ src/ags/X/machine/ags_mixer_callbacks.h \ src/ags/X/machine/ags_mixer.h \ src/ags/X/machine/ags_mixer_input_line.h \ src/ags/X/machine/ags_mixer_input_pad.h \ src/ags/X/machine/ags_oscillator_callbacks.h \ src/ags/X/machine/ags_oscillator.h \ src/ags/X/machine/ags_panel_callbacks.h \ src/ags/X/machine/ags_panel.h \ src/ags/X/machine/ags_panel_input_line.h \ src/ags/X/machine/ags_panel_input_pad.h \ src/ags/X/machine/ags_pattern_box_callbacks.h \ src/ags/X/machine/ags_pattern_box.h \ src/ags/X/machine/ags_synth_callbacks.h \ src/ags/X/machine/ags_synth.h \ src/ags/X/machine/ags_synth_input_line.h \ src/ags/X/machine/ags_synth_input_pad.h gsequencer_SOURCES = \ $(gsequencerheaders) \ src/ags/audio/ags_audio.c \ src/ags/audio/ags_audio_signal.c \ src/ags/audio/ags_channel.c \ src/ags/audio/ags_channel_iter.c \ src/ags/audio/ags_config.c \ src/ags/audio/ags_devout.c \ src/ags/audio/ags_garbage_collector.c \ src/ags/audio/ags_input.c \ src/ags/audio/ags_libao.c \ src/ags/audio/ags_notation.c \ src/ags/audio/ags_note.c \ src/ags/audio/ags_output.c \ src/ags/audio/ags_pattern.c \ src/ags/audio/ags_port.c \ src/ags/audio/ags_recall_audio.c \ src/ags/audio/ags_recall_audio_run.c \ src/ags/audio/ags_recall_audio_signal.c \ src/ags/audio/ags_recall.c \ src/ags/audio/ags_recall_channel.c \ src/ags/audio/ags_recall_channel_run.c \ src/ags/audio/ags_recall_channel_run_dummy.c \ src/ags/audio/ags_recall_container.c \ src/ags/audio/ags_recall_dependency.c \ src/ags/audio/ags_recall_factory.c \ src/ags/audio/ags_recall_id.c \ src/ags/audio/ags_recall_ladspa.c \ src/ags/audio/ags_recall_ladspa_run.c \ src/ags/audio/ags_recall_recycling.c \ src/ags/audio/ags_recall_recycling_dummy.c \ src/ags/audio/ags_recycling.c \ src/ags/audio/ags_recycling_container.c \ src/ags/audio/ags_synths.c \ src/ags/audio/ags_task.c \ src/ags/audio/ags_timestamp.c \ src/ags/audio/ags_timestamp_factory.c \ src/ags/audio/file/ags_audio_file.c \ src/ags/audio/file/ags_audio_file_xml.c \ src/ags/audio/file/ags_ipatch.c \ src/ags/audio/file/ags_ipatch_sf2_reader.c \ src/ags/audio/file/ags_sndfile.c \ src/ags/audio/recall/ags_amplifier.c \ src/ags/audio/recall/ags_buffer_audio_signal.c \ src/ags/audio/recall/ags_buffer_channel.c \ src/ags/audio/recall/ags_buffer_channel_run.c \ src/ags/audio/recall/ags_buffer_recycling.c \ src/ags/audio/recall/ags_clone_channel.c \ src/ags/audio/recall/ags_clone_channel_run.c \ src/ags/audio/recall/ags_copy_audio_signal.c \ src/ags/audio/recall/ags_copy_channel.c \ src/ags/audio/recall/ags_copy_channel_run.c \ src/ags/audio/recall/ags_copy_notation_audio.c \ src/ags/audio/recall/ags_copy_notation_audio_run.c \ src/ags/audio/recall/ags_copy_pattern_audio.c \ src/ags/audio/recall/ags_copy_pattern_audio_run.c \ src/ags/audio/recall/ags_copy_pattern_channel.c \ src/ags/audio/recall/ags_copy_pattern_channel_run.c \ src/ags/audio/recall/ags_copy_recycling.c \ src/ags/audio/recall/ags_count_beats_audio.c \ src/ags/audio/recall/ags_count_beats_audio_run.c \ src/ags/audio/recall/ags_delay_audio.c \ src/ags/audio/recall/ags_delay_audio_run.c \ src/ags/audio/recall/ags_echo.c \ src/ags/audio/recall/ags_envelope_audio_signal.c \ src/ags/audio/recall/ags_envelope_channel.c \ src/ags/audio/recall/ags_envelope_channel_run.c \ src/ags/audio/recall/ags_envelope_recycling.c \ src/ags/audio/recall/ags_loop_channel.c \ src/ags/audio/recall/ags_loop_channel_run.c \ src/ags/audio/recall/ags_mute_audio.c \ src/ags/audio/recall/ags_mute_audio_run.c \ src/ags/audio/recall/ags_mute_audio_signal.c \ src/ags/audio/recall/ags_mute_channel.c \ src/ags/audio/recall/ags_mute_channel_run.c \ src/ags/audio/recall/ags_mute_recycling.c \ src/ags/audio/recall/ags_peak_audio_signal.c \ src/ags/audio/recall/ags_peak_channel.c \ src/ags/audio/recall/ags_peak_channel_run.c \ src/ags/audio/recall/ags_peak_recycling.c \ src/ags/audio/recall/ags_play_audio.c \ src/ags/audio/recall/ags_play_audio_file.c \ src/ags/audio/recall/ags_play_audio_signal.c \ src/ags/audio/recall/ags_play_channel.c \ src/ags/audio/recall/ags_play_channel_run.c \ src/ags/audio/recall/ags_play_channel_run_master.c \ src/ags/audio/recall/ags_play_notation_audio.c \ src/ags/audio/recall/ags_play_notation_audio_run.c \ src/ags/audio/recall/ags_play_note.c \ src/ags/audio/recall/ags_play_pattern.c \ src/ags/audio/recall/ags_play_recycling.c \ src/ags/audio/recall/ags_stream_audio_signal.c \ src/ags/audio/recall/ags_stream.c \ src/ags/audio/recall/ags_stream_channel.c \ src/ags/audio/recall/ags_stream_channel_run.c \ src/ags/audio/recall/ags_stream_recycling.c \ src/ags/audio/recall/ags_volume_audio_signal.c \ src/ags/audio/recall/ags_volume_channel.c \ src/ags/audio/recall/ags_volume_channel_run.c \ src/ags/audio/recall/ags_volume_recycling.c \ src/ags/audio/task/ags_add_audio.c \ src/ags/audio/task/ags_add_audio_signal.c \ src/ags/audio/task/ags_add_line_member.c \ src/ags/audio/task/ags_add_note.c \ src/ags/audio/task/ags_add_point_to_selection.c \ src/ags/audio/task/ags_add_recall.c \ src/ags/audio/task/ags_add_recall_container.c \ src/ags/audio/task/ags_add_region_to_selection.c \ src/ags/audio/task/ags_append_audio.c \ src/ags/audio/task/ags_append_audio_threaded.c \ src/ags/audio/task/ags_append_channel.c \ src/ags/audio/task/ags_append_recall.c \ src/ags/audio/task/ags_apply_synth.c \ src/ags/audio/task/ags_apply_wavetable.c \ src/ags/audio/task/ags_audio_set_recycling.c \ src/ags/audio/task/ags_blink_cell_pattern_cursor.c \ src/ags/audio/task/ags_cancel_audio.c \ src/ags/audio/task/ags_cancel_channel.c \ src/ags/audio/task/ags_cancel_recall.c \ src/ags/audio/task/ags_change_indicator.c \ src/ags/audio/task/ags_change_tact.c \ src/ags/audio/task/ags_channel_set_recycling.c \ src/ags/audio/task/ags_display_tact.c \ src/ags/audio/task/ags_export_output.c \ src/ags/audio/task/ags_free_selection.c \ src/ags/audio/task/ags_init_audio.c \ src/ags/audio/task/ags_init_channel.c \ src/ags/audio/task/ags_link_channel.c \ src/ags/audio/task/ags_open_file.c \ src/ags/audio/task/ags_open_single_file.c \ src/ags/audio/task/ags_remove_audio.c \ src/ags/audio/task/ags_remove_audio_signal.c \ src/ags/audio/task/ags_remove_note.c \ src/ags/audio/task/ags_remove_point_from_selection.c \ src/ags/audio/task/ags_remove_recall.c \ src/ags/audio/task/ags_remove_recall_container.c \ src/ags/audio/task/ags_remove_region_from_selection.c \ src/ags/audio/task/ags_resize_audio.c \ src/ags/audio/task/ags_save_file.c \ src/ags/audio/task/ags_scroll_on_play.c \ src/ags/audio/task/ags_seek_devout.c \ src/ags/audio/task/ags_set_audio_channels.c \ src/ags/audio/task/ags_set_buffer_size.c \ src/ags/audio/task/ags_set_devout_play_flags.c \ src/ags/audio/task/ags_set_output_device.c \ src/ags/audio/task/ags_set_samplerate.c \ src/ags/audio/task/ags_start_devout.c \ src/ags/audio/task/ags_start_read_file.c \ src/ags/audio/task/ags_toggle_led.c \ src/ags/audio/task/ags_toggle_pattern_bit.c \ src/ags/audio/task/ags_unref_audio_signal.c \ src/ags/audio/task/recall/ags_apply_bpm.c \ src/ags/audio/task/recall/ags_apply_sequencer_length.c \ src/ags/audio/task/recall/ags_apply_tact.c \ src/ags/audio/task/recall/ags_set_muted.c \ src/ags/file/ags_file.c \ src/ags/file/ags_file_gui.c \ src/ags/file/ags_file_id_ref.c \ src/ags/file/ags_file_launch.c \ src/ags/file/ags_file_link.c \ src/ags/file/ags_file_lookup.c \ src/ags/file/ags_file_sound.c \ src/ags/file/ags_file_thread.c \ src/ags/file/ags_file_util.c \ src/ags-lib/object/ags_connectable.c \ src/ags/lib/ags_combo_box_text.c \ src/ags/lib/ags_container.c \ src/ags/lib/ags_list.c \ src/ags/lib/ags_log.c \ src/ags/lib/ags_parameter.c \ src/ags/main.c \ src/ags/object/ags_applicable.c \ src/ags/object/ags_async_queue.c \ src/ags/object/ags_countable.c \ src/ags/object/ags_concurrent_tree.c \ src/ags/object/ags_dynamic_connectable.c \ src/ags/object/ags_effect.c \ src/ags/object/ags_main_loop.c \ src/ags/object/ags_marshal.c \ src/ags/object/ags_mutable.c \ src/ags/object/ags_packable.c \ src/ags/object/ags_persistable.c \ src/ags/object/ags_playable.c \ src/ags/object/ags_plugin.c \ src/ags/object/ags_portlet.c \ src/ags/object/ags_runnable.c \ src/ags/object/ags_seekable.c \ src/ags/object/ags_soundcard.c \ src/ags/object/ags_stackable.c \ src/ags/object/ags_tactable.c \ src/ags/object/ags_tree_iterator.c \ src/ags/plugin/ags_ladspa_manager.c \ src/ags/plugin/ags_plugin_factory.c \ src/ags/server/ags_registry.c \ src/ags/server/ags_remote_task.c \ src/ags/server/ags_server.c \ src/ags/thread/ags_audio_loop.c \ src/ags/thread/ags_audio_thread.c \ src/ags/thread/ags_autosave_thread.c \ src/ags/thread/ags_channel_thread.c \ src/ags/thread/ags_devout_thread.c \ src/ags/thread/ags_export_thread.c \ src/ags/thread/ags_gui_thread.c \ src/ags/thread/ags_history.c \ src/ags/thread/ags_iterator_thread.c \ src/ags/thread/ags_mutex_manager.c \ src/ags/thread/ags_record_thread.c \ src/ags/thread/ags_recycling_thread.c \ src/ags/thread/ags_recycling_thread_callbacks.c \ src/ags/thread/ags_returnable_thread.c \ src/ags/thread/ags_single_thread.c \ src/ags/thread/ags_task_completion.c \ src/ags/thread/ags_task_thread.c \ src/ags/thread/ags_thread_pool.c \ src/ags/thread/ags_thread-posix.c \ src/ags/thread/ags_timestamp_thread.c \ src/ags/util/ags_id_generator.c \ src/ags/widget/ags_cartesian.c \ src/ags/widget/ags_dial.c \ src/ags/widget/ags_expander.c \ src/ags/widget/ags_expander_set.c \ src/ags/widget/ags_hindicator.c \ src/ags/widget/ags_htimebar.c \ src/ags/widget/ags_indicator.c \ src/ags/widget/ags_led.c \ src/ags/widget/ags_menu.c \ src/ags/widget/ags_menu_item.c \ src/ags/widget/ags_option_menu.c \ src/ags/widget/ags_ruler.c \ src/ags/widget/ags_segment.c \ src/ags/widget/ags_table.c \ src/ags/widget/ags_timebar.c \ src/ags/widget/ags_vindicator.c \ src/ags/widget/ags_waveform.c \ src/ags/X/ags_audio_preferences.c \ src/ags/X/ags_audio_preferences_callbacks.c \ src/ags/X/ags_editor.c \ src/ags/X/ags_editor_callbacks.c \ src/ags/X/ags_export_window.c \ src/ags/X/ags_export_window_callbacks.c \ src/ags/X/ags_generic_preferences.c \ src/ags/X/ags_generic_preferences_callbacks.c \ src/ags/X/ags_ladspa_browser.c \ src/ags/X/ags_ladspa_browser_callbacks.c \ src/ags/X/ags_line.c \ src/ags/X/ags_line_callbacks.c \ src/ags/X/ags_line_editor.c \ src/ags/X/ags_line_editor_callbacks.c \ src/ags/X/ags_line_member.c \ src/ags/X/ags_line_member_callbacks.c \ src/ags/X/ags_line_member_editor.c \ src/ags/X/ags_line_member_editor_callbacks.c \ src/ags/X/ags_link_collection_editor.c \ src/ags/X/ags_link_collection_editor_callbacks.c \ src/ags/X/ags_link_editor.c \ src/ags/X/ags_link_editor_callbacks.c \ src/ags/X/ags_listing_editor.c \ src/ags/X/ags_listing_editor_callbacks.c \ src/ags/X/ags_machine.c \ src/ags/X/ags_machine_callbacks.c \ src/ags/X/ags_machine_editor.c \ src/ags/X/ags_machine_editor_callbacks.c \ src/ags/X/ags_menu_bar.c \ src/ags/X/ags_menu_bar_callbacks.c \ src/ags/X/ags_navigation.c \ src/ags/X/ags_navigation_callbacks.c \ src/ags/X/ags_pad.c \ src/ags/X/ags_pad_callbacks.c \ src/ags/X/ags_pad_editor.c \ src/ags/X/ags_pad_editor_callbacks.c \ src/ags/X/ags_performance_preferences.c \ src/ags/X/ags_performance_preferences_callbacks.c \ src/ags/X/ags_plugin_preferences.c \ src/ags/X/ags_plugin_preferences_callbacks.c \ src/ags/X/ags_preferences.c \ src/ags/X/ags_preferences_callbacks.c \ src/ags/X/ags_property_collection_editor.c \ src/ags/X/ags_property_collection_editor_callbacks.c \ src/ags/X/ags_property_editor.c \ src/ags/X/ags_property_editor_callbacks.c \ src/ags/X/ags_property_listing_editor.c \ src/ags/X/ags_resize_editor.c \ src/ags/X/ags_server_preferences.c \ src/ags/X/ags_server_preferences_callbacks.c \ src/ags/X/ags_window.c \ src/ags/X/ags_window_callbacks.c \ src/ags/X/editor/ags_file_selection.c \ src/ags/X/editor/ags_file_selection_callbacks.c \ src/ags/X/editor/ags_inline_player.c \ src/ags/X/editor/ags_inline_player_callbacks.c \ src/ags/X/editor/ags_machine_radio_button.c \ src/ags/X/editor/ags_machine_selection.c \ src/ags/X/editor/ags_machine_selector.c \ src/ags/X/editor/ags_machine_selector_callbacks.c \ src/ags/X/editor/ags_meter.c \ src/ags/X/editor/ags_meter_callbacks.c \ src/ags/X/editor/ags_notebook.c \ src/ags/X/editor/ags_notebook_callbacks.c \ src/ags/X/editor/ags_note_edit.c \ src/ags/X/editor/ags_note_edit_callbacks.c \ src/ags/X/editor/ags_pattern_edit.c \ src/ags/X/editor/ags_pattern_edit_callbacks.c \ src/ags/X/editor/ags_sf2_chooser.c \ src/ags/X/editor/ags_sf2_chooser_callbacks.c \ src/ags/X/editor/ags_toolbar.c \ src/ags/X/editor/ags_toolbar_callbacks.c \ src/ags/X/machine/ags_cell_pattern.c \ src/ags/X/machine/ags_cell_pattern_callbacks.c \ src/ags/X/machine/ags_drum.c \ src/ags/X/machine/ags_drum_callbacks.c \ src/ags/X/machine/ags_drum_input_line.c \ src/ags/X/machine/ags_drum_input_line_callbacks.c \ src/ags/X/machine/ags_drum_input_pad.c \ src/ags/X/machine/ags_drum_input_pad_callbacks.c \ src/ags/X/machine/ags_drum_output_line.c \ src/ags/X/machine/ags_drum_output_line_callbacks.c \ src/ags/X/machine/ags_drum_output_pad.c \ src/ags/X/machine/ags_drum_output_pad_callbacks.c \ src/ags/X/machine/ags_ffplayer.c \ src/ags/X/machine/ags_ffplayer_callbacks.c \ src/ags/X/machine/ags_matrix.c \ src/ags/X/machine/ags_matrix_callbacks.c \ src/ags/X/machine/ags_mixer.c \ src/ags/X/machine/ags_mixer_callbacks.c \ src/ags/X/machine/ags_mixer_input_line.c \ src/ags/X/machine/ags_mixer_input_pad.c \ src/ags/X/machine/ags_oscillator.c \ src/ags/X/machine/ags_oscillator_callbacks.c \ src/ags/X/machine/ags_panel.c \ src/ags/X/machine/ags_panel_callbacks.c \ src/ags/X/machine/ags_panel_input_line.c \ src/ags/X/machine/ags_panel_input_pad.c \ src/ags/X/machine/ags_pattern_box_callbacks.c \ src/ags/X/machine/ags_pattern_box.c \ src/ags/X/machine/ags_synth.c \ src/ags/X/machine/ags_synth_callbacks.c \ src/ags/X/machine/ags_synth_input_line.c \ src/ags/X/machine/ags_synth_input_pad.c midi2xml_CFLAGS= $(CFLAGS) $(LIBXML2_CFLAGS) $(GOBJECT_CFLAGS) midi2xml_LDFLAGS= -ldl $(LDFLAGS) $(LIBXML2_LIBS) $(GOBJECT_LIBS) midi2xml_SOURCES = src/midi2ags/main.c src/midi2ags/midi/ags_midi_parser.c src/midi2ags/midi/ags_midi_parser.h src/midi2ags/object/ags_marshal.c src/midi2ags/object/ags_marshal.h gsequencer.1: xsltproc --nonet --param make.year.ranges 1 --param make.single.year.ranges 1 --param man.charmap.use.subset 0 -o ./ http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl gsequencer.1.xml midi2xml.1: xsltproc --nonet --param make.year.ranges 1 --param make.single.year.ranges 1 --param man.charmap.use.subset 0 -o ./ http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl midi2xml.1.xml gsequencer.desktop: gsequencer.desktop.in $(AM_V_GEN)sed -e 's,\@datadir\@,$(datadir),g' < "$<" > $@ html: mkdir -p html/ xsltproc --output html/ --xinclude /usr/share/xml/docbook/stylesheet/docbook-xsl/htmlhelp/htmlhelp.xsl $(top_srcdir)/doc/usersBook.xml install-data-local: mkdir -p $(DESTDIR)/$(datadir)/doc-base mkdir -p $(DESTDIR)/$(datadir)/gsequencer/icons mkdir -p $(DESTDIR)/$(datadir)/gsequencer/images mkdir -p $(DESTDIR)/$(datadir)/xml/gsequencer/{schema/dtd/0.4.2/,stylesheet/ags-xsl/midi-xml/} cp $(top_srcdir)/gsequencer.share/icons/ags.xpm $(DESTDIR)/$(datadir)/gsequencer/icons/ags.xpm cp $(top_srcdir)/gsequencer.share/images/ags.png $(DESTDIR)/$(datadir)/gsequencer/images/ags.png cp $(top_srcdir)/src/ags/file/ags_file.dtd $(DESTDIR)/$(datadir)/xml/gsequencer/schema/dtd/0.4.2/ cp $(top_srcdir)/ags.xsl $(DESTDIR)/$(datadir)/xml/gsequencer/stylesheet/ags-xsl/midi-xml/ cp $(top_srcdir)/gsequencer-documentation $(DESTDIR)/$(datadir)/doc-base/ mkdir -p $(DESTDIR)/$(datadir)/doc/gsequencer/ gzip -9 -c $(top_srcdir)/ChangeLog > $(DESTDIR)/$(datadir)/doc/gsequencer/changelog.gz install-html: html mkdir -p $(DESTDIR)/$(datadir)/doc/gsequencer/{images,html}/ cp $(userdocimages) $(DESTDIR)/$(datadir)/doc/gsequencer/images/ cp html/* $(DESTDIR)/$(datadir)/doc/gsequencer/html/ uninstall-hook: rm -rf $(DESTDIR)/$(datadir)/gsequencer rm -rf $(DESTDIR)/$(datadir)/doc/gsequencer rm -rf $(DESTDIR)/$(datadir)/xml/gsequencer rm -f $(DESTDIR)/$(datadir)/doc-base/gsequencer-documentation clean-local: rm -rf html gsequencer-0.6.37/aclocal.m40000644000175000017500000014624312633221767012554 00000000000000# generated automatically by aclocal 1.15 -*- Autoconf -*- # Copyright (C) 1996-2014 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) dnl pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- dnl serial 11 (pkg-config-0.29) dnl dnl Copyright © 2004 Scott James Remnant . dnl Copyright © 2012-2015 Dan Nicholson dnl dnl This program is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by dnl the Free Software Foundation; either version 2 of the License, or dnl (at your option) any later version. dnl dnl This program is distributed in the hope that it will be useful, but dnl WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU dnl General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with this program; if not, write to the Free Software dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA dnl 02111-1307, USA. dnl dnl As a special exception to the GNU General Public License, if you dnl distribute this file as part of a program that contains a dnl configuration script generated by Autoconf, you may include it under dnl the same distribution terms that you use for the rest of that dnl program. dnl PKG_PREREQ(MIN-VERSION) dnl ----------------------- dnl Since: 0.29 dnl dnl Verify that the version of the pkg-config macros are at least dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's dnl installed version of pkg-config, this checks the developer's version dnl of pkg.m4 when generating configure. dnl dnl To ensure that this macro is defined, also add: dnl m4_ifndef([PKG_PREREQ], dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])]) dnl dnl See the "Since" comment for each macro you use to see what version dnl of the macros you require. m4_defun([PKG_PREREQ], [m4_define([PKG_MACROS_VERSION], [0.29]) m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1, [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])]) ])dnl PKG_PREREQ dnl PKG_PROG_PKG_CONFIG([MIN-VERSION]) dnl ---------------------------------- dnl Since: 0.16 dnl dnl Search for the pkg-config tool and set the PKG_CONFIG variable to dnl first found in the path. Checks that the version of pkg-config found dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is dnl used since that's the first version where most current features of dnl pkg-config existed. AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])dnl PKG_PROG_PKG_CONFIG dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------------------------------- dnl Since: 0.18 dnl dnl Check to see whether a particular set of modules exists. Similar to dnl PKG_CHECK_MODULES(), but does not set variables or print errors. dnl dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) dnl only at the first occurence in configure.ac, so if the first place dnl it's called might be skipped (such as if it is within an "if", you dnl have to call PKG_CHECK_EXISTS manually AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) dnl --------------------------------------------- dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting dnl pkg_failed based on the result. m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])dnl _PKG_CONFIG dnl _PKG_SHORT_ERRORS_SUPPORTED dnl --------------------------- dnl Internal check to see if pkg-config supports short errors. AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])dnl _PKG_SHORT_ERRORS_SUPPORTED dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl -------------------------------------------------------------- dnl Since: 0.4.0 dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES might not happen, you should be sure to include an dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ])dnl PKG_CHECK_MODULES dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl --------------------------------------------------------------------- dnl Since: 0.29 dnl dnl Checks for existence of MODULES and gathers its build flags with dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags dnl and VARIABLE-PREFIX_LIBS from --libs. dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to dnl include an explicit call to PKG_PROG_PKG_CONFIG in your dnl configure.ac. AC_DEFUN([PKG_CHECK_MODULES_STATIC], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl _save_PKG_CONFIG=$PKG_CONFIG PKG_CONFIG="$PKG_CONFIG --static" PKG_CHECK_MODULES($@) PKG_CONFIG=$_save_PKG_CONFIG[]dnl ])dnl PKG_CHECK_MODULES_STATIC dnl PKG_INSTALLDIR([DIRECTORY]) dnl ------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable pkgconfigdir as the location where a module dnl should install pkg-config .pc files. By default the directory is dnl $libdir/pkgconfig, but the default can be changed by passing dnl DIRECTORY. The user can override through the --with-pkgconfigdir dnl parameter. AC_DEFUN([PKG_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([pkgconfigdir], [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, [with_pkgconfigdir=]pkg_default) AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_INSTALLDIR dnl PKG_NOARCH_INSTALLDIR([DIRECTORY]) dnl -------------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable noarch_pkgconfigdir as the location where a dnl module should install arch-independent pkg-config .pc files. By dnl default the directory is $datadir/pkgconfig, but the default can be dnl changed by passing DIRECTORY. The user can override through the dnl --with-noarch-pkgconfigdir parameter. AC_DEFUN([PKG_NOARCH_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([noarch-pkgconfigdir], [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, [with_noarch_pkgconfigdir=]pkg_default) AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_NOARCH_INSTALLDIR dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------- dnl Since: 0.28 dnl dnl Retrieves the value of the pkg-config variable for the given module. AC_DEFUN([PKG_CHECK_VAR], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl _PKG_CONFIG([$1], [variable="][$3]["], [$2]) AS_VAR_COPY([$1], [pkg_cv_][$1]) AS_VAR_IF([$1], [""], [$5], [$4])dnl ])dnl PKG_CHECK_VAR # Copyright (C) 2002-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.15' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.15], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.15])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each '.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC]) [_AM_PROG_CC_C_O ]) # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi dnl The trailing newline in this macro's definition is deliberate, for dnl backward compatibility and to allow trailing 'dnl'-style comments dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it is modern enough. # If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 1999-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_CC_C_O # --------------- # Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC # to automatically call this. AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar # AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR gsequencer-0.6.37/config.h.in0000644000175000017500000001727712633221773012740 00000000000000/* config.h.in. Generated from configure.ac by autoheader. */ /* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP systems. This function is required for `alloca.c' support on those systems. */ #undef CRAY_STACKSEG_END /* Define to 1 if using `alloca.c'. */ #undef C_ALLOCA /* Define to 1 if you have `alloca', as a function or macro. */ #undef HAVE_ALLOCA /* Define to 1 if you have and it should be used (not on Ultrix). */ #undef HAVE_ALLOCA_H /* Define to 1 if you have the header file. */ #undef HAVE_ARGZ_H /* Define to 1 if you have the `atexit' function. */ #undef HAVE_ATEXIT /* Define to 1 if you have the `clock_gettime' function. */ #undef HAVE_CLOCK_GETTIME /* Define to 1 if you have the header file. */ #undef HAVE_FCNTL_H /* Define to 1 if you have the header file. */ #undef HAVE_FLOAT_H /* Define to 1 if you have the `floor' function. */ #undef HAVE_FLOOR /* Define to 1 if you have the `getcwd' function. */ #undef HAVE_GETCWD /* Define to 1 if you have the `getpagesize' function. */ #undef HAVE_GETPAGESIZE /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_LANGINFO_H /* Define to 1 if you have the `dl' library (-ldl). */ #undef HAVE_LIBDL /* Define to 1 if you have the header file. */ #undef HAVE_LIBINTL_H /* Define to 1 if you have the `m' library (-lm). */ #undef HAVE_LIBM /* Define to 1 if you have the `rt' library (-lrt). */ #undef HAVE_LIBRT /* Define to 1 if you have the `X11' library (-lX11). */ #undef HAVE_LIBX11 /* Define to 1 if you have the header file. */ #undef HAVE_LIMITS_H /* Define to 1 if you have the `localeconv' function. */ #undef HAVE_LOCALECONV /* Define to 1 if you have the header file. */ #undef HAVE_LOCALE_H /* Define to 1 if your system has a GNU libc compatible `malloc' function, and to 0 otherwise. */ #undef HAVE_MALLOC /* Define to 1 if you have the header file. */ #undef HAVE_MALLOC_H /* Define to 1 if you have the `mblen' function. */ #undef HAVE_MBLEN /* Define to 1 if you have the `mbrlen' function. */ #undef HAVE_MBRLEN /* Define to 1 if you have the `memchr' function. */ #undef HAVE_MEMCHR /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the `mempcpy' function. */ #undef HAVE_MEMPCPY /* Define to 1 if you have the `memset' function. */ #undef HAVE_MEMSET /* Define to 1 if you have a working `mmap' system call. */ #undef HAVE_MMAP /* Define to 1 if you have the `munmap' function. */ #undef HAVE_MUNMAP /* Define to 1 if you have the header file. */ #undef HAVE_NETINET_IN_H /* Define to 1 if you have the `nl_langinfo' function. */ #undef HAVE_NL_LANGINFO /* Define to 1 if the system has the type `ptrdiff_t'. */ #undef HAVE_PTRDIFF_T /* Define to 1 if your system has a GNU libc compatible `realloc' function, and to 0 otherwise. */ #undef HAVE_REALLOC /* Define to 1 if you have the `setlocale' function. */ #undef HAVE_SETLOCALE /* Define to 1 if you have the `socket' function. */ #undef HAVE_SOCKET /* Define to 1 if you have the `sqrt' function. */ #undef HAVE_SQRT /* Define to 1 if you have the header file. */ #undef HAVE_STDDEF_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDIO_EXT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the `stpcpy' function. */ #undef HAVE_STPCPY /* Define to 1 if you have the `strcasecmp' function. */ #undef HAVE_STRCASECMP /* Define to 1 if you have the `strchr' function. */ #undef HAVE_STRCHR /* Define to 1 if you have the `strcspn' function. */ #undef HAVE_STRCSPN /* Define to 1 if you have the `strdup' function. */ #undef HAVE_STRDUP /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the `strstr' function. */ #undef HAVE_STRSTR /* Define to 1 if you have the `strtol' function. */ #undef HAVE_STRTOL /* Define to 1 if you have the `strtoul' function. */ #undef HAVE_STRTOUL /* Define to 1 if you have the header file. */ #undef HAVE_SYS_IOCTL_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_PARAM_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SOCKET_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TIME_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if the system has the type `_Bool'. */ #undef HAVE__BOOL /* Define to 1 if you have the `__argz_count' function. */ #undef HAVE___ARGZ_COUNT /* Define to 1 if you have the `__argz_next' function. */ #undef HAVE___ARGZ_NEXT /* Define to 1 if you have the `__argz_stringify' function. */ #undef HAVE___ARGZ_STRINGIFY /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* If using the C implementation of alloca, define if you know the direction of stack growth for your system; otherwise it will be automatically deduced at runtime. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown */ #undef STACK_DIRECTION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Version number of package */ #undef VERSION /* Define for Solaris 2.5.1 so the uint32_t typedef from , , or is not used. If the typedef were allowed, the #define below would cause a syntax error. */ #undef _UINT32_T /* Define for Solaris 2.5.1 so the uint8_t typedef from , , or is not used. If the typedef were allowed, the #define below would cause a syntax error. */ #undef _UINT8_T /* Define to `int' if doesn't define. */ #undef gid_t /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus #undef inline #endif /* Define to rpl_malloc if the replacement function should be used. */ #undef malloc /* Define to `int' if does not define. */ #undef pid_t /* Define to rpl_realloc if the replacement function should be used. */ #undef realloc /* Define to `unsigned int' if does not define. */ #undef size_t /* Define to `int' if doesn't define. */ #undef uid_t /* Define to the type of an unsigned integer type of width exactly 16 bits if such a type exists and the standard includes do not define it. */ #undef uint16_t /* Define to the type of an unsigned integer type of width exactly 32 bits if such a type exists and the standard includes do not define it. */ #undef uint32_t /* Define to the type of an unsigned integer type of width exactly 8 bits if such a type exists and the standard includes do not define it. */ #undef uint8_t gsequencer-0.6.37/AUTHORS0000644000175000017500000000002112612232514011730 00000000000000Joël Krähemann gsequencer-0.6.37/gsequencer.10000644000175000017500000000505312612232514013115 00000000000000'\" t .\" Title: gsequencer .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 2015-06-15 .\" Manual: gsequencer v0.4.2 .\" Source: gsequencer v0.4.2 .\" Language: English .\" .TH "GSEQUENCER" "1" "2015\-06\-15" "gsequencer v0.4.2" "gsequencer v0.4.2" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" gsequencer \- Advanced Gtk+ Sequencer is an audio sequencer and composition editor .SH "SYNOPSIS" .HP \w'\fB/usr/bin/gsequencer\fR\ 'u \fB/usr/bin/gsequencer\fR [\-\-help] [\-\-version] [\-\-single\-thread] [\-\-filename\ \fIfile\fR...] .SH "DESCRIPTION" .PP Advanced GTK+ Sequencer is intended to use for music composition\&. It features a piano roll, as well a synth, matrix editor, drum machine, soundfont2 player, mixer and an output panel\&. It\(cqs designed to be highly configurable\&. You may add effects to its effect chain; and add or remove audio channels/pads\&. You may set up a fully functional network of engines, thus there is a link editor for linking audio lines\&. .PP LADSPA support has been added to version 0\&.4\&.2 as well export to WAV audio file\&. .PP \&... .SH "OPTIONS" .PP The program follows the usual GNU command line syntax, with long options starting with two dashes (`\-\*(Aq)\&. A summary of options is included below\&. For a complete description, see the \fBinfo\fR(1) files\&. .PP \fB\-\-single\-thread\fR .RS 4 Run in single thread mode\&. .RE .PP \fB\-\-filename file\fR .RS 4 Open file from command line\&. .RE .PP \fB\-\-help\fR .RS 4 Show summary of options\&. .RE .PP \fB\-\-version\fR .RS 4 Show version of program\&. .RE .SH "BUGS" .PP None\&. So far I know\&. .SH "AUTHOR" .PP Jo\(:el Kr\(:ahemann gsequencer-0.6.37/src/0000755000175000017500000000000012633241335011542 500000000000000gsequencer-0.6.37/src/ags/0000755000175000017500000000000012633241335012314 500000000000000gsequencer-0.6.37/src/ags/lib/0000755000175000017500000000000012633241335013062 500000000000000gsequencer-0.6.37/src/ags/lib/ags_log.c0000644000175000017500000005314312626272146014575 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include void ags_log_class_init(AgsLogClass *log); void ags_log_init(AgsLog *log); void ags_log_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_log_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_log_finalize(GObject *gobject); void* ags_log_timer(void *args); void* ags_log_broker(void *ptr); void* ags_log_output(void *ptr); void* ags_log_queue(void *ptr); void ags_log_start_threads(AgsLog *log); AgsLogMessage* ags_log_message_alloc(); void* ags_log_add_message_thread(void *ptr); void ags_log_add_message(); enum{ PROP_0, PROP_FILE, }; struct _AgsLogAddMessageArgs { AgsLog *log; AgsLogMessage *log_message; pthread_mutex_t mutex; }; static gpointer ags_log_parent_class = NULL; AgsLog *ags_default_log = NULL; #define AGS_LOG_MESSAGE_LENGTH 4096 #define AGS_LOG_MESSAGE_DATE_LENGTH 19 GType ags_log_get_type (void) { static GType ags_type_log = 0; if(!ags_type_log){ static const GTypeInfo ags_log_info = { sizeof(AgsLogClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_log_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(AgsLog), 0, /* n_preallocs */ (GInstanceInitFunc) ags_log_init, }; ags_type_log = g_type_register_static(G_TYPE_OBJECT, "AgsLog\0", &ags_log_info, 0); } return(ags_type_log); } void ags_log_class_init(AgsLogClass *log) { GObjectClass *gobject; GParamSpec *param_spec; ags_log_parent_class = g_type_class_peek_parent(log); /* GObjectClass */ gobject = (GObjectClass *) log; gobject->set_property = ags_log_set_property; gobject->get_property = ags_log_get_property; /* properties */ param_spec = g_param_spec_pointer("file\0", "output file\0", "The file to do the output\0", G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_FILE, param_spec); } void ags_log_init(AgsLog *log) { log->flags = 0; log->file = NULL; pthread_cond_init(&(log->start_wait_cond), NULL); /* timer thread related members */ log->log_interval = (struct timespec *) malloc(sizeof(struct timespec)); log->log_interval->tv_sec = 1; log->log_interval->tv_nsec = 0;// 10000000; /* sleep 10 mili seconds */ pthread_mutexattr_init(&(log->timer_mutex_attr)); pthread_mutex_init(&(log->timer_mutex), &(log->broker_mutex_attr)); log->timer_started = FALSE; log->timer_active = FALSE; log->timer_awaken = FALSE; pthread_cond_init(&(log->timer_wait_cond), NULL); /* broker thread related members */ pthread_mutexattr_init(&(log->broker_mutex_attr)); pthread_mutex_init(&(log->broker_mutex), &(log->broker_mutex_attr)); log->broker_started = FALSE; log->broker_active = FALSE; log->broker_awaken = FALSE; pthread_cond_init(&(log->broker_wait_cond), NULL); /* output thread related members */ log->output_formated_message = NULL; pthread_mutexattr_init(&(log->output_mutex_attr)); pthread_mutex_init(&(log->output_mutex), &(log->output_mutex_attr)); log->output_started = FALSE; log->output_active = FALSE; log->output_awaken = FALSE; pthread_cond_init(&(log->output_wait_cond), NULL); /* queue thread related members */ log->queue_formated_message = NULL; log->queue_message = NULL; pthread_mutexattr_init(&(log->queue_mutex_attr)); pthread_mutex_init(&(log->queue_mutex), &(log->queue_mutex_attr)); log->queue_started = FALSE; log->queue_active = FALSE; log->queue_awaken = FALSE; pthread_cond_init(&(log->queue_wait_cond), NULL); /* log messages */ log->log = NULL; log->active_logs = 0; log->suspended_logs = 0; pthread_cond_init(&(log->log_wait_cond), NULL); } void ags_log_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsLog *log; log = AGS_LOG(gobject); switch(prop_id){ case PROP_FILE: { log->file = g_value_get_pointer(value); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_log_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsLog *log; log = AGS_LOG(gobject); switch(prop_id){ case PROP_FILE: { g_value_set_pointer(value, log->file); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_log_finalize(GObject *gobject) { AgsLog *log; GList *list, *list_next; log = AGS_LOG(gobject); } /** * ags_log_timer: * @ptr an #AgsLog * * Sleeps specified amount of time and signals broker to wake up as long as * log is running. */ void* ags_log_timer(void *ptr) { AgsLog *log; log = AGS_LOG(ptr); log->timer_active = FALSE; log->signaled_timer = FALSE; printf("timer - start\n\0"); goto ags_log_timer_SUSPEND; while((AGS_LOG_RUNNING & (log->flags)) != 0){ printf("timer - loop\n\0"); /* */ pthread_mutex_lock(&(log->timer_mutex)); log->timer_active = TRUE; pthread_mutex_unlock(&(log->timer_mutex)); /* run timer */ //FIXME:JK: doesn't test if it's behindhand, free_float member is reserved for this issue // nanosleep(log->log_interval, NULL); /* */ pthread_mutex_lock(&(log->timer_mutex)); log->timer_active = FALSE; pthread_mutex_unlock(&(log->timer_mutex)); /* keep in sync with broker */ ags_log_timer_SUSPEND: if((AGS_LOG_STARTING & (log->flags)) != 0){ log->timer_started = TRUE; pthread_cond_signal(&(log->start_wait_cond)); } if(!log->broker_active){ printf(" timer:0\n\0"); pthread_cond_signal(&(log->broker_wait_cond)); pthread_mutex_lock(&(log->timer_mutex)); log->timer_awaken = FALSE; while((AGS_LOG_TIMER_SLEEP & (log->flags)) != 0 || !log->broker_active || !log->signaled_timer){ pthread_cond_wait(&(log->timer_wait_cond), &(log->timer_mutex)); } }else{ printf(" timer:1\n\0"); pthread_mutex_lock(&(log->timer_mutex)); log->timer_awaken = FALSE; while((AGS_LOG_TIMER_SLEEP & (log->flags)) != 0){ pthread_cond_wait(&(log->timer_wait_cond), &(log->timer_mutex)); } } log->flags |= AGS_LOG_TIMER_SLEEP; log->timer_awaken = TRUE; log->signaled_timer = FALSE; pthread_mutex_unlock(&(log->timer_mutex)); printf(" timer:2\n\0"); pthread_cond_signal(&(log->broker_wait_cond)); } pthread_exit(NULL); } /** * ags_log_broker: * @ptr an #AgsLog * * Wakes up sleeping output, queue and log threads. */ void* ags_log_broker(void *ptr) { AgsLog *log; log = AGS_LOG(ptr); log->flags |= AGS_LOG_TIMER_SLEEP; log->signaled_timer = log->signaled_output = log->signaled_queue = log->signaled_log = TRUE; printf("broker - start\n\0"); goto ags_log_broker_SUSPEND; /* start broker */ while((AGS_LOG_RUNNING & (log->flags)) != 0){ printf("broker - loop\n\0"); // log->flags &= ~(AGS_LOG_SUSPEND); log->broker_active = TRUE; /* wake up queue thread and wait for it * / log->signaled_queue = TRUE; pthread_cond_signal(&(log->queue_wait_cond)); pthread_mutex_lock(&(log->broker_mutex)); while(!log->queue_awaken || ){ pthread_cond_wait(&(log->broker_wait_cond), &(log->broker_mutex)); } pthread_mutex_unlock(&(log->broker_mutex)); /* wake up all waiting log requests and wait for them * / pthread_mutex_lock(&(log->broker_mutex)); while(log->active_logs != 0){ if(!signaled_log){ pthread_mutex_unlock(&(log->broker_mutex)); pthread_cond_broadcast(&(log->log_wait_cond)); pthread_mutex_lock(&(log->broker_mutex)); signaled_log = TRUE; } pthread_cond_wait(&(log->broker_wait_cond), &(log->broker_mutex)); } pthread_mutex_unlock(&(log->broker_mutex)); // printf("broker - log\n\0"); /* wake up output thread and wait for it * / log->signaled_output = TRUE; pthread_cond_signal(&(log->output_wait_cond)); pthread_mutex_lock(&(log->broker_mutex)); while(!log->output_awaken){ pthread_cond_wait(&(log->broker_wait_cond), &(log->broker_mutex)); } pthread_mutex_unlock(&(log->broker_mutex)); /* wake up timer thread and wait for it */ pthread_mutex_lock(&(log->broker_mutex)); if(!log->timer_active){ pthread_mutex_unlock(&(log->broker_mutex)); printf(" broker:0\n\0"); log->signaled_timer = TRUE; pthread_cond_signal(&(log->timer_wait_cond)); pthread_mutex_lock(&(log->broker_mutex)); while(!log->timer_awaken){ pthread_cond_wait(&(log->broker_wait_cond), &(log->broker_mutex)); } printf(" broker:1\n\0"); // pthread_mutex_unlock(&(log->broker_mutex)); }else{ pthread_mutex_lock(&(log->broker_mutex)); } /* reset status and entry point */ ags_log_broker_SUSPEND: if((AGS_LOG_STARTING & (log->flags)) != 0){ log->broker_started = TRUE; ags_log_start_threads(log); pthread_cond_signal(&(log->start_wait_cond)); } log->broker_active = FALSE; /* wait log_interval amount of time */ printf(" broker:2\n\0"); while(log->timer_active || log->output_active || log->queue_active || log->active_logs != 0){ //TODO:JK: may be you want set AGS_LOG_TIMER_SLEEP here for better throughput /* sleep until all threads are done */ pthread_cond_wait(&(log->broker_wait_cond), &(log->broker_mutex)); /* set timer to sleep */ if(!log->timer_active){ log->flags |= AGS_LOG_TIMER_SLEEP; } /* set output to sleep */ if(!log->output_active){ log->flags |= AGS_LOG_OUTPUT_SUSPEND; } /* set queue to sleep */ if(!log->queue_active){ log->flags |= AGS_LOG_QUEUE_SUSPEND; } /* set log to sleep */ if(log->active_logs == 0){ log->flags |= AGS_LOG_SUSPEND; } } log->broker_awaken = TRUE; printf(" broker:3\n\0"); pthread_mutex_unlock(&(log->broker_mutex)); } pthread_exit(NULL); } /** * ags_log_output: * @ptr an #AgsLog * * Writes the output_formated_message #GList to file #FILE, which are * members of #AgsLog. */ void* ags_log_output(void *ptr) { AgsLog *log; AgsLogFormatedMessage *formated_message; GList *list; log = AGS_LOG(ptr); goto ags_log_output_SUSPEND; while((AGS_LOG_RUNNING & (log->flags)) != 0){ printf("output - loop\n\0"); /* wait until output_formated_message has been set * / pthread_mutex_lock(&(log->output_mutex)); if((AGS_LOG_COPY_FROM_QUEUE_TO_OUTPUT & (log->flags)) != 0){ log->flags |= AGS_LOG_OUTPUT_WAITS_FOR_QUEUE; } while((AGS_LOG_COPY_FROM_QUEUE_TO_OUTPUT & (log->flags)) != 0){ pthread_cond_wait(&(log->output_wait_cond), &(log->output_mutex)); } log->flags &= (~AGS_LOG_OUTPUT_WAITS_FOR_QUEUE); log->output_active = TRUE; pthread_mutex_unlock(&(log->output_mutex)); /* output output_formated_messages */ //FIXME:JK: set AGS_LOG_OUTPUT_SUSPEND list = log->output_formated_message; while(list != NULL){ formated_message = (AgsLogFormatedMessage *) list->data; fwrite(formated_message->message, sizeof(char), formated_message->length, log->file); list = list->next; } /* free output_formated_message */ ags_list_free_and_free_link(log->output_formated_message); log->output_formated_message = NULL; log->output_active = FALSE; /* wait until log_interval has exceeded */ ags_log_output_SUSPEND: if((AGS_LOG_STARTING & (log->flags)) != 0){ log->output_started = TRUE; pthread_cond_signal(&(log->start_wait_cond)); } pthread_mutex_lock(&(log->output_mutex)); log->output_active = FALSE; pthread_mutex_unlock(&(log->output_mutex)); pthread_cond_signal(&(log->broker_wait_cond)); pthread_mutex_lock(&(log->output_mutex)); log->output_awaken = FALSE; while((AGS_LOG_OUTPUT_SUSPEND & (log->flags)) != 0 || !log->broker_active || !log->signaled_output){ pthread_cond_wait(&(log->output_wait_cond), &(log->output_mutex)); } log->output_awaken = TRUE; log->signaled_output = FALSE; log->flags |= AGS_LOG_OUTPUT_SUSPEND; pthread_mutex_unlock(&(log->output_mutex)); pthread_cond_signal(&(log->broker_wait_cond)); } pthread_exit(NULL); } /** * ags_log_queue: * @ptr an #AgsLog * * Prints #AgsLogMessage to a string and puts it to queue_formated_message * #GList. */ void* ags_log_queue(void *ptr) { AgsLog *log; GList *list; AgsLogMessage *message; AgsLogFormatedMessage *formated_message; time_t time; struct tm *date; char *str; int printed_chars; log = AGS_LOG(ptr); log->queue_active = FALSE; goto ags_log_queue_SUSPEND; while((AGS_LOG_RUNNING & (log->flags)) != 0){ printf("queue - loop\n\0"); /* set output_formated_message * / pthread_mutex_lock(&(log->queue_mutex)); log->flags |= AGS_LOG_COPY_FROM_QUEUE_TO_OUTPUT; log->output_formated_message = log->queue_formated_message; log->flags &= (~AGS_LOG_COPY_FROM_QUEUE_TO_OUTPUT); /* signal output_wait_cond if necessary * / if((AGS_LOG_OUTPUT_WAITS_FOR_QUEUE & (log->flags)) != 0){ pthread_mutex_unlock(&(log->queue_mutex)); pthread_cond_signal(&(log->output_wait_cond)); }else{ pthread_mutex_unlock(&(log->queue_mutex)); } log->queue_formated_message = NULL; /* format queue_formated_message */ pthread_mutex_lock(&(log->queue_mutex)); log->queue_active = TRUE; pthread_mutex_unlock(&(log->queue_mutex)); list = log->queue_message; log->queue_message = NULL; while(list != NULL){ message = (AgsLogMessage *) list->data; formated_message = (AgsLogFormatedMessage *) malloc(sizeof(AgsLogFormatedMessage)); str = formated_message->message = (char *) malloc((AGS_LOG_MESSAGE_DATE_LENGTH + 5 + AGS_LOG_MESSAGE_LENGTH) * sizeof(char)); time = message->time->tv_sec; date = localtime(&time); strftime(str, AGS_LOG_MESSAGE_DATE_LENGTH * sizeof(char), "%Y-%m-%d %H:%M:%S\0", date); sprintf(&(str[AGS_LOG_MESSAGE_DATE_LENGTH]), ".%.3lld \0", (long long int) message->time->tv_nsec); printed_chars = vsnprintf(&(str[AGS_LOG_MESSAGE_DATE_LENGTH + 4]), AGS_LOG_MESSAGE_LENGTH * sizeof(char), message->format, message->args); if(printed_chars >= 0){ formated_message->length = printed_chars + AGS_LOG_MESSAGE_DATE_LENGTH + 4; }else{ formated_message->length = printed_chars - (AGS_LOG_MESSAGE_DATE_LENGTH + 4); } formated_message->message[formated_message->length] = '\0'; log->queue_formated_message = g_list_prepend(log->queue_formated_message, formated_message); list = list->next; } log->queue_formated_message = NULL; /* wait until log_interval has exceeded */ ags_log_queue_SUSPEND: if((AGS_LOG_STARTING & (log->flags)) != 0){ log->queue_started = TRUE; pthread_cond_signal(&(log->start_wait_cond)); } pthread_mutex_lock(&(log->queue_mutex)); log->queue_active = FALSE; pthread_mutex_unlock(&(log->queue_mutex)); pthread_cond_signal(&(log->broker_wait_cond)); pthread_mutex_lock(&(log->queue_mutex)); log->queue_awaken = FALSE; while((AGS_LOG_QUEUE_SUSPEND & (log->flags)) != 0 || !log->broker_active || !log->signaled_queue){ pthread_cond_wait(&(log->queue_wait_cond), &(log->queue_mutex)); } log->queue_awaken = TRUE; log->signaled_queue = FALSE; log->flags |= AGS_LOG_QUEUE_SUSPEND; pthread_mutex_unlock(&(log->queue_mutex)); pthread_cond_signal(&(log->broker_wait_cond)); } pthread_exit(NULL); } void ags_log_start_threads(AgsLog *log){ /* */ pthread_create(&(log->timer_thread), NULL, &ags_log_timer, log); pthread_mutex_lock(&(log->start_mutex)); while(!log->timer_started){ pthread_cond_wait(&(log->start_wait_cond), &(log->start_mutex)); } pthread_mutex_unlock(&(log->start_mutex)); /**/ log->queue_started = FALSE; pthread_create(&(log->queue_thread), NULL, &ags_log_queue, log); pthread_mutex_lock(&(log->start_mutex)); while(!log->queue_started){ pthread_cond_wait(&(log->start_wait_cond), &(log->start_mutex)); } pthread_mutex_unlock(&(log->start_mutex)); /**/ log->output_started = FALSE; pthread_create(&(log->output_thread), NULL, &ags_log_output, log); pthread_mutex_lock(&(log->start_mutex)); while(!log->output_started){ pthread_cond_wait(&(log->start_wait_cond), &(log->start_mutex)); } pthread_mutex_unlock(&(log->start_mutex)); } void ags_log_start_queue(AgsLog *log) { pthread_mutex_t start_mutex; pthread_mutexattr_t start_mutex_attr; log->flags |= AGS_LOG_STARTING; /* AGS_LOG_RUNNING | AGS_LOG_QUEUE_SUSPEND | AGS_LOG_OUTPUT_SUSPEND); pthread_mutexattr_init(&(start_mutex_attr)); pthread_mutex_init(&(start_mutex), &(start_mutex_attr)); */ /* */ /* log->broker_started = FALSE; log->timer_started = FALSE; */ pthread_create(&(log->broker_thread), NULL, &ags_log_broker, log); pthread_mutex_lock(&(start_mutex)); while(!log->broker_started){ pthread_cond_wait(&(log->start_wait_cond), &start_mutex); } log->flags &= ~(AGS_LOG_STARTING); pthread_mutex_unlock(&(start_mutex)); } void ags_log_stop_queue(AgsLog *log) { log->flags &= (~AGS_LOG_RUNNING); } AgsLogMessage* ags_log_message_alloc() { AgsLogMessage *log_message; /* alloc AgsLogMessage */ log_message = (AgsLogMessage *) malloc(sizeof(AgsLogMessage)); /* set timestamp */ log_message->time = (struct timespec *) malloc(sizeof(struct timespec)); clock_gettime(CLOCK_REALTIME, log_message->time); return(log_message); } void* ags_log_add_message_thread(void *ptr) { struct _AgsLogAddMessageArgs *args; AgsLog *log; AgsLogMessage *log_message; pthread_mutex_t mutex; args = (struct _AgsLogAddMessageArgs *) ptr; log = args->log; log_message = args->log_message; mutex = args->mutex; free(args); log->suspended_logs += 1; while((AGS_LOG_SUSPEND & (log->flags)) != 0){ pthread_cond_wait(&(log->log_wait_cond), &mutex); } if(log->suspended_logs == 0){ log->flags |= AGS_LOG_SUSPEND; } log->active_logs += 1; log->log = g_list_prepend(log->log, log_message); log->active_logs -= 1; log->suspended_logs -= 1; pthread_mutex_unlock(&mutex); pthread_cond_signal(&(log->broker_wait_cond)); pthread_exit(NULL); } void ags_log_add_message(AgsLog *log, AgsLogMessage *log_message, pthread_mutex_t mutex) { struct _AgsLogAddMessageArgs *args; pthread_t log_thread; if(log->log != NULL){ log->queue_message = log->log; } args = (struct _AgsLogAddMessageArgs *) malloc(sizeof(struct _AgsLogAddMessageArgs)); args->log = log; args->log_message = log_message; args->mutex = mutex; pthread_create(&(log_thread), NULL, &ags_log_add_message_thread, args); } void ags_log_debug(AgsLog *log, char *format, ...) { AgsLogMessage *log_debug; pthread_mutex_t log_mutex; pthread_mutexattr_t log_mutex_attr; va_list args; if((AGS_LOG_RUNNING & (log->flags)) == 0 || (AGS_LOG_OMMIT_DEBUG) != 0){ return; } log_debug = ags_log_message_alloc(); log_debug->debug = TRUE; log_debug->format = format; va_start(args, format); va_copy(log_debug->args, args); va_end(args); /* add to queue */ pthread_mutexattr_init(&(log_mutex_attr)); pthread_mutex_init(&(log_mutex), &(log_mutex_attr)); pthread_mutex_lock(&(log_mutex)); if((AGS_LOG_SUSPEND & (log->flags)) == 0){ log->active_logs += 1; log->log = g_list_prepend(log->log, log_debug); log->active_logs -= 1; pthread_mutex_unlock(&(log_mutex)); pthread_cond_signal(&(log->broker_wait_cond)); }else{ ags_log_add_message(log, log_debug, log_mutex); } } void ags_log_message(AgsLog *log, char *format, ...) { AgsLogMessage *log_message; pthread_mutex_t log_mutex; pthread_mutexattr_t log_mutex_attr; va_list args; if((AGS_LOG_RUNNING & (log->flags)) == 0){ return; } log_message = ags_log_message_alloc(); log_message->debug = FALSE; log_message->format = format; va_start(args, format); va_copy(log_message->args, args); va_end(args); /* add to queue */ pthread_mutexattr_init(&(log_mutex_attr)); pthread_mutex_init(&(log_mutex), &(log_mutex_attr)); pthread_mutex_lock(&(log_mutex)); if((AGS_LOG_SUSPEND & (log->flags)) == 0){ log->active_logs += 1; log->log = g_list_prepend(log->log, log_message); log->active_logs -= 1; pthread_mutex_unlock(&(log_mutex)); pthread_cond_signal(&(log->broker_wait_cond)); }else{ ags_log_add_message(log, log_message, log_mutex); } } AgsLog* ags_log_new() { AgsLog *log; log = (AgsLog *) g_object_new(AGS_TYPE_LOG, NULL); return(log); } gsequencer-0.6.37/src/ags/lib/ags_list.h0000644000175000017500000000202712626272146014767 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_LIST_H__ #define __AGS_LIST_H__ #include #include void ags_list_free_and_free_link(GList *list); void ags_list_free_and_unref_link(GList *list); void ags_list_duplicate_list(gpointer entry, gpointer target); #endif /*__AGS_LIST_H__*/ gsequencer-0.6.37/src/ags/lib/ags_list.c0000644000175000017500000000402412626272146014761 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include /** * SECTION:ags_list * @short_description: Complete GList * @title: AgsList * @section_id: * @include: ags/lib/ags_list.h * * Functions completing #GList API. */ /** * ags_list_free_and_free_link: * @list: the #GList * * Free list and free data. * * Since: 0.3 * Deprecated: Use g_list_free_full() with g_free() instead */ void ags_list_free_and_free_link(GList *list) { GList *list_next; while(list != NULL){ list_next = list->next; g_free(list->data); g_list_free1(list); list = list_next; } } /** * ags_list_free_and_unref_link: * @list: the #GList * * Free list and unref data. * * Since: 0.3 * Deprecated: Use g_list_free_full() with g_ojbect_unref() instead */ void ags_list_free_and_unref_link(GList *list) { GList *list_next; while(list != NULL){ list_next = list->next; g_object_unref((GObject *) list->data); g_list_free1(list); list = list_next; } } /** * ags_list_duplicat_list: * @entry: the entry to prepend * @target: location to store the #GList * * ??? * * Since: 0.3 * Deprecated: Ever used? */ void ags_list_duplicate_list(gpointer entry, gpointer target) { GList **list; list = (GList **) target; *list = g_list_prepend(*list, entry); } gsequencer-0.6.37/src/ags/lib/ags_combo_box_text.c0000644000175000017500000000242412626272146017023 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include "ags_combo_box_text.h" /** * SECTION:ags_combo_box_text * @short_description: Complete GtkComboBox * @title: AgsComboBoxText * @section_id: * @include: ags/lib/ags_combo_box_text.h * * Functions completing #GtkComboBoxText API. */ /** * ags_combo_box_text_remove_all: * @combo_box: the #GtkComboBoxText * * Emptys #GtkTreeModel of @combo_box. * * Since: 0.4 */ void ags_combo_box_text_remove_all(GtkComboBoxText *combo_box){ gtk_list_store_clear(GTK_LIST_STORE(gtk_combo_box_get_model(combo_box))); } gsequencer-0.6.37/src/ags/lib/ags_parameter.c0000644000175000017500000000563112621463700015764 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 1995 Spencer Kimball and Peter Mattis * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #include #include #include /** * SECTION:ags_parameter * @short_description: Complete GParameter * @title: AgsParameter * @section_id: * @include: ags/lib/ags_parameter.h * * Functions completing #GParameter API. */ static GParamSpecPool *pspec_pool = NULL; /** * ags_parameter_grow: * @object_type: the #GType of the object's properties * @params: the #GParameter array * @n_params: location to store new size * @...: a %NULL-terminated list of properties name and value * * Grow parameter array of @object_type object. This function is mainly used to * prepare a #GParameter array to instantiate a new #GObject by using g_object_newv(). * * Returns: the resized GParameter array * * Since: 0.3 */ GParameter* ags_parameter_grow(GType object_type, GParameter *params, guint *n_params, ...) { //Thank you gimp GObjectClass *object_class; gchar *param_name; va_list ap; object_class = g_type_class_ref (object_type); va_start(ap, n_params); param_name = va_arg (ap, gchar *); while (param_name) { gchar *error; GParamSpec *pspec; error = NULL; pspec = g_object_class_find_property(object_class, param_name); if (! pspec) { g_warning ("%s: object class `%s' has no property named `%s'\0", G_STRFUNC, g_type_name (object_type), param_name); break; } if(params != NULL){ params = g_renew (GParameter, params, *n_params + 1); }else{ params = g_new(GParameter, 1); } params[*n_params].name = param_name; params[*n_params].value.g_type = 0; g_value_init (¶ms[*n_params].value, G_PARAM_SPEC_VALUE_TYPE (pspec)); G_VALUE_COLLECT (¶ms[*n_params].value, ap, 0, &error); if (error) { g_warning ("%s: %s\0", G_STRFUNC, error); g_free (error); g_value_unset (¶ms[*n_params].value); break; } *n_params = *n_params + 1; param_name = va_arg (ap, gchar *); } return(params); } gsequencer-0.6.37/src/ags/lib/ags_container.c0000644000175000017500000000175012626272146015773 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include void ags_container_add_all(GtkContainer *container, GList *list) { while(list != NULL){ gtk_container_add(container, GTK_WIDGET(list->data)); list = list->next; } } gsequencer-0.6.37/src/ags/lib/ags_log.h0000644000175000017500000001000212626272146014565 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_LOG_H__ #define __AGS_LOG_H__ #include #include #include #include #include #define AGS_TYPE_LOG (ags_log_get_type()) #define AGS_LOG(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_LOG, AgsLog)) #define AGS_LOG_CLASS(class) (G_TYPE_CHECK_CLASS_CAST(class, AGS_TYPE_LOG, AgsLog)) #define AGS_IS_LOG(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_LOG)) #define AGS_IS_LOG_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_LOG)) #define AGS_LOG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS(obj, AGS_TYPE_LOG, AgsLogClass)) extern struct _AgsLog *ags_default_log; #define ags_default_log ags_default_log typedef struct _AgsLog AgsLog; typedef struct _AgsLogClass AgsLogClass; typedef struct _AgsLogMessage AgsLogMessage; typedef struct _AgsLogFormatedMessage AgsLogFormatedMessage; typedef enum{ AGS_LOG_STARTING = 1, AGS_LOG_RUNNING = 1 << 1, AGS_LOG_TIMER_SLEEP = 1 << 2, AGS_LOG_OUTPUT_SUSPEND = 1 << 3, AGS_LOG_OUTPUT_WAITS_FOR_QUEUE = 1 << 4, AGS_LOG_QUEUE_SUSPEND = 1 << 5, AGS_LOG_SUSPEND = 1 << 6, AGS_LOG_COPY_FROM_QUEUE_TO_OUTPUT = 1 << 7, AGS_LOG_OMMIT_DEBUG = 1 << 8, }AgsLogFlags; struct _AgsLog { GObject object; guint flags; FILE *file; pthread_mutex_t start_mutex; pthread_cond_t start_wait_cond; struct timespec *log_interval; struct timespec *free_float; pthread_t timer_thread; pthread_attr_t timer_thread_attr; pthread_mutex_t timer_mutex; pthread_mutexattr_t timer_mutex_attr; gboolean timer_started; gboolean timer_active; gboolean timer_awaken; pthread_cond_t timer_wait_cond; pthread_t broker_thread; pthread_attr_t broker_thread_attr; pthread_mutex_t broker_mutex; pthread_mutexattr_t broker_mutex_attr; gboolean broker_started; gboolean broker_active; gboolean broker_awaken; gboolean signaled_timer; gboolean signaled_log; gboolean signaled_queue; gboolean signaled_output; pthread_cond_t broker_wait_cond; GList *output_formated_message; pthread_t output_thread; pthread_attr_t output_thread_attr; pthread_mutex_t output_mutex; pthread_mutexattr_t output_mutex_attr; gboolean output_started; gboolean output_active; gboolean output_awaken; pthread_cond_t output_wait_cond; GList *queue_formated_message; GList *queue_message; pthread_t queue_thread; pthread_attr_t queue_thread_attr; pthread_mutex_t queue_mutex; pthread_mutexattr_t queue_mutex_attr; gboolean queue_started; gboolean queue_active; gboolean queue_awaken; pthread_cond_t queue_wait_cond; GList *log; guint active_logs; guint suspended_logs; pthread_cond_t log_wait_cond; }; struct _AgsLogClass { GObjectClass object; }; struct _AgsLogMessage { gboolean debug; struct timespec *time; char *format; va_list args; }; struct _AgsLogFormatedMessage { int length; char *message; }; GType ags_log_get_type (void); void ags_log_start_queue(AgsLog *log); void ags_log_stop_queue(AgsLog *log); void ags_log_debug(AgsLog *log, char *format, ...); void ags_log_message(AgsLog *log, char *format, ...); #endif /*__AGS_LOG_H__*/ gsequencer-0.6.37/src/ags/lib/ags_parameter.h0000644000175000017500000000174212621463700015770 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_PARAMETER_H__ #define __AGS_PARAMETER_H__ #include #include GParameter* ags_parameter_grow(GType type, GParameter *params, guint *n_params, ...); #endif /*__AGS_PARAMETER_H__*/ gsequencer-0.6.37/src/ags/lib/ags_container.h0000644000175000017500000000174612626272146016005 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_CONTAINER_H__ #define __AGS_CONTAINER_H__ #include #include #include void ags_container_add_all(GtkContainer *container, GList *list); #endif /*__AGS_CONTAINER_H__*/ gsequencer-0.6.37/src/ags/lib/ags_combo_box_text.h0000644000175000017500000000175312626272146017034 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_COMBO_BOX_TEXT_H__ #define __AGS_COMBO_BOX_TEXT_H__ #include #include #include void ags_combo_box_text_remove_all(GtkComboBoxText *combo_box); #endif /*__AGS_COMBO_BOX_TEXT_H__*/ gsequencer-0.6.37/src/ags/X/0000755000175000017500000000000012633241336012524 500000000000000gsequencer-0.6.37/src/ags/X/ags_performance_preferences.h0000644000175000017500000000422312621463700020330 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_PERFORMANCE_PREFERENCES_H__ #define __AGS_PERFORMANCE_PREFERENCES_H__ #include #define AGS_TYPE_PERFORMANCE_PREFERENCES (ags_performance_preferences_get_type()) #define AGS_PERFORMANCE_PREFERENCES(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_PERFORMANCE_PREFERENCES, AgsPerformancePreferences)) #define AGS_PERFORMANCE_PREFERENCES_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_PERFORMANCE_PREFERENCES, AgsPerformancePreferencesClass)) #define AGS_IS_PERFORMANCE_PREFERENCES(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_PERFORMANCE_PREFERENCES)) #define AGS_IS_PERFORMANCE_PREFERENCES_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_PERFORMANCE_PREFERENCES)) #define AGS_PERFORMANCE_PREFERENCES_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_PERFORMANCE_PREFERENCES, AgsPerformancePreferencesClass)) typedef struct _AgsPerformancePreferences AgsPerformancePreferences; typedef struct _AgsPerformancePreferencesClass AgsPerformancePreferencesClass; struct _AgsPerformancePreferences { GtkVBox vbox; GtkCheckButton *stream_auto_sense; GtkCheckButton *super_threaded; }; struct _AgsPerformancePreferencesClass { GtkVBoxClass vbox; }; GType ags_performance_preferences_get_type(void); AgsPerformancePreferences* ags_performance_preferences_new(); #endif /*__AGS_PERFORMANCE_PREFERENCES_H__*/ gsequencer-0.6.37/src/ags/X/ags_window_callbacks.h0000644000175000017500000000201312621463700016747 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_WINDOW_CALLBACKS_H__ #define __AGS_WINDOW_CALLBACKS_H__ #include #include #include gboolean ags_window_delete_event_callback(GtkWidget *widget, gpointer data); #endif /*__AGS_WINDOW_CALLBACKS_H__*/ gsequencer-0.6.37/src/ags/X/ags_machine_callbacks.c0000644000175000017500000003635112627074214017057 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define AGS_RENAME_ENTRY "AgsRenameEntry" int ags_machine_popup_rename_response_callback(GtkWidget *widget, gint response, AgsMachine *machine); int ags_machine_popup_properties_destroy_callback(GtkWidget *widget, AgsMachine *machine); void ags_machine_start_complete_response(GtkWidget *dialog, gint response, AgsMachine *machine); extern pthread_mutex_t ags_application_mutex; int ags_machine_button_press_callback(GtkWidget *handle_box, GdkEventButton *event, AgsMachine *machine) { AgsWindow *window = AGS_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET(handle_box))); if(event->button == 3){ gtk_menu_popup (GTK_MENU (machine->popup), NULL, NULL, NULL, NULL, event->button, event->time); }else if(event->button == 1){ window->selected = machine; } return(0); } int ags_machine_popup_move_up_activate_callback(GtkWidget *widget, AgsMachine *machine) { GValue val={0,}; g_value_init (&val, G_TYPE_INT); gtk_container_child_get_property(GTK_CONTAINER(GTK_WIDGET(machine)->parent), GTK_WIDGET(machine), "position\0", &val); if(g_value_get_int (&val) > 0){ gtk_box_reorder_child(GTK_BOX(GTK_WIDGET(machine)->parent), GTK_WIDGET(machine), g_value_get_int (&val) - 1); } g_value_unset (&val); return(0); } int ags_machine_popup_move_down_activate_callback(GtkWidget *widget, AgsMachine *machine) { GValue val={0,}; g_value_init (&val, G_TYPE_INT); gtk_container_child_get_property(GTK_CONTAINER(GTK_WIDGET(machine)->parent), GTK_WIDGET(machine), "position\0", &val); if(g_value_get_int (&val) < g_list_length(gtk_container_get_children((GtkContainer *) GTK_WIDGET(machine)->parent)) - 1){ gtk_box_reorder_child(GTK_BOX(GTK_WIDGET(machine)->parent), GTK_WIDGET(machine), g_value_get_int (&val) + 1); } g_value_unset (&val); return(0); } int ags_machine_popup_hide_activate_callback(GtkWidget *widget, AgsMachine *machine) { gtk_widget_hide(GTK_BIN(gtk_container_get_children((GtkContainer *) GTK_WIDGET(machine))->data)->child); return(0); } int ags_machine_popup_show_activate_callback(GtkWidget *widget, AgsMachine *machine) { gtk_widget_show(GTK_BIN(gtk_container_get_children((GtkContainer *) GTK_WIDGET(machine))->data)->child); return(0); } void ags_machine_popup_destroy_activate_callback(GtkWidget *widget, AgsMachine *machine) { AgsWindow *window; AgsRemoveAudio *remove_audio; AgsAudioLoop *audio_loop; AgsTaskThread *task_thread; AgsMain *ags_main; GList *list, *list_start; window = (AgsWindow *) gtk_widget_get_toplevel((GtkWidget *) machine); ags_main = window->ags_main; /* get audio loop */ pthread_mutex_lock(&(ags_application_mutex)); audio_loop = (AgsAudioLoop *) ags_main->main_loop; pthread_mutex_unlock(&(ags_application_mutex)); /* get task thread */ task_thread = (AgsTaskThread *) ags_thread_find_type(audio_loop, AGS_TYPE_TASK_THREAD); remove_audio = ags_remove_audio_new(window->devout, machine->audio); ags_task_thread_append_task(task_thread, AGS_TASK(remove_audio)); ags_connectable_disconnect(AGS_CONNECTABLE(machine)); /* destroy editor */ list = window->editor->editor_child; while(list != NULL){ if(AGS_EDITOR_CHILD(list->data)->machine == machine){ gtk_widget_destroy(AGS_EDITOR_CHILD(list->data)->notebook); gtk_widget_destroy(AGS_EDITOR_CHILD(list->data)->meter); gtk_widget_destroy(AGS_EDITOR_CHILD(list->data)->edit_widget); break; } list = list->next; } list = list_start = gtk_container_get_children(window->editor->machine_selector); list = list->next; while(list != NULL){ if(AGS_IS_MACHINE_RADIO_BUTTON(list->data) && AGS_MACHINE_RADIO_BUTTON(list->data)->machine == machine){ gtk_widget_destroy(list->data); break; } list = list->next; } g_list_free(list_start); /* destroy machine */ gtk_widget_destroy((GtkWidget *) machine); } int ags_machine_popup_rename_activate_callback(GtkWidget *widget, AgsMachine *machine) { GtkDialog *dialog; GtkEntry *entry; machine->rename = dialog = (GtkDialog *) gtk_dialog_new_with_buttons(g_strdup("rename\0"), (GtkWindow *) gtk_widget_get_toplevel(GTK_WIDGET(machine)), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, NULL); entry = (GtkEntry *) gtk_entry_new(); gtk_entry_set_text(entry, machine->name); gtk_box_pack_start((GtkBox *) dialog->vbox, (GtkWidget *) entry, FALSE, FALSE, 0); gtk_widget_show_all((GtkWidget *) dialog); g_signal_connect((GObject *) dialog, "response\0", G_CALLBACK(ags_machine_popup_rename_response_callback), (gpointer) machine); return(0); } int ags_machine_popup_rename_response_callback(GtkWidget *widget, gint response, AgsMachine *machine) { gchar *text; if(response == GTK_RESPONSE_ACCEPT){ if(machine->name != NULL) free(machine->name); text = gtk_editable_get_chars(GTK_EDITABLE(gtk_container_get_children((GtkContainer *) GTK_DIALOG(widget)->vbox)->data), 0, -1); machine->name = text; gtk_frame_set_label((GtkFrame *) gtk_container_get_children((GtkContainer *) machine)->data, g_strconcat(G_OBJECT_TYPE_NAME(machine), ": \0", text, NULL)); g_free(text); } machine->rename = NULL; gtk_widget_destroy(widget); return(0); } int ags_machine_popup_properties_activate_callback(GtkWidget *widget, AgsMachine *machine) { machine->properties = (GtkDialog *) ags_machine_editor_new(machine); g_signal_connect_after(machine->properties, "destroy\0", G_CALLBACK(ags_machine_popup_properties_destroy_callback), machine); gtk_window_set_default_size((GtkWindow *) machine->properties, -1, 400); ags_connectable_connect(AGS_CONNECTABLE(machine->properties)); ags_applicable_reset(AGS_APPLICABLE(machine->properties)); gtk_widget_show_all((GtkWidget *) machine->properties); return(0); } int ags_machine_popup_properties_destroy_callback(GtkWidget *widget, AgsMachine *machine) { machine->properties = NULL; } int ags_machine_popup_copy_pattern_callback(GtkWidget *widget, AgsMachine *machine) { ags_machine_copy_pattern(machine); return(0); } int ags_machine_popup_paste_pattern_callback(GtkWidget *widget, AgsMachine *machine) { //TODO:JK: implement me return(0); } void ags_machine_open_response_callback(GtkDialog *dialog, gint response, AgsMachine *machine) { GtkFileChooserDialog *file_chooser; GtkCheckButton *overwrite; GtkCheckButton *create; GSList *filenames; file_chooser = GTK_FILE_CHOOSER_DIALOG(dialog); if(response == GTK_RESPONSE_ACCEPT){ filenames = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(file_chooser)); overwrite = g_object_get_data(G_OBJECT(dialog), "overwrite\0"); create = g_object_get_data(G_OBJECT(dialog), "create\0"); ags_machine_open_files(machine, filenames, GTK_TOGGLE_BUTTON(overwrite)->active, GTK_TOGGLE_BUTTON(create)->active); } gtk_widget_destroy(GTK_WIDGET(file_chooser)); } void ags_machine_open_extended_response_callback(GtkWidget *widget, gint response, AgsMachine *machine) { GtkFileChooserDialog *file_chooser; AgsFileSelection *file_selection; GtkCheckButton *overwrite; GtkCheckButton *create; GSList *filenames; gchar *current_folder; GError *error; file_chooser = (GtkFileChooserDialog *) gtk_widget_get_toplevel(widget); if(response == GTK_RESPONSE_ACCEPT){ filenames = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(file_chooser)); overwrite = g_object_get_data((GObject *) widget, "overwrite\0"); create = g_object_get_data((GObject *) widget, "create\0"); current_folder = gtk_file_chooser_get_current_folder(GTK_FILE_CHOOSER(file_chooser)); //TODO:JK: you need to check against recently used //TODO:JK: add more file types to AgsFileSelection /* check for supported packed audio files */ file_selection = (AgsFileSelection *) gtk_file_chooser_get_extra_widget(GTK_FILE_CHOOSER(file_chooser)); if(file_selection != NULL && g_strcmp0(file_selection->directory, current_folder)){ gtk_widget_destroy(GTK_WIDGET(file_selection)); file_selection = NULL; } if(file_selection == NULL || (AGS_FILE_SELECTION_COMPLETED & (file_selection->flags)) == 0){ if((AGS_MACHINE_ACCEPT_SOUNDFONT2 & (machine->file_input_flags)) != 0){ GDir *current_directory; GList *new_entry, *old_entry; GSList *slist; gchar *current_filename; slist = filenames; new_entry = NULL; while(slist != NULL){ if(g_str_has_suffix(slist->data, ".sf2\0")){ AgsFileSelectionEntry *entry; entry = ags_file_selection_entry_alloc(); entry->filename = slist->data; new_entry = g_list_prepend(new_entry, entry); } slist = slist->next; } old_entry = NULL; if(file_selection == NULL){ if(new_entry != NULL){ file_selection = ags_file_selection_new(); gtk_file_chooser_set_extra_widget(GTK_FILE_CHOOSER(file_chooser), GTK_WIDGET(file_selection)); ags_file_selection_set_entry(file_selection, new_entry); ags_connectable_connect(AGS_CONNECTABLE(file_selection)); gtk_widget_show_all(GTK_WIDGET(file_selection)); return; } }else if(AGS_IS_FILE_SELECTION(file_selection)){ GList *really_new_entry; GList *list; old_entry = file_selection->entry; list = new_entry; really_new_entry = NULL; /* check against existing entries */ if(new_entry != NULL){ while(list != NULL){ if(g_list_find(old_entry, list->data) == NULL){ really_new_entry = g_list_prepend(really_new_entry, list->data); }else{ free(list->data); } list = list->next; } g_list_free(new_entry); } ags_file_selection_set_entry(file_selection, really_new_entry); /* adding lost files */ //TODO:JK: figure out if you need to copy the GSList of filenames gtk_file_chooser_select_all(GTK_FILE_CHOOSER(file_chooser)); current_directory = g_dir_open(current_folder, 0, &error); while((current_filename = (gchar *) g_dir_read_name(current_directory)) != NULL){ if(!g_strcmp0(".\0", current_filename) || !g_strcmp0("..\0", current_filename)) continue; if(!ags_file_selection_contains_file(file_selection, current_filename) && g_slist_find(filenames, current_filename) == NULL){ gtk_file_chooser_unselect_filename(GTK_FILE_CHOOSER(file_chooser), current_filename); } } g_dir_close(current_directory); return; } } } //TODO:JK: fix GSList filenames memory leak ags_machine_open_files(machine, filenames, overwrite->toggle_button.active, create->toggle_button.active); } } void ags_machine_play_callback(GtkWidget *toggle_button, AgsMachine *machine) { if(machine == NULL){ return; } if(GTK_TOGGLE_BUTTON(toggle_button)->active){ if((AGS_MACHINE_BLOCK_PLAY & (machine->flags)) != 0){ return; } printf("machine: on\n\0"); machine->flags |= AGS_MACHINE_BLOCK_PLAY; ags_machine_set_run_extended(machine, TRUE, TRUE, FALSE); machine->flags &= (~AGS_MACHINE_BLOCK_PLAY); }else{ if((AGS_MACHINE_BLOCK_STOP & (machine->flags)) != 0){ return; } printf("machine: off\n\0"); machine->flags |= AGS_MACHINE_BLOCK_STOP; ags_machine_set_run_extended(machine, FALSE, TRUE, FALSE); machine->flags &= (~AGS_MACHINE_BLOCK_STOP); } } void ags_machine_tact_callback(AgsAudio *audio, AgsRecallID *recall_id, AgsMachine *machine) { /* empty */ } void ags_machine_done_callback(AgsAudio *audio, AgsRecallID *recall_id, AgsMachine *machine) { AgsChannel *channel; if((AGS_MACHINE_BLOCK_STOP & (machine->flags)) != 0){ return; } machine->flags |= AGS_MACHINE_BLOCK_STOP; if((AGS_RECALL_ID_SEQUENCER & (recall_id->flags)) != 0){ gtk_toggle_button_set_active(machine->play, FALSE); } /* cancel playback */ channel = audio->output; while(channel != NULL){ if(AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[0] == recall_id){ ags_channel_tillrecycling_cancel(channel, AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[0]); } if(AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[1] == recall_id){ ags_channel_tillrecycling_cancel(channel, AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[1]); } if(AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[2] == recall_id){ ags_channel_tillrecycling_cancel(channel, AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[2]); } /* set remove flag */ channel = channel->next; } machine->flags &= (~AGS_MACHINE_BLOCK_STOP); } void ags_machine_start_complete_callback(AgsTaskCompletion *task_completion, AgsMachine *machine) { AgsWindow *window; GtkMessageDialog *dialog; AgsThread *main_loop; AgsDevoutThread *devout_thread; AgsTask *task; task = (AgsTask *) task_completion->task; window = gtk_widget_get_ancestor(machine, AGS_TYPE_WINDOW); pthread_mutex_lock(&(ags_application_mutex)); main_loop = AGS_MAIN(window->ags_main)->main_loop; pthread_mutex_unlock(&(ags_application_mutex)); devout_thread = (AgsDevoutThread *) ags_thread_find_type(main_loop, AGS_TYPE_DEVOUT_THREAD); if(devout_thread->error != NULL){ /* show error message */ dialog = (GtkMessageDialog *) gtk_message_dialog_new(GTK_WINDOW(window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, "Error: %s\0", devout_thread->error->message); g_signal_connect(dialog, "response\0", G_CALLBACK(ags_machine_start_complete_response), machine); gtk_widget_show_all((GtkWidget *) dialog); } } void ags_machine_start_complete_response(GtkWidget *dialog, gint response, AgsMachine *machine) { gtk_widget_destroy(dialog); } gsequencer-0.6.37/src/ags/X/ags_line_member.c0000644000175000017500000005471212626450343015733 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include void ags_line_member_class_init(AgsLineMemberClass *line_member); void ags_line_member_connectable_interface_init(AgsConnectableInterface *connectable); void ags_line_member_init(AgsLineMember *line_member); void ags_line_member_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_line_member_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_line_member_connect(AgsConnectable *connectable); void ags_line_member_disconnect(AgsConnectable *connectable); void ags_line_member_finalize(GObject *gobject); void ags_line_member_real_change_port(AgsLineMember *line_member, gpointer port_data); /** * SECTION:ags_line_member * @short_description: Modify assigned recall's port * @title: AgsLineMember * @section_id: * @include: ags/X/ags_line_member.h * * #AgsLineMember is a composite widget to modify ports of recalls. A line member * controls only one specific port of a recall but distinguishes between simple/complex * recall. It is generally packed into a #AgsLine. */ enum{ CHANGE_PORT, LAST_SIGNAL, }; enum{ PROP_0, PROP_WIDGET_TYPE, PROP_WIDGET_LABEL, PROP_PLUGIN_NAME, PROP_SPECIFIER, PROP_CONTROL_PORT, PROP_PORT, PROP_PORT_DATA, PROP_PORT_DATA_LENGTH, PROP_RECALL_PORT, PROP_RECALL_PORT_DATA, PROP_RECALL_PORT_DATA_LENGTH, PROP_TASK_TYPE, }; static gpointer ags_line_member_parent_class = NULL; static guint line_member_signals[LAST_SIGNAL]; extern pthread_mutex_t ags_application_mutex; GType ags_line_member_get_type(void) { static GType ags_type_line_member = 0; if(!ags_type_line_member){ static const GTypeInfo ags_line_member_info = { sizeof(AgsLineMemberClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_line_member_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(AgsLineMember), 0, /* n_preallocs */ (GInstanceInitFunc) ags_line_member_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_line_member_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_line_member = g_type_register_static(GTK_TYPE_FRAME, "AgsLineMember\0", &ags_line_member_info, 0); g_type_add_interface_static(ags_type_line_member, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return(ags_type_line_member); } void ags_line_member_class_init(AgsLineMemberClass *line_member) { GObjectClass *gobject; GParamSpec *param_spec; ags_line_member_parent_class = g_type_class_peek_parent(line_member); /* GObjectClass */ gobject = G_OBJECT_CLASS(line_member); gobject->set_property = ags_line_member_set_property; gobject->get_property = ags_line_member_get_property; gobject->finalize = ags_line_member_finalize; /* properties */ /** * AgsLineMember:widget-type: * * The widget type to instantiate and use as control. * * Since: 0.4 */ param_spec = g_param_spec_ulong("widget-type\0", "widget type of line member\0", "The widget type this line member packs\0", 0, G_MAXULONG, G_TYPE_NONE, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_WIDGET_TYPE, param_spec); /** * AgsLineMember:widget-label: * * The widget's label to use. * * Since: 0.4 */ param_spec = g_param_spec_string("widget-label\0", "label to display\0", "The label to display\0", NULL, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_WIDGET_LABEL, param_spec); /** * AgsLineMember:plugin-name: * * The plugin name of the recall to use. * * Since: 0.4 */ param_spec = g_param_spec_string("plugin-name\0", "plugin name to control\0", "The plugin's name to control\0", NULL, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_PLUGIN_NAME, param_spec); /** * AgsLineMember:specifier: * * The plugin specifier of the recall to apply. * * Since: 0.4 */ param_spec = g_param_spec_string("specifier\0", "port specifier\0", "The specifier of the port\0", NULL, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_SPECIFIER, param_spec); /** * AgsLineMember:control-port: * * The control port of the recall. * * Since: 0.4 */ param_spec = g_param_spec_string("control-port\0", "control port index\0", "The index of the port to control\0", NULL, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_CONTROL_PORT, param_spec); /** * AgsLineMember:apply: * * The matching simple port of plugin name and specifier. * * Since: 0.4 */ param_spec = g_param_spec_object("port\0", "port to apply\0", "The port to apply\0", AGS_TYPE_PORT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_PORT, param_spec); /** * AgsLineMember:port-data: * * The port data to apply. * * Since: 0.4 */ param_spec = g_param_spec_pointer("port-data\0", "port data\0", "The port data\0", G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_PORT_DATA, param_spec); /** * AgsLineMember:recall-port: * * The matching complex port of plugin name and specifier. * * Since: 0.4 */ param_spec = g_param_spec_object("recall-port\0", "recall port to apply\0", "The recall port to apply\0", AGS_TYPE_PORT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_RECALL_PORT, param_spec); /** * AgsLineMember:recall-port-data: * * The complex port data to apply. * * Since: 0.4 */ param_spec = g_param_spec_pointer("recall-port-data\0", "recall port data\0", "The recall port data\0", G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_RECALL_PORT_DATA, param_spec); /* AgsLineMember */ line_member->change_port = ags_line_member_real_change_port; /* signals */ /** * AgsLineMember::change-port: * @line_member: the #AgsLineMember * @port_data: the port's data * * The ::change-port signal notifies modified port. */ line_member_signals[CHANGE_PORT] = g_signal_new("change-port\0", G_TYPE_FROM_CLASS(line_member), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsLineMemberClass, change_port), NULL, NULL, g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER); } void ags_line_member_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->connect = ags_line_member_connect; connectable->disconnect = ags_line_member_disconnect; } void ags_line_member_init(AgsLineMember *line_member) { GtkWidget *control; g_signal_connect_after((GObject *) line_member, "parent_set\0", G_CALLBACK(ags_line_member_parent_set_callback), (gpointer) line_member); line_member->flags = (AGS_LINE_MEMBER_RESET_BY_ATOMIC | AGS_LINE_MEMBER_APPLY_RECALL); line_member->widget_type = AGS_TYPE_DIAL; control = (GtkWidget *) g_object_new(AGS_TYPE_DIAL, "adjustment\0", gtk_adjustment_new(0.0, 0.0, 1.0, 0.1, 0.1, 0.0), NULL); gtk_container_add(GTK_CONTAINER(line_member), control); line_member->widget_label = NULL; line_member->plugin_name = NULL; line_member->specifier = NULL; line_member->control_port = NULL; line_member->port = NULL; line_member->port_data = NULL; line_member->active = FALSE; line_member->recall_port = NULL; line_member->recall_port_data = NULL; line_member->recall_active = FALSE; line_member->task_type = G_TYPE_NONE; } void ags_line_member_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsLineMember *line_member; line_member = AGS_LINE_MEMBER(gobject); switch(prop_id){ case PROP_WIDGET_TYPE: { GtkWidget *child, *new_child; GType widget_type; widget_type = g_value_get_ulong(value); if(widget_type == line_member->widget_type){ return; } child = gtk_bin_get_child(GTK_BIN(line_member)); if(child != NULL){ gtk_widget_destroy(child); } line_member->widget_type = widget_type; new_child = (GtkWidget *) g_object_new(widget_type, NULL); gtk_container_add(GTK_CONTAINER(line_member), new_child); } break; case PROP_WIDGET_LABEL: { gchar *label; label = g_value_get_string(value); if(label == line_member->widget_label){ return; } line_member->widget_label = g_strdup(label); ags_line_member_set_label(line_member, line_member->widget_label); } break; case PROP_PLUGIN_NAME: { gchar *plugin_name; plugin_name = g_value_get_string(value); if(plugin_name == line_member->plugin_name){ return; } line_member->plugin_name = g_strdup(plugin_name); } break; case PROP_SPECIFIER: { gchar *specifier; specifier = g_value_get_string(value); if(specifier == line_member->specifier){ return; } line_member->specifier = g_strdup(specifier); } break; case PROP_CONTROL_PORT: { gchar *control_port; control_port = g_value_get_string(value); if(control_port == line_member->control_port){ return; } line_member->control_port = g_strdup(control_port); } break; case PROP_PORT: { AgsPort *port; port = g_value_get_object(value); if(port == line_member->port){ return; } if(line_member->port != NULL){ g_object_unref(line_member->port); } if(port != NULL){ g_object_ref(port); } line_member->port = port; } break; case PROP_PORT_DATA: { gpointer port_data; port_data = g_value_get_pointer(value); if(port_data == line_member->port_data){ return; } line_member->port_data = port_data; } break; case PROP_RECALL_PORT: { AgsPort *port; port = g_value_get_object(value); if(port == line_member->recall_port){ return; } if(line_member->recall_port != NULL){ g_object_unref(line_member->recall_port); } if(port != NULL){ g_object_ref(port); } line_member->recall_port = port; } break; case PROP_RECALL_PORT_DATA: { gpointer port_data; port_data = g_value_get_pointer(value); if(port_data == line_member->recall_port_data){ return; } line_member->recall_port_data = port_data; } break; case PROP_TASK_TYPE: { GType type; type = g_value_get_ulong(value); if(line_member->task_type == type){ return; } line_member->task_type = type; } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_line_member_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsLineMember *line_member; line_member = AGS_LINE_MEMBER(gobject); switch(prop_id){ case PROP_WIDGET_TYPE: { g_value_set_ulong(value, line_member->widget_type); } break; case PROP_WIDGET_LABEL: { g_value_set_string(value, line_member->widget_label); } break; case PROP_PLUGIN_NAME: { g_value_set_string(value, line_member->plugin_name); } break; case PROP_SPECIFIER: { g_value_set_string(value, line_member->specifier); } break; case PROP_CONTROL_PORT: { g_value_set_string(value, line_member->control_port); } break; case PROP_PORT: { g_value_set_object(value, line_member->port); } break; case PROP_PORT_DATA: { g_value_set_pointer(value, line_member->port_data); } break; case PROP_RECALL_PORT: { g_value_set_object(value, line_member->port); } break; case PROP_RECALL_PORT_DATA: { g_value_set_pointer(value, line_member->port_data); } break; case PROP_TASK_TYPE: { g_value_set_ulong(value, line_member->task_type); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_line_member_connect(AgsConnectable *connectable) { AgsLineMember *line_member; GtkWidget *control; line_member = AGS_LINE_MEMBER(connectable); control = gtk_bin_get_child(GTK_BIN(line_member)); /* widget callback */ if(line_member->widget_type == AGS_TYPE_DIAL){ g_signal_connect(GTK_WIDGET(control), "value-changed\0", G_CALLBACK(ags_line_member_dial_changed_callback), line_member); }else if(line_member->widget_type == GTK_TYPE_VSCALE){ g_signal_connect(GTK_WIDGET(control), "value-changed\0", G_CALLBACK(ags_line_member_vscale_changed_callback), line_member); }else if(line_member->widget_type == GTK_TYPE_HSCALE){ g_signal_connect(GTK_WIDGET(control), "value-changed\0", G_CALLBACK(ags_line_member_hscale_changed_callback), line_member); }else if(line_member->widget_type == GTK_TYPE_SPIN_BUTTON){ g_signal_connect(GTK_WIDGET(control), "value-changed\0", G_CALLBACK(ags_line_member_spin_button_changed_callback), line_member); }else if(line_member->widget_type == GTK_TYPE_CHECK_BUTTON){ g_signal_connect(GTK_WIDGET(control), "clicked\0", G_CALLBACK(ags_line_member_check_button_clicked_callback), line_member); }else if(line_member->widget_type == GTK_TYPE_TOGGLE_BUTTON){ g_signal_connect(GTK_WIDGET(control), "clicked\0", G_CALLBACK(ags_line_member_toggle_button_clicked_callback), line_member); }else if(line_member->widget_type == GTK_TYPE_BUTTON){ g_signal_connect(GTK_WIDGET(control), "clicked\0", G_CALLBACK(ags_line_member_button_clicked_callback), line_member); } /* port callback */ if((AGS_LINE_MEMBER_PLAY_CALLBACK_WRITE & (line_member->flags)) != 0 && line_member->port != NULL){ g_signal_connect_after(line_member->port, "safe-write\0", G_CALLBACK(ags_line_member_port_safe_write_callback), line_member); } if((AGS_LINE_MEMBER_RECALL_CALLBACK_WRITE & (line_member->flags)) != 0 && line_member->recall_port != NULL){ g_signal_connect_after(line_member->recall_port, "safe-write\0", G_CALLBACK(ags_line_member_port_safe_write_callback), line_member); } } void ags_line_member_disconnect(AgsConnectable *connectable) { /* empty */ } void ags_line_member_finalize(GObject *gobject) { /* empty */ } GtkWidget* ags_line_member_get_widget(AgsLineMember *line_member) { return(gtk_bin_get_child(GTK_BIN(line_member))); } /** * ags_line_member_set_label: * @line_member: an #AgsLineMember * @label: the label of the control * * Modify the label of the line member. */ void ags_line_member_set_label(AgsLineMember *line_member, gchar *label) { GtkWidget *child_widget; if(g_type_is_a(line_member->widget_type, GTK_TYPE_BUTTON)){ child_widget = gtk_bin_get_child(GTK_BIN(line_member)); g_object_set(G_OBJECT(child_widget), "label\0", label, NULL); }else{ gtk_frame_set_label_widget(line_member, g_object_new(GTK_TYPE_LABEL, "wrap\0", TRUE, "wrap-mode\0", PANGO_WRAP_CHAR, "use-markup\0", TRUE, "label", g_strdup_printf("%s", label), NULL)); } line_member->widget_label = label; } void ags_line_member_real_change_port(AgsLineMember *line_member, gpointer port_data) { if((AGS_LINE_MEMBER_RESET_BY_ATOMIC & (line_member->flags)) != 0){ AgsPort *port; GValue value = {0,}; port = line_member->port; if(!port->port_value_is_pointer){ if(port->port_value_type == G_TYPE_BOOLEAN){ g_value_init(&value, G_TYPE_BOOLEAN); g_value_set_boolean(&value, ((gboolean *) port_data)[0]); }else if(port->port_value_type == G_TYPE_INT64){ g_value_init(&value, G_TYPE_INT64); g_value_set_int64(&value, ((gint *) port_data)[0]); }else if(port->port_value_type == G_TYPE_UINT64){ g_value_init(&value, G_TYPE_UINT64); g_value_set_uint64(&value, ((guint *) port_data)[0]); }else if(port->port_value_type == G_TYPE_FLOAT){ g_value_init(&value, G_TYPE_FLOAT); g_value_set_float(&value, (gfloat) ((gdouble *) port_data)[0]); }else if(port->port_value_type == G_TYPE_DOUBLE){ g_value_init(&value, G_TYPE_DOUBLE); g_value_set_double(&value, ((gdouble *) port_data)[0]); } }else{ if(port->port_value_type == G_TYPE_OBJECT){ g_value_init(&value, G_TYPE_OBJECT); g_value_set_object(&value, port_data); }else{ if(port->port_value_type == G_TYPE_BOOLEAN || port->port_value_type == G_TYPE_INT64 || port->port_value_type == G_TYPE_UINT64 || port->port_value_type == G_TYPE_FLOAT || port->port_value_type == G_TYPE_DOUBLE || port->port_value_type == G_TYPE_POINTER){ g_value_init(&value, G_TYPE_POINTER); g_value_set_pointer(&value, port_data); } } } ags_port_safe_write(line_member->port, &value); if((AGS_LINE_MEMBER_APPLY_RECALL & (line_member->flags)) != 0){ ags_port_safe_write(line_member->recall_port, &value); } } if((AGS_LINE_MEMBER_RESET_BY_TASK & (line_member->flags)) != 0){ AgsWindow *window; AgsLine *line; AgsThread *audio_loop; AgsTaskThread *task_thread; AgsTask *task; AgsMain *ags_main; line = (AgsLine *) gtk_widget_get_ancestor(GTK_WIDGET(line_member), AGS_TYPE_LINE); window = (AgsMachine *) gtk_widget_get_ancestor((GtkWidget *) line, AGS_TYPE_WINDOW); ags_main = window->ags_main; /* get audio loop */ pthread_mutex_lock(&(ags_application_mutex)); audio_loop = ags_main->main_loop; pthread_mutex_unlock(&(ags_application_mutex)); /* get task and devout thread */ task_thread = (AgsTaskThread *) ags_thread_find_type(audio_loop, AGS_TYPE_TASK_THREAD); task = (AgsTask *) g_object_new(line_member->task_type, line_member->control_port, port_data, NULL); ags_task_thread_append_task(task_thread, task); } } /** * ags_line_change_port: * @line_member: an #AgsLineMember * @port_data: the port's value * * Is emitted as port's value is modified. * * Since: 0.4 */ void ags_line_member_change_port(AgsLineMember *line_member, gpointer port_data) { g_return_if_fail(AGS_IS_LINE_MEMBER(line_member)); g_object_ref((GObject *) line_member); g_signal_emit(G_OBJECT(line_member), line_member_signals[CHANGE_PORT], 0, port_data); g_object_unref((GObject *) line_member); } /** * ags_line_member_find_port: * @line_member: an #AgsLineMember * * Lookup ports of assigned recall. * * Since: 0.4 */ void ags_line_member_find_port(AgsLineMember *line_member) { AgsMachine *machine; AgsLine *line; AgsAudio *audio; AgsChannel *channel; AgsPort *audio_port, *channel_port; AgsPort *recall_audio_port, *recall_channel_port; GList *recall; gchar *specifier; auto AgsPort* ags_line_member_find_specifier(GList *recall); AgsPort* ags_line_member_find_specifier(GList *recall){ GList *port; while(recall != NULL){ port = AGS_RECALL(recall->data)->port; #ifdef AGS_DEBUG g_message("search port in %s\0", G_OBJECT_TYPE_NAME(recall->data)); #endif while(port != NULL){ if(!g_strcmp0(AGS_PORT(port->data)->specifier, specifier)){ return(AGS_PORT(port->data)); } port = port->next; } recall = recall->next; } return(NULL); } if(line_member == NULL){ return; } specifier = line_member->specifier; if(!AGS_IS_LINE_MEMBER(line_member) || specifier == NULL){ return; } line = (AgsLine *) gtk_widget_get_ancestor(GTK_WIDGET(line_member), AGS_TYPE_LINE); audio = AGS_AUDIO(line->channel->audio); machine = AGS_MACHINE(audio->machine); audio_port = NULL; channel_port = NULL; recall_audio_port = NULL; recall_channel_port = NULL; /* search channels */ channel = line->channel; recall = channel->play; channel_port = ags_line_member_find_specifier(recall); recall = channel->recall; recall_channel_port = ags_line_member_find_specifier(recall); /* search audio */ if(channel_port == NULL){ recall = audio->play; audio_port = ags_line_member_find_specifier(recall); recall = audio->recall; recall_audio_port = ags_line_member_find_specifier(recall); } if(channel_port != NULL){ g_object_set(G_OBJECT(line_member), "port\0", channel_port, NULL); g_object_set(G_OBJECT(line_member), "recall-port\0", recall_channel_port, NULL); }else if(audio_port != NULL){ g_object_set(G_OBJECT(line_member), "port\0", audio_port, NULL); g_object_set(G_OBJECT(line_member), "recall-port\0", recall_audio_port, NULL); } } /** * ags_line_member_new: * * Creates an #AgsLineMember * * Returns: a new #AgsLineMember * * Since: 0.4 */ AgsLineMember* ags_line_member_new() { AgsLineMember *line_member; line_member = (AgsLineMember *) g_object_new(AGS_TYPE_LINE_MEMBER, NULL); return(line_member); } gsequencer-0.6.37/src/ags/X/ags_audio_preferences_callbacks.c0000644000175000017500000001756712626272146021150 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include extern pthread_mutex_t ags_application_mutex; int ags_audio_preferences_parent_set_callback(GtkWidget *widget, GtkObject *old_parent, AgsAudioPreferences *audio_preferences) { GtkListStore *model; GtkTreeIter iter; GList *card_id, *card_name; if(old_parent != NULL) return(0); /* refresh */ ags_devout_list_cards(&card_id, &card_name); model = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_STRING); while(card_id != NULL){ gtk_list_store_append(model, &iter); gtk_list_store_set(model, &iter, 0, card_id->data, 1, card_name->data, -1); card_id = card_id->next; card_name = card_name->next; } gtk_combo_box_set_model(audio_preferences->card, GTK_TREE_MODEL(model)); g_list_free(card_id); g_list_free(card_name); return(0); } void ags_audio_preferences_card_changed_callback(GtkComboBox *combo, AgsAudioPreferences *audio_preferences) { AgsWindow *window; AgsDevout *devout; AgsSetOutputDevice *set_output_device; GtkListStore *model; GtkTreeIter current; AgsAudioLoop *audio_loop; AgsTaskThread *task_thread; AgsMain *ags_main; gchar *str; guint channels, channels_min, channels_max; guint rate, rate_min, rate_max; guint buffer_size, buffer_size_min, buffer_size_max; GValue value = {0,}; GError *error; window = AGS_WINDOW(AGS_PREFERENCES(gtk_widget_get_ancestor(GTK_WIDGET(audio_preferences), AGS_TYPE_PREFERENCES))->window); devout = AGS_DEVOUT(window->devout); ags_main = window->ags_main; /* get audio loop */ pthread_mutex_lock(&(ags_application_mutex)); audio_loop = ags_main->main_loop; pthread_mutex_unlock(&(ags_application_mutex)); /* get task and devout thread */ task_thread = (AgsTaskThread *) ags_thread_find_type(audio_loop, AGS_TYPE_TASK_THREAD); /* */ model = gtk_combo_box_get_model(audio_preferences->card); if(!gtk_combo_box_get_active_iter(audio_preferences->card, ¤t)){ return; } gtk_tree_model_get_value(model, ¤t, 0, &value); str = g_strdup(g_value_get_string(&value)); /* create set output device task */ set_output_device = ags_set_output_device_new((GObject *) devout, str); /* append AgsSetOutputDevice */ ags_task_thread_append_task(task_thread, AGS_TASK(set_output_device)); /* reset dialog */ error = NULL; ags_devout_pcm_info(str, &channels_min, &channels_max, &rate_min, &rate_max, &buffer_size_min, &buffer_size_max, &error); if(error != NULL){ GtkMessageDialog *dialog; dialog = (GtkMessageDialog *) gtk_message_dialog_new((GtkWindow *) gtk_widget_get_ancestor(GTK_WIDGET(audio_preferences), AGS_TYPE_PREFERENCES), GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, "%s\0", error->message); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(GTK_WIDGET(dialog)); gtk_spin_button_set_range(audio_preferences->audio_channels, 0.0, 24.0); gtk_spin_button_set_range(audio_preferences->samplerate, 1.0, 192000.0); gtk_spin_button_set_range(audio_preferences->buffer_size, 1.0, 65535.0); return; } gtk_spin_button_set_range(audio_preferences->audio_channels, channels_min, channels_max); gtk_spin_button_set_range(audio_preferences->samplerate, rate_min, rate_max); gtk_spin_button_set_range(audio_preferences->buffer_size, buffer_size_min, buffer_size_max); } void ags_audio_preferences_audio_channels_changed(GtkSpinButton *spin_button, AgsAudioPreferences *audio_preferences) { AgsWindow *window; AgsDevout *devout; AgsSetAudioChannels *set_audio_channels; AgsAudioLoop *audio_loop; AgsTaskThread *task_thread; AgsMain *ags_main; window = AGS_WINDOW(AGS_PREFERENCES(gtk_widget_get_ancestor(GTK_WIDGET(audio_preferences), AGS_TYPE_PREFERENCES))->window); devout = AGS_DEVOUT(window->devout); ags_main = window->ags_main; /* get audio loop */ pthread_mutex_lock(&(ags_application_mutex)); audio_loop = ags_main->main_loop; pthread_mutex_unlock(&(ags_application_mutex)); /* get task and devout thread */ task_thread = (AgsTaskThread *) ags_thread_find_type(audio_loop, AGS_TYPE_TASK_THREAD); /* create set output device task */ set_audio_channels = ags_set_audio_channels_new(devout, (guint) gtk_spin_button_get_value(spin_button)); /* append AgsSetAudioChannels */ ags_task_thread_append_task(task_thread, AGS_TASK(set_audio_channels)); } void ags_audio_preferences_samplerate_changed(GtkSpinButton *spin_button, AgsAudioPreferences *audio_preferences) { AgsWindow *window; AgsDevout *devout; AgsSetSamplerate *set_samplerate; AgsAudioLoop *audio_loop; AgsTaskThread *task_thread; AgsMain *ags_main; window = AGS_WINDOW(AGS_PREFERENCES(gtk_widget_get_ancestor(GTK_WIDGET(audio_preferences), AGS_TYPE_PREFERENCES))->window); devout = AGS_DEVOUT(window->devout); ags_main = window->ags_main; /* get audio loop */ pthread_mutex_lock(&(ags_application_mutex)); audio_loop = ags_main->main_loop; pthread_mutex_unlock(&(ags_application_mutex)); /* get task and devout thread */ task_thread = (AgsTaskThread *) ags_thread_find_type(audio_loop, AGS_TYPE_TASK_THREAD); /* create set output device task */ set_samplerate = ags_set_samplerate_new((GObject *) devout, (guint) gtk_spin_button_get_value(spin_button)); /* append AgsSetSamplerate */ ags_task_thread_append_task(task_thread, AGS_TASK(set_samplerate)); } void ags_audio_preferences_buffer_size_changed(GtkSpinButton *spin_button, AgsAudioPreferences *audio_preferences) { AgsWindow *window; AgsDevout *devout; AgsSetBufferSize *set_buffer_size; AgsAudioLoop *audio_loop; AgsTaskThread *task_thread; AgsMain *ags_main; window = AGS_WINDOW(AGS_PREFERENCES(gtk_widget_get_ancestor(GTK_WIDGET(audio_preferences), AGS_TYPE_PREFERENCES))->window); devout = AGS_DEVOUT(window->devout); ags_main = window->ags_main; /* get audio loop */ pthread_mutex_lock(&(ags_application_mutex)); audio_loop = ags_main->main_loop; pthread_mutex_unlock(&(ags_application_mutex)); /* get task and devout thread */ task_thread = (AgsTaskThread *) ags_thread_find_type(audio_loop, AGS_TYPE_TASK_THREAD); /* create set output device task */ set_buffer_size = ags_set_buffer_size_new((GObject *) devout, (guint) gtk_spin_button_get_value(spin_button)); /* append AgsSetBufferSize */ ags_task_thread_append_task(task_thread, AGS_TASK(set_buffer_size)); } gsequencer-0.6.37/src/ags/X/ags_audio_preferences.c0000644000175000017500000003354612626272146017144 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include void ags_audio_preferences_class_init(AgsAudioPreferencesClass *audio_preferences); void ags_audio_preferences_connectable_interface_init(AgsConnectableInterface *connectable); void ags_audio_preferences_applicable_interface_init(AgsApplicableInterface *applicable); void ags_audio_preferences_init(AgsAudioPreferences *audio_preferences); void ags_audio_preferences_connect(AgsConnectable *connectable); void ags_audio_preferences_disconnect(AgsConnectable *connectable); void ags_audio_preferences_set_update(AgsApplicable *applicable, gboolean update); void ags_audio_preferences_apply(AgsApplicable *applicable); void ags_audio_preferences_reset(AgsApplicable *applicable); static void ags_audio_preferences_finalize(GObject *gobject); void ags_audio_preferences_show(GtkWidget *widget); /** * SECTION:ags_audio_preferences * @short_description: A composite widget to do audio related preferences * @title: AgsAudioPreferences * @section_id: * @include: ags/X/ags_audio_preferences.h * * #AgsAudioPreferences enables you to make preferences of soundcard, audio channels, * samplerate and buffer size. */ static gpointer ags_audio_preferences_parent_class = NULL; GType ags_audio_preferences_get_type(void) { static GType ags_type_audio_preferences = 0; if(!ags_type_audio_preferences){ static const GTypeInfo ags_audio_preferences_info = { sizeof (AgsAudioPreferencesClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_audio_preferences_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsAudioPreferences), 0, /* n_preallocs */ (GInstanceInitFunc) ags_audio_preferences_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_audio_preferences_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_applicable_interface_info = { (GInterfaceInitFunc) ags_audio_preferences_applicable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_audio_preferences = g_type_register_static(GTK_TYPE_VBOX, "AgsAudioPreferences\0", &ags_audio_preferences_info, 0); g_type_add_interface_static(ags_type_audio_preferences, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_audio_preferences, AGS_TYPE_APPLICABLE, &ags_applicable_interface_info); } return(ags_type_audio_preferences); } void ags_audio_preferences_class_init(AgsAudioPreferencesClass *audio_preferences) { GObjectClass *gobject; GtkWidgetClass *widget; ags_audio_preferences_parent_class = g_type_class_peek_parent(audio_preferences); /* GtkObjectClass */ gobject = (GObjectClass *) audio_preferences; gobject->finalize = ags_audio_preferences_finalize; /* GtkWidgetClass */ widget = (GtkWidgetClass *) audio_preferences; widget->show = ags_audio_preferences_show; } void ags_audio_preferences_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->is_ready = NULL; connectable->is_connected = NULL; connectable->connect = ags_audio_preferences_connect; connectable->disconnect = ags_audio_preferences_disconnect; } void ags_audio_preferences_applicable_interface_init(AgsApplicableInterface *applicable) { applicable->set_update = ags_audio_preferences_set_update; applicable->apply = ags_audio_preferences_apply; applicable->reset = ags_audio_preferences_reset; } void ags_audio_preferences_init(AgsAudioPreferences *audio_preferences) { GtkTable *table; GtkLabel *label; GtkCellRenderer *cell_renderer; g_signal_connect_after((GObject *) audio_preferences, "parent_set\0", G_CALLBACK(ags_audio_preferences_parent_set_callback), (gpointer) audio_preferences); table = (GtkTable *) gtk_table_new(2, 4, FALSE); gtk_box_pack_start(GTK_BOX(audio_preferences), GTK_WIDGET(table), FALSE, FALSE, 2); /* sound card */ label = (GtkLabel *) g_object_new(GTK_TYPE_LABEL, "label\0", "sound card\0", "xalign\0", 0.0, NULL); gtk_table_attach(table, GTK_WIDGET(label), 0, 1, 0, 1, GTK_FILL, GTK_FILL, 0, 0); audio_preferences->card = (GtkComboBox *) gtk_combo_box_new(); gtk_table_attach(table, GTK_WIDGET(audio_preferences->card), 1, 2, 0, 1, GTK_FILL, GTK_FILL, 0, 0); cell_renderer = gtk_cell_renderer_text_new(); gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(audio_preferences->card), cell_renderer, FALSE); gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(audio_preferences->card), cell_renderer, "text\0", 1, NULL); gtk_combo_box_set_active(audio_preferences->card, 0); /* audio channels */ label = (GtkLabel *) g_object_new(GTK_TYPE_LABEL, "label\0", "audio channels\0", "xalign\0", 0.0, NULL); gtk_table_attach(table, GTK_WIDGET(label), 0, 1, 1, 2, GTK_FILL, GTK_FILL, 0, 0); audio_preferences->audio_channels = (GtkSpinButton *) gtk_spin_button_new_with_range(1.0, 24.0, 1.0); gtk_spin_button_set_value(audio_preferences->audio_channels, 2); gtk_table_attach(table, GTK_WIDGET(audio_preferences->audio_channels), 1, 2, 1, 2, GTK_FILL, GTK_FILL, 0, 0); /* samplerate */ label = (GtkLabel *) g_object_new(GTK_TYPE_LABEL, "label\0", "samplerate\0", "xalign\0", 0.0, NULL); gtk_table_attach(table, GTK_WIDGET(label), 0, 1, 2, 3, GTK_FILL, GTK_FILL, 0, 0); audio_preferences->samplerate = (GtkSpinButton *) gtk_spin_button_new_with_range(1.0, 192000.0, 1.0); gtk_spin_button_set_value(audio_preferences->samplerate, 44100); gtk_table_attach(table, GTK_WIDGET(audio_preferences->samplerate), 1, 2, 2, 3, GTK_FILL, GTK_FILL, 0, 0); /* buffer size */ label = (GtkLabel *) g_object_new(GTK_TYPE_LABEL, "label\0", "buffer size\0", "xalign\0", 0.0, NULL); gtk_table_attach(table, GTK_WIDGET(label), 0, 1, 3, 4, GTK_FILL, GTK_FILL, 0, 0); audio_preferences->buffer_size = (GtkSpinButton *) gtk_spin_button_new_with_range(1.0, 65535.0, 1.0); gtk_spin_button_set_value(audio_preferences->buffer_size, 512); gtk_table_attach(table, GTK_WIDGET(audio_preferences->buffer_size), 1, 2, 3, 4, GTK_FILL, GTK_FILL, 0, 0); } void ags_audio_preferences_connect(AgsConnectable *connectable) { AgsAudioPreferences *audio_preferences; audio_preferences = AGS_AUDIO_PREFERENCES(connectable); g_signal_connect(G_OBJECT(audio_preferences->card), "changed\0", G_CALLBACK(ags_audio_preferences_card_changed_callback), audio_preferences); } void ags_audio_preferences_disconnect(AgsConnectable *connectable) { /* empty */ } static void ags_audio_preferences_finalize(GObject *gobject) { //TODO:JK: implement me } void ags_audio_preferences_set_update(AgsApplicable *applicable, gboolean update) { //TODO:JK: implement me } void ags_audio_preferences_apply(AgsApplicable *applicable) { AgsPreferences *preferences; AgsAudioPreferences *audio_preferences; AgsConfig *config; GList *card_id, *card_name; GtkListStore *model; GtkTreeIter current; GValue value = {0,}; char *device, *str; int card_num; guint channels, channels_min, channels_max; guint rate, rate_min, rate_max; guint buffer_size, buffer_size_min, buffer_size_max; audio_preferences = AGS_AUDIO_PREFERENCES(applicable); preferences = (AgsPreferences *) gtk_widget_get_ancestor(GTK_WIDGET(audio_preferences), AGS_TYPE_PREFERENCES); config = AGS_CONFIG(AGS_MAIN(AGS_WINDOW(preferences->window)->ags_main)->config); /* device */ model = gtk_combo_box_get_model(audio_preferences->card); if(!(gtk_combo_box_get_active_iter(audio_preferences->card, ¤t))){ return; } gtk_tree_model_get_value(model, ¤t, 0, &value); //FIXME:JK: work-around for alsa-handle str = g_strdup_printf("%s,0", g_value_get_string(&value)); g_message("%s\0", str); ags_config_set(config, AGS_CONFIG_DEVOUT, "alsa-handle\0", str); g_free(str); /* samplerate */ str = g_strdup_printf("%u\0", (guint) gtk_spin_button_get_value(audio_preferences->samplerate)); ags_config_set(config, AGS_CONFIG_DEVOUT, "samplerate\0", str); g_free(str); /* buffer size */ str = g_strdup_printf("%u\0", (guint) gtk_spin_button_get_value(audio_preferences->buffer_size)); ags_config_set(config, AGS_CONFIG_DEVOUT, "buffer-size\0", str); g_free(str); /* dsp channels */ str = g_strdup_printf("%u\0", (guint) gtk_spin_button_get_value(audio_preferences->audio_channels)); ags_config_set(config, AGS_CONFIG_DEVOUT, "dsp-channels\0", str); g_free(str); } void ags_audio_preferences_reset(AgsApplicable *applicable) { AgsWindow *window; AgsPreferences *preferences; AgsConfig *config; AgsAudioPreferences *audio_preferences; AgsDevout *devout; GtkListStore *model; GtkTreeIter current; GList *card_id, *card_name; GValue value = {0,}; char *device, *str, *tmp; guint nth; gboolean found_card; int card_num; guint channels, channels_min, channels_max; guint rate, rate_min, rate_max; guint buffer_size, buffer_size_min, buffer_size_max; GError *error; audio_preferences = AGS_AUDIO_PREFERENCES(applicable); /* */ preferences = (AgsPreferences *) gtk_widget_get_ancestor(GTK_WIDGET(audio_preferences), AGS_TYPE_PREFERENCES); window = AGS_WINDOW(preferences->window); config = AGS_CONFIG(AGS_MAIN(window->ags_main)->config); /* refresh */ ags_devout_list_cards(&card_id, &card_name); str = ags_config_get(config, AGS_CONFIG_DEVOUT, "alsa-handle\0"); g_message("%s\0", str); nth = 0; found_card = FALSE; while(card_id != NULL){ //FIXME:JK: work-around for alsa-handle tmp = g_strdup_printf("%s,0\0", card_id->data); if(!g_ascii_strcasecmp(tmp, str)){ found_card = TRUE; } g_free(tmp); if(!found_card){ nth++; } card_id = card_id->next; card_name = card_name->next; } if(!found_card){ nth = 0; } gtk_combo_box_set_active(audio_preferences->card, nth); g_list_free(card_id); g_list_free(card_name); /* */ devout = window->devout; g_object_get(G_OBJECT(devout), "device\0", &device, "pcm_channels\0", &channels, "frequency\0", &rate, "buffer_size\0", &buffer_size, NULL); /* */ gtk_spin_button_set_value(audio_preferences->audio_channels, (gdouble) channels); gtk_spin_button_set_value(audio_preferences->samplerate, (gdouble) rate); gtk_spin_button_set_value(audio_preferences->buffer_size, (gdouble) buffer_size); /* */ model = gtk_combo_box_get_model(audio_preferences->card); if(!(gtk_combo_box_get_active_iter(audio_preferences->card, ¤t))){ return; } gtk_tree_model_get_value(model, ¤t, 0, &value); str = g_strdup(g_value_get_string(&value)); error = NULL; ags_devout_pcm_info(str, &channels_min, &channels_max, &rate_min, &rate_max, &buffer_size_min, &buffer_size_max, &error); if(error != NULL){ GtkMessageDialog *dialog; dialog = (GtkMessageDialog *) gtk_message_dialog_new((GtkWindow *) gtk_widget_get_ancestor(GTK_WIDGET(audio_preferences), AGS_TYPE_PREFERENCES), GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, "%s\0", error->message); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(GTK_WIDGET(dialog)); gtk_spin_button_set_range(audio_preferences->audio_channels, 0.0, 24.0); gtk_spin_button_set_range(audio_preferences->samplerate, 1.0, 192000.0); gtk_spin_button_set_range(audio_preferences->buffer_size, 1.0, 65535.0); return; } gtk_spin_button_set_range(audio_preferences->audio_channels, channels_min, channels_max); gtk_spin_button_set_range(audio_preferences->samplerate, rate_min, rate_max); gtk_spin_button_set_range(audio_preferences->buffer_size, buffer_size_min, buffer_size_max); } void ags_audio_preferences_show(GtkWidget *widget) { AgsAudioPreferences *audio_preferences; pthread_t thread; audio_preferences = AGS_AUDIO_PREFERENCES(widget); GTK_WIDGET_CLASS(ags_audio_preferences_parent_class)->show(widget); } /** * ags_audio_preferences_new: * * Creates an #AgsAudioPreferences * * Returns: a new #AgsAudioPreferences * * Since: 0.4 */ AgsAudioPreferences* ags_audio_preferences_new() { AgsAudioPreferences *audio_preferences; audio_preferences = (AgsAudioPreferences *) g_object_new(AGS_TYPE_AUDIO_PREFERENCES, NULL); return(audio_preferences); } gsequencer-0.6.37/src/ags/X/ags_property_listing_editor.h0000644000175000017500000000431612621463700020434 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_PROPERTY_LISTING_EDITOR_H__ #define __AGS_PROPERTY_LISTING_EDITOR_H__ #include #include #include #include #define AGS_TYPE_PROPERTY_LISTING_EDITOR (ags_property_listing_editor_get_type()) #define AGS_PROPERTY_LISTING_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_PROPERTY_LISTING_EDITOR, AgsPropertyListingEditor)) #define AGS_PROPERTY_LISTING_EDITOR_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_PROPERTY_LISTING_EDITOR, AgsPropertyListingEditorClass)) #define AGS_IS_PROPERTY_LISTING_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_PROPERTY_LISTING_EDITOR)) #define AGS_IS_PROPERTY_LISTING_EDITOR_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_PROPERTY_LISTING_EDITOR)) #define AGS_PROPERTY_LISTING_EDITOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_PROPERTY_LISTING_EDITOR, AgsPropertyListingEditorClass)) typedef struct _AgsPropertyListingEditor AgsPropertyListingEditor; typedef struct _AgsPropertyListingEditorClass AgsPropertyListingEditorClass; struct _AgsPropertyListingEditor { AgsPropertyEditor property_editor; GtkVBox *child; }; struct _AgsPropertyListingEditorClass { AgsPropertyEditorClass property_editor; }; GType ags_property_listing_editor_get_type(); AgsPropertyListingEditor* ags_property_listing_editor_new(); #endif /*__AGS_PROPERTY_LISTING_EDITOR_H__*/ gsequencer-0.6.37/src/ags/X/ags_editor.c0000644000175000017500000007416012632643745014751 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void ags_editor_class_init(AgsEditorClass *editor); void ags_editor_connectable_interface_init(AgsConnectableInterface *connectable); void ags_editor_init(AgsEditor *editor); void ags_editor_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_editor_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_editor_finalize(GObject *gobject); void ags_editor_connect(AgsConnectable *connectable); void ags_editor_disconnect(AgsConnectable *connectable); void ags_editor_destroy(GtkObject *object); void ags_editor_show(GtkWidget *widget); void ags_editor_real_audio_channels_changed(AgsEditor *editor, guint audio_channels); void ags_editor_real_pads_changed(AgsEditor *editor, guint pads); void ags_editor_real_machine_changed(AgsEditor *editor, AgsMachine *machine); /** * SECTION:ags_editor * @short_description: A composite widget to edit notes * @title: AgsEditor * @section_id: * @include: ags/X/ags_editor.h * * #AgsEditor is a composite widget to edit notes. You may select machines * or change editor tool to do notation. */ enum{ MACHINE_CHANGED, LAST_SIGNAL, }; enum{ PROP_0, PROP_DEVOUT, }; static gpointer ags_editor_parent_class = NULL; static guint editor_signals[LAST_SIGNAL]; extern pthread_mutex_t ags_application_mutex; GType ags_editor_get_type(void) { static GType ags_type_editor = 0; if(!ags_type_editor){ static const GTypeInfo ags_editor_info = { sizeof (AgsEditorClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_editor_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsEditor), 0, /* n_preallocs */ (GInstanceInitFunc) ags_editor_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_editor_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_editor = g_type_register_static(GTK_TYPE_VBOX, "AgsEditor\0", &ags_editor_info, 0); g_type_add_interface_static(ags_type_editor, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return(ags_type_editor); } void ags_editor_class_init(AgsEditorClass *editor) { GObjectClass *gobject; GtkWidgetClass *widget; GParamSpec *param_spec; ags_editor_parent_class = g_type_class_peek_parent(editor); /* GObjectClass */ gobject = (GObjectClass *) editor; gobject->set_property = ags_editor_set_property; gobject->get_property = ags_editor_get_property; gobject->finalize = ags_editor_finalize; /* properties */ /** * AgsEditor:devout: * * The assigned #AgsDevout acting as default sink. * * Since: 0.4 */ param_spec = g_param_spec_object("devout\0", "assigned devout\0", "The devout it is assigned with\0", G_TYPE_OBJECT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_DEVOUT, param_spec); /* AgsEditorClass */ editor->machine_changed = ags_editor_real_machine_changed; /* signals */ /** * AgsEditor::machine-changed: * @editor: the object to change machine. * @machine: the #AgsMachine to set * * The ::machine-changed signal notifies about changed machine. */ editor_signals[MACHINE_CHANGED] = g_signal_new("machine-changed\0", G_TYPE_FROM_CLASS (editor), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AgsEditorClass, machine_changed), NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, G_TYPE_OBJECT); } void ags_editor_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->is_ready = NULL; connectable->is_connected = NULL; connectable->connect = ags_editor_connect; connectable->disconnect = ags_editor_disconnect; } void ags_editor_init(AgsEditor *editor) { GtkHPaned *paned; GtkScrolledWindow *scrolled_window; g_signal_connect_after((GObject *) editor, "parent-set\0", G_CALLBACK(ags_editor_parent_set_callback), editor); editor->flags = 0; editor->version = AGS_EDITOR_DEFAULT_VERSION; editor->build_id = AGS_EDITOR_DEFAULT_BUILD_ID; editor->devout = NULL; editor->toolbar = ags_toolbar_new(); gtk_box_pack_start((GtkBox *) editor, (GtkWidget *) editor->toolbar, FALSE, FALSE, 0); paned = (GtkHPaned *) gtk_hpaned_new(); gtk_box_pack_start((GtkBox *) editor, (GtkWidget *) paned, TRUE, TRUE, 0); scrolled_window = (GtkScrolledWindow *) gtk_scrolled_window_new(NULL, NULL); gtk_paned_pack1((GtkPaned *) paned, (GtkWidget *) scrolled_window, FALSE, TRUE); // gtk_widget_set_size_request((GtkWidget *) scrolled_window, 180, -1); editor->machine_selector = g_object_new(AGS_TYPE_MACHINE_SELECTOR, "homogeneous\0", FALSE, "spacing\0", 0, NULL); gtk_scrolled_window_add_with_viewport(scrolled_window, (GtkWidget *) editor->machine_selector); editor->selected_machine = NULL; editor->editor_child = NULL; editor->table = (GtkTable *) gtk_table_new(4, 3, FALSE); gtk_paned_pack2((GtkPaned *) paned, (GtkWidget *) editor->table, TRUE, FALSE); editor->current_notebook = NULL; editor->current_meter = NULL; editor->current_edit_widget = NULL; editor->tact_counter = 0; editor->current_tact = 0.0; } void ags_editor_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsEditor *editor; editor = AGS_EDITOR(gobject); switch(prop_id){ case PROP_DEVOUT: { AgsDevout *devout; devout = (AgsDevout *) g_value_get_object(value); if(editor->devout == devout) return; if(devout != NULL) g_object_ref(devout); editor->devout = devout; } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_editor_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsEditor *editor; editor = AGS_EDITOR(gobject); switch(prop_id){ case PROP_DEVOUT: g_value_set_object(value, editor->devout); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_editor_finalize(GObject *gobject) { //TODO:JK: implement me } void ags_editor_connect(AgsConnectable *connectable) { AgsWindow *window; AgsEditor *editor; GtkHPaned *hpaned; editor = AGS_EDITOR(connectable); window = AGS_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(editor))); /* */ g_signal_connect(window->devout, "tic\0", ags_editor_tic_callback, editor); g_signal_connect((GObject *) editor->machine_selector, "changed\0", G_CALLBACK(ags_editor_machine_changed_callback), (gpointer) editor); /* */ ags_connectable_connect(AGS_CONNECTABLE(editor->toolbar)); ags_connectable_connect(AGS_CONNECTABLE(editor->machine_selector)); } void ags_editor_disconnect(AgsConnectable *connectable) { //TODO:JK: implement me } AgsEditorChild* ags_editor_child_alloc(AgsMachine *machine, AgsNotebook *notebook, AgsMeter *meter, GtkWidget *edit_widget) { AgsEditorChild *editor_child; editor_child = (AgsEditorChild *) malloc(sizeof(AgsEditorChild)); editor_child->machine = machine; editor_child->notebook = notebook; editor_child->meter = meter; editor_child->edit_widget = edit_widget; return(editor_child); } void ags_editor_real_machine_changed(AgsEditor *editor, AgsMachine *machine) { AgsMachine *machine_old; GList *list, *list_start; GList *child; guint pads; guint i; if(editor->selected_machine == machine){ return; } machine_old = editor->selected_machine; editor->selected_machine = machine; child = editor->editor_child; while(child != NULL){ if(AGS_EDITOR_CHILD(child->data) == machine){ break; } child = child->next; } if(editor->current_notebook != NULL){ gtk_widget_hide(editor->current_notebook); gtk_widget_hide(editor->current_meter); gtk_widget_hide(editor->current_edit_widget); } editor->current_notebook = NULL; editor->current_meter = NULL; editor->current_edit_widget = NULL; /* instantiate note edit or pattern edit */ list_start = list = gtk_container_get_children(editor->machine_selector->popup); list = g_list_nth(list, 3); if(machine == NULL){ gtk_check_menu_item_set_active(list->data, FALSE); g_list_free(list_start); return; } gtk_check_menu_item_set_active(list->data, ((AGS_AUDIO_REVERSE_MAPPING & (machine->audio->flags)) ? TRUE: FALSE)); g_list_free(list_start); if(child == NULL){ AgsEditorChild *editor_child; guint y; y = 2 * g_list_length(editor->editor_child); editor_child = ags_editor_child_alloc(machine, NULL, NULL, NULL); editor->editor_child = g_list_prepend(editor->editor_child, editor_child); editor_child->notebook = editor->current_notebook = g_object_new(AGS_TYPE_NOTEBOOK, "homogeneous\0", FALSE, "spacing\0", 0, NULL); g_object_ref(editor_child->notebook); gtk_table_attach(editor->table, (GtkWidget *) editor_child->notebook, 0, 3, y, y + 1, GTK_FILL|GTK_EXPAND, GTK_FILL, 0, 0); for(i = 0; i < machine->audio->audio_channels; i++){ ags_notebook_insert_tab(editor_child->notebook, i); AGS_NOTEBOOK_TAB(editor_child->notebook->tabs->data)->notation = g_list_nth(machine->audio->notation, i); gtk_toggle_button_set_active(AGS_NOTEBOOK_TAB(editor_child->notebook->tabs->data)->toggle, TRUE); } gtk_widget_show_all(editor_child->notebook); pads = machine->audio->input_pads; editor_child->meter = editor->current_meter = ags_meter_new(); g_object_ref(editor_child->meter); gtk_table_attach(editor->table, (GtkWidget *) editor_child->meter, 0, 1, y + 1, y + 2, GTK_FILL, GTK_FILL, 0, 0); ags_connectable_connect(AGS_CONNECTABLE(editor_child->meter)); gtk_widget_show_all(editor_child->meter); if((AGS_MACHINE_IS_SYNTHESIZER & (machine->flags)) != 0){ editor_child->edit_widget = editor->current_edit_widget = ags_note_edit_new(); g_object_ref(editor_child->edit_widget); gtk_table_attach(editor->table, (GtkWidget *) editor_child->edit_widget, 1, 2, y + 1, y + 2, GTK_FILL|GTK_EXPAND, GTK_FILL|GTK_EXPAND, 0, 0); ags_connectable_connect(AGS_CONNECTABLE(editor_child->edit_widget)); gtk_widget_show_all(editor_child->edit_widget); ags_note_edit_set_map_height(editor_child->edit_widget, pads * AGS_NOTE_EDIT(editor_child->edit_widget)->control_height); }else if((AGS_MACHINE_IS_SEQUENCER & (machine->flags)) != 0){ editor_child->edit_widget = editor->current_edit_widget = ags_pattern_edit_new(); g_object_ref(editor_child->edit_widget); gtk_table_attach(editor->table, (GtkWidget *) editor_child->edit_widget, 1, 2, y + 1, y + 2, GTK_FILL|GTK_EXPAND, GTK_FILL|GTK_EXPAND, 0, 0); ags_connectable_connect(AGS_CONNECTABLE(editor_child->edit_widget)); gtk_widget_show_all(editor_child->edit_widget); ags_pattern_edit_set_map_height(editor_child->edit_widget, pads * AGS_PATTERN_EDIT(editor_child->edit_widget)->control_height); } }else{ AgsEditorChild *editor_child; editor_child = child->data; gtk_table_attach(editor->table, (GtkWidget *) editor_child->notebook, 0, 3, 0, 1, GTK_FILL|GTK_EXPAND, GTK_FILL, 0, 0); gtk_table_attach(editor->table, (GtkWidget *) editor_child->meter, 0, 1, 1, 2, GTK_FILL, GTK_FILL, 0, 0); gtk_table_attach(editor->table, (GtkWidget *) editor_child->edit_widget, 1, 2, 1, 2, GTK_FILL|GTK_EXPAND, GTK_FILL|GTK_EXPAND, 0, 0); } } /** * ags_editor_machine_changed: * @editor: an #AgsEditor * @machine: the new #AgsMachine * * Is emitted as machine changed of editor. * * Since: 0.4 */ void ags_editor_machine_changed(AgsEditor *editor, AgsMachine *machine) { g_return_if_fail(AGS_IS_EDITOR(editor)); g_object_ref((GObject *) editor); g_signal_emit((GObject *) editor, editor_signals[MACHINE_CHANGED], 0, machine); g_object_unref((GObject *) editor); } /** * ags_editor_select_all: * @editor: an #AgsEditor * * Is emitted as machine changed of editor. * * Since: 0.4.2 */ void ags_editor_select_all(AgsEditor *editor) { AgsMachine *machine; cairo_t *cr; GList *list_notation; gint i; if(editor->selected_machine != NULL && editor->current_edit_widget != NULL){ AgsMutexManager *mutex_manager; pthread_mutex_t *audio_mutex; pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) editor->selected_machine->audio); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(audio_mutex); machine = editor->selected_machine; list_notation = machine->audio->notation; i = 0; while((i = ags_notebook_next_active_tab(editor->current_notebook, i)) != -1){ list_notation = g_list_nth(machine->audio->notation, i); ags_notation_add_all_to_selection(AGS_NOTATION(list_notation->data)); i++; } pthread_mutex_unlock(audio_mutex); if(AGS_IS_NOTE_EDIT(editor->current_edit_widget)){ cr = gdk_cairo_create(GTK_WIDGET(AGS_NOTE_EDIT(editor->current_edit_widget)->drawing_area)->window); cairo_push_group(cr); ags_note_edit_draw_segment(editor->current_edit_widget, cr); ags_note_edit_draw_notation(editor->current_edit_widget, cr); cairo_pop_group_to_source(cr); cairo_paint(cr); }else if(AGS_IS_PATTERN_EDIT(editor->current_edit_widget)){ cr = gdk_cairo_create(GTK_WIDGET(AGS_PATTERN_EDIT(editor->current_edit_widget)->drawing_area)->window); cairo_push_group(cr); ags_pattern_edit_draw_segment(editor->current_edit_widget, cr); ags_pattern_edit_draw_notation(editor->current_edit_widget, cr); cairo_pop_group_to_source(cr); cairo_paint(cr); } } } /** * ags_editor_paste: * @editor: an #AgsEditor * * Is emitted as machine changed of editor. * * Since: 0.4.2 */ void ags_editor_paste(AgsEditor *editor) { AgsMachine *machine; AgsNotation *notation; xmlDocPtr clipboard; xmlNodePtr audio_node, notation_node; cairo_t *cr; gchar *buffer; guint position_x, position_y; gint first_x, last_x; gboolean paste_from_position; auto gint ags_editor_paste_read_notation(); gint ags_editor_paste_read_notation(){ xmlXPathContextPtr xpathCtxt; xmlXPathObjectPtr xpathObj; xmlNodeSetPtr nodes; GList *notation_list; guint first_x; xpathCtxt = xmlXPathNewContext(clipboard); xpathObj = xmlXPathEvalExpression("/audio/notation\0", xpathCtxt); first_x = -1; if(xpathObj != NULL){ int i, j, size; guint audio_channel; guint current_x; nodes = xpathObj->nodesetval; size = (nodes != NULL) ? nodes->nodeNr: 0; j = 0; for(i = 0; i < size; i++){ j = ags_notebook_next_active_tab(editor->current_notebook, j); if(j == -1){ break; } // audio_channel = (guint) g_ascii_strtoull(xmlGetProp(nodes->nodeTab[i], // "audio-channel\0"), // NULL, // 10); notation_list = g_list_nth(machine->audio->notation, j); j++; if(notation_list == NULL){ break; } if(paste_from_position){ xmlNode *child; guint x_boundary; ags_notation_insert_from_clipboard(AGS_NOTATION(notation_list->data), nodes->nodeTab[i], TRUE, position_x, TRUE, position_y); child = nodes->nodeTab[i]->children; current_x = 0; while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(child->name, "note\0", 5)){ guint tmp; tmp = g_ascii_strtoull(xmlGetProp(child, "x1\0"), NULL, 10); if(tmp > current_x){ current_x = tmp; } } } child = child->next; } x_boundary = g_ascii_strtoull(xmlGetProp(nodes->nodeTab[i], "x_boundary\0"), NULL, 10); if(first_x == -1 || x_boundary < first_x){ first_x = x_boundary; } if(position_x > x_boundary){ current_x += (position_x - x_boundary); }else{ current_x -= (x_boundary - position_x); } if(current_x > last_x){ last_x = current_x; } }else{ xmlNode *child; ags_notation_insert_from_clipboard(AGS_NOTATION(notation_list->data), nodes->nodeTab[i], FALSE, 0, FALSE, 0); child = nodes->nodeTab[i]->children; current_x = 0; while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(child->name, "note\0", 5)){ guint tmp; tmp = g_ascii_strtoull(xmlGetProp(child, "x1\0"), NULL, 10); if(tmp > current_x){ current_x = tmp; } } } child = child->next; } if(current_x > last_x){ last_x = current_x; } } } xmlXPathFreeObject(xpathObj); } return(first_x); } if((machine = editor->selected_machine) != NULL && editor->current_edit_widget != NULL){ AgsMutexManager *mutex_manager; pthread_mutex_t *audio_mutex; pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) editor->selected_machine->audio); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(audio_mutex); /* get clipboard */ buffer = gtk_clipboard_wait_for_text(gtk_clipboard_get(GDK_SELECTION_CLIPBOARD)); if(buffer == NULL){ pthread_mutex_unlock(audio_mutex); return; } /* get position */ if(editor->toolbar->selected_edit_mode == editor->toolbar->position){ last_x = 0; paste_from_position = TRUE; if(AGS_IS_NOTE_EDIT(editor->current_edit_widget)){ position_x = AGS_NOTE_EDIT(editor->current_edit_widget)->selected_x; position_y = AGS_NOTE_EDIT(editor->current_edit_widget)->selected_y; }else if(AGS_IS_PATTERN_EDIT(editor->current_edit_widget)){ position_x = AGS_PATTERN_EDIT(editor->current_edit_widget)->selected_x; position_y = AGS_PATTERN_EDIT(editor->current_edit_widget)->selected_y; } #ifdef DEBUG printf("pasting at position: [%u,%u]\n\0", position_x, position_y); #endif }else{ paste_from_position = FALSE; } /* get xml tree */ clipboard = xmlReadMemory(buffer, strlen(buffer), NULL, "UTF-8\0", 0); audio_node = xmlDocGetRootElement(clipboard); first_x = -1; /* iterate xml tree */ while(audio_node != NULL){ if(audio_node->type == XML_ELEMENT_NODE && !xmlStrncmp("audio\0", audio_node->name, 6)){ notation_node = audio_node->children; first_x = ags_editor_paste_read_notation(); break; } audio_node = audio_node->next; } if(first_x == -1){ first_x = 0; } xmlFreeDoc(clipboard); pthread_mutex_unlock(audio_mutex); if(AGS_IS_NOTE_EDIT(editor->current_edit_widget)){ cr = gdk_cairo_create(GTK_WIDGET(AGS_NOTE_EDIT(editor->current_edit_widget)->drawing_area)->window); cairo_push_group(cr); ags_note_edit_draw_segment(editor->current_edit_widget, cr); ags_note_edit_draw_notation(editor->current_edit_widget, cr); if(paste_from_position){ gint big_step, small_step; big_step = (guint) ceil((double) last_x * AGS_NOTATION_MINIMUM_NOTE_LENGTH) / AGS_NOTATION_MINIMUM_NOTE_LENGTH + (AGS_NOTE_EDIT(editor->current_edit_widget)->selected_x % (guint) (1 / AGS_NOTATION_MINIMUM_NOTE_LENGTH)); small_step = (guint) big_step - (1 / AGS_NOTATION_MINIMUM_NOTE_LENGTH); if(small_step < last_x){ AGS_NOTE_EDIT(editor->current_edit_widget)->selected_x = big_step; }else{ AGS_NOTE_EDIT(editor->current_edit_widget)->selected_x = small_step; } ags_note_edit_draw_position(AGS_NOTE_EDIT(editor->current_edit_widget), cr); } cairo_pop_group_to_source(cr); cairo_paint(cr); }else if(AGS_IS_PATTERN_EDIT(editor->current_edit_widget)){ cr = gdk_cairo_create(GTK_WIDGET(AGS_PATTERN_EDIT(editor->current_edit_widget)->drawing_area)->window); cairo_push_group(cr); ags_pattern_edit_draw_segment(editor->current_edit_widget, cr); ags_pattern_edit_draw_notation(editor->current_edit_widget, cr); if(paste_from_position){ gint big_step, small_step; big_step = (guint) ceil((double) last_x * AGS_NOTATION_MINIMUM_NOTE_LENGTH) / AGS_NOTATION_MINIMUM_NOTE_LENGTH + (AGS_PATTERN_EDIT(editor->current_edit_widget)->selected_x % (guint) (1 / AGS_NOTATION_MINIMUM_NOTE_LENGTH)); small_step = (guint) big_step - (1 / AGS_NOTATION_MINIMUM_NOTE_LENGTH); if(small_step < last_x){ AGS_PATTERN_EDIT(editor->current_edit_widget)->selected_x = big_step; }else{ AGS_PATTERN_EDIT(editor->current_edit_widget)->selected_x = small_step; } ags_pattern_edit_draw_position(AGS_PATTERN_EDIT(editor->current_edit_widget), cr); } cairo_pop_group_to_source(cr); cairo_paint(cr); } } } /** * ags_editor_copy: * @editor: an #AgsEditor * * Is emitted as machine changed of editor. * * Since: 0.4.2 */ void ags_editor_copy(AgsEditor *editor) { AgsMachine *machine; AgsNotation *notation; GList *list_notation; xmlDocPtr clipboard; xmlNodePtr audio_node, notation_node; xmlChar *buffer; int size; gint i; if(editor->selected_machine != NULL && editor->current_edit_widget != NULL){ AgsMutexManager *mutex_manager; pthread_mutex_t *audio_mutex; machine = editor->selected_machine; pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) machine->audio); pthread_mutex_unlock(&(ags_application_mutex)); /* create document */ clipboard = xmlNewDoc(BAD_CAST XML_DEFAULT_VERSION); /* create root node */ audio_node = xmlNewNode(NULL, BAD_CAST "audio\0"); xmlDocSetRootElement(clipboard, audio_node); /* create notation nodes */ list_notation = machine->audio->notation; i = 0; while((i = ags_notebook_next_active_tab(editor->current_notebook, i)) != -1){ pthread_mutex_lock(audio_mutex); list_notation = g_list_nth(machine->audio->notation, i); notation_node = ags_notation_copy_selection(AGS_NOTATION(list_notation->data)); pthread_mutex_unlock(audio_mutex); xmlAddChild(audio_node, notation_node); i++; } /* write to clipboard */ xmlDocDumpFormatMemoryEnc(clipboard, &buffer, &size, "UTF-8\0", TRUE); gtk_clipboard_set_text(gtk_clipboard_get(GDK_SELECTION_CLIPBOARD), buffer, size); gtk_clipboard_store(gtk_clipboard_get(GDK_SELECTION_CLIPBOARD)); // xmlFreeDoc(clipboard); } } /** * ags_editor_cut: * @editor: an #AgsEditor * * Is emitted as machine changed of editor. * * Since: 0.4.2 */ void ags_editor_cut(AgsEditor *editor) { AgsMachine *machine; AgsNotation *notation; xmlDocPtr clipboard; xmlNodePtr audio_node, notation_node; cairo_t *cr; GList *list_notation; xmlChar *buffer; int size; gint i; if(editor->selected_machine != NULL && editor->current_edit_widget != NULL){ AgsMutexManager *mutex_manager; pthread_mutex_t *audio_mutex; machine = editor->selected_machine; pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) machine->audio); pthread_mutex_unlock(&(ags_application_mutex)); /* create document */ clipboard = xmlNewDoc(BAD_CAST XML_DEFAULT_VERSION); /* create root node */ audio_node = xmlNewNode(NULL, BAD_CAST "audio\0"); xmlDocSetRootElement(clipboard, audio_node); /* create notation nodes */ pthread_mutex_lock(audio_mutex); list_notation = machine->audio->notation; pthread_mutex_unlock(audio_mutex); i = 0; if(AGS_IS_NOTE_EDIT(editor->current_edit_widget)){ cr = gdk_cairo_create(GTK_WIDGET(AGS_NOTE_EDIT(editor->current_edit_widget)->drawing_area)->window); }else if(AGS_IS_PATTERN_EDIT(editor->current_edit_widget)){ cr = gdk_cairo_create(GTK_WIDGET(AGS_PATTERN_EDIT(editor->current_edit_widget)->drawing_area)->window); } cairo_push_group(cr); while((i = ags_notebook_next_active_tab(editor->current_notebook, i)) != -1){ pthread_mutex_lock(audio_mutex); list_notation = g_list_nth(machine->audio->notation, i); notation_node = ags_notation_cut_selection(AGS_NOTATION(list_notation->data)); pthread_mutex_unlock(audio_mutex); xmlAddChild(audio_node, notation_node); if(AGS_IS_NOTE_EDIT(editor->current_edit_widget)){ ags_note_edit_draw_segment(AGS_NOTE_EDIT(editor->current_edit_widget), cr); ags_note_edit_draw_notation(AGS_NOTE_EDIT(editor->current_edit_widget), cr); }else if(AGS_IS_PATTERN_EDIT(editor->current_edit_widget)){ ags_pattern_edit_draw_segment(AGS_PATTERN_EDIT(editor->current_edit_widget), cr); ags_pattern_edit_draw_notation(AGS_PATTERN_EDIT(editor->current_edit_widget), cr); } i++; } cairo_pop_group_to_source(cr); cairo_paint(cr); /* write to clipboard */ xmlDocDumpFormatMemoryEnc(clipboard, &buffer, &size, "UTF-8\0", TRUE); gtk_clipboard_set_text(gtk_clipboard_get(GDK_SELECTION_CLIPBOARD), buffer, size); gtk_clipboard_store(gtk_clipboard_get(GDK_SELECTION_CLIPBOARD)); // xmlFreeDoc(clipboard); } } void ags_editor_invert(AgsEditor *editor) { AgsMachine *machine; AgsNotation *notation; cairo_t *cr; GList *list_notation; int size; gint i; auto void ags_editor_invert_notation(AgsNotation *notation); void ags_editor_invert_notation(AgsNotation *notation){ GList *note; guint lower, upper; note = notation->notes; if(note == NULL){ return; } /* retrieve upper and lower */ upper = 0; lower = G_MAXUINT; while(note != NULL){ if(AGS_NOTE(note->data)->y < lower){ lower = AGS_NOTE(note->data)->y; } if(AGS_NOTE(note->data)->y > upper){ upper = AGS_NOTE(note->data)->y; } note = note->next; } /* invert */ note = notation->notes; while(note != NULL){ if((gdouble) AGS_NOTE(note->data)->y < (gdouble) (upper - lower) / 2.0){ AGS_NOTE(note->data)->y = (upper - (AGS_NOTE(note->data)->y - lower)); }else if((gdouble) AGS_NOTE(note->data)->y > (gdouble) (upper - lower) / 2.0){ AGS_NOTE(note->data)->y = (lower + (upper - AGS_NOTE(note->data)->y)); } note = note->next; } } if(editor->selected_machine != NULL && editor->current_edit_widget != NULL){ AgsMutexManager *mutex_manager; pthread_mutex_t *audio_mutex; pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) editor->selected_machine->audio); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(audio_mutex); machine = editor->selected_machine; /* create notation nodes */ list_notation = machine->audio->notation; i = 0; while((i = ags_notebook_next_active_tab(editor->current_notebook, i)) != -1){ list_notation = g_list_nth(machine->audio->notation, i); ags_editor_invert_notation(AGS_NOTATION(list_notation->data)); i++; } pthread_mutex_unlock(audio_mutex); if(AGS_IS_NOTE_EDIT(editor->current_edit_widget)){ cr = gdk_cairo_create(GTK_WIDGET(AGS_NOTE_EDIT(editor->current_edit_widget)->drawing_area)->window); }else if(AGS_IS_PATTERN_EDIT(editor->current_edit_widget)){ cr = gdk_cairo_create(GTK_WIDGET(AGS_PATTERN_EDIT(editor->current_edit_widget)->drawing_area)->window); } cairo_push_group(cr); if(AGS_IS_NOTE_EDIT(editor->current_edit_widget)){ ags_note_edit_draw_segment(AGS_NOTE_EDIT(editor->current_edit_widget), cr); ags_note_edit_draw_notation(AGS_NOTE_EDIT(editor->current_edit_widget), cr); }else if(AGS_IS_PATTERN_EDIT(editor->current_edit_widget)){ ags_pattern_edit_draw_segment(AGS_PATTERN_EDIT(editor->current_edit_widget), cr); ags_pattern_edit_draw_notation(AGS_PATTERN_EDIT(editor->current_edit_widget), cr); } cairo_pop_group_to_source(cr); cairo_paint(cr); } } /** * ags_editor_new: * * Creates an #AgsEditor * * Returns: a new #AgsEditor * * Since: 0.3 */ AgsEditor* ags_editor_new() { AgsEditor *editor; editor = (AgsEditor *) g_object_new(AGS_TYPE_EDITOR, NULL); return(editor); } gsequencer-0.6.37/src/ags/X/ags_menu_bar.h0000644000175000017500000000363012621463700015237 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_MENU_BAR_H__ #define __AGS_MENU_BAR_H__ #include #define AGS_TYPE_MENU_BAR (ags_menu_bar_get_type ()) #define AGS_MENU_BAR(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_MENU_BAR, AgsMenuBar)) #define AGS_MENU_BAR_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_MENU_BAR, AgsMenuBarClass)) #define AGS_IS_MENU_BAR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_MENU_BAR)) #define AGS_IS_MENU_BAR_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_MENU_BAR)) #define AGS_MENU_BAR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_MENU_BAR, AgsMenuBarClass)) typedef struct _AgsMenuBar AgsMenuBar; typedef struct _AgsMenuBarClass AgsMenuBarClass; struct _AgsMenuBar { GtkMenuBar menu_bar; GtkMenu *file; GtkMenu *edit; GtkMenu *add; GtkMenu *help; }; struct _AgsMenuBarClass { GtkMenuBarClass menu_bar; }; GType ags_menu_bar_get_type(void); AgsMenuBar* ags_menu_bar_new(); GtkMenu* ags_zoom_menu_new(); GtkMenu* ags_tact_menu_new(); GtkComboBox* ags_zoom_combo_box_new(); GtkComboBox* ags_tact_combo_box_new(); #endif /*__AGS_MENU_BAR_H__*/ gsequencer-0.6.37/src/ags/X/ags_window_callbacks.c0000644000175000017500000000505612626272146016763 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include extern pthread_mutex_t ags_application_mutex; gboolean ags_window_delete_event_callback(GtkWidget *widget, gpointer data) { AgsWindow *window; GtkDialog *dialog; GtkWidget *cancel_button; gint response; window = AGS_WINDOW(widget); /* ask the user if he wants save to a file */ dialog = (GtkDialog *) gtk_message_dialog_new(GTK_WINDOW(window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, "Do you want to save '%s'?\0", window->name); cancel_button = gtk_dialog_add_button(dialog, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL); gtk_widget_grab_focus(cancel_button); response = gtk_dialog_run(dialog); if(response == GTK_RESPONSE_YES){ AgsFile *file; AgsSaveFile *save_file; AgsThread *audio_loop; AgsThread *task_thread; AgsMain *ags_main; char *filename; ags_main = window->ags_main; /* get audio loop */ pthread_mutex_lock(&(ags_application_mutex)); audio_loop = ags_main->main_loop; pthread_mutex_unlock(&(ags_application_mutex)); /* get task thread */ task_thread = (AgsTaskThread *) ags_thread_find_type(audio_loop, AGS_TYPE_TASK_THREAD); filename = window->name; file = (AgsFile *) g_object_new(AGS_TYPE_FILE, "main\0", window->ags_main, "filename\0", g_strdup(filename), NULL); save_file = ags_save_file_new(file); ags_task_thread_append_task(task_thread, AGS_TASK(save_file)); g_object_unref(G_OBJECT(file)); } if(response != GTK_RESPONSE_CANCEL){ ags_main_quit(AGS_MAIN(window->ags_main)); }else{ gtk_widget_destroy(GTK_WIDGET(dialog)); } return(TRUE); } gsequencer-0.6.37/src/ags/X/ags_property_collection_editor.h0000644000175000017500000000500112621463700021106 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_PROPERTY_COLLECTION_EDITOR_H__ #define __AGS_PROPERTY_COLLECTION_EDITOR_H__ #include #include #include #include #include #define AGS_TYPE_PROPERTY_COLLECTION_EDITOR (ags_property_collection_editor_get_type()) #define AGS_PROPERTY_COLLECTION_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_PROPERTY_COLLECTION_EDITOR, AgsPropertyCollectionEditor)) #define AGS_PROPERTY_COLLECTION_EDITOR_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_PROPERTY_COLLECTION_EDITOR, AgsPropertyCollectionEditorClass)) #define AGS_IS_PROPERTY_COLLECTION_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_PROPERTY_COLLECTION_EDITOR)) #define AGS_IS_PROPERTY_COLLECTION_EDITOR_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_PROPERTY_COLLECTION_EDITOR)) #define AGS_PROPERTY_COLLECTION_EDITOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_PROPERTY_COLLECTION_EDITOR, AgsPropertyCollectionEditorClass)) typedef struct _AgsPropertyCollectionEditor AgsPropertyCollectionEditor; typedef struct _AgsPropertyCollectionEditorClass AgsPropertyCollectionEditorClass; struct _AgsPropertyCollectionEditor { AgsPropertyEditor property_editor; GType child_type; guint child_parameter_count; GParameter *child_parameter; GtkVBox *child; GtkButton *add_collection; }; struct _AgsPropertyCollectionEditorClass { AgsPropertyEditorClass property_editor; }; GType ags_property_collection_editor_get_type(); AgsPropertyCollectionEditor* ags_property_collection_editor_new(GType child_type, guint child_parameter_count, GParameter *child_parameter); #endif /*__AGS_PROPERTY_COLLECTION_EDITOR_H__*/ gsequencer-0.6.37/src/ags/X/ags_property_editor_callbacks.c0000644000175000017500000000212712621463700020673 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include void ags_property_editor_enable_callback(GtkToggleButton *toggle, AgsPropertyEditor *property_editor) { if(gtk_toggle_button_get_active(toggle)){ property_editor->flags |= AGS_PROPERTY_EDITOR_ENABLED; }else{ property_editor->flags &= (~AGS_PROPERTY_EDITOR_ENABLED); } } gsequencer-0.6.37/src/ags/X/ags_line_editor_callbacks.h0000644000175000017500000000237212621463700017745 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_LINE_EDITOR_CALLBACKS_H__ #define __AGS_LINE_EDITOR_CALLBACKS_H__ #include #include #include #include int ags_line_editor_destroy_callback(GtkObject *object, AgsLineEditor *line_editor); int ags_line_editor_show_callback(GtkWidget *widget, AgsLineEditor *line_editor); int ags_line_editor_parent_set_callback(GtkWidget *widget, GtkObject *old_parent, AgsLineEditor *line_editor); #endif /*__AGS_LINE_EDITOR_CALLBACKS_H__*/ gsequencer-0.6.37/src/ags/X/ags_pad_editor_callbacks.c0000644000175000017500000000466312626272146017571 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include int ags_pad_editor_parent_set_callback(GtkWidget *widget, GtkObject *old_parent, AgsPadEditor *pad_editor) { return(0); } int ags_pad_editor_destroy_callback(GtkObject *object, AgsPadEditor *pad_editor) { ags_pad_editor_destroy(object); return(0); } int ags_pad_editor_show_callback(GtkWidget *widget, AgsPadEditor *pad_editor) { ags_pad_editor_show(widget); return(0); } void ags_pad_editor_set_audio_channels_callback(AgsAudio *audio, guint audio_channels, guint audio_channels_old, AgsPadEditor *pad_editor) { if(audio_channels > audio_channels_old){ AgsLineEditor *line_editor; AgsChannel *channel, *next_pad; channel = ags_channel_nth(pad_editor->pad, audio_channels_old); next_pad = pad_editor->pad->next_pad; while(channel != next_pad){ line_editor = ags_line_editor_new(channel); gtk_box_pack_start(GTK_BOX(pad_editor->line_editor), GTK_WIDGET(line_editor), FALSE, FALSE, 0); ags_connectable_connect(AGS_CONNECTABLE(line_editor)); gtk_widget_show_all(GTK_WIDGET(line_editor)); channel = channel->next; } }else{ GList *list, *list_next, *list_start; list_start = list = gtk_container_get_children(GTK_CONTAINER(pad_editor->line_editor)); list = g_list_nth(list, audio_channels); while(list != NULL){ list_next = list->next; gtk_widget_destroy(GTK_WIDGET(list->data)); list = list_next; } g_list_free(list_start); } } gsequencer-0.6.37/src/ags/X/ags_plugin_preferences_callbacks.h0000644000175000017500000000177512621463700021335 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_PLUGIN_PREFERENCES_CALLBACKS_H__ #define __AGS_PLUGIN_PREFERENCES_CALLBACKS_H__ #include #include #include #include #endif /*__AGS_PLUGIN_PREFERENCES_CALLBACKS__*/ gsequencer-0.6.37/src/ags/X/ags_generic_preferences_callbacks.h0000644000175000017500000000215212621463700021441 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_GENERIC_PREFERENCES_CALLBACKS_H__ #define __AGS_GENERIC_PREFERENCES_CALLBACKS_H__ #include #include void ags_generic_preferences_autosave_thread_clicked_callback(GtkWidget *check_button, AgsGenericPreferences *generic_preferences); #endif /*__AGS_GENERIC_PREFERENCES_CALLBACKS_H__*/ gsequencer-0.6.37/src/ags/X/ags_pad.h0000644000175000017500000000561312621463700014216 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_PAD_H__ #define __AGS_PAD_H__ #include #include #include #include #include #include #define AGS_TYPE_PAD (ags_pad_get_type()) #define AGS_PAD(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_PAD, AgsPad)) #define AGS_PAD_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_PAD, AgsPadClass)) #define AGS_IS_PAD(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_PAD)) #define AGS_IS_PAD_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_PAD)) #define AGS_PAD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_PAD, AgsPadClass)) #define AGS_PAD_DEFAULT_VERSION "0.4.2\0" #define AGS_PAD_DEFAULT_BUILD_ID "CEST 02-10-2014 19:36\0" typedef struct _AgsPad AgsPad; typedef struct _AgsPadClass AgsPadClass; typedef enum{ AGS_PAD_CONNECTED = 1, AGS_PAD_SHOW_GROUPING = 1 << 1, AGS_PAD_GROUP_ALL = 1 << 2, AGS_PAD_GROUP_LINE = 1 << 3, AGS_PAD_MAPPED_RECALL = 1 << 4, AGS_PAD_PREMAPPED_RECALL = 1 << 5, }AgsPadFlags; struct _AgsPad { GtkVBox vbox; guint flags; gchar *name; gchar *version; gchar *build_id; AgsChannel *channel; guint cols; AgsExpanderSet *expander_set; GtkToggleButton *group; GtkToggleButton *mute; GtkToggleButton *solo; GtkToggleButton *play; }; struct _AgsPadClass { GtkVBoxClass vbox; void (*set_channel)(AgsPad *pad, AgsChannel *channel); void (*resize_lines)(AgsPad *pad, GType line_type, guint audio_channels, guint audio_channels_old); void (*map_recall)(AgsPad *pad, guint output_pad_start); GList* (*find_port)(AgsPad *pad); }; GType ags_pad_get_type(void); void ags_pad_set_channel(AgsPad *pad, AgsChannel *channel); void ags_pad_resize_lines(AgsPad *pad, GType line_type, guint audio_channels, guint audio_channels_old); void ags_pad_map_recall(AgsPad *pad, guint output_pad_start); GList* ags_pad_find_port(AgsPad *pad); void ags_pad_play(AgsPad *pad); AgsPad* ags_pad_new(AgsChannel *channel); #endif /*__AGS_PAD_H__*/ gsequencer-0.6.37/src/ags/X/ags_link_editor.h0000644000175000017500000000421412621463700015751 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_LINK_EDITOR_H__ #define __AGS_LINK_EDITOR_H__ #include #include #include #include #include #define AGS_TYPE_LINK_EDITOR (ags_link_editor_get_type()) #define AGS_LINK_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_CAST(obj, AGS_TYPE_LINK_EDITOR, AgsLinkEditor)) #define AGS_LINK_EDITOR_CLASS(class) (G_TYPE_CHECK_CLASS_CAST(class, AGS_TYPE_LINK_EDITOR, AgsLinkEditorClass)) #define AGS_IS_LINK_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_LINK_EDITOR)) #define AGS_IS_LINK_EDITOR_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_LINK_EDITOR)) #define AGS_LINK_EDITOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_LINK_EDITOR, AgsLinkEditorClass)) typedef struct _AgsLinkEditor AgsLinkEditor; typedef struct _AgsLinkEditorClass AgsLinkEditorClass; typedef enum{ AGS_LINK_EDITOR_FILE_CHOOSER_PLAY_DONE = 1, AGS_LINK_EDITOR_BLOCK_FILE_CHOOSER = 1 << 1, }AgsLinkEditorFlags; struct _AgsLinkEditor { GtkHBox hbox; guint flags; GtkComboBox *combo; GtkSpinButton *spin_button; AgsAudioFile *audio_file; GtkFileChooserDialog *file_chooser; }; struct _AgsLinkEditorClass { GtkHBoxClass hbox; }; GType ags_link_editor_get_type(void); AgsLinkEditor* ags_link_editor_new(); #endif /*__AGS_LINK_EDITOR_H__*/ gsequencer-0.6.37/src/ags/X/ags_plugin_preferences.h0000644000175000017500000000442312621463700017327 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_PLUGIN_PREFERENCES_H__ #define __AGS_PLUGIN_PREFERENCES_H__ #include #include #include #define AGS_TYPE_PLUGIN_PREFERENCES (ags_plugin_preferences_get_type()) #define AGS_PLUGIN_PREFERENCES(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_PLUGIN_PREFERENCES, AgsPluginPreferences)) #define AGS_PLUGIN_PREFERENCES_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_PLUGIN_PREFERENCES, AgsPluginPreferencesClass)) #define AGS_IS_PLUGIN_PREFERENCES(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_PLUGIN_PREFERENCES)) #define AGS_IS_PLUGIN_PREFERENCES_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_PLUGIN_PREFERENCES)) #define AGS_PLUGIN_PREFERENCES_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_PLUGIN_PREFERENCES, AgsPluginPreferencesClass)) typedef struct _AgsPluginPreferences AgsPluginPreferences; typedef struct _AgsPluginPreferencesClass AgsPluginPreferencesClass; typedef struct _AgsLadspaPluginPreferences AgsLadspaPluginPreferences; struct _AgsPluginPreferences { GtkVBox vbox; AgsLadspaPluginPreferences *ladspa_plugin_preferencens; }; struct _AgsPluginPreferencesClass { GtkVBoxClass vbox; }; struct _AgsLadspaPluginPreferences { GtkEntry *ladspa_path; GtkCellView *plugin_file; }; GType ags_plugin_preferences_get_type(void); AgsLadspaPluginPreferences* ags_ladspa_plugin_preferences_alloc(); AgsPluginPreferences* ags_plugin_preferences_new(); #endif /*__AGS_PLUGIN_PREFERENCES_H__*/ gsequencer-0.6.37/src/ags/X/ags_export_window_callbacks.c0000644000175000017500000001555712626272146020373 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include void ags_export_window_stop_callback(AgsThread *thread, AgsExportWindow *export_window); extern pthread_mutex_t ags_application_mutex; void ags_export_window_file_chooser_button_callback(GtkWidget *file_chooser_button, AgsExportWindow *export_window) { GtkFileChooserDialog *file_chooser; file_chooser = (GtkFileChooserDialog *) gtk_file_chooser_dialog_new("Export to file ...\0", GTK_WINDOW(export_window), GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); if(gtk_dialog_run(GTK_DIALOG(file_chooser)) == GTK_RESPONSE_ACCEPT){ char *filename; filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(file_chooser)); gtk_entry_set_text(export_window->filename, filename); } gtk_widget_destroy((GtkWidget *) file_chooser); } void ags_export_window_tact_callback(GtkWidget *spin_button, AgsExportWindow *export_window) { AgsWindow *window; window = AGS_MAIN(export_window->ags_main)->window; gtk_label_set_text(export_window->duration, ags_navigation_absolute_tact_to_time_string(gtk_spin_button_get_value(export_window->tact) * 16.0, window->navigation->bpm->adjustment->value, window->devout->delay_factor)); } void ags_export_window_export_callback(GtkWidget *toggle_button, AgsExportWindow *export_window) { AgsWindow *window; AgsMachine *machine; AgsAudioLoop *audio_loop; AgsTaskThread *task_thread; AgsMain *ags_main; GList *machines_start; gboolean success; window = AGS_MAIN(export_window->ags_main)->window; ags_main = window->ags_main; /* get audio loop */ pthread_mutex_lock(&(ags_application_mutex)); audio_loop = ags_main->main_loop; pthread_mutex_unlock(&(ags_application_mutex)); /* get task and devout thread */ task_thread = (AgsTaskThread *) ags_thread_find_type(audio_loop, AGS_TYPE_TASK_THREAD); machines_start = NULL; if(gtk_toggle_button_get_active((GtkToggleButton *) toggle_button)){ AgsExportOutput *export_output; AgsExportThread *export_thread; GList *machines; gchar *filename; gboolean live_performance; export_thread = (AgsExportThread *) ags_thread_find_type(audio_loop, AGS_TYPE_EXPORT_THREAD); filename = gtk_entry_get_text(export_window->filename); /* test filename */ if(filename == NULL || strlen(filename) == 0){ return; } if(g_file_test(filename, G_FILE_TEST_EXISTS)){ GtkDialog *dialog; gint response; if(g_file_test(filename, (G_FILE_TEST_IS_DIR | G_FILE_TEST_IS_SYMLINK))){ return; } dialog = gtk_message_dialog_new((GtkWindow *) export_window, GTK_DIALOG_MODAL, GTK_MESSAGE_QUESTION, GTK_BUTTONS_OK_CANCEL, "Replace existing file?\0"); response = gtk_dialog_run(dialog); gtk_widget_destroy((GtkWidget *) dialog); if(response == GTK_RESPONSE_REJECT){ return; } g_remove(filename); } /* get some preferences */ live_performance = gtk_toggle_button_get_active((GtkToggleButton *) export_window->live_export); machines_start = machines = gtk_container_get_children(GTK_CONTAINER(window->machines)); /* start machines */ success = FALSE; while(machines != NULL){ machine = AGS_MACHINE(machines->data); if((AGS_MACHINE_IS_SEQUENCER & (machine->flags)) != 0 || (AGS_MACHINE_IS_SYNTHESIZER & (machine->flags)) != 0){ printf("found machine to play!\n\0"); ags_machine_set_run_extended(machine, TRUE, !gtk_toggle_button_get_active(export_window->exclude_sequencer), TRUE); success = TRUE; } machines = machines->next; } /* start export thread */ if(success){ AgsMutexManager *mutex_manager; guint tic; gdouble delay; pthread_mutex_t *devout_mutex; pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); devout_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) window->devout); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(devout_mutex); /* create task */ delay = (window->devout->delay[window->devout->tic_counter]); tic = (gtk_spin_button_get_value(export_window->tact) + 1) * delay * 16.0; export_output = ags_export_output_new(export_thread, window->devout, filename, tic, live_performance); g_signal_connect(export_thread, "stop\0", G_CALLBACK(ags_export_window_stop_callback), export_window); pthread_mutex_unlock(devout_mutex); /* append AgsStartDevout */ ags_task_thread_append_task(task_thread, (AgsTask *) export_output); ags_navigation_set_seeking_sensitive(window->navigation, FALSE); } }else{ GList *machines; machines_start = machines = gtk_container_get_children(GTK_CONTAINER(window->machines)); /* stop machines */ while(machines != NULL){ machine = AGS_MACHINE(machines->data); if((AGS_MACHINE_IS_SEQUENCER & (machine->flags)) !=0 || (AGS_MACHINE_IS_SYNTHESIZER & (machine->flags)) != 0){ printf("found machine to stop!\n\0"); ags_machine_set_run(machine, FALSE); success = TRUE; } machines = machines->next; } /* disable auto-seeking */ if(success){ ags_navigation_set_seeking_sensitive(window->navigation, TRUE); } } /* free machine list */ g_list_free(machines_start); } void ags_export_window_stop_callback(AgsThread *thread, AgsExportWindow *export_window) { gtk_toggle_button_set_active(export_window->export, FALSE); } gsequencer-0.6.37/src/ags/X/ags_machine_editor.h0000644000175000017500000000670112621463700016423 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_MACHINE_EDITOR_H__ #define __AGS_MACHINE_EDITOR_H__ #include #include #include #include #include #include #include #define AGS_TYPE_MACHINE_EDITOR (ags_machine_editor_get_type()) #define AGS_MACHINE_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_MACHINE_EDITOR, AgsMachineEditor)) #define AGS_MACHINE_EDITOR_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_MACHINE_EDITOR, AgsMachineEditorClass)) #define AGS_IS_MACHINE_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_MACHINE_EDITOR)) #define AGS_IS_MACHINE_EDITOR_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_MACHINE_EDITOR)) #define AGS_MACHINE_EDITOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_MACHINE_EDITOR, AgsMachineEditorClass)) #define AGS_MACHINE_EDITOR_DEFAULT_VERSION "0.4.2\0" #define AGS_MACHINE_EDITOR_DEFAULT_BUILD_ID "CEST 02-10-2014 19:36\0" typedef struct _AgsMachineEditor AgsMachineEditor; typedef struct _AgsMachineEditorClass AgsMachineEditorClass; typedef enum{ AGS_MACHINE_EDITOR_CLOSING = 1, }AgsMachineEditorFlags; struct _AgsMachineEditor { GtkDialog dialog; guint flags; gchar *version; gchar *build_id; AgsMachine *machine; GtkNotebook *notebook; GtkScrolledWindow *output_scrolled_window; AgsListingEditor *output_editor; GtkScrolledWindow *input_scrolled_window; AgsListingEditor *input_editor; GtkScrolledWindow *output_link_editor_scrolled_window; AgsPropertyCollectionEditor *output_link_editor; GtkScrolledWindow *input_link_editor_scrolled_window; AgsPropertyCollectionEditor *input_link_editor; GtkScrolledWindow *resize_editor_scrolled_window; AgsResizeEditor *resize_editor; GtkButton *add; GtkButton *remove; GtkButton *apply; GtkButton *ok; GtkButton *cancel; }; struct _AgsMachineEditorClass { GtkDialogClass dialog; void (*set_machine)(AgsMachineEditor *machine_editor, AgsMachine *machine); }; GType ags_machine_editor_get_type(void); void ags_machine_editor_add_children(AgsMachineEditor *machine_editor); void ags_machine_editor_set_machine(AgsMachineEditor *machine_editor, AgsMachine *machine); void ags_machine_editor_add_input(AgsMachineEditor *machine_editor); void ags_machine_editor_add_output(AgsMachineEditor *machine_editor); void ags_machine_editor_remove_input(AgsMachineEditor *machine_editor); void ags_machine_editor_remove_output(AgsMachineEditor *machine_editor); AgsMachineEditor* ags_machine_editor_new(AgsMachine *machine); #endif /*__AGS_MACHINE_EDITOR_H__*/ gsequencer-0.6.37/src/ags/X/ags_machine_callbacks.h0000644000175000017500000000517312626272146017065 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_MACHINE_CALLBACKS_H__ #define __AGS_MACHINE_CALLBACKS_H__ #include #include #include #include #include #include int ags_machine_parent_set_callback(GtkWidget *widget, GtkObject *old_parent, AgsMachine *machine); int ags_machine_destroy_callback(GtkObject *object, AgsMachine *machine); /* controls */ int ags_machine_button_press_callback(GtkWidget *handle_box, GdkEventButton *event, AgsMachine *machine); int ags_machine_popup_move_up_activate_callback(GtkWidget *widget, AgsMachine *machine); int ags_machine_popup_move_down_activate_callback(GtkWidget *widget, AgsMachine *machine); int ags_machine_popup_hide_activate_callback(GtkWidget *widget, AgsMachine *machine); int ags_machine_popup_show_activate_callback(GtkWidget *widget, AgsMachine *machine); void ags_machine_popup_destroy_activate_callback(GtkWidget *widget, AgsMachine *machine); int ags_machine_popup_rename_activate_callback(GtkWidget *widget, AgsMachine *machine); int ags_machine_popup_properties_activate_callback(GtkWidget *widget, AgsMachine *machine); int ags_machine_popup_copy_pattern_callback(GtkWidget *widget, AgsMachine *machine); int ags_machine_popup_paste_pattern_callback(GtkWidget *widget, AgsMachine *machine); void ags_machine_open_response_callback(GtkDialog *dialog, gint response, AgsMachine *machine); void ags_machine_play_callback(GtkWidget *toggle_button, AgsMachine *machine); /* audio */ void ags_machine_tact_callback(AgsAudio *audio, AgsRecallID *recall_id, AgsMachine *machine); void ags_machine_done_callback(AgsAudio *audio, AgsRecallID *recall_id, AgsMachine *machine); /* task */ void ags_machine_start_complete_callback(AgsTaskCompletion *task_completion, AgsMachine *machine); #endif /*__AGS_MACHINE_CALLBACKS_H__*/ gsequencer-0.6.37/src/ags/X/ags_resize_editor.c0000644000175000017500000002514512626272146016325 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include void ags_resize_editor_class_init(AgsResizeEditorClass *resize_editor); void ags_resize_editor_connectable_interface_init(AgsConnectableInterface *connectable); void ags_resize_editor_applicable_interface_init(AgsApplicableInterface *applicable); void ags_resize_editor_init(AgsResizeEditor *resize_editor); void ags_resize_editor_connect(AgsConnectable *connectable); void ags_resize_editor_disconnect(AgsConnectable *connectable); void ags_resize_editor_set_update(AgsApplicable *applicable, gboolean update); void ags_resize_editor_apply(AgsApplicable *applicable); void ags_resize_editor_reset(AgsApplicable *applicable); void ags_resize_editor_destroy(GtkObject *object); void ags_resize_editor_show(GtkWidget *widget); /** * SECTION:ags_resize_editor * @short_description: Resize audio channels or pads. * @title: AgsResizeEditor * @section_id: * @include: ags/X/ags_resize_editor.h * * #AgsResizeEditor is a composite widget to resize. A resize editor * should be packed by a #AgsMachineEditor. */ AgsConnectableInterface *ags_resize_editor_parent_connectable_interface; extern pthread_mutex_t ags_application_mutex; GType ags_resize_editor_get_type(void) { static GType ags_type_resize_editor = 0; if(!ags_type_resize_editor){ static const GTypeInfo ags_resize_editor_info = { sizeof (AgsResizeEditorClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_resize_editor_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsResizeEditor), 0, /* n_preallocs */ (GInstanceInitFunc) ags_resize_editor_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_resize_editor_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_applicable_interface_info = { (GInterfaceInitFunc) ags_resize_editor_applicable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_resize_editor = g_type_register_static(AGS_TYPE_PROPERTY_EDITOR, "AgsResizeEditor\0", &ags_resize_editor_info, 0); g_type_add_interface_static(ags_type_resize_editor, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_resize_editor, AGS_TYPE_APPLICABLE, &ags_applicable_interface_info); } return(ags_type_resize_editor); } void ags_resize_editor_class_init(AgsResizeEditorClass *resize_editor) { } void ags_resize_editor_connectable_interface_init(AgsConnectableInterface *connectable) { ags_resize_editor_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->is_ready = NULL; connectable->is_connected = NULL; connectable->connect = ags_resize_editor_connect; connectable->disconnect = ags_resize_editor_disconnect; } void ags_resize_editor_applicable_interface_init(AgsApplicableInterface *applicable) { applicable->set_update = ags_resize_editor_set_update; applicable->apply = ags_resize_editor_apply; applicable->reset = ags_resize_editor_reset; } void ags_resize_editor_init(AgsResizeEditor *resize_editor) { GtkTable *table; GtkAlignment *alignment; GtkLabel *label; table = (GtkTable *) gtk_table_new(3, 2, FALSE); gtk_box_pack_start(GTK_BOX(resize_editor), GTK_WIDGET(table), FALSE, FALSE, 0); /* audio channels */ alignment = (GtkAlignment *) gtk_alignment_new(0.0, 0.5, 0.0, 0.0); gtk_table_attach(table, GTK_WIDGET(alignment), 0, 1, 0, 1, GTK_FILL, GTK_FILL, 0, 0); label = (GtkLabel *) gtk_label_new("audio channels\0"); gtk_container_add(GTK_CONTAINER(alignment), GTK_WIDGET(label)); alignment = (GtkAlignment *) gtk_alignment_new(0.0, 0.5, 0.0, 0.0); gtk_table_attach(table, GTK_WIDGET(alignment), 1, 2, 0, 1, GTK_FILL, GTK_FILL, 0, 0); resize_editor->audio_channels = (GtkSpinButton *) gtk_spin_button_new_with_range(0.0, 1024.0, 1.0); gtk_container_add(GTK_CONTAINER(alignment), GTK_WIDGET(resize_editor->audio_channels)); /* output pads */ alignment = (GtkAlignment *) gtk_alignment_new(0.0, 0.5, 0.0, 0.0); gtk_table_attach(table, GTK_WIDGET(alignment), 0, 1, 1, 2, GTK_FILL, GTK_FILL, 0, 0); label = (GtkLabel *) gtk_label_new("outputs\0"); gtk_container_add(GTK_CONTAINER(alignment), GTK_WIDGET(label)); alignment = (GtkAlignment *) gtk_alignment_new(0.0, 0.5, 0.0, 0.0); gtk_table_attach(table, GTK_WIDGET(alignment), 1, 2, 1, 2, GTK_FILL, GTK_FILL, 0, 0); resize_editor->output_pads = (GtkSpinButton *) gtk_spin_button_new_with_range(0.0, 1024.0, 1.0); gtk_container_add(GTK_CONTAINER(alignment), GTK_WIDGET(resize_editor->output_pads)); /* input pads */ alignment = (GtkAlignment *) gtk_alignment_new(0.0, 0.5, 0.0, 0.0); gtk_table_attach(table, GTK_WIDGET(alignment), 0, 1, 2, 3, GTK_FILL, GTK_FILL, 0, 0); label = (GtkLabel *) gtk_label_new("inputs\0"); gtk_container_add(GTK_CONTAINER(alignment), GTK_WIDGET(label)); alignment = (GtkAlignment *) gtk_alignment_new(0.0, 0.5, 0.0, 0.0); gtk_table_attach(table, GTK_WIDGET(alignment), 1, 2, 2, 3, GTK_FILL, GTK_FILL, 0, 0); resize_editor->input_pads = (GtkSpinButton *) gtk_spin_button_new_with_range(0.0, 1024.0, 1.0); gtk_container_add(GTK_CONTAINER(alignment), GTK_WIDGET(resize_editor->input_pads)); } void ags_resize_editor_connect(AgsConnectable *connectable) { AgsResizeEditor *resize_editor; ags_resize_editor_parent_connectable_interface->connect(connectable); /* AgsResizeEditor */ resize_editor = AGS_RESIZE_EDITOR(connectable); } void ags_resize_editor_disconnect(AgsConnectable *connectable) { /* empty */ } void ags_resize_editor_set_update(AgsApplicable *applicable, gboolean update) { AgsResizeEditor *resize_editor; resize_editor = AGS_RESIZE_EDITOR(applicable); } void ags_resize_editor_apply(AgsApplicable *applicable) { AgsWindow *window; AgsMachineEditor *machine_editor; AgsResizeEditor *resize_editor; AgsAudio *audio; AgsResizeAudio *resize_audio; AgsMutexManager *mutex_manager; AgsAudioLoop *audio_loop; AgsTaskThread *task_thread; AgsMain *ags_main; resize_editor = AGS_RESIZE_EDITOR(applicable); if((AGS_PROPERTY_EDITOR_ENABLED & (AGS_PROPERTY_EDITOR(resize_editor)->flags)) == 0){ return; } machine_editor = AGS_MACHINE_EDITOR(gtk_widget_get_ancestor(GTK_WIDGET(resize_editor), AGS_TYPE_MACHINE_EDITOR)); audio = machine_editor->machine->audio; /* get window and ags_main */ window = (AgsWindow *) gtk_widget_get_toplevel(machine_editor->machine); ags_main = window->ags_main; /* get audio loop */ pthread_mutex_lock(&(ags_application_mutex)); audio_loop = ags_main->main_loop; pthread_mutex_unlock(&(ags_application_mutex)); /* get task thread */ task_thread = (AgsTaskThread *) ags_thread_find_type(audio_loop, AGS_TYPE_TASK_THREAD); /* create task */ resize_audio = ags_resize_audio_new(audio, (guint) gtk_spin_button_get_value_as_int(resize_editor->output_pads), (guint) gtk_spin_button_get_value_as_int(resize_editor->input_pads), (guint) gtk_spin_button_get_value_as_int(resize_editor->audio_channels)); /* append AgsResizeAudio */ ags_task_thread_append_task(task_thread, AGS_TASK(resize_audio)); } void ags_resize_editor_reset(AgsApplicable *applicable) { AgsMachineEditor *machine_editor; AgsResizeEditor *resize_editor; AgsAudio *audio; AgsMutexManager *mutex_manager; pthread_mutex_t *audio_mutex; resize_editor = AGS_RESIZE_EDITOR(applicable); machine_editor = AGS_MACHINE_EDITOR(gtk_widget_get_ancestor(GTK_WIDGET(resize_editor), AGS_TYPE_MACHINE_EDITOR)); audio = machine_editor->machine->audio; /* lookup audio mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); /* reset */ pthread_mutex_lock(audio_mutex); if((AGS_MACHINE_MONO & (machine_editor->machine->mapping_flags)) != 0){ gtk_spin_button_set_range(resize_editor->audio_channels, 0.0, 1.0); } gtk_spin_button_set_value(resize_editor->audio_channels, audio->audio_channels); gtk_spin_button_set_value(resize_editor->input_pads, audio->input_pads); if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (machine_editor->machine->audio->flags)) == 0){ gtk_spin_button_set_range(resize_editor->output_pads, 0.0, 1.0); } gtk_spin_button_set_value(resize_editor->output_pads, audio->output_pads); pthread_mutex_unlock(audio_mutex); } void ags_resize_editor_destroy(GtkObject *object) { AgsResizeEditor *resize_editor; resize_editor = (AgsResizeEditor *) object; } void ags_resize_editor_show(GtkWidget *widget) { AgsResizeEditor *resize_editor = (AgsResizeEditor *) widget; } /** * ags_resize_editor_new: * * Creates an #AgsResizeEditor * * Returns: a new #AgsResizeEditor * * Since: 0.3 */ AgsResizeEditor* ags_resize_editor_new() { AgsResizeEditor *resize_editor; resize_editor = (AgsResizeEditor *) g_object_new(AGS_TYPE_RESIZE_EDITOR, NULL); return(resize_editor); } gsequencer-0.6.37/src/ags/X/ags_editor_callbacks.c0000644000175000017500000000712012626272146016734 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include extern pthread_mutex_t ags_application_mutex; void ags_editor_parent_set_callback(GtkWidget *widget, GtkObject *old_parent, AgsEditor *editor) { if(old_parent != NULL) return; if(AGS_IS_NOTE_EDIT(editor->current_edit_widget)){ AGS_NOTE_EDIT(editor->current_edit_widget)->flags |= AGS_NOTE_EDIT_RESETING_HORIZONTALLY; ags_note_edit_reset_horizontally(AGS_NOTE_EDIT(editor->current_edit_widget), AGS_NOTE_EDIT_RESET_HSCROLLBAR); AGS_NOTE_EDIT(editor->current_edit_widget)->flags &= (~AGS_NOTE_EDIT_RESETING_HORIZONTALLY); }else if(AGS_IS_PATTERN_EDIT(editor->current_edit_widget)){ AGS_PATTERN_EDIT(editor->current_edit_widget)->flags |= AGS_PATTERN_EDIT_RESETING_HORIZONTALLY; ags_pattern_edit_reset_horizontally(AGS_PATTERN_EDIT(editor->current_edit_widget), AGS_PATTERN_EDIT_RESET_HSCROLLBAR); AGS_PATTERN_EDIT(editor->current_edit_widget)->flags &= (~AGS_PATTERN_EDIT_RESETING_HORIZONTALLY); } } void ags_editor_tic_callback(AgsDevout *devout, AgsEditor *editor) { AgsWindow *window; AgsAudioLoop *audio_loop; AgsTaskThread *task_thread; AgsMain *ags_main; window = AGS_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(editor))); ags_main = window->ags_main; /* get audio loop */ pthread_mutex_lock(&(ags_application_mutex)); audio_loop = ags_main->main_loop; pthread_mutex_unlock(&(ags_application_mutex)); /* get task and devout thread */ task_thread = (AgsTaskThread *) ags_thread_find_type(audio_loop, AGS_TYPE_TASK_THREAD); if(gtk_toggle_button_get_active(window->navigation->scroll)){ AgsScrollOnPlay *scroll_on_play; double tact_factor, zoom_factor; double tact; gdouble step; zoom_factor = 0.25; tact_factor = exp2(6.0 - (double) gtk_combo_box_get_active((GtkComboBox *) window->editor->toolbar->zoom)); tact = exp2((double) gtk_combo_box_get_active((GtkComboBox *) window->editor->toolbar->zoom) - 2.0); if(devout->tact_counter > editor->current_tact){ editor->current_tact = devout->tact_counter; scroll_on_play = ags_scroll_on_play_new(editor, 64.0); ags_task_thread_append_task(task_thread, AGS_TASK(scroll_on_play)); } } } void ags_editor_machine_changed_callback(AgsMachineSelector *machine_selector, AgsMachine *machine, AgsEditor *editor) { ags_editor_machine_changed(editor, machine); } gsequencer-0.6.37/src/ags/X/ags_ladspa_browser.c0000644000175000017500000002701012626272146016456 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include void ags_ladspa_browser_class_init(AgsLadspaBrowserClass *ladspa_browser); void ags_ladspa_browser_init(AgsLadspaBrowser *ladspa_browser); void ags_ladspa_browser_connectable_interface_init(AgsConnectableInterface *connectable); void ags_ladspa_browser_applicable_interface_init(AgsApplicableInterface *applicable); void ags_ladspa_browser_connect(AgsConnectable *connectable); void ags_ladspa_browser_disconnect(AgsConnectable *connectable); void ags_ladspa_browser_set_update(AgsApplicable *applicable, gboolean update); void ags_ladspa_browser_apply(AgsApplicable *applicable); void ags_ladspa_browser_reset(AgsApplicable *applicable); /** * SECTION:ags_ladspa_browser * @short_description: A composite to select ladspa effect. * @title: AgsLadspaBrowser * @section_id: * @include: ags/X/ags_ladspa_browser.h * * #AgsLadspaBrowser is a composite widget to select ladspa plugin and the desired * effect. */ GType ags_ladspa_browser_get_type(void) { static GType ags_type_ladspa_browser = 0; if(!ags_type_ladspa_browser){ static const GTypeInfo ags_ladspa_browser_info = { sizeof (AgsLadspaBrowserClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_ladspa_browser_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsLadspaBrowser), 0, /* n_preallocs */ (GInstanceInitFunc) ags_ladspa_browser_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_ladspa_browser_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_applicable_interface_info = { (GInterfaceInitFunc) ags_ladspa_browser_applicable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_ladspa_browser = g_type_register_static(GTK_TYPE_DIALOG, "AgsLadspaBrowser\0", &ags_ladspa_browser_info, 0); g_type_add_interface_static(ags_type_ladspa_browser, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_ladspa_browser, AGS_TYPE_APPLICABLE, &ags_applicable_interface_info); } return(ags_type_ladspa_browser); } void ags_ladspa_browser_class_init(AgsLadspaBrowserClass *ladspa_browser) { /* empty */ } void ags_ladspa_browser_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->is_ready = NULL; connectable->is_connected = NULL; connectable->connect = ags_ladspa_browser_connect; connectable->disconnect = ags_ladspa_browser_disconnect; } void ags_ladspa_browser_applicable_interface_init(AgsApplicableInterface *applicable) { applicable->set_update = ags_ladspa_browser_set_update; applicable->apply = ags_ladspa_browser_apply; applicable->reset = ags_ladspa_browser_reset; } void ags_ladspa_browser_init(AgsLadspaBrowser *ladspa_browser) { GtkVBox *vbox; GtkTable *table; GtkComboBoxText *combo_box; GtkLabel *label; GList *list; gchar **filenames, **filenames_start; ladspa_browser->parent = NULL; vbox = (GtkVBox *) gtk_vbox_new(FALSE, 0); gtk_container_add((GtkContainer *) gtk_dialog_get_content_area((GtkDialog *) ladspa_browser), GTK_WIDGET(vbox)); /* plugin */ ladspa_browser->plugin = (GtkHBox *) gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(ladspa_browser->plugin), FALSE, FALSE, 0); label = (GtkLabel *) gtk_label_new("filename: \0"); gtk_box_pack_start(GTK_BOX(ladspa_browser->plugin), GTK_WIDGET(label), FALSE, FALSE, 0); combo_box = (GtkComboBoxText *) gtk_combo_box_text_new(); gtk_box_pack_start(GTK_BOX(ladspa_browser->plugin), GTK_WIDGET(combo_box), FALSE, FALSE, 0); ladspa_browser->path = NULL; ags_ladspa_manager_load_default_directory(); filenames = filenames_start = ags_ladspa_manager_get_filenames(); while(*filenames != NULL){ gtk_combo_box_text_append_text(combo_box, *filenames); filenames++; } free(filenames_start); label = (GtkLabel *) gtk_label_new("effect: \0"); gtk_box_pack_start(GTK_BOX(ladspa_browser->plugin), GTK_WIDGET(label), FALSE, FALSE, 0); combo_box = (GtkComboBoxText *) gtk_combo_box_text_new(); gtk_box_pack_start(GTK_BOX(ladspa_browser->plugin), GTK_WIDGET(combo_box), FALSE, FALSE, 0); /* description */ ladspa_browser->description = (GtkVBox *) gtk_vbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(ladspa_browser->description), FALSE, FALSE, 0); label = (GtkLabel *) g_object_new(GTK_TYPE_LABEL, "xalign\0", 0.0, "label\0", "Label: \0", NULL); gtk_box_pack_start(GTK_BOX(ladspa_browser->description), GTK_WIDGET(label), FALSE, FALSE, 0); label = (GtkLabel *) g_object_new(GTK_TYPE_LABEL, "xalign\0", 0.0, "label\0", "Maker: \0", NULL); gtk_box_pack_start(GTK_BOX(ladspa_browser->description), GTK_WIDGET(label), FALSE, FALSE, 0); label = (GtkLabel *) g_object_new(GTK_TYPE_LABEL, "xalign\0", 0.0, "label\0", "Copyright: \0", NULL); gtk_box_pack_start(GTK_BOX(ladspa_browser->description), GTK_WIDGET(label), FALSE, FALSE, 0); label = (GtkLabel *) g_object_new(GTK_TYPE_LABEL, "xalign\0", 0.0, "label\0", "Ports: \0", NULL); gtk_box_pack_start(GTK_BOX(ladspa_browser->description), GTK_WIDGET(label), FALSE, FALSE, 0); table = (GtkTable *) gtk_table_new(256, 2, FALSE); gtk_box_pack_start(GTK_BOX(ladspa_browser->description), GTK_WIDGET(table), FALSE, FALSE, 0); /* action area */ gtk_dialog_add_buttons((GtkDialog *) ladspa_browser, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, NULL); list = gtk_container_get_children((GtkContainer *) gtk_dialog_get_action_area((GtkDialog *) ladspa_browser)); ladspa_browser->ok = GTK_BUTTON(list->data); ladspa_browser->cancel = GTK_BUTTON(list->next->data); g_list_free(list); } void ags_ladspa_browser_connect(AgsConnectable *connectable) { AgsLadspaBrowser *ladspa_browser; GList *list, *list_start; ladspa_browser = AGS_LADSPA_BROWSER(connectable); list_start = list = gtk_container_get_children(GTK_CONTAINER(ladspa_browser->plugin)); list = list->next; g_signal_connect_after(G_OBJECT(list->data), "changed\0", G_CALLBACK(ags_ladspa_browser_plugin_filename_callback), ladspa_browser); list = list->next->next; g_signal_connect_after(G_OBJECT(list->data), "changed\0", G_CALLBACK(ags_ladspa_browser_plugin_effect_callback), ladspa_browser); g_list_free(list_start); /* AgsLadspaBrowser buttons */ g_signal_connect((GObject *) ladspa_browser->ok, "clicked\0", G_CALLBACK(ags_ladspa_browser_ok_callback), (gpointer) ladspa_browser); g_signal_connect((GObject *) ladspa_browser->cancel, "clicked\0", G_CALLBACK(ags_ladspa_browser_cancel_callback), (gpointer) ladspa_browser); } void ags_ladspa_browser_disconnect(AgsConnectable *connectable) { /* empty */ } void ags_ladspa_browser_set_update(AgsApplicable *applicable, gboolean update) { AgsLadspaBrowser *ladspa_browser; ladspa_browser = AGS_LADSPA_BROWSER(applicable); /* empty */ } void ags_ladspa_browser_apply(AgsApplicable *applicable) { AgsLadspaBrowser *ladspa_browser; GtkComboBoxText *filename, *effect; ladspa_browser = AGS_LADSPA_BROWSER(applicable); //TODO:JK: implement me } void ags_ladspa_browser_reset(AgsApplicable *applicable) { AgsLadspaBrowser *ladspa_browser; GtkComboBoxText *filename; GList *list; ladspa_browser = AGS_LADSPA_BROWSER(applicable); list = gtk_container_get_children(GTK_CONTAINER(ladspa_browser->plugin)); filename = GTK_COMBO_BOX_TEXT(list->next->data); g_list_free(list); gtk_combo_box_set_active((GtkComboBox *) filename, 0); } /** * ags_ladspa_browser_get_plugin_filename: * * Retrieve selected ladspa plugin filename. * * Returns: the active ladspa filename * * Since: 0.4 */ gchar* ags_ladspa_browser_get_plugin_filename(AgsLadspaBrowser *ladspa_browser) { GtkComboBoxText *filename; GList *list; list = gtk_container_get_children(GTK_CONTAINER(ladspa_browser->plugin)); filename = GTK_COMBO_BOX_TEXT(list->next->data); g_list_free(list); return(gtk_combo_box_text_get_active_text(filename)); } /** * ags_ladspa_browser_get_plugin_effect: * * Retrieve selected ladspa effect. * * Returns: the active ladspa effect * * Since: 0.4 */ gchar* ags_ladspa_browser_get_plugin_effect(AgsLadspaBrowser *ladspa_browser) { GtkComboBoxText *effect; GList *list; gchar *str; list = gtk_container_get_children(GTK_CONTAINER(ladspa_browser->plugin)); effect = GTK_COMBO_BOX_TEXT(list->next->next->next->data); g_list_free(list); str = gtk_combo_box_text_get_active_text(effect); str = &(str[6]); return(str); } GtkWidget* ags_ladspa_browser_combo_box_boolean_controls_new() { GtkComboBoxText *combo_box; combo_box = (GtkComboBoxText *) gtk_combo_box_text_new(); gtk_combo_box_text_append_text(combo_box, "toggle button\0"); gtk_combo_box_text_append_text(combo_box, "check button\0"); gtk_combo_box_set_active((GtkComboBox *) combo_box, 1); return((GtkWidget *) combo_box); } /** * ags_ladspa_browser_combo_box_float_controls_new: * * Creates a #GtkComboBox containing suitable widgets as controls. * * Returns: a new #GtkComboBox * * Since: 0.4 */ GtkWidget* ags_ladspa_browser_combo_box_float_controls_new() { GtkComboBoxText *combo_box; combo_box = (GtkComboBoxText *) gtk_combo_box_text_new(); gtk_combo_box_text_append_text(combo_box, "spin button\0"); gtk_combo_box_text_append_text(combo_box, "dial\0"); gtk_combo_box_text_append_text(combo_box, "vertical scale\0"); gtk_combo_box_set_active((GtkComboBox *) combo_box, 1); return((GtkWidget *) combo_box); } GtkWidget* ags_ladspa_browser_preview_new() { GtkWidget *preview; preview = NULL; //TODO:JK: implement me return(preview); } /** * ags_ladspa_browser_new: * * Creates an #AgsLadspaBrowser * * Returns: a new #AgsLadspaBrowser * * Since: 0.4 */ AgsLadspaBrowser* ags_ladspa_browser_new(GtkWidget *parent) { AgsLadspaBrowser *ladspa_browser; ladspa_browser = (AgsLadspaBrowser *) g_object_new(AGS_TYPE_LADSPA_BROWSER, NULL); ladspa_browser->parent = parent; return(ladspa_browser); } gsequencer-0.6.37/src/ags/X/ags_line_editor.c0000644000175000017500000002157212626272146015753 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include void ags_line_editor_class_init(AgsLineEditorClass *line_editor); void ags_line_editor_connectable_interface_init(AgsConnectableInterface *connectable); void ags_line_editor_applicable_interface_init(AgsApplicableInterface *applicable); void ags_line_editor_init(AgsLineEditor *line_editor); void ags_line_editor_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_line_editor_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_line_editor_connect(AgsConnectable *connectable); void ags_line_editor_disconnect(AgsConnectable *connectable); void ags_line_editor_set_update(AgsApplicable *applicable, gboolean update); void ags_line_editor_apply(AgsApplicable *applicable); void ags_line_editor_reset(AgsApplicable *applicable); void ags_line_editor_destroy(GtkObject *object); void ags_line_editor_show(GtkWidget *widget); /** * SECTION:ags_line_editor * @short_description: A composite widget to edit #AgsChannel * @title: AgsLineEditor * @section_id: * @include: ags/X/ags_line_editor.h * * #AgsLineEditor is a composite widget to edit #AgsChannel. It should be * packed by an #AgsPadEditor. */ enum{ PROP_0, PROP_CHANNEL, }; GType ags_line_editor_get_type(void) { static GType ags_type_line_editor = 0; if(!ags_type_line_editor){ static const GTypeInfo ags_line_editor_info = { sizeof (AgsLineEditorClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_line_editor_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsLineEditor), 0, /* n_preallocs */ (GInstanceInitFunc) ags_line_editor_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_line_editor_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_applicable_interface_info = { (GInterfaceInitFunc) ags_line_editor_applicable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_line_editor = g_type_register_static(GTK_TYPE_VBOX, "AgsLineEditor\0", &ags_line_editor_info, 0); g_type_add_interface_static(ags_type_line_editor, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_line_editor, AGS_TYPE_APPLICABLE, &ags_applicable_interface_info); } return(ags_type_line_editor); } void ags_line_editor_class_init(AgsLineEditorClass *line_editor) { GObjectClass *gobject; GParamSpec *param_spec; gobject = (GObjectClass *) line_editor; gobject->set_property = ags_line_editor_set_property; gobject->get_property = ags_line_editor_get_property; /** * AgsLineEditor:channel: * * The assigned #AgsChannel to edit. * * Since: 0.3 */ param_spec = g_param_spec_object("channel\0", "assigned channel\0", "The channel which this pad editor is assigned with\0", AGS_TYPE_CHANNEL, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_CHANNEL, param_spec); } void ags_line_editor_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->is_ready = NULL; connectable->is_connected = NULL; connectable->connect = ags_line_editor_connect; connectable->disconnect = ags_line_editor_disconnect; } void ags_line_editor_applicable_interface_init(AgsApplicableInterface *applicable) { applicable->set_update = ags_line_editor_set_update; applicable->apply = ags_line_editor_apply; applicable->reset = ags_line_editor_reset; } void ags_line_editor_init(AgsLineEditor *line_editor) { line_editor->version = AGS_LINE_EDITOR_DEFAULT_VERSION; line_editor->build_id = AGS_LINE_EDITOR_DEFAULT_BUILD_ID; line_editor->link_editor = NULL; line_editor->member_editor = NULL; } void ags_line_editor_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsLineEditor *line_editor; line_editor = AGS_LINE_EDITOR(gobject); switch(prop_id){ case PROP_CHANNEL: { AgsChannel *channel; channel = (AgsChannel *) g_value_get_object(value); ags_line_editor_set_channel(line_editor, channel); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_line_editor_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsLineEditor *line_editor; line_editor = AGS_LINE_EDITOR(gobject); switch(prop_id){ case PROP_CHANNEL: g_value_set_object(value, line_editor->channel); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_line_editor_connect(AgsConnectable *connectable) { AgsLineEditor *line_editor; line_editor = AGS_LINE_EDITOR(connectable); g_signal_connect((GObject *) line_editor, "destroy\0", G_CALLBACK(ags_line_editor_destroy_callback), (gpointer) line_editor); g_signal_connect((GObject *) line_editor, "show\0", G_CALLBACK(ags_line_editor_show_callback), (gpointer) line_editor); ags_connectable_connect(AGS_CONNECTABLE(line_editor->link_editor)); ags_connectable_connect(AGS_CONNECTABLE(line_editor->member_editor)); } void ags_line_editor_disconnect(AgsConnectable *connectable) { /* empty */ } void ags_line_editor_set_update(AgsApplicable *applicable, gboolean update) { AgsLineEditor *line_editor; line_editor = AGS_LINE_EDITOR(applicable); if(line_editor->link_editor != NULL){ ags_applicable_set_update(AGS_APPLICABLE(line_editor->link_editor), update); } } void ags_line_editor_apply(AgsApplicable *applicable) { AgsLineEditor *line_editor; line_editor = AGS_LINE_EDITOR(applicable); if(line_editor->link_editor != NULL){ ags_applicable_apply(AGS_APPLICABLE(line_editor->link_editor)); } } void ags_line_editor_reset(AgsApplicable *applicable) { AgsLineEditor *line_editor; line_editor = AGS_LINE_EDITOR(applicable); if(line_editor->link_editor != NULL){ ags_applicable_reset(AGS_APPLICABLE(line_editor->link_editor)); } if(line_editor->member_editor != NULL){ ags_applicable_reset(AGS_APPLICABLE(line_editor->member_editor)); } } void ags_line_editor_destroy(GtkObject *object) { } void ags_line_editor_show(GtkWidget *widget) { AgsLineEditor *line_editor = (AgsLineEditor *) widget; gtk_widget_show((GtkWidget *) line_editor->link_editor); gtk_widget_show((GtkWidget *) line_editor->member_editor); } /** * ags_line_editor_set_channel: * @line_editor: an #AgsLineEditor * @channel: the new #AgsChannel * * Is called as channel gets modified. * * Since: 0.3 */ void ags_line_editor_set_channel(AgsLineEditor *line_editor, AgsChannel *channel) { AgsLinkEditor *link_editor; if(line_editor->link_editor != NULL){ link_editor = line_editor->link_editor; line_editor->link_editor = NULL; gtk_widget_destroy(GTK_WIDGET(line_editor->link_editor)); gtk_widget_destroy(GTK_WIDGET(line_editor->member_editor)); } line_editor->channel = channel; if(channel != NULL){ /* link */ line_editor->link_editor = ags_link_editor_new(); gtk_box_pack_start(GTK_BOX(line_editor), GTK_WIDGET(line_editor->link_editor), FALSE, FALSE, 0); /* recall */ line_editor->member_editor = ags_line_member_editor_new(); gtk_box_pack_start(GTK_BOX(line_editor), GTK_WIDGET(line_editor->member_editor), FALSE, FALSE, 0); } } /** * ags_line_editor_new: * @channel: the channel to edit * * Creates an #AgsLineEditor * * Returns: a new #AgsLineEditor * * Since: 0.3 */ AgsLineEditor* ags_line_editor_new(AgsChannel *channel) { AgsLineEditor *line_editor; line_editor = (AgsLineEditor *) g_object_new(AGS_TYPE_LINE_EDITOR, "channel\0", channel, NULL); return(line_editor); } gsequencer-0.6.37/src/ags/X/ags_link_collection_editor_callbacks.c0000644000175000017500000000404512621463700022160 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include int ags_link_collection_editor_parent_set_callback(GtkWidget *widget, GtkObject *old_parent, AgsLinkCollectionEditor *link_collection_editor) { AgsMachineEditor *machine_editor; if(old_parent != NULL) return(0); machine_editor = (AgsMachineEditor *) gtk_widget_get_ancestor(widget, AGS_TYPE_MACHINE_EDITOR); if(machine_editor != NULL && machine_editor->machine != NULL){ gtk_combo_box_set_model(link_collection_editor->link, GTK_TREE_MODEL(ags_machine_get_possible_links(machine_editor->machine))); ags_link_collection_editor_check(link_collection_editor); } } void ags_link_collection_editor_link_callback(GtkComboBox *combo, AgsLinkCollectionEditor *link_collection_editor) { ags_link_collection_editor_check(link_collection_editor); } void ags_link_collection_editor_first_line_callback(GtkSpinButton *spin_button, AgsLinkCollectionEditor *link_collection_editor) { ags_link_collection_editor_check(link_collection_editor); } void ags_link_collection_editor_first_link_callback(GtkSpinButton *spin_button, AgsLinkCollectionEditor *link_collection_editor) { ags_link_collection_editor_check(link_collection_editor); } gsequencer-0.6.37/src/ags/X/ags_export_window_callbacks.h0000644000175000017500000000245712621463700020364 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_EXPORT_WINDOW_CALLBACKS_H__ #define __AGS_EXPORT_WINDOW_CALLBACKS_H__ #include #include #include void ags_export_window_file_chooser_button_callback(GtkWidget *file_chooser_button, AgsExportWindow *export_window); void ags_export_window_tact_callback(GtkWidget *spin_button, AgsExportWindow *export_window); void ags_export_window_export_callback(GtkWidget *toggle_button, AgsExportWindow *export_window); #endif /*__AGS_EXPORT_WINDOW_CALLBACKS_H__*/ gsequencer-0.6.37/src/ags/X/ags_link_collection_editor.c0000644000175000017500000005167412626272146020202 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include void ags_link_collection_editor_class_init(AgsLinkCollectionEditorClass *link_collection_editor); void ags_link_collection_editor_connectable_interface_init(AgsConnectableInterface *connectable); void ags_link_collection_editor_applicable_interface_init(AgsApplicableInterface *applicable); void ags_link_collection_editor_init(AgsLinkCollectionEditor *link_collection_editor); void ags_link_collection_editor_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_link_collection_editor_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_link_collection_editor_connect(AgsConnectable *connectable); void ags_link_collection_editor_disconnect(AgsConnectable *connectable); void ags_link_collection_editor_set_update(AgsApplicable *applicable, gboolean update); void ags_link_collection_editor_apply(AgsApplicable *applicable); void ags_link_collection_editor_reset(AgsApplicable *applicable); void ags_link_collection_editor_destroy(GtkObject *object); void ags_link_collection_editor_show(GtkWidget *widget); /** * SECTION:ags_link_collection_editor * @short_description: Edit links in bulk mode. * @title: AgsLinkCollectionEditor * @section_id: * @include: ags/X/ags_link_collection_editor.h * * #AgsLinkCollectionEditor is a composite widget to modify links in bulk mode. A link collection * editor should be packed by a #AgsMachineEditor. */ enum{ PROP_0, PROP_CHANNEL_TYPE, }; static gpointer ags_link_collection_editor_parent_class = NULL; extern pthread_mutex_t ags_application_mutex; GType ags_link_collection_editor_get_type(void) { static GType ags_type_link_collection_editor = 0; if(!ags_type_link_collection_editor){ static const GTypeInfo ags_link_collection_editor_info = { sizeof (AgsLinkCollectionEditorClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_link_collection_editor_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsLinkCollectionEditor), 0, /* n_preallocs */ (GInstanceInitFunc) ags_link_collection_editor_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_link_collection_editor_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_applicable_interface_info = { (GInterfaceInitFunc) ags_link_collection_editor_applicable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_link_collection_editor = g_type_register_static(GTK_TYPE_TABLE, "AgsLinkCollectionEditor\0", &ags_link_collection_editor_info, 0); g_type_add_interface_static(ags_type_link_collection_editor, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_link_collection_editor, AGS_TYPE_APPLICABLE, &ags_applicable_interface_info); } return(ags_type_link_collection_editor); } void ags_link_collection_editor_class_init(AgsLinkCollectionEditorClass *link_collection_editor) { GObjectClass *gobject; GParamSpec *param_spec; ags_link_collection_editor_parent_class = g_type_class_peek_parent(link_collection_editor); /* GObjectClass */ gobject = (GObjectClass *) link_collection_editor; gobject->set_property = ags_link_collection_editor_set_property; gobject->get_property = ags_link_collection_editor_get_property; /* properties */ /** * AgsLinkCollectionEditor:channel-type: * * The channel type to apply to. Either %AGS_TYPE_INPUT or %AGS_TYPE_OUTPUT. * * Since: 0.3 */ param_spec = g_param_spec_gtype("channel-type\0", "assigned channel type\0", "The channel type which this channel link collection editor is assigned with\0", G_TYPE_NONE, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_CHANNEL_TYPE, param_spec); } void ags_link_collection_editor_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->connect = ags_link_collection_editor_connect; connectable->disconnect = ags_link_collection_editor_disconnect; } void ags_link_collection_editor_applicable_interface_init(AgsApplicableInterface *applicable) { applicable->set_update = ags_link_collection_editor_set_update; applicable->apply = ags_link_collection_editor_apply; applicable->reset = ags_link_collection_editor_reset; } void ags_link_collection_editor_init(AgsLinkCollectionEditor *link_collection_editor) { GtkAlignment *alignment; GtkLabel *label; GtkCellRenderer *cell_renderer; GtkListStore *model; GtkTreeIter iter; g_signal_connect_after(GTK_WIDGET(link_collection_editor), "parent_set\0", G_CALLBACK(ags_link_collection_editor_parent_set_callback), link_collection_editor); gtk_table_resize(GTK_TABLE(link_collection_editor), 4, 2); gtk_table_set_row_spacings(GTK_TABLE(link_collection_editor), 4); gtk_table_set_col_spacings(GTK_TABLE(link_collection_editor), 2); /* link */ alignment = (GtkAlignment *) gtk_alignment_new(0.0, 0.5, 0.0, 0.0); gtk_table_attach(GTK_TABLE(link_collection_editor), GTK_WIDGET(alignment), 0, 1, 0, 1, GTK_FILL|GTK_EXPAND, GTK_FILL|GTK_EXPAND, 0, 0); label = (GtkLabel *) gtk_label_new("link\0"); gtk_container_add(GTK_CONTAINER(alignment), GTK_WIDGET(label)); alignment = (GtkAlignment *) gtk_alignment_new(0.0, 0.5, 0.0, 0.0); gtk_table_attach(GTK_TABLE(link_collection_editor), GTK_WIDGET(alignment), 1, 2, 0, 1, GTK_FILL|GTK_EXPAND, GTK_FILL|GTK_EXPAND, 0, 0); link_collection_editor->link = (GtkComboBox *) gtk_combo_box_new(); gtk_container_add(GTK_CONTAINER(alignment), GTK_WIDGET(link_collection_editor->link)); model = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_POINTER); gtk_list_store_append(model, &iter); gtk_list_store_set(model, &iter, 0, "NULL\0", 1, NULL, -1); cell_renderer = gtk_cell_renderer_text_new(); gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(link_collection_editor->link), cell_renderer, FALSE); gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(link_collection_editor->link), cell_renderer, "text\0", 0, NULL); gtk_combo_box_set_model(link_collection_editor->link, GTK_TREE_MODEL(model)); /* first line */ alignment = (GtkAlignment *) gtk_alignment_new(0.0, 0.5, 0.0, 0.0); gtk_table_attach(GTK_TABLE(link_collection_editor), GTK_WIDGET(alignment), 0, 1, 1, 2, GTK_FILL|GTK_EXPAND, GTK_FILL|GTK_EXPAND, 0, 0); label = (GtkLabel *) gtk_label_new("first line\0"); gtk_container_add(GTK_CONTAINER(alignment), GTK_WIDGET(label)); alignment = (GtkAlignment *) gtk_alignment_new(0.0, 0.5, 0.0, 0.0); gtk_table_attach(GTK_TABLE(link_collection_editor), GTK_WIDGET(alignment), 1, 2, 1, 2, GTK_FILL|GTK_EXPAND, GTK_FILL|GTK_EXPAND, 0, 0); link_collection_editor->first_line = (GtkSpinButton *) gtk_spin_button_new_with_range(0.0, 0.0, 1.0); gtk_container_add(GTK_CONTAINER(alignment), GTK_WIDGET(link_collection_editor->first_line)); /* first link line */ alignment = (GtkAlignment *) gtk_alignment_new(0.0, 0.5, 0.0, 0.0); gtk_table_attach(GTK_TABLE(link_collection_editor), GTK_WIDGET(alignment), 0, 1, 2, 3, GTK_FILL|GTK_EXPAND, GTK_FILL|GTK_EXPAND, 0, 0); label = (GtkLabel *) gtk_label_new("first link line\0"); gtk_container_add(GTK_CONTAINER(alignment), GTK_WIDGET(label)); alignment = (GtkAlignment *) gtk_alignment_new(0.0, 0.5, 0.0, 0.0); gtk_table_attach(GTK_TABLE(link_collection_editor), GTK_WIDGET(alignment), 1, 2, 2, 3, GTK_FILL|GTK_EXPAND, GTK_FILL|GTK_EXPAND, 0, 0); link_collection_editor->first_link = (GtkSpinButton *) gtk_spin_button_new_with_range(0.0, 0.0, 1.0); gtk_container_add(GTK_CONTAINER(alignment), GTK_WIDGET(link_collection_editor->first_link)); /* count */ alignment = (GtkAlignment *) gtk_alignment_new(0.0, 0.5, 0.0, 0.0); gtk_table_attach(GTK_TABLE(link_collection_editor), GTK_WIDGET(alignment), 0, 1, 3, 4, GTK_FILL|GTK_EXPAND, GTK_FILL|GTK_EXPAND, 0, 0); label = (GtkLabel *) gtk_label_new("count\0"); gtk_container_add(GTK_CONTAINER(alignment), GTK_WIDGET(label)); alignment = (GtkAlignment *) gtk_alignment_new(0.0, 0.5, 0.0, 0.0); gtk_table_attach(GTK_TABLE(link_collection_editor), GTK_WIDGET(alignment), 1, 2, 3, 4, GTK_FILL|GTK_EXPAND, GTK_FILL|GTK_EXPAND, 0, 0); link_collection_editor->count = (GtkSpinButton *) gtk_spin_button_new_with_range(0.0, 0.0, 1.0); gtk_container_add(GTK_CONTAINER(alignment), GTK_WIDGET(link_collection_editor->count)); } void ags_link_collection_editor_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsLinkCollectionEditor *link_collection_editor; link_collection_editor = AGS_LINK_COLLECTION_EDITOR(gobject); switch(prop_id){ case PROP_CHANNEL_TYPE: link_collection_editor->channel_type = g_value_get_gtype(value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_link_collection_editor_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsLinkCollectionEditor *link_collection_editor; link_collection_editor = AGS_LINK_COLLECTION_EDITOR(gobject); switch(prop_id){ case PROP_CHANNEL_TYPE: g_value_set_gtype(value, link_collection_editor->channel_type); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_link_collection_editor_connect(AgsConnectable *connectable) { AgsLinkCollectionEditor *link_collection_editor; GList *pad_list; /* AgsLinkCollectionEditor */ link_collection_editor = AGS_LINK_COLLECTION_EDITOR(connectable); g_signal_connect_after(G_OBJECT(link_collection_editor->link), "changed\0", G_CALLBACK(ags_link_collection_editor_link_callback), link_collection_editor); g_signal_connect_after(G_OBJECT(link_collection_editor->first_line), "value-changed\0", G_CALLBACK(ags_link_collection_editor_first_line_callback), link_collection_editor); g_signal_connect_after(G_OBJECT(link_collection_editor->first_link), "value-changed\0", G_CALLBACK(ags_link_collection_editor_first_link_callback), link_collection_editor); } void ags_link_collection_editor_disconnect(AgsConnectable *connectable) { /* empty */ } void ags_link_collection_editor_set_update(AgsApplicable *applicable, gboolean update) { AgsLinkCollectionEditor *link_collection_editor; link_collection_editor = AGS_LINK_COLLECTION_EDITOR(applicable); /* empty */ } void ags_link_collection_editor_apply(AgsApplicable *applicable) { AgsLinkCollectionEditor *link_collection_editor; GtkTreeIter iter; link_collection_editor = AGS_LINK_COLLECTION_EDITOR(applicable); if(gtk_combo_box_get_active_iter(link_collection_editor->link, &iter)){ AgsWindow *window; AgsMachine *machine, *link_machine; AgsMachineEditor *machine_editor; AgsAudio *audio; AgsChannel *channel, *link; AgsLinkChannel *link_channel; GtkTreeModel *model; AgsMutexManager *mutex_manager; AgsAudioLoop *audio_loop; AgsTaskThread *task_thread; AgsMain *ags_main; GList *task; guint first_line, count; guint i; GError *error; pthread_mutex_t *audio_loop_mutex; pthread_mutex_t *audio_mutex; pthread_mutex_t *channel_mutex; machine_editor = AGS_MACHINE_EDITOR(gtk_widget_get_ancestor(GTK_WIDGET(link_collection_editor), AGS_TYPE_MACHINE_EDITOR)); machine = machine_editor->machine; audio = machine_editor->machine->audio; /* get window and ags_main */ window = (AgsWindow *) gtk_widget_get_toplevel(machine); ags_main = window->ags_main; /* get audio loop */ pthread_mutex_lock(&(ags_application_mutex)); audio_loop = ags_main->main_loop; pthread_mutex_unlock(&(ags_application_mutex)); /* lookup audio loop mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); audio_loop_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio_loop); pthread_mutex_unlock(&(ags_application_mutex)); /* get task and devout thread */ task_thread = (AgsTaskThread *) ags_thread_find_type(audio_loop, AGS_TYPE_TASK_THREAD); /* lookup audio mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); /* get first line */ first_line = (guint) gtk_spin_button_get_value_as_int(link_collection_editor->first_line); if(g_type_is_a(link_collection_editor->channel_type, AGS_TYPE_INPUT)){ pthread_mutex_lock(audio_mutex); channel = audio->input; pthread_mutex_unlock(audio_mutex); channel = ags_channel_nth(channel, first_line); }else{ pthread_mutex_lock(audio_mutex); channel = audio->output; pthread_mutex_unlock(audio_mutex); channel = ags_channel_nth(channel, first_line); } model = gtk_combo_box_get_model(link_collection_editor->link); gtk_tree_model_get(model, &iter, 1, &link_machine, -1); task = NULL; count = (guint) gtk_spin_button_get_value_as_int(link_collection_editor->count); error = NULL; if(link_machine == NULL){ for(i = 0; i < count; i++){ /* lookup channel mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); channel_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); /* create task */ link_channel = ags_link_channel_new(channel, NULL); task = g_list_prepend(task, link_channel); /* iterate */ pthread_mutex_lock(channel_mutex); channel = channel->next; pthread_mutex_unlock(channel_mutex); } /* append AgsLinkChannel */ task = g_list_reverse(task); ags_task_thread_append_tasks(task_thread, task); }else{ guint first_link; pthread_mutex_t *link_audio_mutex; pthread_mutex_t *link_mutex; first_link = (guint) gtk_spin_button_get_value_as_int(link_collection_editor->first_link); /* lookup link's audio mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); link_audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) link_machine->audio); pthread_mutex_unlock(&(ags_application_mutex)); /* get link */ pthread_mutex_lock(link_audio_mutex); if(g_type_is_a(link_collection_editor->channel_type, AGS_TYPE_INPUT)){ link = link_machine->audio->output; }else{ link = link_machine->audio->input; } pthread_mutex_unlock(link_audio_mutex); link = ags_channel_nth(link, first_link); for(i = 0; i < count; i++){ /* lookup channel mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); channel_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); /* lookup link mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); link_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) link); pthread_mutex_unlock(&(ags_application_mutex)); /* create task */ link_channel = ags_link_channel_new(channel, link); task = g_list_prepend(task, link_channel); /* iterate */ pthread_mutex_lock(channel_mutex); channel = channel->next; pthread_mutex_unlock(channel_mutex); pthread_mutex_lock(link_mutex); link = link->next; pthread_mutex_unlock(link_mutex); } task = g_list_reverse(task); ags_task_thread_append_tasks(task_thread, task); } } } void ags_link_collection_editor_reset(AgsApplicable *applicable) { AgsLinkCollectionEditor *link_collection_editor; link_collection_editor = AGS_LINK_COLLECTION_EDITOR(applicable); /* empty */ } void ags_link_collection_editor_destroy(GtkObject *object) { AgsLinkCollectionEditor *link_collection_editor; link_collection_editor = (AgsLinkCollectionEditor *) object; } void ags_link_collection_editor_show(GtkWidget *widget) { AgsLinkCollectionEditor *link_collection_editor = (AgsLinkCollectionEditor *) widget; } /** * ags_link_collection_editor_check: * @link_collection_editor: the #AgsLinkCollectionEditor * * Checks for possible channels to link. And modifies its ranges. * * Since: 0.3 */ void ags_link_collection_editor_check(AgsLinkCollectionEditor *link_collection_editor) { GtkTreeIter iter; if(gtk_combo_box_get_active_iter(link_collection_editor->link, &iter)){ AgsMachine *link_machine; AgsMachineEditor *machine_editor; GtkTreeModel *model; gdouble first_line, first_line_stop, first_line_range; gdouble first_link, first_link_stop, first_link_range; gdouble max; first_line = gtk_spin_button_get_value(link_collection_editor->first_line); machine_editor = AGS_MACHINE_EDITOR(gtk_widget_get_ancestor(GTK_WIDGET(link_collection_editor), AGS_TYPE_MACHINE_EDITOR)); if(link_collection_editor->channel_type == AGS_TYPE_INPUT) first_line_stop = (gdouble) machine_editor->machine->audio->input_lines; else first_line_stop = (gdouble) machine_editor->machine->audio->output_lines; /* link machine */ first_link = gtk_spin_button_get_value(link_collection_editor->first_link); model = gtk_combo_box_get_model(link_collection_editor->link); gtk_tree_model_get(model, &iter, 1, &link_machine, -1); first_line_range = first_line_stop - first_line; if(link_machine != NULL){ if(link_collection_editor->channel_type == AGS_TYPE_INPUT) first_link_stop = (gdouble) link_machine->audio->output_lines; else first_link_stop = (gdouble) link_machine->audio->input_lines; first_link_range = first_link_stop - first_link; if(first_line_range > first_link_range) max = first_link_range; else max = first_line_range; }else{ first_link_stop = 0.0; max = first_line_range; } gtk_spin_button_set_range(link_collection_editor->first_line, 0.0, first_line_stop - 1.0); if(link_machine == NULL) gtk_spin_button_set_range(link_collection_editor->first_link, 0.0, 0.0); else gtk_spin_button_set_range(link_collection_editor->first_link, 0.0, first_link_stop - 1.0); gtk_spin_button_set_range(link_collection_editor->count, 0.0, max); }else{ gtk_spin_button_set_range(link_collection_editor->count, -1.0, -1.0); } } /** * ags_link_collection_editor_new: * @channel_type: either %AGS_TYPE_INPUT or %AGS_TYPE_OUTPUT * * Creates an #AgsLinkCollectionEditor * * Returns: a new #AgsLinkCollectionEditor * * Since: 0.3 */ AgsLinkCollectionEditor* ags_link_collection_editor_new(GType channel_type) { AgsLinkCollectionEditor *link_collection_editor; link_collection_editor = (AgsLinkCollectionEditor *) g_object_new(AGS_TYPE_LINK_COLLECTION_EDITOR, "channel_type\0", channel_type, NULL); return(link_collection_editor); } gsequencer-0.6.37/src/ags/X/ags_line_member_editor_callbacks.h0000644000175000017500000000260112626272146021276 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_LINE_MEMBER_EDITOR_CALLBACKS_H__ #define __AGS_LINE_MEMBER_EDITOR_CALLBACKS_H__ #include #include #include #include void ags_line_member_editor_add_callback(GtkWidget *button, AgsLineMemberEditor *line_member_editor); void ags_line_member_editor_remove_callback(GtkWidget *button, AgsLineMemberEditor *line_member_editor); void ags_line_member_editor_ladspa_browser_response_callback(GtkDialog *dialog, gint response, AgsLineMemberEditor *line_member_editor); #endif /*__AGS_LINE_MEMBER_EDITOR_CALLBACKS_H__*/ gsequencer-0.6.37/src/ags/X/ags_window.c0000644000175000017500000003161712626272146014766 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include void ags_window_class_init(AgsWindowClass *window); void ags_window_connectable_interface_init(AgsConnectableInterface *connectable); void ags_window_init(AgsWindow *window); void ags_window_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_window_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_window_finalize(GObject *gobject); void ags_window_connect(AgsConnectable *connectable); void ags_window_disconnect(AgsConnectable *connectable); void ags_window_show(GtkWidget *widget); gboolean ags_window_delete_event(GtkWidget *widget, GdkEventAny *event); static GList* ags_window_standard_machine_counter(); /** * SECTION:ags_window * @short_description: The window object. * @title: AgsWindow * @section_id: * @include: ags/X/ags_window.h * * #AgsWindow is a composite toplevel widget. */ enum{ PROP_0, PROP_DEVOUT, PROP_MAIN, }; static gpointer ags_window_parent_class = NULL; GType ags_window_get_type() { static GType ags_type_window = 0; if(!ags_type_window){ static const GTypeInfo ags_window_info = { sizeof (AgsWindowClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_window_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsWindow), 0, /* n_preallocs */ (GInstanceInitFunc) ags_window_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_window_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_window = g_type_register_static(GTK_TYPE_WINDOW, "AgsWindow\0", &ags_window_info, 0); g_type_add_interface_static(ags_type_window, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return(ags_type_window); } void ags_window_class_init(AgsWindowClass *window) { GObjectClass *gobject; GtkWidgetClass *widget; GParamSpec *param_spec; ags_window_parent_class = g_type_class_peek_parent(window); /* GObjectClass */ gobject = (GObjectClass *) window; gobject->set_property = ags_window_set_property; gobject->get_property = ags_window_get_property; gobject->finalize = ags_window_finalize; /* properties */ param_spec = g_param_spec_object("devout\0", "assigned devout\0", "The devout it is assigned with\0", G_TYPE_OBJECT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_DEVOUT, param_spec); param_spec = g_param_spec_object("ags-main\0", "assigned ags_main\0", "The AgsMain it is assigned with\0", G_TYPE_OBJECT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_MAIN, param_spec); /* GtkWidgetClass */ widget = (GtkWidgetClass *) window; widget->show = ags_window_show; widget->delete_event = ags_window_delete_event; } void ags_window_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->is_ready = NULL; connectable->is_connected = NULL; connectable->connect = ags_window_connect; connectable->disconnect = ags_window_disconnect; } void ags_window_init(AgsWindow *window) { GtkVBox *vbox; GtkWidget *scrolled_window; GError *error; window->flags = 0; error = NULL; g_object_set(G_OBJECT(window), "icon\0", gdk_pixbuf_new_from_file(g_strdup_printf("%s%s\0", DESTDIR, "/gsequencer/icons/jumper.png\0"), &error), NULL); window->ags_main = NULL; window->devout = NULL; window->name = g_strdup("unnamed\0"); gtk_window_set_title((GtkWindow *) window, g_strconcat("GSequencer - \0", window->name, NULL)); vbox = (GtkVBox *) gtk_vbox_new(FALSE, 0); gtk_container_add((GtkContainer *) window, (GtkWidget*) vbox); window->menu_bar = ags_menu_bar_new(); gtk_box_pack_start((GtkBox *) vbox, (GtkWidget *) window->menu_bar, FALSE, FALSE, 0); window->paned = (GtkVPaned *) gtk_vpaned_new(); gtk_box_pack_start((GtkBox*) vbox, (GtkWidget*) window->paned, TRUE, TRUE, 0); scrolled_window = (GtkWidget *) gtk_scrolled_window_new(NULL, NULL); gtk_paned_pack1((GtkPaned *) window->paned, scrolled_window, TRUE, TRUE); window->machines = (GtkVBox *) gtk_vbox_new(FALSE, 0); gtk_scrolled_window_add_with_viewport((GtkScrolledWindow *) scrolled_window, (GtkWidget *) window->machines); window->editor = g_object_new(AGS_TYPE_EDITOR, "homogeneous\0", FALSE, "spacing\0", 0, NULL); gtk_paned_pack2((GtkPaned *) window->paned, (GtkWidget *) window->editor, TRUE, TRUE); window->navigation = g_object_new(AGS_TYPE_NAVIGATION, "homogeneous\0", FALSE, "spacing\0", 0, NULL); gtk_box_pack_start((GtkBox *) vbox, (GtkWidget *) window->navigation, FALSE, FALSE, 0); window->export_window = ags_export_window_new(); window->preferences = NULL; window->machine_counter = ags_window_standard_machine_counter(); window->selected = NULL; } void ags_window_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsWindow *window; window = AGS_WINDOW(gobject); switch(prop_id){ case PROP_DEVOUT: { AgsDevout *devout; devout = g_value_get_object(value); if(window->devout == devout) return; if(devout != NULL) g_object_ref(devout); window->devout = devout; g_object_set(G_OBJECT(window->editor), "devout\0", devout, NULL); g_object_set(G_OBJECT(window->navigation), "devout\0", devout, NULL); g_object_set(G_OBJECT(window->export_window), "devout\0", devout, NULL); } break; case PROP_MAIN: { AgsMain *ags_main; ags_main = (AgsMain *) g_value_get_object(value); if((AgsMain *) window->ags_main == ags_main) return; if(window->ags_main != NULL){ g_object_unref(window->ags_main); } if(ags_main != NULL){ g_object_ref(ags_main); } window->ags_main = (GObject *) ags_main; g_object_set(G_OBJECT(window->export_window), "ags-main\0", ags_main, NULL); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_window_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsWindow *window; window = AGS_WINDOW(gobject); switch(prop_id){ case PROP_DEVOUT: g_value_set_object(value, window->devout); break; case PROP_MAIN: g_value_set_object(value, window->ags_main); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_window_connect(AgsConnectable *connectable) { AgsWindow *window; GList *list, *list_start; window = AGS_WINDOW(connectable); g_signal_connect(G_OBJECT(window), "delete_event\0", G_CALLBACK(ags_window_delete_event_callback), NULL); ags_connectable_connect(AGS_CONNECTABLE(window->menu_bar)); list_start = list = gtk_container_get_children((GtkContainer *) window->machines); while(list != NULL){ ags_connectable_connect(AGS_CONNECTABLE(list->data)); list = list->next; } g_list_free(list_start); ags_connectable_connect(AGS_CONNECTABLE(window->editor)); ags_connectable_connect(AGS_CONNECTABLE(window->navigation)); ags_connectable_connect(AGS_CONNECTABLE(window->export_window)); } void ags_window_disconnect(AgsConnectable *connectable) { //TODO:JK: /* implement me */ } void ags_window_finalize(GObject *gobject) { AgsWindow *window; window = (AgsWindow *) gobject; g_object_unref(G_OBJECT(window->devout)); g_object_unref(G_OBJECT(window->export_window)); free(window->name); G_OBJECT_CLASS(ags_window_parent_class)->finalize(gobject); } void ags_window_show(GtkWidget *widget) { AgsWindow *window; window = (AgsWindow *) widget; gtk_widget_show((GtkWidget *) window->menu_bar); GTK_WIDGET_CLASS(ags_window_parent_class)->show(widget); } gboolean ags_window_delete_event(GtkWidget *widget, GdkEventAny *event) { gtk_widget_destroy(widget); GTK_WIDGET_CLASS(ags_window_parent_class)->delete_event(widget, event); return(FALSE); } /** * @window: the #AgsWindow * @machine_type: the machine type * * Keep track of count of machines. Well known machines. */ static GList* ags_window_standard_machine_counter() { static GList *machine_counter; machine_counter = NULL; machine_counter = g_list_prepend(machine_counter, ags_machine_counter_alloc(AGS_RECALL_DEFAULT_VERSION, AGS_RECALL_DEFAULT_BUILD_ID, AGS_TYPE_PANEL, 0)); machine_counter = g_list_prepend(machine_counter, ags_machine_counter_alloc(AGS_RECALL_DEFAULT_VERSION, AGS_RECALL_DEFAULT_BUILD_ID, AGS_TYPE_MIXER, 0)); machine_counter = g_list_prepend(machine_counter, ags_machine_counter_alloc(AGS_RECALL_DEFAULT_VERSION, AGS_RECALL_DEFAULT_BUILD_ID, AGS_TYPE_DRUM, 0)); machine_counter = g_list_prepend(machine_counter, ags_machine_counter_alloc(AGS_RECALL_DEFAULT_VERSION, AGS_RECALL_DEFAULT_BUILD_ID, AGS_TYPE_MATRIX, 0)); machine_counter = g_list_prepend(machine_counter, ags_machine_counter_alloc(AGS_RECALL_DEFAULT_VERSION, AGS_RECALL_DEFAULT_BUILD_ID, AGS_TYPE_SYNTH, 0)); machine_counter = g_list_prepend(machine_counter, ags_machine_counter_alloc(AGS_RECALL_DEFAULT_VERSION, AGS_RECALL_DEFAULT_BUILD_ID, AGS_TYPE_FFPLAYER, 0)); return(machine_counter); } /** * @window: the #AgsWindow * @machine_type: the machine type * * Keep track of count of machines. Lookup window's counter. */ AgsMachineCounter* ags_window_find_machine_counter(AgsWindow *window, GType machine_type) { GList *list; list = window->machine_counter; while(list != NULL){ if(AGS_MACHINE_COUNTER(list->data)->machine_type == machine_type){ return(AGS_MACHINE_COUNTER(list->data)); } list = list->next; } return(NULL); } /** * @window: the #AgsWindow * @machine_type: the machine type * * Keep track of count of machines. Increment window's counter. */ void ags_window_increment_machine_counter(AgsWindow *window, GType machine_type) { AgsMachineCounter *machine_counter; machine_counter = ags_window_find_machine_counter(window, machine_type); if(machine_counter != NULL){ machine_counter->counter++; } } /** * @window: the #AgsWindow * @machine_type: the machine type * * Keep track of count of machines. Decrement window's counter. */ void ags_window_decrement_machine_counter(AgsWindow *window, GType machine_type) { AgsMachineCounter *machine_counter; machine_counter = ags_window_find_machine_counter(window, machine_type); if(machine_counter != NULL){ machine_counter->counter--; } } /** * @version: the machine's version * @build_id: the machine's build id * @machine_type: the machine type * @initial_value: initialize counter * * Keep track of count of machines. */ AgsMachineCounter* ags_machine_counter_alloc(gchar *version, gchar *build_id, GType machine_type, guint initial_value) { AgsMachineCounter *machine_counter; machine_counter = (AgsMachineCounter *) malloc(sizeof(AgsMachineCounter)); machine_counter->version = version; machine_counter->build_id = build_id; machine_counter->machine_type = machine_type; machine_counter->counter = initial_value; return(machine_counter); } /** * ags_window_new: * @ags_main: the application object. * * Creates an #AgsWindow * * Returns: a new #AgsWindow * * Since: 0.3 */ AgsWindow* ags_window_new(GObject *ags_main) { AgsWindow *window; window = (AgsWindow *) g_object_new(AGS_TYPE_WINDOW, "ags-main", ags_main, NULL); return(window); } gsequencer-0.6.37/src/ags/X/ags_line_callbacks.h0000644000175000017500000000401612626272146016403 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_LINE_CALLBACKS_H__ #define __AGS_LINE_CALLBACKS_H__ #include #include #include #include int ags_line_parent_set_callback(GtkWidget *widget, GtkObject *old_parent, AgsLine *line); void ags_line_remove_recall_callback(AgsRecall *recall, AgsLine *line); int ags_line_group_clicked_callback(GtkWidget *widget, AgsLine *line); /* AgsLine */ void ags_line_volume_callback(GtkRange *range, AgsLine *line); /* AgsRecall - recall */ void ags_line_peak_run_post_callback(AgsRecall *peak_channel, AgsLine *line); void ags_line_copy_pattern_done(AgsRecall *recall, AgsLine *line); void ags_line_copy_pattern_cancel(AgsRecall *recall, AgsLine *line); void ags_line_recall_volume_done(AgsRecall *recall, AgsLine *line); void ags_line_recall_volume_cancel(AgsRecall *recall, AgsLine *line); /* AgsRecall - play */ void ags_line_channel_done_callback(AgsChannel *channel, AgsRecallID *recall_id, AgsLine *line); void ags_line_play_channel_run_cancel(AgsRecall *recall, AgsLine *line); void ags_line_play_volume_done(AgsRecall *recall, AgsLine *line); void ags_line_play_volume_cancel(AgsRecall *recall, AgsLine *line); #endif /*__AGS_LINE_CALLBACKS_H__*/ gsequencer-0.6.37/src/ags/X/ags_performance_preferences_callbacks.c0000644000175000017500000000147412621463700022327 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include gsequencer-0.6.37/src/ags/X/ags_resize_editor.h0000644000175000017500000000376112621463700016323 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_RESIZE_EDITOR_H__ #define __AGS_RESIZE_EDITOR_H__ #include #include #include #include #define AGS_TYPE_RESIZE_EDITOR (ags_resize_editor_get_type()) #define AGS_RESIZE_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_RESIZE_EDITOR, AgsResizeEditor)) #define AGS_RESIZE_EDITOR_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_RESIZE_EDITOR, AgsResizeEditorClass)) #define AGS_IS_RESIZE_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_RESIZE_EDITOR)) #define AGS_IS_RESIZE_EDITOR_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_RESIZE_EDITOR)) #define AGS_RESIZE_EDITOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_RESIZE_EDITOR, AgsResizeEditorClass)) typedef struct _AgsResizeEditor AgsResizeEditor; typedef struct _AgsResizeEditorClass AgsResizeEditorClass; struct _AgsResizeEditor { AgsPropertyEditor property_editor; GtkSpinButton *audio_channels; GtkSpinButton *input_pads; GtkSpinButton *output_pads; }; struct _AgsResizeEditorClass { AgsPropertyEditorClass property_editor; }; AgsResizeEditor* ags_resize_editor_new(); #endif /*__AGS_RESIZE_EDITOR_H__*/ gsequencer-0.6.37/src/ags/X/ags_machine.c0000644000175000017500000012554112627073734015066 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void ags_machine_class_init(AgsMachineClass *machine); void ags_machine_connectable_interface_init(AgsConnectableInterface *connectable); void ags_machine_plugin_interface_init(AgsPluginInterface *plugin); void ags_machine_init(AgsMachine *machine); void ags_machine_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_machine_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_machine_connect(AgsConnectable *connectable); void ags_machine_disconnect(AgsConnectable *connectable); gchar* ags_machine_get_version(AgsPlugin *plugin); void ags_machine_set_version(AgsPlugin *plugin, gchar *version); gchar* ags_machine_get_build_id(AgsPlugin *plugin); void ags_machine_set_build_id(AgsPlugin *plugin, gchar *build_id); static void ags_machine_finalize(GObject *gobject); void ags_machine_show(GtkWidget *widget); void ags_machine_real_map_recall(AgsMachine *machine); GList* ags_machine_real_find_port(AgsMachine *machine); GtkMenu* ags_machine_popup_new(AgsMachine *machine); /** * SECTION:ags_machine * @short_description: visualize audio object. * @title: AgsMachine * @section_id: * @include: ags/X/ags_machine.h * * #AgsMachine is a composite widget to act as base class to visualize #AgsAudio. */ #define AGS_DEFAULT_MACHINE "ags-default-machine\0" enum{ MAP_RECALL, FIND_PORT, LAST_SIGNAL, }; enum{ PROP_0, PROP_AUDIO, }; static gpointer ags_machine_parent_class = NULL; static guint machine_signals[LAST_SIGNAL]; extern pthread_mutex_t ags_application_mutex; GType ags_machine_get_type(void) { static GType ags_type_machine = 0; if(!ags_type_machine){ static const GTypeInfo ags_machine_info = { sizeof (AgsMachineClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_machine_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsMachine), 0, /* n_preallocs */ (GInstanceInitFunc) ags_machine_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_machine_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_plugin_interface_info = { (GInterfaceInitFunc) ags_machine_plugin_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_machine = g_type_register_static(GTK_TYPE_HANDLE_BOX, "AgsMachine\0", &ags_machine_info, 0); g_type_add_interface_static(ags_type_machine, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_machine, AGS_TYPE_PLUGIN, &ags_plugin_interface_info); } return(ags_type_machine); } void ags_machine_class_init(AgsMachineClass *machine) { GObjectClass *gobject; GtkWidgetClass *widget; GParamSpec *param_spec; ags_machine_parent_class = g_type_class_peek_parent(machine); /* GObjectClass */ gobject = (GObjectClass *) machine; gobject->set_property = ags_machine_set_property; gobject->get_property = ags_machine_get_property; gobject->finalize = ags_machine_finalize; /* properties */ /** * AgsMachine:audio: * * The assigned #AgsAudio to visualize. * * Since: 0.3 */ param_spec = g_param_spec_object("audio\0", "assigned audio\0", "The audio it is assigned to\0", AGS_TYPE_AUDIO, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_AUDIO, param_spec); /* GtkWidgetClass */ widget = (GtkWidgetClass *) machine; widget->show = ags_machine_show; /* AgsMachineClass */ machine->map_recall = ags_machine_real_map_recall; machine->find_port = ags_machine_real_find_port; /* signals */ /** * AgsMachine::map-recall: * @machine: the #AgsMachine * * The ::map-recall should be used to add the machine's default recall. */ machine_signals[MAP_RECALL] = g_signal_new("map-recall\0", G_TYPE_FROM_CLASS (machine), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AgsMachineClass, map_recall), NULL, NULL, g_cclosure_marshal_VOID__UINT, G_TYPE_NONE, 0); /** * AgsMachine::find-port: * @machine: the #AgsMachine to resize * Returns: a #GList with associated ports * * The ::find-port as recall should be mapped */ machine_signals[FIND_PORT] = g_signal_new("find-port\0", G_TYPE_FROM_CLASS(machine), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsMachineClass, find_port), NULL, NULL, g_cclosure_user_marshal_POINTER__VOID, G_TYPE_POINTER, 0); } void ags_machine_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->is_ready = NULL; connectable->is_connected = NULL; connectable->connect = ags_machine_connect; connectable->disconnect = ags_machine_disconnect; } void ags_machine_plugin_interface_init(AgsPluginInterface *plugin) { plugin->get_name = NULL; plugin->set_name = NULL; plugin->get_version = ags_machine_get_version; plugin->set_version = ags_machine_set_version; plugin->get_build_id = ags_machine_get_build_id; plugin->set_build_id = ags_machine_set_build_id; plugin->get_xml_type = NULL; plugin->set_xml_type = NULL; plugin->read = NULL; plugin->write = NULL; plugin->get_ports = NULL; } void ags_machine_init(AgsMachine *machine) { GtkVBox *vbox; GtkFrame *frame; GtkMenuToolButton *menu_tool_button; machine->flags = 0; machine->file_input_flags = 0; machine->mapping_flags = 0; machine->name = NULL; machine->version = AGS_MACHINE_DEFAULT_VERSION; machine->build_id = AGS_MACHINE_DEFAULT_BUILD_ID; machine->output_pad_type = G_TYPE_NONE; machine->input_pad_type = G_TYPE_NONE; machine->bank_0 = 0; machine->bank_1 = 0; vbox = gtk_vbox_new(FALSE, 0); frame = (GtkFrame *) gtk_frame_new(NULL); gtk_container_add((GtkContainer *) machine, (GtkWidget *) frame); machine->audio = ags_audio_new(NULL); g_object_ref(G_OBJECT(machine->audio)); machine->audio->machine = (GtkWidget *) machine; /* AgsAudio */ g_signal_connect_after(G_OBJECT(machine->audio), "set_audio_channels\0", G_CALLBACK(ags_machine_set_audio_channels), machine); g_signal_connect_after(G_OBJECT(machine->audio), "set_pads\0", G_CALLBACK(ags_machine_set_pads), machine); machine->play = NULL; machine->output = NULL; machine->selected_output_pad = NULL; machine->input = NULL; machine->selected_input_pad = NULL; machine->port = NULL; machine->popup = ags_machine_popup_new(machine); menu_tool_button = g_object_new(GTK_TYPE_MENU_TOOL_BUTTON, "label\0", "machine\0", "menu\0", machine->popup, NULL); gtk_frame_set_label_widget(frame, menu_tool_button); machine->properties = NULL; machine->rename = NULL; } void ags_machine_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsWindow *window; AgsMachine *machine; machine = AGS_MACHINE(gobject); window = gtk_widget_get_ancestor((GtkWidget *) machine, AGS_TYPE_WINDOW); switch(prop_id){ case PROP_AUDIO: { AgsAudio *audio; gboolean reset; audio = (AgsAudio *) g_value_get_object(value); reset = TRUE; if(machine->audio != NULL){ GList *pad; ags_devout_remove_audio(window->devout, machine->audio); g_object_unref(G_OBJECT(machine->audio)); if(audio == NULL){ /* destroy pad */ pad = gtk_container_get_children(machine->output); // pad = g_list_nth(pad, audio->output_pads); while(pad != NULL){ gtk_widget_destroy(pad->data); pad = pad->next; } pad = gtk_container_get_children(machine->input); // pad = g_list_nth(pad, audio->input_pads); while(pad != NULL){ gtk_widget_destroy(pad->data); pad = pad->next; } reset = FALSE; } } if(audio != NULL){ g_object_ref(G_OBJECT(audio)); machine->audio = audio; if(reset){ AgsChannel *input, *output; GList *pad; GList *line; guint i; /* set channel and resize for AgsOutput */ if(machine->output_pad_type != G_TYPE_NONE){ output = audio->output; pad = gtk_container_get_children(machine->output); i = 0; while(pad != NULL && output != NULL){ line = gtk_container_get_children(GTK_CONTAINER(AGS_PAD(pad->data)->expander_set)); ags_pad_resize_lines(AGS_PAD(pad->data), machine->output_line_type, audio->audio_channels, g_list_length(line)); g_object_set(G_OBJECT(pad->data), "channel\0", output, NULL); g_list_free(line); output = output->next_pad; pad = pad->next; i++; } if(output != NULL){ AgsPad *pad; /* add pad */ for(; i < audio->output_pads; i++){ pad = g_object_new(machine->output_pad_type, "channel\0", output, NULL); gtk_container_add(machine->output, GTK_WIDGET(pad)); ags_pad_resize_lines(pad, machine->output_line_type, audio->audio_channels, 0); } }else{ /* destroy pad */ pad = gtk_container_get_children(machine->output); pad = g_list_nth(pad, audio->output_pads); while(pad != NULL){ gtk_widget_destroy(pad->data); pad = pad->next; } } } /* set channel and resize for AgsOutput */ if(machine->input_pad_type != G_TYPE_NONE){ input = audio->input; pad = gtk_container_get_children(machine->input); i = 0; while(pad != NULL && input != NULL){ line = gtk_container_get_children(GTK_CONTAINER(AGS_PAD(pad->data)->expander_set)); ags_pad_resize_lines(AGS_PAD(pad->data), machine->input_line_type, audio->audio_channels, g_list_length(line)); g_object_set(G_OBJECT(pad->data), "channel\0", input, NULL); g_list_free(line); input = input->next_pad; pad = pad->next; i++; } if(input != NULL){ AgsPad *pad; /* add pad */ for(; i < audio->input_pads; i++){ pad = g_object_new(machine->input_pad_type, "channel\0", input, NULL); gtk_container_add(machine->input, GTK_WIDGET(pad)); ags_pad_resize_lines(pad, machine->input_line_type, audio->audio_channels, 0); } }else{ /* destroy pad */ pad = gtk_container_get_children(machine->input); pad = g_list_nth(pad, audio->input_pads); while(pad != NULL){ gtk_widget_destroy(pad->data); pad = pad->next; } } } }else{ AgsPad *pad; AgsChannel *channel; guint i; /* add pad */ if(machine->output_pad_type != G_TYPE_NONE){ channel = audio->output; for(i = 0; i < audio->output_pads; i++){ pad = g_object_new(machine->output_pad_type, "channel\0", channel, NULL); gtk_container_add(machine->output, GTK_WIDGET(pad)); ags_pad_resize_lines(pad, machine->output_line_type, audio->audio_channels, 0); channel = channel->next_pad; } } if(machine->input_pad_type != G_TYPE_NONE){ channel = audio->input; for(i = 0; i < audio->input_pads; i++){ pad = g_object_new(machine->input_pad_type, "channel\0", channel, NULL); gtk_container_add(machine->output, GTK_WIDGET(pad)); ags_pad_resize_lines(pad, machine->input_line_type, audio->audio_channels, 0); channel = channel->next_pad; } } } }else{ machine->audio = NULL; } } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_machine_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsMachine *machine; machine = AGS_MACHINE(gobject); switch(prop_id){ case PROP_AUDIO: g_value_set_object(value, machine->audio); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_machine_connect(AgsConnectable *connectable) { AgsMachine *machine; GList *pad_list; /* AgsMachine */ machine = AGS_MACHINE(connectable); if((AGS_MACHINE_CONNECTED & (machine->flags)) != 0){ return; } machine->flags |= AGS_MACHINE_CONNECTED; if((AGS_MACHINE_PREMAPPED_RECALL & (machine->flags)) == 0){ if((AGS_MACHINE_MAPPED_RECALL & (machine->flags)) == 0){ ags_machine_map_recall(machine); } }else{ // machine->flags &= ~AGS_MACHINE_PREMAPPED_RECALL; g_message("find port\0"); ags_machine_find_port(machine); } if(machine->play != NULL){ g_signal_connect(G_OBJECT(machine->play), "clicked\0", G_CALLBACK(ags_machine_play_callback), (gpointer) machine); } /* GtkWidget */ // g_signal_connect(G_OBJECT (machine), "button_press_event\0", // G_CALLBACK(ags_machine_button_press_callback), (gpointer) machine); /* AgsPad - input */ if(machine->input != NULL){ pad_list = gtk_container_get_children(GTK_CONTAINER(machine->input)); while(pad_list != NULL){ ags_connectable_connect(AGS_CONNECTABLE(pad_list->data)); pad_list = pad_list->next; } } /* AgsPad - output */ if(machine->output != NULL){ pad_list = gtk_container_get_children(GTK_CONTAINER(machine->output)); while(pad_list != NULL){ ags_connectable_connect(AGS_CONNECTABLE(pad_list->data)); pad_list = pad_list->next; } } /* audio */ g_signal_connect_after(machine->audio, "tact\0", G_CALLBACK(ags_machine_tact_callback), machine); g_signal_connect_after(machine->audio, "done\0", G_CALLBACK(ags_machine_done_callback), machine); } void ags_machine_disconnect(AgsConnectable *connectable) { //TODO:JK: implement me } gchar* ags_machine_get_version(AgsPlugin *plugin) { return(AGS_MACHINE(plugin)->version); } void ags_machine_set_version(AgsPlugin *plugin, gchar *version) { AGS_MACHINE(plugin)->version = version; //TODO:JK: implement me } gchar* ags_machine_get_build_id(AgsPlugin *plugin) { return(AGS_MACHINE(plugin)->build_id); } void ags_machine_set_build_id(AgsPlugin *plugin, gchar *build_id) { AGS_MACHINE(plugin)->build_id = build_id; //TODO:JK: implement me } static void ags_machine_finalize(GObject *gobject) { AgsMachine *machine; GList *list, *list_start; char *str; machine = (AgsMachine *) gobject; if(machine->properties != NULL){ gtk_widget_destroy(machine->properties); } if(machine->rename != NULL){ gtk_widget_destroy(machine->rename); } if(machine->name != NULL){ g_free(machine->name); } if(machine->audio != NULL){ g_object_unref(G_OBJECT(machine->audio)); } G_OBJECT_CLASS(ags_machine_parent_class)->finalize(gobject); } void ags_machine_show(GtkWidget *widget) { AgsMachine *machine; AgsWindow *window; GtkFrame *frame; GTK_WIDGET_CLASS(ags_machine_parent_class)->show(widget); machine = (AgsMachine *) widget; GTK_WIDGET_CLASS(ags_machine_parent_class)->show(widget); window = (AgsWindow *) gtk_widget_get_toplevel((GtkWidget *) widget); frame = (GtkFrame *) gtk_container_get_children((GtkContainer *) machine)->data; gtk_widget_show_all((GtkWidget *) frame); } void ags_machine_real_map_recall(AgsMachine *machine) { if((AGS_MACHINE_MAPPED_RECALL & (machine->flags)) != 0){ return; } machine->flags |= AGS_MACHINE_MAPPED_RECALL; ags_machine_find_port(machine); } /** * ags_machine_map_recall: * @machine: the #AgsMachine to add its default recall. * * You may want the @machine to add its default recall. */ void ags_machine_map_recall(AgsMachine *machine) { g_return_if_fail(AGS_IS_MACHINE(machine)); g_object_ref((GObject *) machine); g_signal_emit((GObject *) machine, machine_signals[MAP_RECALL], 0); g_object_unref((GObject *) machine); } /** * ags_machine_get_possible_links: * @machine: the #AgsMachine * * Find links suitable for @machine. * * Returns: a #GtkListStore containing one column with a string representing * machines by its type and name. * * Since: 0.4 */ GtkListStore* ags_machine_get_possible_links(AgsMachine *machine) { GtkListStore *model; GtkTreeIter iter; GList *list; model = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_POINTER); gtk_list_store_append(model, &iter); gtk_list_store_set(model, &iter, 0, "NULL\0", 1, NULL, -1); if(GTK_WIDGET(machine)->parent != NULL){ list = gtk_container_get_children(GTK_CONTAINER(GTK_WIDGET(machine)->parent)); while(list != NULL){ if(list->data != machine){ gtk_list_store_append(model, &iter); gtk_list_store_set(model, &iter, 0, g_strdup_printf("%s: %s\0", G_OBJECT_TYPE_NAME(G_OBJECT(list->data)), AGS_MACHINE(list->data)->name), 1, list->data, -1); } list = list->next; } } return(model); } /** * ags_machine_find_by_name: * @list: a #GList of #AgsMachine * @name: the name of machine * * Find the specified by @name machine. * * Since: 0.3 */ AgsMachine* ags_machine_find_by_name(GList *list, char *name) { while(list != NULL){ if(!g_strcmp0(AGS_MACHINE(list->data)->name, name)) return((AgsMachine *) list->data); list = list->next; } return(NULL); } GList* ags_machine_real_find_port(AgsMachine *machine) { AgsAudio *audio; GList *list; audio = machine->audio; return(ags_audio_find_port(audio)); } /** * ags_machine_find_port: * @machine: the #AgsMachine * Returns: an #GList containing all related #AgsPort * * Lookup ports of associated recalls. * * Since: 0.4 */ GList* ags_machine_find_port(AgsMachine *machine) { GList *list; list = NULL; g_return_val_if_fail(AGS_IS_MACHINE(machine), NULL); g_object_ref((GObject *) machine); g_signal_emit((GObject *) machine, machine_signals[FIND_PORT], 0, &list); g_object_unref((GObject *) machine); return(list); } /** * ags_machine_set_run: * @machine: the #AgsMachine * @run: if %TRUE playback is started, otherwise stopped * * Start/stop playback of @machine. * * Since: 0.4 */ void ags_machine_set_run(AgsMachine *machine, gboolean run) { ags_machine_set_run_extended(machine, run, TRUE, TRUE); } /** * ags_machine_set_run_extended: * @machine: the #AgsMachine * @run: if %TRUE playback is started, otherwise stopped * @sequencer: * @notation: * * Start/stop playback of @machine. * * Since: 0.4.2 */ void ags_machine_set_run_extended(AgsMachine *machine, gboolean run, gboolean sequencer, gboolean notation) { AgsWindow *window; AgsThread *task_thread; AgsMutexManager *mutex_manager; AgsAudioLoop *audio_loop; AgsMain *ags_main; pthread_mutex_t *audio_loop_mutex; window = (AgsWindow *) gtk_widget_get_toplevel((GtkWidget *) machine); ags_main = (AgsMain *) window->ags_main; /* get threads */ pthread_mutex_lock(&(ags_application_mutex)); audio_loop = (AgsAudioLoop *) ags_main->main_loop; pthread_mutex_unlock(&(ags_application_mutex)); /* lookup audio loop mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); audio_loop_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio_loop); pthread_mutex_unlock(&(ags_application_mutex)); /* get task thread */ task_thread = (AgsTaskThread *) ags_thread_find_type(audio_loop, AGS_TYPE_TASK_THREAD); if(run){ AgsInitAudio *init_audio; AgsAppendAudio *append_audio; AgsStartDevout *start_devout; GList *list; list = NULL; /* create init task */ init_audio = ags_init_audio_new(machine->audio, FALSE, sequencer, FALSE); list = g_list_prepend(list, init_audio); /* create append task */ append_audio = ags_append_audio_new(audio_loop, (GObject *) machine->audio); list = g_list_prepend(list, append_audio); /* create init task */ init_audio = ags_init_audio_new(machine->audio, FALSE, FALSE, notation); list = g_list_prepend(list, init_audio); /* create append task */ append_audio = ags_append_audio_new(audio_loop, (GObject *) machine->audio); list = g_list_prepend(list, append_audio); /* create start task */ if(list != NULL){ AgsGuiThread *gui_thread; AgsTaskCompletion *task_completion; gui_thread = (AgsGuiThread *) ags_thread_find_type(audio_loop, AGS_TYPE_GUI_THREAD); start_devout = ags_start_devout_new(window->devout); list = g_list_prepend(list, start_devout); task_completion = ags_task_completion_new((GObject *) start_devout, NULL); g_signal_connect_after(G_OBJECT(task_completion), "complete\0", G_CALLBACK(ags_machine_start_complete_callback), machine); ags_connectable_connect(AGS_CONNECTABLE(task_completion)); gui_thread->task_completion = g_list_prepend(gui_thread->task_completion, task_completion); /* append AgsStartDevout */ list = g_list_reverse(list); ags_task_thread_append_tasks((AgsTaskThread *) task_thread, list); } }else{ AgsCancelAudio *cancel_audio; /* create cancel task */ cancel_audio = ags_cancel_audio_new(machine->audio, FALSE, sequencer, notation); /* append AgsCancelAudio */ ags_task_thread_append_task((AgsTaskThread *) task_thread, (AgsTask *) cancel_audio); } } void ags_machine_set_audio_channels(AgsAudio *audio, guint audio_channels, guint audio_channels_old, AgsMachine *machine) { AgsChannel *channel; AgsMutexManager *mutex_manager; GList *list_output_pad, *list_output_pad_start; GList *list_input_pad, *list_input_pad_start; GList *list_output_pad_next, *list_output_pad_next_start; GList *list_input_pad_next, *list_input_pad_next_start; guint i, j; pthread_mutex_t *audio_mutex; pthread_mutex_t *channel_mutex; /* lookup audio mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); if(audio_channels > audio_channels_old){ /* grow lines */ AgsPad *pad; GList *list, *list_start; guint input_pads, output_pads; pthread_mutex_lock(audio_mutex); input_pads = audio->input_pads; output_pads = audio->output_pads; pthread_mutex_unlock(audio_mutex); /* AgsInput */ if(machine->input != NULL){ list_input_pad_start = list_input_pad = g_list_reverse(gtk_container_get_children((GtkContainer *) machine->input)); /* get input */ pthread_mutex_lock(audio_mutex); channel = audio->input; pthread_mutex_unlock(audio_mutex); for(i = 0; i < input_pads; i++){ /* lookup channel mutex */ pthread_mutex_lock(&(ags_application_mutex)); channel_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); /* create AgsPad's if necessary or resize */ if(audio_channels_old == 0){ pad = g_object_new(machine->input_pad_type, "channel\0", channel, NULL); gtk_box_pack_start((GtkBox *) machine->input, (GtkWidget *) pad, FALSE, FALSE, 0); ags_pad_resize_lines((AgsPad *) pad, machine->input_line_type, audio_channels, 0); }else{ pad = AGS_PAD(list_input_pad->data); ags_pad_resize_lines((AgsPad *) pad, machine->input_line_type, audio_channels, audio_channels_old); } /* iterate */ pthread_mutex_lock(channel_mutex); channel = channel->next_pad; pthread_mutex_unlock(channel_mutex); if(audio_channels_old != 0){ list_input_pad = list_input_pad->next; } } g_list_free(list_input_pad_start); } /* AgsOutput */ if(machine->output != NULL){ list_output_pad_start = list_output_pad = g_list_reverse(gtk_container_get_children((GtkContainer *) machine->output)); /* get output */ pthread_mutex_lock(audio_mutex); channel = audio->output; pthread_mutex_unlock(audio_mutex); for(i = 0; i < output_pads; i++){ /* lookup channel mutex */ pthread_mutex_lock(&(ags_application_mutex)); channel_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); /* create AgsPad's if necessary or resize */ if(audio_channels_old == 0){ pad = g_object_new(machine->output_pad_type, "channel\0", channel, NULL); gtk_box_pack_start((GtkBox *) machine->output, (GtkWidget *) pad, FALSE, FALSE, 0); ags_pad_resize_lines((AgsPad *) pad, machine->output_line_type, audio_channels, 0); }else{ pad = AGS_PAD(list_output_pad->data); ags_pad_resize_lines((AgsPad *) pad, machine->output_line_type, audio_channels, audio_channels_old); } /* iterate */ pthread_mutex_lock(channel_mutex); channel = channel->next_pad; pthread_mutex_unlock(channel_mutex); if(audio_channels_old != 0){ list_output_pad = list_output_pad->next; } } g_list_free(list_output_pad_start); } }else if(audio_channels < audio_channels_old){ /* shrink lines */ list_output_pad_start = list_output_pad = gtk_container_get_children((GtkContainer *) machine->output); list_input_pad_start = list_input_pad = gtk_container_get_children((GtkContainer *) machine->input); if(audio_channels == 0){ /* AgsInput */ while(list_input_pad != NULL){ list_input_pad_next = list_input_pad->next; gtk_widget_destroy(GTK_WIDGET(list_input_pad->data)); list_input_pad->next = list_input_pad_next; } /* AgsOutput */ while(list_output_pad != NULL){ list_output_pad_next = list_output_pad->next; gtk_widget_destroy(GTK_WIDGET(list_output_pad->data)); list_output_pad->next = list_output_pad_next; } }else{ /* AgsInput */ for(i = 0; list_input_pad != NULL; i++){ ags_pad_resize_lines(AGS_PAD(list_input_pad->data), machine->input_pad_type, audio_channels, audio_channels_old); list_input_pad = list_input_pad->next; } /* AgsOutput */ for(i = 0; list_output_pad != NULL; i++){ ags_pad_resize_lines(AGS_PAD(list_output_pad->data), machine->output_pad_type, audio_channels, audio_channels_old); list_output_pad = list_output_pad->next; } } if(list_output_pad_start){ g_list_free(list_output_pad_start); } if(list_input_pad_start){ g_list_free(list_input_pad_start); } } } void ags_machine_set_pads(AgsAudio *audio, GType type, guint pads, guint pads_old, AgsMachine *machine) { AgsPad *pad; AgsChannel *channel; AgsChannel *input, *output; AgsMutexManager *mutex_manager; guint i, j; pthread_mutex_t *audio_mutex; pthread_mutex_t *channel_mutex; /* lookup audio mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); if(pads_old < pads){ pthread_mutex_lock(audio_mutex); input = audio->input; output = audio->output; pthread_mutex_unlock(audio_mutex); /* grow input */ if(machine->input != NULL){ if(type == AGS_TYPE_INPUT){ channel = ags_channel_nth(input, pads_old * audio->audio_channels); for(i = pads_old; i < pads; i++){ /* lookup channel mutex */ pthread_mutex_lock(&(ags_application_mutex)); channel_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); /* instantiate pad */ pad = g_object_new(machine->input_pad_type, "channel\0", channel, NULL); gtk_box_pack_start((GtkBox *) machine->input, (GtkWidget *) pad, FALSE, FALSE, 0); ags_pad_resize_lines((AgsPad *) pad, machine->input_line_type, audio->audio_channels, 0); /* iterate */ pthread_mutex_lock(channel_mutex); channel = channel->next_pad; pthread_mutex_unlock(channel_mutex); } } } /* grow output */ if(machine->output != NULL){ if(type == AGS_TYPE_OUTPUT){ channel = ags_channel_nth(output, pads_old * audio->audio_channels); for(i = pads_old; i < pads; i++){ /* lookup channel mutex */ pthread_mutex_lock(&(ags_application_mutex)); channel_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); /* instantiate pad */ pad = g_object_new(machine->output_pad_type, "channel\0", channel, NULL); gtk_box_pack_start((GtkBox *) machine->output, (GtkWidget *) pad, FALSE, FALSE, 0); ags_pad_resize_lines((AgsPad *) pad, machine->output_line_type, audio->audio_channels, 0); /* iterate */ pthread_mutex_lock(channel_mutex); channel = channel->next_pad; pthread_mutex_unlock(channel_mutex); } } } }else if(pads_old > pads){ GList *list, *list_next; /* input - destroy AgsPad's */ list = gtk_container_get_children(GTK_CONTAINER(machine->input)); list = g_list_nth(list, pads); while(list != NULL){ list_next = list->next; gtk_widget_destroy(GTK_WIDGET(list->data)); list = list_next; } /* output - destroy AgsPad's */ list = gtk_container_get_children(GTK_CONTAINER(machine->output)); list = g_list_nth(list, pads); while(list != NULL){ list_next = list->next; gtk_widget_destroy(GTK_WIDGET(list->data)); list = list_next; } } } /** * ags_machine_file_chooser_dialog_new: * @machine: the #AgsMachine * * Creates a new machine file chooser dialog in order to * open audio files. * * Since: 0.4 */ GtkFileChooserDialog* ags_machine_file_chooser_dialog_new(AgsMachine *machine) { GtkFileChooserDialog *file_chooser; GtkCheckButton *check_button; file_chooser = (GtkFileChooserDialog *) gtk_file_chooser_dialog_new(g_strdup("open audio files\0"), (GtkWindow *) gtk_widget_get_toplevel((GtkWidget *) machine), GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL); gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(file_chooser), TRUE); check_button = (GtkCheckButton *) gtk_check_button_new_with_label(g_strdup("open in new channel\0")); gtk_toggle_button_set_active((GtkToggleButton *) check_button, TRUE); gtk_box_pack_start((GtkBox *) GTK_DIALOG(file_chooser)->vbox, (GtkWidget *) check_button, FALSE, FALSE, 0); g_object_set_data((GObject *) file_chooser, "create\0", (gpointer) check_button); check_button = (GtkCheckButton *) gtk_check_button_new_with_label(g_strdup("overwrite existing links\0")); gtk_toggle_button_set_active((GtkToggleButton *) check_button, TRUE); gtk_box_pack_start((GtkBox *) GTK_DIALOG(file_chooser)->vbox, (GtkWidget *) check_button, FALSE, FALSE, 0); g_object_set_data((GObject *) file_chooser, "overwrite\0", (gpointer) check_button); return(file_chooser); } /** * ags_machine_open_files: * @machine: the #AgsMachine * @filenames: the filenames * @overwrite_channels: reset channels * @create_channels: instantiate new channels * * Opens audio files and modifies or creates new channels if wished. * * Since: 0.4 */ void ags_machine_open_files(AgsMachine *machine, GSList *filenames, gboolean overwrite_channels, gboolean create_channels) { AgsWindow *window; AgsOpenFile *open_file; AgsMutexManager *mutex_manager; AgsAudioLoop *audio_loop; AgsTaskThread *task_thread; AgsMain *ags_main; pthread_mutex_t *audio_loop_mutex; window = (AgsWindow *) gtk_widget_get_toplevel(machine); ags_main = window->ags_main; /* get audio loop */ pthread_mutex_lock(&(ags_application_mutex)); audio_loop = ags_main->main_loop; pthread_mutex_unlock(&(ags_application_mutex)); /* lookup audio loop mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); audio_loop_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio_loop); pthread_mutex_unlock(&(ags_application_mutex)); /* get task thread */ task_thread = (AgsTaskThread *) ags_thread_find_type(audio_loop, AGS_TYPE_TASK_THREAD); /* instantiate open file task */ open_file = ags_open_file_new(machine->audio, filenames, overwrite_channels, create_channels); ags_task_thread_append_task(task_thread, AGS_TASK(open_file)); } void ags_machine_copy_pattern(AgsMachine *machine) { AgsAudio *audio; AgsChannel *channel; AgsMutexManager *mutex_manager; xmlDoc *clipboard; xmlNode *audio_node, *notation_node; xmlChar *buffer; int size; gint i; pthread_mutex_t *audio_mutex; pthread_mutex_t *current_mutex; auto xmlNode* ags_machine_copy_pattern_to_notation(AgsChannel *current); xmlNode* ags_machine_copy_pattern_to_notation(AgsChannel *current){ AgsPattern *pattern; xmlNode *notation_node, *current_note; guint x_boundary, y_boundary; guint bank_0, bank_1, k; /* create root node */ notation_node = xmlNewNode(NULL, BAD_CAST "notation\0"); xmlNewProp(notation_node, BAD_CAST "program\0", BAD_CAST "ags\0"); xmlNewProp(notation_node, BAD_CAST "type\0", BAD_CAST AGS_NOTATION_CLIPBOARD_TYPE); xmlNewProp(notation_node, BAD_CAST "version\0", BAD_CAST AGS_NOTATION_CLIPBOARD_VERSION); xmlNewProp(notation_node, BAD_CAST "format\0", BAD_CAST AGS_NOTATION_CLIPBOARD_FORMAT); xmlNewProp(notation_node, BAD_CAST "base_frequency\0", BAD_CAST g_strdup("0\0")); xmlNewProp(notation_node, BAD_CAST "audio-channel\0", BAD_CAST g_strdup_printf("%u\0", current->audio_channel)); bank_0 = machine->bank_0; bank_1 = machine->bank_1; x_boundary = G_MAXUINT; y_boundary = G_MAXUINT; while(current != NULL){ pattern = current->pattern->data; for(k = 0; k < pattern->dim[2]; k++){ if(ags_pattern_get_bit(pattern, bank_0, bank_1, k)){ current_note = xmlNewChild(notation_node, NULL, BAD_CAST "note\0", NULL); xmlNewProp(current_note, BAD_CAST "x\0", BAD_CAST g_strdup_printf("%u\0", k)); xmlNewProp(current_note, BAD_CAST "x1\0", BAD_CAST g_strdup_printf("%u\0", k + 1)); if((AGS_MACHINE_REVERSE_NOTATION & (machine->flags)) != 0){ xmlNewProp(current_note, BAD_CAST "y\0", BAD_CAST g_strdup_printf("%u\0", machine->audio->input_pads - current->pad - 1)); }else{ xmlNewProp(current_note, BAD_CAST "y\0", BAD_CAST g_strdup_printf("%u\0", current->pad)); } if(x_boundary > k){ x_boundary = k; } if((AGS_MACHINE_REVERSE_NOTATION & (machine->flags)) != 0){ guint tmp; tmp = machine->audio->input_pads - current->pad - 1; if(y_boundary > tmp){ y_boundary = tmp; } }else{ if(y_boundary > current->pad){ y_boundary = current->pad; } } } } current = current->next; } xmlNewProp(notation_node, BAD_CAST "x_boundary\0", BAD_CAST g_strdup_printf("%u\0", x_boundary)); xmlNewProp(notation_node, BAD_CAST "y_boundary\0", BAD_CAST g_strdup_printf("%u\0", y_boundary)); return(notation_node); } /* create document */ clipboard = xmlNewDoc(BAD_CAST XML_DEFAULT_VERSION); /* create root node */ audio_node = xmlNewNode(NULL, BAD_CAST "audio\0"); xmlDocSetRootElement(clipboard, audio_node); audio = machine->audio; /* lookup audio mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); /* copy to clipboard */ pthread_mutex_lock(audio_mutex); channel = audio->input; pthread_mutex_unlock(audio_mutex); for(i = 0; i < machine->audio->audio_channels; i++){ /* lookup channel mutex */ pthread_mutex_lock(&(ags_application_mutex)); current_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); /* do it so */ pthread_mutex_lock(current_mutex); notation_node = ags_machine_copy_pattern_to_notation(channel); xmlAddChild(audio_node, notation_node); channel = channel->next; pthread_mutex_unlock(current_mutex); } /* write to clipboard */ xmlDocDumpFormatMemoryEnc(clipboard, &buffer, &size, "UTF-8\0", TRUE); gtk_clipboard_set_text(gtk_clipboard_get(GDK_SELECTION_CLIPBOARD), buffer, size); gtk_clipboard_store(gtk_clipboard_get(GDK_SELECTION_CLIPBOARD)); xmlFreeDoc(clipboard); } /** * ags_machine_new: * @devout: the assigned devout. * * Creates an #AgsMachine * * Returns: a new #AgsMachine * * Since: 0.3 */ AgsMachine* ags_machine_new(GObject *devout) { AgsMachine *machine; GValue value; machine = (AgsMachine *) g_object_new(AGS_TYPE_MACHINE, NULL); g_value_init(&value, G_TYPE_OBJECT); g_value_set_object(&value, devout); g_object_set_property(G_OBJECT(machine->audio), "devout\0", &value); g_value_unset(&value); return(machine); } /** * ags_machine_popup_new: * @machine: the assigned machine. * * Creates #GtkMenu to use as @machine's popup context menu. * * Returns: a new #GtkMenu containing basic actions. * * Since: 0.3 */ GtkMenu* ags_machine_popup_new(AgsMachine *machine) { GtkMenu *popup; GtkMenuItem *item; GList *list, *list_start; popup = (GtkMenu *) gtk_menu_new(); item = (GtkMenuItem *) gtk_menu_item_new_with_label(g_strdup("move up\0")); gtk_menu_shell_append((GtkMenuShell *) popup, (GtkWidget*) item); item = (GtkMenuItem *) gtk_menu_item_new_with_label(g_strdup("move down\0")); gtk_menu_shell_append((GtkMenuShell *) popup, (GtkWidget*) item); item = (GtkMenuItem *) gtk_menu_item_new_with_label(g_strdup("hide\0")); gtk_menu_shell_append((GtkMenuShell *) popup, (GtkWidget*) item); item = (GtkMenuItem *) gtk_menu_item_new_with_label(g_strdup("show\0")); gtk_menu_shell_append((GtkMenuShell *) popup, (GtkWidget*) item); item = (GtkMenuItem *) gtk_menu_item_new_with_label(g_strdup("destroy\0")); gtk_menu_shell_append((GtkMenuShell *) popup, (GtkWidget*) item); item = (GtkMenuItem *) gtk_menu_item_new_with_label(g_strdup("rename\0")); gtk_menu_shell_append((GtkMenuShell *) popup, (GtkWidget*) item); item = (GtkMenuItem *) gtk_menu_item_new_with_label(g_strdup("properties\0")); gtk_menu_shell_append((GtkMenuShell *) popup, (GtkWidget*) item); list_start = list = gtk_container_get_children((GtkContainer *) popup); g_signal_connect((GObject*) list->data, "activate\0", G_CALLBACK(ags_machine_popup_move_up_activate_callback), (gpointer) machine); list = list->next; g_signal_connect((GObject*) list->data, "activate\0", G_CALLBACK(ags_machine_popup_move_down_activate_callback), (gpointer) machine); list = list->next; g_signal_connect((GObject*) list->data, "activate\0", G_CALLBACK(ags_machine_popup_hide_activate_callback), (gpointer) machine); list = list->next; g_signal_connect((GObject*) list->data, "activate\0", G_CALLBACK(ags_machine_popup_show_activate_callback), (gpointer) machine); list = list->next; g_signal_connect((GObject*) list->data, "activate\0", G_CALLBACK(ags_machine_popup_destroy_activate_callback), (gpointer) machine); list = list->next; g_signal_connect((GObject*) list->data, "activate\0", G_CALLBACK(ags_machine_popup_rename_activate_callback), (gpointer) machine); list = list->next; g_signal_connect((GObject*) list->data, "activate\0", G_CALLBACK(ags_machine_popup_properties_activate_callback), (gpointer) machine); g_list_free(list_start); gtk_widget_show_all((GtkWidget*) popup); return(popup); } /** * ags_machine_popup_add_edit_options: * @machine: the assigned machine. * @edit_options: the options to set * * Add options to edit submenu * * Since: 0.4.2 */ void ags_machine_popup_add_edit_options(AgsMachine *machine, guint edit_options) { GtkMenu *edit; GtkMenuItem *item; GList *list, *list_start; list = list_start = gtk_container_get_children(machine->popup); list = g_list_last(list); if((edit = gtk_menu_item_get_submenu(list->data)) == NULL){ item = (GtkMenuItem *) gtk_menu_item_new_with_label(g_strdup("edit\0")); gtk_menu_shell_append((GtkMenuShell *) machine->popup, (GtkWidget*) item); gtk_widget_show(item); edit = (GtkMenu *) gtk_menu_new(); gtk_menu_item_set_submenu(item, edit); gtk_widget_show(edit); } g_list_free(list_start); if((AGS_MACHINE_POPUP_COPY_PATTERN & edit_options) != 0){ item = (GtkMenuItem *) gtk_menu_item_new_with_label(g_strdup("copy pattern\0")); gtk_menu_shell_append((GtkMenuShell *) edit, (GtkWidget*) item); g_signal_connect((GObject*) item, "activate\0", G_CALLBACK(ags_machine_popup_copy_pattern_callback), (gpointer) machine); gtk_widget_show(item); } if((AGS_MACHINE_POPUP_PASTE_PATTERN & edit_options) != 0){ item = (GtkMenuItem *) gtk_menu_item_new_with_label(g_strdup("paste pattern\0")); gtk_menu_shell_append((GtkMenuShell *) edit, (GtkWidget*) item); g_signal_connect((GObject*) item, "activate\0", G_CALLBACK(ags_machine_popup_paste_pattern_callback), (gpointer) machine); gtk_widget_show(item); } } gsequencer-0.6.37/src/ags/X/ags_pad_callbacks.h0000644000175000017500000000324112626272146016217 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_PAD_CALLBACKS_H__ #define __AGS_PAD_CALLBACKS_H__ #include #include #include #include #include #include int ags_pad_parent_set_callback(GtkWidget *widget, GtkObject *old_parent, AgsPad *pad); int ags_pad_destroy_callback(GtkObject *object, AgsPad *pad); int ags_pad_show_callback(GtkWidget *widget, AgsPad *pad); int ags_pad_option_changed_callback(GtkWidget *widget, AgsPad *pad); int ags_pad_group_clicked_callback(GtkWidget *widget, AgsPad *pad); int ags_pad_mute_clicked_callback(GtkWidget *widget, AgsPad *pad); int ags_pad_solo_clicked_callback(GtkWidget *widget, AgsPad *pad); void ags_pad_start_complete_callback(AgsTaskCompletion *task_completion, AgsPad *pad); void ags_pad_init_channel_launch_callback(AgsTask *task, AgsPad *input_pad); #endif /*__AGS_PAD_CALLBACKS_H__*/ gsequencer-0.6.37/src/ags/X/ags_link_collection_editor_callbacks.h0000644000175000017500000000334212621463700022164 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_LINK_COLLECTION_EDITOR_CALLBACKS_H__ #define __AGS_LINK_COLLECTION_EDITOR_CALLBACKS_H__ #include #include #include #include int ags_link_collection_editor_parent_set_callback(GtkWidget *widget, GtkObject *old_parent, AgsLinkCollectionEditor *link_collection_editor); /* control widgets */ void ags_link_collection_editor_link_callback(GtkComboBox *combo, AgsLinkCollectionEditor *link_collection_editor); void ags_link_collection_editor_first_line_callback(GtkSpinButton *spin_button, AgsLinkCollectionEditor *link_collection_editor); void ags_link_collection_editor_first_link_callback(GtkSpinButton *spin_button, AgsLinkCollectionEditor *link_collection_editor); void ags_link_collection_editor_count_callback(GtkSpinButton *spin_button, AgsLinkCollectionEditor *link_collection_editor); #endif /*__AGS_LINK_COLLECTION_EDITOR_CALLBACKS_H__*/ gsequencer-0.6.37/src/ags/X/ags_menu_bar_callbacks.c0000644000175000017500000004032512626272146017242 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void ags_menu_bar_open_response_callback(GtkFileChooserDialog *file_chooser, gint response, AgsMenuBar *menu_bar); extern pthread_mutex_t ags_application_mutex; gboolean ags_menu_bar_destroy_callback(GtkObject *object, AgsMenuBar *menu_bar) { ags_menu_bar_destroy(object); return(TRUE); } void ags_menu_bar_show_callback(GtkWidget *widget, AgsMenuBar *menu_bar) { ags_menu_bar_show(widget); } void ags_menu_bar_open_callback(GtkWidget *menu_item, AgsMenuBar *menu_bar) { AgsWindow *window; GtkFileChooserDialog *file_chooser; gint response; window = (AgsWindow *) gtk_widget_get_toplevel((GtkWidget *) menu_bar); file_chooser = (GtkFileChooserDialog *) gtk_file_chooser_dialog_new("open file\0", (GtkWindow *) window, GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL); gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(file_chooser), FALSE); gtk_widget_show_all((GtkWidget *) file_chooser); g_signal_connect((GObject *) file_chooser, "response\0", G_CALLBACK(ags_menu_bar_open_response_callback), menu_bar); } void ags_menu_bar_open_response_callback(GtkFileChooserDialog *file_chooser, gint response, AgsMenuBar *menu_bar) { if(response == GTK_RESPONSE_ACCEPT){ AgsFile *file; AgsSaveFile *save_file; char *filename; GError *error; filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(file_chooser)); error = NULL; g_spawn_command_line_async(g_strdup_printf("gsequencer --filename %s\0", filename), &error); g_free(filename); } gtk_widget_destroy((GtkWidget *) file_chooser); } void ags_menu_bar_save_callback(GtkWidget *menu_item, AgsMenuBar *menu_bar) { AgsWindow *window; AgsFile *file; window = (AgsWindow *) gtk_widget_get_toplevel((GtkWidget *) menu_bar); //TODO:JK: revise me file = (AgsFile *) g_object_new(AGS_TYPE_FILE, "main\0", window->ags_main, "filename\0", g_strdup(window->name), NULL); ags_file_rw_open(file, TRUE); ags_file_write(file); ags_file_close(file); g_object_unref(G_OBJECT(file)); } void ags_menu_bar_save_as_callback(GtkWidget *menu_item, AgsMenuBar *menu_bar) { AgsWindow *window; GtkFileChooserDialog *file_chooser; AgsAudioLoop *audio_loop; AgsTaskThread *task_thread; AgsMain *ags_main; gint response; window = (AgsWindow *) gtk_widget_get_toplevel((GtkWidget *) menu_bar); file_chooser = (GtkFileChooserDialog *) gtk_file_chooser_dialog_new("save file as\0", (GtkWindow *) window, GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL); gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(file_chooser), FALSE); gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(file_chooser), TRUE); gtk_widget_show_all((GtkWidget *) file_chooser); response = gtk_dialog_run(GTK_DIALOG(file_chooser)); if(response == GTK_RESPONSE_ACCEPT){ AgsFile *file; AgsSaveFile *save_file; char *filename; ags_main = window->ags_main; /* get audio loop */ pthread_mutex_lock(&(ags_application_mutex)); audio_loop = ags_main->main_loop; pthread_mutex_unlock(&(ags_application_mutex)); /* get task thread */ task_thread = (AgsTaskThread *) ags_thread_find_type(audio_loop, AGS_TYPE_TASK_THREAD); /* get filename and instantiate AgsFile */ filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(file_chooser)); file = (AgsFile *) g_object_new(AGS_TYPE_FILE, "main\0", window->ags_main, "filename\0", filename, NULL); window->name = filename; gtk_window_set_title((GtkWindow *) window, g_strconcat("GSequencer - \0", window->name, NULL)); task_thread = ags_thread_find_type(audio_loop, AGS_TYPE_TASK_THREAD); save_file = ags_save_file_new(file); ags_task_thread_append_task(task_thread, AGS_TASK(save_file)); } gtk_widget_destroy((GtkWidget *) file_chooser); } void ags_menu_bar_export_callback(GtkWidget *menu_item, AgsMenuBar *menu_bar) { AgsWindow *window; window = (AgsWindow *) gtk_widget_get_toplevel((GtkWidget *) menu_bar); gtk_widget_show_all((GtkWidget *) window->export_window); } void ags_menu_bar_quit_callback(GtkWidget *menu_item, AgsMenuBar *menu_bar) { AgsWindow *window; GtkDialog *dialog; GtkWidget *cancel_button; gint response; window = (AgsWindow *) gtk_widget_get_toplevel((GtkWidget *) menu_bar); /* ask the user if he wants save to a file */ dialog = (GtkDialog *) gtk_message_dialog_new(GTK_WINDOW(window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, "Do you want to save '%s'?\0", window->name); cancel_button = gtk_dialog_add_button(dialog, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL); gtk_widget_grab_focus(cancel_button); response = gtk_dialog_run(dialog); if(response == GTK_RESPONSE_YES){ AgsFile *file; //TODO:JK: revise me file = (AgsFile *) g_object_new(AGS_TYPE_FILE, "main\0", window->ags_main, "filename\0", g_strdup(window->name), NULL); ags_file_write(file); g_object_unref(G_OBJECT(file)); } if(response != GTK_RESPONSE_CANCEL){ ags_main_quit(AGS_MAIN(window->ags_main)); }else{ gtk_widget_destroy(GTK_WIDGET(dialog)); } } void ags_menu_bar_add_callback(GtkWidget *menu_item, AgsMenuBar *menu_bar) { } void ags_menu_bar_add_panel_callback(GtkWidget *menu_item, AgsMenuBar *menu_bar) { AgsWindow *window; AgsPanel *panel; AgsAddAudio *add_audio; AgsAudioLoop *audio_loop; AgsTaskThread *task_thread; AgsMain *ags_main; window = (AgsWindow *) gtk_widget_get_ancestor((GtkWidget *) menu_bar, AGS_TYPE_WINDOW); ags_main = window->ags_main; /* get audio loop */ pthread_mutex_lock(&(ags_application_mutex)); audio_loop = ags_main->main_loop; pthread_mutex_unlock(&(ags_application_mutex)); /* get task thread */ task_thread = (AgsTaskThread *) ags_thread_find_type(audio_loop, AGS_TYPE_TASK_THREAD); panel = ags_panel_new(G_OBJECT(window->devout)); add_audio = ags_add_audio_new(window->devout, AGS_MACHINE(panel)->audio); ags_task_thread_append_task(task_thread, AGS_TASK(add_audio)); gtk_box_pack_start((GtkBox *) window->machines, GTK_WIDGET(panel), FALSE, FALSE, 0); AGS_MACHINE(panel)->audio->audio_channels = 2; ags_audio_set_pads(AGS_MACHINE(panel)->audio, AGS_TYPE_INPUT, 1); ags_audio_set_pads(AGS_MACHINE(panel)->audio, AGS_TYPE_OUTPUT, 1); ags_connectable_connect(AGS_CONNECTABLE(panel)); gtk_widget_show_all(GTK_WIDGET(panel)); } void ags_menu_bar_add_mixer_callback(GtkWidget *menu_item, AgsMenuBar *menu_bar) { AgsWindow *window; AgsMixer *mixer; AgsAddAudio *add_audio; AgsAudioLoop *audio_loop; AgsTaskThread *task_thread; AgsMain *ags_main; window = (AgsWindow *) gtk_widget_get_ancestor((GtkWidget *) menu_bar, AGS_TYPE_WINDOW); ags_main = window->ags_main; /* get audio loop */ pthread_mutex_lock(&(ags_application_mutex)); audio_loop = ags_main->main_loop; pthread_mutex_unlock(&(ags_application_mutex)); /* get task thread */ task_thread = (AgsTaskThread *) ags_thread_find_type(audio_loop, AGS_TYPE_TASK_THREAD); mixer = ags_mixer_new(G_OBJECT(window->devout)); add_audio = ags_add_audio_new(window->devout, AGS_MACHINE(mixer)->audio); ags_task_thread_append_task(task_thread, AGS_TASK(add_audio)); gtk_box_pack_start((GtkBox *) window->machines, GTK_WIDGET(mixer), FALSE, FALSE, 0); mixer->machine.audio->audio_channels = 2; ags_audio_set_pads(mixer->machine.audio, AGS_TYPE_INPUT, 8); ags_audio_set_pads(mixer->machine.audio, AGS_TYPE_OUTPUT, 1); ags_connectable_connect(AGS_CONNECTABLE(mixer)); gtk_widget_show_all(GTK_WIDGET(mixer)); } void ags_menu_bar_add_drum_callback(GtkWidget *menu_item, AgsMenuBar *menu_bar) { AgsWindow *window; AgsDrum *drum; AgsAddAudio *add_audio; AgsAudioLoop *audio_loop; AgsTaskThread *task_thread; AgsMain *ags_main; window = (AgsWindow *) gtk_widget_get_ancestor((GtkWidget *) menu_bar, AGS_TYPE_WINDOW); ags_main = window->ags_main; /* get audio loop */ pthread_mutex_lock(&(ags_application_mutex)); audio_loop = ags_main->main_loop; pthread_mutex_unlock(&(ags_application_mutex)); /* get task thread */ task_thread = (AgsTaskThread *) ags_thread_find_type(audio_loop, AGS_TYPE_TASK_THREAD); drum = ags_drum_new(G_OBJECT(window->devout)); add_audio = ags_add_audio_new(window->devout, AGS_MACHINE(drum)->audio); ags_task_thread_append_task(task_thread, AGS_TASK(add_audio)); gtk_box_pack_start((GtkBox *) window->machines, GTK_WIDGET(drum), FALSE, FALSE, 0); /* */ drum->machine.audio->audio_channels = 2; /* AgsDrumInputPad */ ags_audio_set_pads(drum->machine.audio, AGS_TYPE_INPUT, 8); ags_audio_set_pads(drum->machine.audio, AGS_TYPE_OUTPUT, 1); /* connect everything */ ags_connectable_connect(AGS_CONNECTABLE(drum)); /* */ gtk_widget_show_all(GTK_WIDGET(drum)); } void ags_menu_bar_add_matrix_callback(GtkWidget *menu_item, AgsMenuBar *menu_bar) { AgsWindow *window; AgsMatrix *matrix; AgsAddAudio *add_audio; AgsAudioLoop *audio_loop; AgsTaskThread *task_thread; AgsMain *ags_main; window = (AgsWindow *) gtk_widget_get_ancestor((GtkWidget *) menu_bar, AGS_TYPE_WINDOW); matrix = ags_matrix_new(G_OBJECT(window->devout)); ags_main = window->ags_main; /* get audio loop */ pthread_mutex_lock(&(ags_application_mutex)); audio_loop = ags_main->main_loop; pthread_mutex_unlock(&(ags_application_mutex)); /* get task thread */ task_thread = (AgsTaskThread *) ags_thread_find_type(audio_loop, AGS_TYPE_TASK_THREAD); add_audio = ags_add_audio_new(window->devout, AGS_MACHINE(matrix)->audio); ags_task_thread_append_task(task_thread, AGS_TASK(add_audio)); gtk_box_pack_start((GtkBox *) window->machines, GTK_WIDGET(matrix), FALSE, FALSE, 0); /* */ matrix->machine.audio->audio_channels = 1; /* AgsMatrixInputPad */ ags_audio_set_pads(matrix->machine.audio, AGS_TYPE_INPUT, 78); ags_audio_set_pads(matrix->machine.audio, AGS_TYPE_OUTPUT, 1); /* connect everything */ ags_connectable_connect(AGS_CONNECTABLE(matrix)); /* */ gtk_widget_show_all(GTK_WIDGET(matrix)); } void ags_menu_bar_add_synth_callback(GtkWidget *menu_item, AgsMenuBar *menu_bar) { AgsWindow *window; AgsSynth *synth; AgsAddAudio *add_audio; AgsAudioLoop *audio_loop; AgsTaskThread *task_thread; AgsMain *ags_main; window = (AgsWindow *) gtk_widget_get_ancestor((GtkWidget *) menu_bar, AGS_TYPE_WINDOW); synth = ags_synth_new(G_OBJECT(window->devout)); ags_main = window->ags_main; /* get audio loop */ pthread_mutex_lock(&(ags_application_mutex)); audio_loop = ags_main->main_loop; pthread_mutex_unlock(&(ags_application_mutex)); /* get task thread */ task_thread = (AgsTaskThread *) ags_thread_find_type(audio_loop, AGS_TYPE_TASK_THREAD); add_audio = ags_add_audio_new(window->devout, AGS_MACHINE(synth)->audio); ags_task_thread_append_task(task_thread, AGS_TASK(add_audio)); gtk_box_pack_start((GtkBox *) window->machines, (GtkWidget *) synth, FALSE, FALSE, 0); synth->machine.audio->audio_channels = 1; ags_audio_set_pads((AgsAudio*) synth->machine.audio, AGS_TYPE_INPUT, 2); ags_audio_set_pads((AgsAudio*) synth->machine.audio, AGS_TYPE_OUTPUT, 78); ags_connectable_connect(AGS_CONNECTABLE(synth)); gtk_widget_show_all((GtkWidget *) synth); } void ags_menu_bar_add_ffplayer_callback(GtkWidget *menu_item, AgsMenuBar *menu_bar) { AgsWindow *window; AgsFFPlayer *ffplayer; AgsAddAudio *add_audio; AgsAudioLoop *audio_loop; AgsTaskThread *task_thread; AgsMain *ags_main; window = (AgsWindow *) gtk_widget_get_ancestor((GtkWidget *) menu_bar, AGS_TYPE_WINDOW); ffplayer = ags_ffplayer_new(G_OBJECT(window->devout)); ags_main = window->ags_main; /* get audio loop */ pthread_mutex_lock(&(ags_application_mutex)); audio_loop = ags_main->main_loop; pthread_mutex_unlock(&(ags_application_mutex)); /* get task thread */ task_thread = (AgsTaskThread *) ags_thread_find_type(audio_loop, AGS_TYPE_TASK_THREAD); add_audio = ags_add_audio_new(window->devout, AGS_MACHINE(ffplayer)->audio); ags_task_thread_append_task(task_thread, AGS_TASK(add_audio)); gtk_box_pack_start((GtkBox *) window->machines, (GtkWidget *) ffplayer, FALSE, FALSE, 0); // ffplayer->machine.audio->frequence = ; ffplayer->machine.audio->audio_channels = 2; ags_audio_set_pads(AGS_MACHINE(ffplayer)->audio, AGS_TYPE_INPUT, 78); ags_audio_set_pads(AGS_MACHINE(ffplayer)->audio, AGS_TYPE_OUTPUT, 1); ags_connectable_connect(AGS_CONNECTABLE(ffplayer)); gtk_widget_show_all((GtkWidget *) ffplayer); } void ags_menu_bar_remove_callback(GtkWidget *menu_item, AgsMenuBar *menu_bar) { } void ags_menu_bar_preferences_callback(GtkWidget *menu_item, AgsMenuBar *menu_bar) { AgsWindow *window; window = (AgsWindow *) gtk_widget_get_ancestor((GtkWidget *) menu_bar, AGS_TYPE_WINDOW); if(window->preferences != NULL){ return; } window->preferences = ags_preferences_new(); window->preferences->window = GTK_WINDOW(window); ags_applicable_reset(AGS_APPLICABLE(window->preferences)); ags_connectable_connect(AGS_CONNECTABLE(window->preferences)); gtk_widget_show_all(GTK_WIDGET(window->preferences)); } void ags_menu_bar_about_callback(GtkWidget *menu_item, AgsMenuBar *menu_bar) { static FILE *file = NULL; struct stat sb; static gchar *license; static GdkPixbuf *logo; GError *error; gchar *authors[] = { "Joël Krähemann\0", NULL }; if(g_file_test("/usr/share/common-licenses/GPL-3\0", G_FILE_TEST_EXISTS)){ if(file == NULL){ file = fopen("/usr/share/common-licenses/GPL-3\0", "r\0"); stat("/usr/share/common-licenses/GPL-3\0", &sb); license = (gchar *) malloc((sb.st_size + 1) * sizeof(gchar)); fread(license, sizeof(char), sb.st_size, file); license[sb.st_size] = '\0'; fclose(file); error = NULL; logo = gdk_pixbuf_new_from_file(g_strdup_printf("%s%s\0", DESTDIR, "/gsequencer/images/ags.png\0"), &error); } } gtk_show_about_dialog((GtkWindow *) gtk_widget_get_ancestor((GtkWidget *) menu_bar, GTK_TYPE_WINDOW), "program-name\0", "gsequencer\0", "authors\0", authors, "license\0", license, "version\0", AGS_VERSION, "website\0", "http://gsequencer.org\0", "title\0", "Advanced Gtk+ Sequencer\0", "logo\0", logo, NULL); } gsequencer-0.6.37/src/ags/X/ags_pad_callbacks.c0000644000175000017500000002611612626272146016220 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include extern pthread_mutex_t ags_application_mutex; void ags_pad_start_complete_response(GtkWidget *dialog, gint response, AgsPad *pad); int ags_pad_parent_set_callback(GtkWidget *widget, GtkObject *old_parent, AgsPad *pad) { if(old_parent != NULL) return; } int ags_pad_destroy_callback(GtkObject *object, AgsPad *pad) { ags_pad_destroy(object); } int ags_pad_show_callback(GtkWidget *widget, AgsPad *pad) { ags_pad_show(widget); } int ags_pad_option_changed_callback(GtkWidget *widget, AgsPad *pad) { return(0); } int ags_pad_group_clicked_callback(GtkWidget *widget, AgsPad *pad) { AgsLine *line; GtkContainer *container; GList *list, *list_start; if(gtk_toggle_button_get_active(pad->group)){ container = (GtkContainer *) pad->expander_set; list_start = list = gtk_container_get_children(container); while(list != NULL){ line = AGS_LINE(list->data); if(!gtk_toggle_button_get_active(line->group)){ gtk_toggle_button_set_active(line->group, TRUE); } list = list->next; } g_list_free(list_start); }else{ container = (GtkContainer *) pad->expander_set; list_start = list = gtk_container_get_children(container); while(list != NULL){ line = AGS_LINE(list->data); if(!gtk_toggle_button_get_active(line->group)){ return(0); } list = list->next; } g_list_free(list_start); gtk_toggle_button_set_active(pad->group, TRUE); } return(0); } int ags_pad_mute_clicked_callback(GtkWidget *widget, AgsPad *pad) { AgsWindow *window; AgsMachine *machine; GtkContainer *container; AgsChannel *current, *next_pad; AgsSetMuted *set_muted; AgsMutexManager *mutex_manager; AgsAudioLoop *audio_loop; AgsTaskThread *task_thread; AgsMain *ags_main; GList *list, *list_start, *tasks; gboolean is_output; pthread_mutex_t *current_mutex; machine = (AgsMachine *) gtk_widget_get_ancestor((GtkWidget *) pad, AGS_TYPE_MACHINE); window = (AgsWindow *) gtk_widget_get_toplevel(machine); ags_main = window->ags_main; /* get audio loop */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); audio_loop = ags_main->main_loop; pthread_mutex_unlock(&(ags_application_mutex)); /* get task thread */ task_thread = (AgsTaskThread *) ags_thread_find_type(audio_loop, AGS_TYPE_TASK_THREAD); /* */ current = pad->channel; tasks = NULL; /* lookup current mutex */ pthread_mutex_lock(&(ags_application_mutex)); current_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) current); pthread_mutex_unlock(&(ags_application_mutex)); if(gtk_toggle_button_get_active(pad->mute)){ if(gtk_toggle_button_get_active(pad->solo)){ gtk_toggle_button_set_active(pad->solo, FALSE); } /* mute */ pthread_mutex_lock(current_mutex); next_pad = pad->channel->next_pad; pthread_mutex_unlock(current_mutex); while(current != next_pad){ /* lookup current mutex */ pthread_mutex_lock(&(ags_application_mutex)); current_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) current); pthread_mutex_unlock(&(ags_application_mutex)); /* instantiate set muted task */ set_muted = ags_set_muted_new((GObject *) current, TRUE); tasks = g_list_prepend(tasks, set_muted); /* iterate */ pthread_mutex_lock(current_mutex); current = current->next; pthread_mutex_unlock(current_mutex); } }else{ if((AGS_MACHINE_SOLO & (machine->flags)) != 0){ pthread_mutex_lock(current_mutex); is_output = (AGS_IS_OUTPUT(pad->channel))? TRUE: FALSE; pthread_mutex_unlock(current_mutex); container = (GtkContainer *) (is_output ? machine->output: machine->input); list_start = list = gtk_container_get_children(container); while(!gtk_toggle_button_get_active(AGS_PAD(list->data)->solo)){ list = list->next; } g_list_free(list_start); gtk_toggle_button_set_active(AGS_PAD(list->data)->solo, FALSE); machine->flags &= ~(AGS_MACHINE_SOLO); } /* unmute */ pthread_mutex_lock(current_mutex); next_pad = pad->channel->next_pad; pthread_mutex_unlock(current_mutex); while(current != next_pad){ /* lookup current mutex */ pthread_mutex_lock(&(ags_application_mutex)); current_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) current); pthread_mutex_unlock(&(ags_application_mutex)); /* instantiate set muted task */ set_muted = ags_set_muted_new((GObject *) current, FALSE); tasks = g_list_prepend(tasks, set_muted); /* iterate */ pthread_mutex_lock(current_mutex); current = current->next; pthread_mutex_unlock(current_mutex); } } ags_task_thread_append_tasks(task_thread, tasks); return(0); } int ags_pad_solo_clicked_callback(GtkWidget *widget, AgsPad *pad) { AgsMachine *machine; GtkContainer *container; GList *list, *list_start; machine = (AgsMachine *) gtk_widget_get_ancestor((GtkWidget *) pad, AGS_TYPE_MACHINE); if(gtk_toggle_button_get_active(pad->solo)){ container = (GtkContainer *) (AGS_IS_OUTPUT(pad->channel) ? machine->output: machine->input); if(gtk_toggle_button_get_active(pad->mute)) gtk_toggle_button_set_active(pad->mute, FALSE); list_start = list = gtk_container_get_children(container); while(list != NULL){ if(list->data == pad){ list = list->next; continue; } gtk_toggle_button_set_active(AGS_PAD(list->data)->mute, TRUE); list = list->next; } g_list_free(list_start); machine->flags |= (AGS_MACHINE_SOLO); }else machine->flags &= ~(AGS_MACHINE_SOLO); return(0); } void ags_pad_start_complete_callback(AgsTaskCompletion *task_completion, AgsPad *pad) { AgsWindow *window; GtkMessageDialog *dialog; AgsDevoutThread *devout_thread; AgsTask *task; task = (AgsTask *) task_completion->task; window = AGS_MAIN(AGS_START_DEVOUT(task)->devout->ags_main)->window; devout_thread = (AgsDevoutThread *) ags_thread_find_type(AGS_MAIN(window->ags_main)->main_loop, AGS_TYPE_DEVOUT_THREAD); if(devout_thread->error != NULL){ /* show error message */ dialog = (GtkMessageDialog *) gtk_message_dialog_new(GTK_WINDOW(window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, "Error: %s\0", devout_thread->error->message); g_signal_connect(dialog, "response\0", G_CALLBACK(ags_pad_start_complete_response), pad); gtk_widget_show_all((GtkWidget *) dialog); } } void ags_pad_start_complete_response(GtkWidget *dialog, gint response, AgsPad *pad) { gtk_widget_destroy(dialog); } void ags_pad_init_channel_launch_callback(AgsTask *task, AgsPad *input_pad) { AgsWindow *window; AgsDevout *devout; AgsChannel *channel, *next_pad; AgsRecycling *recycling; AgsAddAudioSignal *add_audio_signal; AgsAudioLoop *audio_loop; AgsTaskThread *task_thread; AgsMutexManager *mutex_manager; AgsMain *ags_main; GList *recall, *tmp; GList *list, *list_start; pthread_mutex_t *audio_mutex; window = gtk_widget_get_ancestor(input_pad, AGS_TYPE_WINDOW); ags_main = window->ags_main; pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); audio_loop = ags_main->main_loop; audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) input_pad->channel->audio); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(audio_mutex); devout = AGS_DEVOUT(AGS_AUDIO(input_pad->channel->audio)->devout); task_thread = ags_thread_find_type(audio_loop, AGS_TYPE_TASK_THREAD); list_start = list = gtk_container_get_children((GtkContainer *) input_pad->expander_set); channel = input_pad->channel; next_pad = channel->next_pad; #ifdef AGS_DEBUG g_message("launch\0"); #endif while(channel != next_pad){ if(AGS_DEVOUT_PLAY(channel->devout_play) == NULL || AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[0] == NULL){ channel = channel->next; list = list->next; continue; } /* connect done */ recall = ags_recall_find_provider_with_recycling_container(channel->play, G_OBJECT(channel), G_OBJECT(AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[0]->recycling_container)); tmp = recall; recall = ags_recall_find_type(recall, AGS_TYPE_PLAY_CHANNEL_RUN); //TODO:JK: fix me // g_list_free(tmp); if(recall != NULL){ AgsAudioSignal *audio_signal; g_signal_connect_after(channel, "done\0", G_CALLBACK(ags_line_channel_done_callback), AGS_LINE(list->data)); /* add audio signal */ recycling = channel->first_recycling; while(recycling != channel->last_recycling->next){ audio_signal = ags_audio_signal_new((GObject *) devout, (GObject *) recycling, (GObject *) AGS_RECALL(recall->data)->recall_id); /* add audio signal */ ags_recycling_create_audio_signal_with_defaults(recycling, audio_signal, 0.0, 0); audio_signal->stream_current = audio_signal->stream_beginning; ags_audio_signal_connect(audio_signal); /* * emit add_audio_signal on AgsRecycling */ ags_recycling_add_audio_signal(recycling, audio_signal); recycling = recycling->next; } } //TODO:JK: fix me // g_list_free(recall); channel = channel->next; list = list->next; } g_list_free(list_start); pthread_mutex_unlock(audio_mutex); } gsequencer-0.6.37/src/ags/X/ags_line_member_editor.h0000644000175000017500000000421012626272146017275 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_LINE_MEMBER_EDITOR_H__ #define __AGS_LINE_MEMBER_EDITOR_H__ #include #include #include #include #define AGS_TYPE_LINE_MEMBER_EDITOR (ags_line_member_editor_get_type()) #define AGS_LINE_MEMBER_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_LINE_MEMBER_EDITOR, AgsLineMemberEditor)) #define AGS_LINE_MEMBER_EDITOR_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_LINE_MEMBER_EDITOR, AgsLineMemberEditorClass)) #define AGS_IS_LINE_MEMBER_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_LINE_MEMBER_EDITOR)) #define AGS_IS_LINE_MEMBER_EDITOR_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_LINE_MEMBER_EDITOR)) #define AGS_LINE_MEMBER_EDITOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_LINE_MEMBER_EDITOR, AgsLineMemberEditorClass)) typedef struct _AgsLineMemberEditor AgsLineMemberEditor; typedef struct _AgsLineMemberEditorClass AgsLineMemberEditorClass; struct _AgsLineMemberEditor { GtkVBox vbox; GtkVBox *line_member; GtkButton *add; GtkMenu *popup; GtkButton *remove; AgsLadspaBrowser *ladspa_browser; }; struct _AgsLineMemberEditorClass { GtkVBoxClass vbox; }; GType ags_line_member_editor_get_type(void); AgsLineMemberEditor* ags_line_member_editor_new(); #endif /*__AGS_LINE_MEMBER_EDITOR_H__*/ gsequencer-0.6.37/src/ags/X/ags_menu_bar_callbacks.h0000644000175000017500000000450512626272146017247 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_MENU_BAR_CALLBACKS_H__ #define __AGS_MENU_BAR_CALLBACKS_H__ #include #include #include #include #include gboolean ags_menu_bar_destroy_callback(GtkObject *object, AgsMenuBar *menu_bar); void ags_menu_bar_show_callback(GtkWidget *widget, AgsMenuBar *menu_bar); void ags_menu_bar_open_callback(GtkWidget *menu_item, AgsMenuBar *menu_bar); void ags_menu_bar_save_callback(GtkWidget *menu_item, AgsMenuBar *menu_bar); void ags_menu_bar_save_as_callback(GtkWidget *menu_item, AgsMenuBar *menu_bar); void ags_menu_bar_export_callback(GtkWidget *menu_item, AgsMenuBar *menu_bar); void ags_menu_bar_quit_callback(GtkWidget *menu_item, AgsMenuBar *menu_bar); void ags_menu_bar_add_callback(GtkWidget *menu_item, AgsMenuBar *menu_bar); void ags_menu_bar_add_panel_callback(GtkWidget *menu_item, AgsMenuBar *menu_bar); void ags_menu_bar_add_mixer_callback(GtkWidget *menu_item, AgsMenuBar *menu_bar); void ags_menu_bar_add_drum_callback(GtkWidget *menu_item, AgsMenuBar *menu_bar); void ags_menu_bar_add_matrix_callback(GtkWidget *menu_item, AgsMenuBar *menu_bar); void ags_menu_bar_add_synth_callback(GtkWidget *menu_item, AgsMenuBar *menu_bar); void ags_menu_bar_add_ffplayer_callback(GtkWidget *menu_item, AgsMenuBar *menu_bar); void ags_menu_bar_remove_callback(GtkWidget *menu_item, AgsMenuBar *menu_bar); void ags_menu_bar_preferences_callback(GtkWidget *menu_item, AgsMenuBar *menu_bar); void ags_menu_bar_about_callback(GtkWidget *menu_item, AgsMenuBar *menu_bar); #endif /*__AGS_MENU_BAR_CALLBACKS_H__*/ gsequencer-0.6.37/src/ags/X/ags_server_preferences_callbacks.h0000644000175000017500000000172512621463700021340 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_SERVER_PREFERENCES_CALLBACKS_H__ #define __AGS_SERVER_PREFERENCES_CALLBACKS_H__ #include #include #endif /*__AGS_SERVER_PREFERENCES_CALLBACKS_H__*/ gsequencer-0.6.37/src/ags/X/ags_link_collection_editor.h0000644000175000017500000000477112621463700020174 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_LINK_COLLECTION_EDITOR_H__ #define __AGS_LINK_COLLECTION_EDITOR_H__ #include #include #include #define AGS_TYPE_LINK_COLLECTION_EDITOR (ags_link_collection_editor_get_type()) #define AGS_LINK_COLLECTION_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_LINK_COLLECTION_EDITOR, AgsLinkCollectionEditor)) #define AGS_LINK_COLLECTION_EDITOR_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_LINK_COLLECTION_EDITOR, AgsLinkCollectionEditorClass)) #define AGS_IS_LINK_COLLECTION_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_LINK_COLLECTION_EDITOR)) #define AGS_IS_LINK_COLLECTION_EDITOR_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_LINK_COLLECTION_EDITOR)) #define AGS_LINK_COLLECTION_EDITOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_LINK_COLLECTION_EDITOR, AgsLinkCollectionEditorClass)) typedef struct _AgsLinkCollectionEditor AgsLinkCollectionEditor; typedef struct _AgsLinkCollectionEditorClass AgsLinkCollectionEditorClass; struct _AgsLinkCollectionEditor { GtkTable table; GType channel_type; GtkComboBox *link; GtkSpinButton *first_line; GtkSpinButton *first_link; GtkSpinButton *count; }; struct _AgsLinkCollectionEditorClass { GtkTableClass table; }; GType ags_link_collection_editor_get_type(); void ags_link_collection_editor_check_first_line(AgsLinkCollectionEditor *link_collection_editor); void ags_link_collection_editor_check_first_link(AgsLinkCollectionEditor *link_collection_editor); void ags_link_collection_editor_check_count(AgsLinkCollectionEditor *link_collection_editor); AgsLinkCollectionEditor* ags_link_collection_editor_new(); #endif /*__AGS_LINK_COLLECTION_EDITOR_H__*/ gsequencer-0.6.37/src/ags/X/editor/0000755000175000017500000000000012633241336014012 500000000000000gsequencer-0.6.37/src/ags/X/editor/ags_pattern_edit.h0000644000175000017500000001063512621463700017422 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_PATTERN_EDIT_H__ #define __AGS_PATTERN_EDIT_H__ #include #include #include #include #include #include #define AGS_TYPE_PATTERN_EDIT (ags_pattern_edit_get_type()) #define AGS_PATTERN_EDIT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_PATTERN_EDIT, AgsPatternEdit)) #define AGS_PATTERN_EDIT_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_PATTERN_EDIT, AgsPatternEditClass)) #define AGS_IS_PATTERN_EDIT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_PATTERN_EDIT)) #define AGS_IS_PATTERN_EDIT_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_PATTERN_EDIT)) #define AGS_PATTERN_EDIT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS (obj, AGS_TYPE_PATTERN_EDIT, AgsPatternEditClass)) #define AGS_PATTERN_EDIT_MAX_CONTROLS 1200 typedef struct _AgsPatternEdit AgsPatternEdit; typedef struct _AgsPatternEditClass AgsPatternEditClass; typedef enum{ AGS_PATTERN_EDIT_RESETING_VERTICALLY = 1, AGS_PATTERN_EDIT_RESETING_HORIZONTALLY = 1 << 1, AGS_PATTERN_EDIT_POSITION_CURSOR = 1 << 2, AGS_PATTERN_EDIT_ADDING_NOTE = 1 << 3, AGS_PATTERN_EDIT_DELETING_NOTE = 1 << 4, AGS_PATTERN_EDIT_SELECTING_NOTES = 1 << 5, AGS_PATTERN_EDIT_DRAW_FADER = 1 << 6, }AgsPatternEditFlags; typedef enum{ AGS_PATTERN_EDIT_RESET_VSCROLLBAR = 1, AGS_PATTERN_EDIT_RESET_HSCROLLBAR = 1 << 1, AGS_PATTERN_EDIT_RESET_WIDTH = 1 << 2, AGS_PATTERN_EDIT_RESET_HEIGHT = 1 << 3, // reserved }AgsPatternEditResetFlags; typedef enum{ AGS_PATTERN_EDIT_KEY_L_CONTROL = 1, AGS_PATTERN_EDIT_KEY_R_CONTROL = 1 << 1, }AgsPatternEditKeyMask; struct _AgsPatternEdit { GtkTable table; guint flags; guint key_mask; AgsRuler *ruler; GtkDrawingArea *drawing_area; struct _AgsPatternEditControl{ // values retrieved by mouse pressed and released callback AgsNote *note; guint x0_offset; guint y0_offset; guint x0; guint y0; guint x1_offset; guint y1_offset; guint x1; guint y1; }control; guint width; guint height; guint map_width; guint map_height; guint control_height; guint control_margin_y; guint control_width; guint y0; guint y1; guint nth_y; guint stop_y; struct _AgsPatternEditControlCurrent{ // values for drawing refering to current tic and zoom guint control_count; guint control_width; guint x0; guint x1; guint nth_x; }control_current; struct _AgsPatternEditControlUnit{ // values for drawing refering to smallest tic and current zoom guint control_count; guint control_width; guint x0; guint x1; guint nth_x; guint stop_x; }control_unit; guint selected_x; guint selected_y; GtkVScrollbar *vscrollbar; GtkHScrollbar *hscrollbar; }; struct _AgsPatternEditClass { GtkTableClass table; }; GType ags_pattern_edit_get_type(void); void ags_pattern_edit_set_map_height(AgsPatternEdit *pattern_edit, guint map_height); void ags_pattern_edit_reset_vertically(AgsPatternEdit *pattern_edit, guint flags); void ags_pattern_edit_reset_horizontally(AgsPatternEdit *pattern_edit, guint flags); void ags_pattern_edit_draw_segment(AgsPatternEdit *pattern_edit, cairo_t *cr); void ags_pattern_edit_draw_position(AgsPatternEdit *pattern_edit, cairo_t *cr); void ags_pattern_edit_draw_notation(AgsPatternEdit *pattern_edit, cairo_t *cr); void ags_pattern_edit_draw_scroll(AgsPatternEdit *pattern_edit, cairo_t *cr, gdouble position); AgsPatternEdit* ags_pattern_edit_new(); #endif /*__AGS_PATTERN_EDIT_H__*/ gsequencer-0.6.37/src/ags/X/editor/ags_meter.c0000644000175000017500000003116412626272146016056 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include void ags_meter_class_init(AgsMeterClass *meter); void ags_meter_connectable_interface_init(AgsConnectableInterface *connectable); void ags_meter_init(AgsMeter *meter); void ags_meter_connect(AgsConnectable *connectable); void ags_meter_disconnect(AgsConnectable *connectable); void ags_meter_destroy(GtkObject *object); void ags_meter_show(GtkWidget *widget); /** * SECTION:ags_meter * @short_description: piano widget * @title: AgsMeter * @section_id: * @include: ags/X/editor/ags_meter.h * * The #AgsMeter draws you a piano. */ GtkStyle *meter_style; GType ags_meter_get_type(void) { static GType ags_type_meter = 0; if (!ags_type_meter){ static const GTypeInfo ags_meter_info = { sizeof (AgsMeterClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_meter_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsMeter), 0, /* n_preallocs */ (GInstanceInitFunc) ags_meter_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_meter_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_meter = g_type_register_static(GTK_TYPE_DRAWING_AREA, "AgsMeter\0", &ags_meter_info, 0); g_type_add_interface_static(ags_type_meter, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_meter); } void ags_meter_class_init(AgsMeterClass *meter) { } void ags_meter_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->is_ready = NULL; connectable->is_connected = NULL; connectable->connect = ags_meter_connect; connectable->disconnect = ags_meter_disconnect; } void ags_meter_init(AgsMeter *meter) { GtkWidget *widget; widget = (GtkWidget *) meter; gtk_widget_set_style(widget, meter_style); gtk_widget_set_size_request(widget, 60, -1); gtk_widget_set_events (GTK_WIDGET (meter), GDK_EXPOSURE_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK ); } void ags_meter_connect(AgsConnectable *connectable) { AgsMeter *meter; meter = AGS_METER(connectable); g_signal_connect((GObject *) meter, "destroy\0", G_CALLBACK(ags_meter_destroy_callback), (gpointer) meter); g_signal_connect_after((GObject *) meter, "show\0", G_CALLBACK(ags_meter_show_callback), (gpointer) meter); g_signal_connect((GObject *) meter, "expose_event\0", G_CALLBACK(ags_meter_expose_event), (gpointer) meter); g_signal_connect((GObject *) meter, "configure_event\0", G_CALLBACK(ags_meter_configure_event), (gpointer) meter); } void ags_meter_disconnect(AgsConnectable *connectable) { } void ags_meter_destroy(GtkObject *object) { } void ags_meter_show(GtkWidget *widget) { } void ags_meter_paint(AgsMeter *meter) { AgsEditor *editor; GtkWidget *widget; cairo_t *cr; gchar *base_note; guint bitmap; guint y[2]; guint i, i_stop, j, j0; guint border_top; guint control_height; widget = (GtkWidget *) meter; editor = (AgsEditor *) gtk_widget_get_ancestor(widget, AGS_TYPE_EDITOR); border_top = 24; // see ags_ruler.c bitmap = 0x52a52a; // description of the keyboard if(AGS_IS_NOTE_EDIT(editor->current_edit_widget)){ control_height = AGS_NOTE_EDIT(editor->current_edit_widget)->control_height; j = (guint) ceil(GTK_RANGE(AGS_NOTE_EDIT(editor->current_edit_widget)->vscrollbar)->adjustment->value / (double) control_height); y[0] = (guint) round(GTK_RANGE(AGS_NOTE_EDIT(editor->current_edit_widget)->vscrollbar)->adjustment->value) % control_height; }else if(AGS_IS_PATTERN_EDIT(editor->current_edit_widget)){ control_height = AGS_PATTERN_EDIT(editor->current_edit_widget)->control_height; j = (guint) ceil(GTK_RANGE(AGS_PATTERN_EDIT(editor->current_edit_widget)->vscrollbar)->adjustment->value / (double) control_height); y[0] = (guint) round(GTK_RANGE(AGS_PATTERN_EDIT(editor->current_edit_widget)->vscrollbar)->adjustment->value) % control_height; } base_note = AGS_NOTATION(editor->selected_machine->audio->notation->data)->base_note; j = j % 12; /* apply base note */ if(!g_ascii_strncasecmp(base_note, "A\0", 2)){ j = (11 + j) + (editor->selected_machine->audio->input_pads % 12) * (j * editor->selected_machine->audio->input_pads) + (editor->selected_machine->audio->input_pads * 11) + 4; }else if(!g_ascii_strncasecmp(base_note, "A#\0", 3)){ j = (10 + j) + (editor->selected_machine->audio->input_pads % 12) * (j * editor->selected_machine->audio->input_pads) + (editor->selected_machine->audio->input_pads * 10) + 4; }else if(!g_ascii_strncasecmp(base_note, "H\0", 2)){ j = (9 + j) + (editor->selected_machine->audio->input_pads % 12) * (j * editor->selected_machine->audio->input_pads) + (editor->selected_machine->audio->input_pads * 9) + 4; }else if(!g_ascii_strncasecmp(base_note, "C\0", 2)){ j = (8 + j) + (editor->selected_machine->audio->input_pads % 12) * (j * editor->selected_machine->audio->input_pads) + (editor->selected_machine->audio->input_pads * 8) + 4; }else if(!g_ascii_strncasecmp(base_note, "C#\0", 3)){ j = (7 + j) + (editor->selected_machine->audio->input_pads % 12) * (j * editor->selected_machine->audio->input_pads) + (editor->selected_machine->audio->input_pads * 7) + 4; }else if(!g_ascii_strncasecmp(base_note, "D\0", 2)){ j = (6 + j) + (editor->selected_machine->audio->input_pads % 12) * (j * editor->selected_machine->audio->input_pads) + (editor->selected_machine->audio->input_pads * 6) + 4; }else if(!g_ascii_strncasecmp(base_note, "D#\0", 3)){ j = (5 + j) + (editor->selected_machine->audio->input_pads % 12) * (j * editor->selected_machine->audio->input_pads) + (editor->selected_machine->audio->input_pads * 5) + 4; }else if(!g_ascii_strncasecmp(base_note, "E\0", 2)){ j = (4 + j) + (editor->selected_machine->audio->input_pads % 12) * (j * editor->selected_machine->audio->input_pads) + (editor->selected_machine->audio->input_pads * 4) + 4; }else if(!g_ascii_strncasecmp(base_note, "F\0", 2)){ j = (3 + j) + (editor->selected_machine->audio->input_pads % 12) * (j * editor->selected_machine->audio->input_pads) + (editor->selected_machine->audio->input_pads * 3) + 4; }else if(!g_ascii_strncasecmp(base_note, "F#\0", 3)){ j = (2 + j) + (editor->selected_machine->audio->input_pads % 12) * (j * editor->selected_machine->audio->input_pads) + (editor->selected_machine->audio->input_pads * 2) + 4; }else if(!g_ascii_strncasecmp(base_note, "G\0", 2)){ j = (1 + j) + (editor->selected_machine->audio->input_pads % 12) * (j * editor->selected_machine->audio->input_pads) + (editor->selected_machine->audio->input_pads) + 4; }else if(!g_ascii_strncasecmp(base_note, "G#\0", 3)){ j = (j) + (editor->selected_machine->audio->input_pads % 12) * (j * editor->selected_machine->audio->input_pads) + 4; } j = j % 12; if(y[0] != 0){ y[0] = control_height - y[0]; } y[1] = ((guint) (widget->allocation.height - border_top) - y[0]) % control_height; i_stop = ((widget->allocation.height - border_top) - y[0] - y[1]) / control_height; cr = gdk_cairo_create(widget->window); cairo_set_source_rgb(cr, 1.0, 1.0, 1.0); cairo_rectangle(cr, 0.0, (double) border_top, (double) widget->allocation.width, (double) widget->allocation.height - border_top); cairo_fill(cr); cairo_set_line_width(cr, 1.0); cairo_set_source_rgb(cr, 0.68, 0.68, 0.68); if(y[0] != 0){ j0 = (j != 0) ? j -1: 11; if(((1 << j0) & bitmap) != 0){ cairo_set_source_rgb(cr, 0.2, 0.2, 0.2); cairo_rectangle(cr, 0.0, 0.0, 2.0 / 3.0 * (double) widget->allocation.width, (double) y[0] + border_top); cairo_fill(cr); cairo_set_source_rgb(cr, 0.68, 0.68, 0.68); if(y[0] > control_height / 2){ cairo_move_to(cr, 2.0 / 3.0 * (double) widget->allocation.width, (double) (y[0] - control_height / 2) + border_top); cairo_line_to(cr, (double) widget->allocation.width, (double) (y[0] - control_height / 2) + border_top); cairo_stroke(cr); } cairo_move_to(cr, (double) widget->allocation.width, border_top); cairo_line_to(cr, (double) widget->allocation.width, (double) y[0] + border_top); cairo_stroke(cr); }else{ if(((1 << (j0 + 1)) & bitmap) == 0){ cairo_move_to(cr, 0.0, (double) y[0]); cairo_line_to(cr, (double) widget->allocation.width, (double) y[0] + border_top); cairo_stroke(cr); } cairo_move_to(cr, (double) widget->allocation.width, border_top); cairo_line_to(cr, (double) widget->allocation.width, (double) y[0] + border_top); cairo_stroke(cr); } } for(i = 0; i < i_stop; i++){ if(((1 << j) & bitmap) != 0){ // draw semi tone key cairo_set_source_rgb(cr, 0.2, 0.2, 0.2); cairo_rectangle(cr, 0.0, (double) (i * control_height + y[0] + border_top), 2.0 / 3.0 * (double) widget->allocation.width, (double) control_height); cairo_fill(cr); cairo_set_source_rgb(cr, 0.68, 0.68, 0.68); cairo_move_to(cr, 2.0 / 3.0 * (double) widget->allocation.width, (double) (i * control_height + y[0] + border_top + control_height / 2)); cairo_line_to(cr, (double) widget->allocation.width, (double) (i * control_height + y[0] + border_top + control_height / 2)); cairo_stroke(cr); cairo_move_to(cr, (double) widget->allocation.width, (double) (i * control_height + y[0] + border_top)); cairo_line_to(cr, (double) widget->allocation.width, (double) (i * control_height + y[0] + border_top + control_height)); cairo_stroke(cr); }else{ // no semi tone key if(((1 << (j + 1)) & bitmap) == 0){ cairo_move_to(cr, 0.0, (double) (i * control_height + y[0] + border_top + control_height)); cairo_line_to(cr, (double) widget->allocation.width, (double) (i * control_height + y[0] + border_top + control_height)); cairo_stroke(cr); } cairo_move_to(cr, (double) widget->allocation.width, (double) (i * control_height + y[0] + border_top)); cairo_line_to(cr, (double) widget->allocation.width, (double) (i * control_height + y[0] + border_top + control_height)); cairo_stroke(cr); } if(j == 11) j = 0; else j++; } if(y[1] != 0){ j0 = j; if(((1 << j0) & bitmap) != 0){ cairo_set_source_rgb(cr, 0.2, 0.2, 0.2); cairo_rectangle(cr, 0.0, (double) (widget->allocation.height - y[1]), 2.0 / 3.0 * (double) widget->allocation.width, (double) y[1]); cairo_fill(cr); cairo_set_source_rgb(cr, 0.68, 0.68, 0.68); if(y[1] > control_height / 2){ cairo_move_to(cr, 2.0 / 3.0 * (double) widget->allocation.width, (double) (widget->allocation.height - y[1] + control_height / 2)); cairo_line_to(cr, (double) widget->allocation.width, (double) ((widget->allocation.height) - y[1] + control_height / 2)); cairo_stroke(cr); } cairo_move_to(cr, (double) widget->allocation.width, (double) (widget->allocation.height - y[1])); cairo_line_to(cr, (double) widget->allocation.width, (double) widget->allocation.height); cairo_stroke(cr); }else{ cairo_move_to(cr, (double) widget->allocation.width, (double) (widget->allocation.height - y[1])); cairo_line_to(cr, (double) widget->allocation.width, (double) widget->allocation.height); cairo_stroke(cr); } } } /** * ags_meter_new: * * Create a new #AgsMeter. * * Since: 0.4 */ AgsMeter* ags_meter_new() { AgsMeter *meter; meter = (AgsMeter *) g_object_new(AGS_TYPE_METER, NULL); return(meter); } gsequencer-0.6.37/src/ags/X/editor/ags_note_edit_callbacks.c0000644000175000017500000013714012632357300020705 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void ags_note_edit_init_channel_launch_callback(AgsTask *task, AgsNote *note); extern pthread_mutex_t ags_application_mutex; extern AgsConfig *config; void ags_note_edit_set_audio_channels_callback(AgsAudio *audio, guint audio_channels, guint audio_channels_old, AgsNoteEdit *note_edit) { AgsEditor *editor; AgsEditorChild *editor_child; GList *list; GList *tabs; GList *notation; guint i; editor = (AgsEditor *) gtk_widget_get_ancestor(GTK_WIDGET(note_edit), AGS_TYPE_EDITOR); editor_child = NULL; list = editor->editor_child; while(list != NULL){ if(AGS_EDITOR_CHILD(list->data)->edit_widget == note_edit){ editor_child = AGS_EDITOR_CHILD(list->data); break; } list = list->next; } if(audio_channels_old < audio_channels){ notation = g_list_nth(audio->notation, audio_channels_old - 1); for(i = audio_channels_old; i < audio_channels; i++){ ags_notebook_insert_tab(editor_child->notebook, i); tabs = editor_child->notebook->tabs; notation = notation->next; AGS_NOTEBOOK_TAB(tabs->data)->notation = notation->data; gtk_toggle_button_set_active(AGS_NOTEBOOK_TAB(tabs->data)->toggle, TRUE); } gtk_widget_show_all(editor_child->notebook); }else{ for(i = audio_channels; i < audio_channels_old; i++){ ags_notebook_remove_tab(editor_child->notebook, i); } } } void ags_note_edit_set_pads_callback(AgsAudio *audio, GType channel_type, guint pads, guint pads_old, AgsNoteEdit *note_edit) { AgsEditor *editor; editor = (AgsEditor *) gtk_widget_get_ancestor(GTK_WIDGET(note_edit), AGS_TYPE_EDITOR); if((AGS_AUDIO_NOTATION_DEFAULT & (audio->flags)) != 0){ if(!g_type_is_a(channel_type, AGS_TYPE_INPUT)){ return; } }else{ if(!g_type_is_a(channel_type, AGS_TYPE_OUTPUT)){ return; } } if(AGS_IS_NOTE_EDIT(note_edit)){ ags_note_edit_set_map_height(note_edit, pads * note_edit->control_height); }else if(AGS_IS_NOTE_EDIT(note_edit)){ ags_note_edit_set_map_height(AGS_NOTE_EDIT(note_edit), pads * AGS_NOTE_EDIT(note_edit)->control_height); } gtk_widget_queue_draw(editor->current_meter); } gboolean ags_note_edit_drawing_area_expose_event(GtkWidget *widget, GdkEventExpose *event, AgsNoteEdit *note_edit) { AgsEditor *editor; guint width; double zoom, zoom_old; double tact_factor, zoom_factor; double tact; gdouble old_upper, new_upper; gdouble position; guint history; editor = (AgsEditor *) gtk_widget_get_ancestor(GTK_WIDGET(note_edit), AGS_TYPE_EDITOR); /* calculate zoom */ history = gtk_combo_box_get_active(editor->toolbar->zoom); zoom = exp2((double) history - 2.0); zoom_old = exp2((double) editor->toolbar->zoom_history - 2.0); zoom_factor = 0.25; tact_factor = exp2(6.0 - (double) gtk_combo_box_get_active((GtkComboBox *) editor->toolbar->zoom)); tact = exp2((double) gtk_combo_box_get_active((GtkComboBox *) editor->toolbar->zoom) - 2.0); editor->toolbar->zoom_history = history; position = GTK_RANGE(note_edit->hscrollbar)->adjustment->value; old_upper = GTK_RANGE(note_edit->hscrollbar)->adjustment->upper; note_edit->flags |= AGS_NOTE_EDIT_RESETING_HORIZONTALLY; ags_note_edit_reset_horizontally(note_edit, AGS_NOTE_EDIT_RESET_HSCROLLBAR | AGS_NOTE_EDIT_RESET_WIDTH); note_edit->flags &= (~AGS_NOTE_EDIT_RESETING_HORIZONTALLY); new_upper = GTK_RANGE(note_edit->hscrollbar)->adjustment->upper; gtk_adjustment_set_value(GTK_RANGE(note_edit->hscrollbar)->adjustment, position / old_upper * new_upper); /* reset adjustments */ width = widget->allocation.width; gtk_adjustment_set_upper(GTK_RANGE(note_edit->hscrollbar)->adjustment, (gdouble) (note_edit->map_width - width)); gtk_adjustment_set_upper(note_edit->ruler->adjustment, (gdouble) (note_edit->map_width - width) / note_edit->control_current.control_width); if(editor->selected_machine != NULL){ AgsMachine *machine; machine = editor->selected_machine; if(machine != NULL){ cairo_t *cr; cr = gdk_cairo_create(widget->window); cairo_push_group(cr); if(AGS_IS_PANEL(machine)){ }else if(AGS_IS_MIXER(machine)){ }else if(AGS_IS_DRUM(machine)){ ags_note_edit_draw_segment(note_edit, cr); ags_note_edit_draw_notation(note_edit, cr); }else if(AGS_IS_MATRIX(machine)){ ags_note_edit_draw_segment(note_edit, cr); ags_note_edit_draw_notation(note_edit, cr); }else if(AGS_IS_SYNTH(machine)){ ags_note_edit_draw_segment(note_edit, cr); ags_note_edit_draw_notation(note_edit, cr); }else if(AGS_IS_FFPLAYER(machine)){ ags_note_edit_draw_segment(note_edit, cr); ags_note_edit_draw_notation(note_edit, cr); } if(editor->toolbar->selected_edit_mode == editor->toolbar->position){ ags_note_edit_draw_position(note_edit, cr); } cairo_pop_group_to_source(cr); cairo_paint(cr); } ags_meter_paint(editor->current_meter); } return(TRUE); } gboolean ags_note_edit_drawing_area_configure_event(GtkWidget *widget, GdkEventConfigure *event, AgsNoteEdit *note_edit) { note_edit->flags |= AGS_NOTE_EDIT_RESETING_VERTICALLY; ags_note_edit_reset_vertically(note_edit, AGS_NOTE_EDIT_RESET_VSCROLLBAR); note_edit->flags &= (~AGS_NOTE_EDIT_RESETING_VERTICALLY); note_edit->flags |= AGS_NOTE_EDIT_RESETING_HORIZONTALLY; ags_note_edit_reset_horizontally(note_edit, AGS_NOTE_EDIT_RESET_HSCROLLBAR); note_edit->flags &= (~AGS_NOTE_EDIT_RESETING_HORIZONTALLY); return(FALSE); } gboolean ags_note_edit_drawing_area_button_press_event(GtkWidget *widget, GdkEventButton *event, AgsNoteEdit *note_edit) { AgsMachine *machine; AgsEditor *editor; double tact, zoom; auto void ags_note_edit_drawing_area_button_press_event_set_control(); void ags_note_edit_drawing_area_button_press_event_set_control(){ AgsNote *note; guint note_offset_x0, note_offset_y0; guint note_x, note_y; if(note_edit->control.y0 >= note_edit->map_height || note_edit->control.x0 >= note_edit->map_width) return; note_offset_x0 = (guint) (ceil((double) (note_edit->control.x0_offset) / (double) (note_edit->control_current.control_width))); if(note_edit->control.x0 >= note_edit->control_current.x0) note_x = (guint) (floor((double) (note_edit->control.x0 - note_edit->control_current.x0) / (double) (note_edit->control_current.control_width))); else{ note_offset_x0 -= 1; note_x = 0; } note_offset_y0 = (guint) ceil((double) (note_edit->control.y0_offset) / (double) (note_edit->control_height)); if(note_edit->control.y0 >= note_edit->y0) note_y = (guint) floor((double) (note_edit->control.y0 - note_edit->y0) / (double) (note_edit->control_height)); else{ note_offset_y0 -= 1; note_y = 0; } note = note_edit->control.note; note->flags = AGS_NOTE_GUI; note->x[0] = (note_x * tact) + (note_offset_x0 * tact); note->x[1] = (guint) note->x[0] + 1; note->y = note_y + note_offset_y0; } editor = (AgsEditor *) gtk_widget_get_ancestor(GTK_WIDGET(note_edit), AGS_TYPE_EDITOR); gtk_widget_grab_focus(note_edit->drawing_area); if(editor->selected_machine != NULL && event->button == 1 && (machine = editor->selected_machine) != NULL){ AgsToolbar *toolbar; toolbar = editor->toolbar; if(toolbar->selected_edit_mode == toolbar->position){ note_edit->flags |= AGS_NOTE_EDIT_POSITION_CURSOR; }else if(toolbar->selected_edit_mode == toolbar->edit){ note_edit->flags |= AGS_NOTE_EDIT_ADDING_NOTE; }else if(toolbar->selected_edit_mode == toolbar->clear){ note_edit->flags |= AGS_NOTE_EDIT_DELETING_NOTE; }else if(toolbar->selected_edit_mode == toolbar->select){ note_edit->flags |= AGS_NOTE_EDIT_SELECTING_NOTES; } /* store the events position */ note_edit->control.x0_offset = (guint) round((double) GTK_RANGE(note_edit->hscrollbar)->adjustment->value); note_edit->control.y0_offset = (guint) round((double) GTK_RANGE(note_edit->vscrollbar)->adjustment->value); note_edit->control.x0 = (guint) event->x; note_edit->control.y0 = (guint) event->y; if((AGS_NOTE_EDIT_ADDING_NOTE & (note_edit->flags)) != 0 || (AGS_NOTE_EDIT_POSITION_CURSOR & (note_edit->flags)) != 0){ tact = exp2(6.0 - (double) gtk_combo_box_get_active((GtkComboBox *) editor->toolbar->zoom)); if(AGS_IS_PANEL(machine)){ }else if(AGS_IS_MIXER(machine)){ }else if(AGS_IS_DRUM(machine)){ ags_note_edit_drawing_area_button_press_event_set_control(); }else if(AGS_IS_MATRIX(machine)){ ags_note_edit_drawing_area_button_press_event_set_control(); }else if(AGS_IS_SYNTH(machine)){ ags_note_edit_drawing_area_button_press_event_set_control(); }else if(AGS_IS_FFPLAYER(machine)){ ags_note_edit_drawing_area_button_press_event_set_control(); } } } return(TRUE); } gboolean ags_note_edit_drawing_area_button_release_event(GtkWidget *widget, GdkEventButton *event, AgsNoteEdit *note_edit) { AgsMachine *machine; AgsEditor *editor; GtkStyle *note_edit_style; AgsNote *note, *note0; double tact; static const gdouble white_gc = 65535.0; auto void ags_note_edit_drawing_area_button_release_event_set_control(); auto void ags_note_edit_drawing_area_button_release_event_draw_control(cairo_t *cr); auto void ags_note_edit_drawing_area_button_release_event_delete_point(); auto void ags_note_edit_drawing_area_button_release_event_select_region(); void ags_note_edit_drawing_area_button_release_event_set_control(){ AgsAudio *audio; AgsMutexManager *mutex_manager; GList *list_notation; guint note_x, note_y; guint note_offset_x1; gint i; pthread_mutex_t *audio_mutex; audio = machine->audio; /* lookup audio mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); /* get offset x1 */ if(note_edit->control.x0 >= note_edit->map_width){ note_edit->control.x0 = note_edit->map_width - 1; } note_offset_x1 = (guint) (ceil((double) (note_edit->control.x1_offset) / (double) (note_edit->control_current.control_width))); if(note_edit->control.x1 >= note_edit->control_current.x0){ note_x = (guint) (ceil((double) (note_edit->control.x1 - note_edit->control_current.x0) / (double) (note_edit->control_current.control_width))); }else{ note_offset_x1 -= 1; note_x = 0; } note->x[1] = (note_x * tact) + (note_offset_x1 * tact); /* add note */ pthread_mutex_lock(audio_mutex); list_notation = audio->notation; pthread_mutex_unlock(audio_mutex); i = 0; while((i = ags_notebook_next_active_tab(editor->current_notebook, i)) != -1){ /* retrieve notation */ pthread_mutex_lock(audio_mutex); list_notation = g_list_nth(audio->notation, i); pthread_mutex_unlock(audio_mutex); if(list_notation == NULL){ i++; continue; } note0 = ags_note_duplicate(note); /* do it so */ pthread_mutex_lock(audio_mutex); ags_notation_add_note(AGS_NOTATION(list_notation->data), note0, FALSE); pthread_mutex_unlock(audio_mutex); /* iterate */ i++; } #ifdef DEBUG fprintf(stdout, "x0 = %llu\nx1 = %llu\ny = %llu\n\n\0", (long long unsigned int) note->x[0], (long long unsigned int) note->x[1], (long long unsigned int) note->y); #endif } void ags_note_edit_drawing_area_button_release_event_draw_control(cairo_t *cr){ guint x, y, width, height; widget = (GtkWidget *) note_edit->drawing_area; // cr = gdk_cairo_create(widget->window); x = note->x[0] * note_edit->control_unit.control_width; width = note->x[1] * note_edit->control_unit.control_width; if(x < note_edit->control.x1_offset){ if(width > note_edit->control.x1_offset){ width -= (guint) x; x = 0; }else{ return; } }else if(x < note_edit->control.x1_offset + widget->allocation.width){ width -= x; x -= note_edit->control.x1_offset; }else{ return; } if(x + width > widget->allocation.width) width = widget->allocation.width - x; y = note->y * note_edit->control_height; if(y < note_edit->control.y1_offset){ if(y + note_edit->control_height - note_edit->control_margin_y < note_edit->control.y1_offset){ return; }else{ if(y + note_edit->control_margin_y < note_edit->control.y1_offset){ height = note_edit->control_height; y = y + note_edit->control_margin_y - note_edit->control.y1_offset; }else{ height = note_edit->y0; y -= note_edit->control.y1_offset; } } }else if(y < note_edit->control.y1_offset + widget->allocation.height - note_edit->control_height){ height = note_edit->control_height - 2 * note_edit->control_margin_y; y = y - note_edit->control.y1_offset + note_edit->control_margin_y; }else{ if(y > note_edit->control.y1_offset + widget->allocation.height - note_edit->y1 + note_edit->control_margin_y){ return; }else{ height = note_edit->y0; y = y - note_edit->control.y1_offset + note_edit->control_margin_y; } } cairo_set_source_rgb(cr, note_edit_style->fg[0].red / white_gc, note_edit_style->fg[0].green / white_gc, note_edit_style->fg[0].blue / white_gc); cairo_rectangle(cr, (double) x, (double) y, (double) width, (double) height); cairo_fill(cr); } void ags_note_edit_drawing_area_button_release_event_delete_point(){ AgsAudio *audio; AgsMutexManager *mutex_manager; GList *list_notation; guint x, y; gint history; gint i; pthread_mutex_t *audio_mutex; audio = machine->audio; /* lookup audio mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); /* retrieve point */ x = note_edit->control.x0_offset + note_edit->control.x0 - 1; y = note_edit->control.y0_offset + note_edit->control.y0; x = (guint) ceil((double) x / (double) (note_edit->control_unit.control_width)); y = (guint) floor((double) y / (double) (note_edit->control_height)); #ifdef AGS_DEBUG g_message("%d, %d\0", x, y); #endif /* select notes */ pthread_mutex_lock(audio_mutex); list_notation = audio->notation; pthread_mutex_unlock(audio_mutex); i = 0; while((i = ags_notebook_next_active_tab(editor->current_notebook, i)) != -1){ /* retrieve notation */ pthread_mutex_lock(audio_mutex); list_notation = g_list_nth(audio->notation, i); pthread_mutex_unlock(audio_mutex); if(list_notation == NULL){ i++; continue; } /* do it so */ pthread_mutex_lock(audio_mutex); ags_notation_remove_note_at_position(AGS_NOTATION(list_notation->data), x, y); pthread_mutex_unlock(audio_mutex); /* iterate */ i++; } } void ags_note_edit_drawing_area_button_release_event_select_region(){ AgsAudio *audio; AgsMutexManager *mutex_manager; GList *list_notation; guint x0, x1, y0, y1; gint i; pthread_mutex_t *audio_mutex; audio = machine->audio; /* lookup audio mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); /* get real size and offset */ x0 = note_edit->control.x0_offset + note_edit->control.x0; x1 = note_edit->control.x1_offset + note_edit->control.x1; if(x0 > x1){ guint tmp; tmp = x1; x1 = x0; x0 = tmp; } /* convert to region */ x0 = (guint) (floor((double) x0 / (double) (note_edit->control_current.control_width)) * tact); x1 = (guint) (ceil((double) x1 / (double) (note_edit->control_current.control_width)) * tact); /* get real size and offset */ y0 = note_edit->control.y0_offset + note_edit->control.y0; y1 = note_edit->control.y1_offset + note_edit->control.y1; if(y0 > y1){ guint tmp; tmp = y1; y1 = y0; y0 = tmp; } /* convert to region */ y0 = (guint) floor((double) y0 / (double) (note_edit->control_height)); y1 = (guint) ceil((double) y1 / (double) (note_edit->control_height)); /* select notes */ pthread_mutex_lock(audio_mutex); list_notation = audio->notation; pthread_mutex_unlock(audio_mutex); i = 0; while((i = ags_notebook_next_active_tab(editor->current_notebook, i)) != -1){ /* retrieve notation */ pthread_mutex_lock(audio_mutex); list_notation = g_list_nth(audio->notation, i); pthread_mutex_unlock(audio_mutex); if(list_notation == NULL){ i++; continue; } /* do it so */ pthread_mutex_lock(audio_mutex); ags_notation_add_region_to_selection(AGS_NOTATION(list_notation->data), x0, y0, x1, y1, TRUE); pthread_mutex_unlock(audio_mutex); /* iterate */ i++; } } editor = (AgsEditor *) gtk_widget_get_ancestor(GTK_WIDGET(note_edit), AGS_TYPE_EDITOR); if(editor->selected_machine != NULL && event->button == 1){ AgsMutexManager *mutex_manager; cairo_t *cr; pthread_mutex_t *audio_mutex; pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) editor->selected_machine->audio); pthread_mutex_unlock(&(ags_application_mutex)); if(event->x >= 0.0){ note_edit->control.x1 = (guint) event->x; }else{ note_edit->control.x1 = 0; } if(event->y >= 0.0){ note_edit->control.y1 = (guint) event->y; }else{ note_edit->control.y1 = 0; } machine = editor->selected_machine; note = note_edit->control.note; note_edit_style = gtk_widget_get_style(widget); /* store the events position */ note_edit->control.x1_offset = (guint) round((double) note_edit->hscrollbar->scrollbar.range.adjustment->value); note_edit->control.y1_offset = (guint) round((double) note_edit->vscrollbar->scrollbar.range.adjustment->value); tact = exp2(6.0 - (double) gtk_combo_box_get_active((GtkComboBox *) editor->toolbar->zoom)); cr = gdk_cairo_create(widget->window); cairo_push_group(cr); if((AGS_NOTE_EDIT_POSITION_CURSOR & (note_edit->flags)) != 0){ note_edit->flags &= (~AGS_NOTE_EDIT_POSITION_CURSOR); ags_note_edit_draw_segment(note_edit, cr); ags_note_edit_draw_notation(note_edit, cr); note_edit->selected_x = note_edit->control.note->x[0]; note_edit->selected_y = note_edit->control.note->y; if(AGS_IS_PANEL(machine)){ }else if(AGS_IS_MIXER(machine)){ }else if(AGS_IS_DRUM(machine)){ ags_note_edit_draw_position(note_edit, cr); }else if(AGS_IS_MATRIX(machine)){ ags_note_edit_draw_position(note_edit, cr); }else if(AGS_IS_FFPLAYER(machine)){ ags_note_edit_draw_position(note_edit, cr); }else if(AGS_IS_SYNTH(machine)){ ags_note_edit_draw_position(note_edit, cr); } }else if((AGS_NOTE_EDIT_ADDING_NOTE & (note_edit->flags)) != 0){ note_edit->flags &= (~AGS_NOTE_EDIT_ADDING_NOTE); ags_note_edit_draw_segment(note_edit, cr); ags_note_edit_draw_notation(note_edit, cr); pthread_mutex_lock(audio_mutex); if(AGS_IS_PANEL(machine)){ }else if(AGS_IS_MIXER(machine)){ }else if(AGS_IS_DRUM(machine)){ ags_note_edit_drawing_area_button_release_event_set_control(); }else if(AGS_IS_MATRIX(machine)){ ags_note_edit_drawing_area_button_release_event_set_control(); }else if(AGS_IS_FFPLAYER(machine)){ ags_note_edit_drawing_area_button_release_event_set_control(); }else if(AGS_IS_SYNTH(machine)){ ags_note_edit_drawing_area_button_release_event_set_control(); } pthread_mutex_unlock(audio_mutex); if(AGS_IS_PANEL(machine)){ }else if(AGS_IS_MIXER(machine)){ }else if(AGS_IS_DRUM(machine)){ ags_note_edit_drawing_area_button_release_event_draw_control(cr); }else if(AGS_IS_MATRIX(machine)){ ags_note_edit_drawing_area_button_release_event_draw_control(cr); }else if(AGS_IS_FFPLAYER(machine)){ ags_note_edit_drawing_area_button_release_event_draw_control(cr); }else if(AGS_IS_SYNTH(machine)){ ags_note_edit_drawing_area_button_release_event_draw_control(cr); } }else if((AGS_NOTE_EDIT_DELETING_NOTE & (note_edit->flags)) != 0){ note_edit->flags &= (~AGS_NOTE_EDIT_DELETING_NOTE); pthread_mutex_lock(audio_mutex); ags_note_edit_drawing_area_button_release_event_delete_point(); pthread_mutex_unlock(audio_mutex); ags_note_edit_draw_segment(note_edit, cr); ags_note_edit_draw_notation(note_edit, cr); }else if((AGS_NOTE_EDIT_SELECTING_NOTES & (note_edit->flags)) != 0){ note_edit->flags &= (~AGS_NOTE_EDIT_SELECTING_NOTES); pthread_mutex_lock(audio_mutex); ags_note_edit_drawing_area_button_release_event_select_region(); pthread_mutex_unlock(audio_mutex); ags_note_edit_draw_segment(note_edit, cr); ags_note_edit_draw_notation(note_edit, cr); } cairo_pop_group_to_source(cr); cairo_paint(cr); } return(FALSE); } gboolean ags_note_edit_drawing_area_motion_notify_event(GtkWidget *widget, GdkEventMotion *event, AgsNoteEdit *note_edit) { AgsMachine *machine; AgsEditor *editor; GtkStyle *note_edit_style; AgsNote *note, *note0; double value[2]; double tact; guint note_x1; guint prev_x1; static const gdouble white_gc = 65535.0; void ags_note_edit_drawing_area_motion_notify_event_set_control(){ guint note_x, note_y; guint note_offset_x1; if(note_edit->control.x0 >= note_edit->map_width){ note_edit->control.x0 = note_edit->map_width - 1; } note_offset_x1 = (guint) (ceil(note_edit->control.x1_offset / (double) (note_edit->control_current.control_width))); if(note_edit->control.x1 >= note_edit->control_current.x0){ note_x = (guint) (ceil((double) (note_edit->control.x1 - note_edit->control_current.x0) / (double) (note_edit->control_current.control_width))); }else{ note_offset_x1 -= 1; note_x = 0; } note_x1 = (note_x * tact) + (note_offset_x1 * tact); #ifdef AGS_DEBUG fprintf(stdout, "x0 = %llu\nx1 = %llu\ny = %llu\n\n\0", (long long unsigned int) note->x[0], (long long unsigned int) note->x[1], (long long unsigned int) note->y); #endif } void ags_note_edit_drawing_area_motion_notify_event_draw_control(cairo_t *cr){ guint x, y, width, height; widget = (GtkWidget *) note_edit->drawing_area; x = note->x[0] * note_edit->control_unit.control_width; width = note_x1 * note_edit->control_unit.control_width; if(x < note_edit->control.x1_offset){ if(width > note_edit->control.x1_offset){ width -= x; x = 0; }else{ return; } }else if(x < note_edit->control.x1_offset + widget->allocation.width){ width -= x; x -= note_edit->control.x1_offset; }else{ return; } if(x + width > widget->allocation.width) width = widget->allocation.width - x; y = note->y * note_edit->control_height; if(y < note_edit->control.y1_offset){ if(y + note_edit->control_height - note_edit->control_margin_y < note_edit->control.y1_offset){ return; }else{ if(y + note_edit->control_margin_y < note_edit->control.y1_offset){ height = note_edit->control_height; y = y + note_edit->control_margin_y - note_edit->control.y1_offset; }else{ height = note_edit->y0; y -= note_edit->control.y1_offset; } } }else if(y < note_edit->control.y1_offset + widget->allocation.height - note_edit->control_height){ height = note_edit->control_height - 2 * note_edit->control_margin_y; y = y - note_edit->control.y1_offset + note_edit->control_margin_y; }else{ if(y > note_edit->control.y1_offset + widget->allocation.height - note_edit->y1 + note_edit->control_margin_y){ return; }else{ height = note_edit->y0; y = y - note_edit->control.y1_offset + note_edit->control_margin_y; } } cairo_set_source_rgb(cr, note_edit_style->fg[0].red / white_gc, note_edit_style->fg[0].green / white_gc, note_edit_style->fg[0].blue / white_gc); cairo_rectangle(cr, (double) x, (double) y, (double) width, (double) height); cairo_fill(cr); } void ags_note_edit_drawing_area_motion_notify_event_draw_selection(cairo_t *cr){ GtkAllocation allocation; guint x0_offset, x1_offset, y0_offset, y1_offset; guint x0, x1, y0, y1, width, height; guint x0_viewport, x1_viewport, y0_viewport, y1_viewport; /* get viewport */ gtk_widget_get_allocation(widget, &allocation); x0_viewport = note_edit->control.x1_offset; x1_viewport = note_edit->control.x1_offset + allocation.width; y0_viewport = note_edit->control.y1_offset; y1_viewport = note_edit->control.y1_offset + allocation.height; /* get real size and offset */ x0 = note_edit->control.x0_offset + note_edit->control.x0; x1 = note_edit->control.x1_offset + note_edit->control.x1; if(x0 > x1){ x0_offset = x1; x1_offset = x0; x1 = x0_offset; x0 = x1_offset; }else{ x0_offset = x0; x1_offset = x1; } /* get drawable size and offset */ if(x0 < x0_viewport){ // x0 = 0; // width = x1_offset - x0_viewport; x0 -= x0_viewport; width = x1 - x0; }else{ x0 -= x0_viewport; width = x1 - x0; } if(x1 > x1_viewport){ width -= (x1 - x1_viewport); }else{ width -= x0_viewport; } /* get real size and offset */ y0 = note_edit->control.y0_offset + note_edit->control.y0; y1 = note_edit->control.y1_offset + note_edit->control.y1; if(y0 > y1){ y0_offset = y1; y1_offset = y0; y1 = y0_offset; y0 = y1_offset; }else{ y0_offset = y0; y1_offset = y1; } /* get drawable size and offset */ if(y0 < y0_viewport){ // y0 = 0; // height = y1_offset - y0_viewport; y0 -= y0_viewport; height = y1 - y0; }else{ y0 -= y0_viewport; height = y1 - y0; } if(y1 > y1_viewport){ height -= (y1 - y1_viewport); }else{ height -= y0_viewport; } cairo_set_source_rgba(cr, 1.0, 0.0, 0.0, 0.3); cairo_rectangle(cr, (double) x0, (double) y0, (double) width, (double) height); cairo_fill(cr); } editor = (AgsEditor *) gtk_widget_get_ancestor(GTK_WIDGET(note_edit), AGS_TYPE_EDITOR); if(editor->selected_machine != NULL){ cairo_t *cr; prev_x1 = note_edit->control.x1; if(event->x >= 0.0){ note_edit->control.x1 = (guint) event->x; }else{ note_edit->control.x1 = 0; } if(event->y >= 0.0){ note_edit->control.y1 = (guint) event->y; }else{ note_edit->control.y1 = 0; } machine = editor->selected_machine; note = note_edit->control.note; note_edit_style = gtk_widget_get_style(widget); note_edit->control.x1_offset = (guint) round((double) note_edit->hscrollbar->scrollbar.range.adjustment->value); note_edit->control.y1_offset = (guint) round((double) note_edit->vscrollbar->scrollbar.range.adjustment->value); tact = exp2(6.0 - (double) gtk_combo_box_get_active((GtkComboBox *) editor->toolbar->zoom)); cr = gdk_cairo_create(widget->window); cairo_push_group(cr); if((AGS_NOTE_EDIT_ADDING_NOTE & (note_edit->flags)) != 0){ if(prev_x1 > note_edit->control.x1){ ags_note_edit_draw_segment(note_edit, cr); ags_note_edit_draw_notation(note_edit, cr); } if(AGS_IS_PANEL(machine)){ }else if(AGS_IS_MIXER(machine)){ }else if(AGS_IS_DRUM(machine)){ ags_note_edit_drawing_area_motion_notify_event_set_control(); ags_note_edit_drawing_area_motion_notify_event_draw_control(cr); }else if(AGS_IS_MATRIX(machine)){ ags_note_edit_drawing_area_motion_notify_event_set_control(); ags_note_edit_drawing_area_motion_notify_event_draw_control(cr); }else if(AGS_IS_FFPLAYER(machine)){ ags_note_edit_drawing_area_motion_notify_event_set_control(); ags_note_edit_drawing_area_motion_notify_event_draw_control(cr); } }else if((AGS_NOTE_EDIT_SELECTING_NOTES & (note_edit->flags)) != 0){ ags_note_edit_draw_segment(note_edit, cr); ags_note_edit_draw_notation(note_edit, cr); ags_note_edit_drawing_area_motion_notify_event_draw_selection(cr); } cairo_pop_group_to_source(cr); cairo_paint(cr); } return(FALSE); } gboolean ags_note_edit_drawing_area_key_press_event(GtkWidget *widget, GdkEventKey *event, AgsNoteEdit *note_edit) { AgsEditor *editor; AgsMachine *machine; if(event->keyval == GDK_KEY_Tab){ return(FALSE); } editor = (AgsEditor *) gtk_widget_get_ancestor(GTK_WIDGET(note_edit), AGS_TYPE_EDITOR); machine = editor->selected_machine; if(machine != NULL){ switch(event->keyval){ case GDK_KEY_Control_L: { note_edit->key_mask |= AGS_NOTE_EDIT_KEY_L_CONTROL; } break; case GDK_KEY_Control_R: { note_edit->key_mask |= AGS_NOTE_EDIT_KEY_R_CONTROL; } break; case GDK_KEY_Shift_L: { note_edit->key_mask |= AGS_NOTE_EDIT_KEY_L_SHIFT; } break; case GDK_KEY_Shift_R: { note_edit->key_mask |= AGS_NOTE_EDIT_KEY_R_SHIFT; } break; case GDK_KEY_a: { /* select all notes */ if((AGS_NOTE_EDIT_KEY_L_CONTROL & (note_edit->key_mask)) != 0 || (AGS_NOTE_EDIT_KEY_R_CONTROL & (note_edit->key_mask)) != 0){ ags_editor_select_all(editor); } } break; case GDK_KEY_c: { /* copy notes */ if((AGS_NOTE_EDIT_KEY_L_CONTROL & (note_edit->key_mask)) != 0 || (AGS_NOTE_EDIT_KEY_R_CONTROL & (note_edit->key_mask)) != 0){ ags_editor_copy(editor); } } break; case GDK_KEY_v: { /* paste notes */ if((AGS_NOTE_EDIT_KEY_L_CONTROL & (note_edit->key_mask)) != 0 || (AGS_NOTE_EDIT_KEY_R_CONTROL & (note_edit->key_mask)) != 0){ ags_editor_paste(editor); } } break; case GDK_KEY_x: { /* cut notes */ if((AGS_NOTE_EDIT_KEY_L_CONTROL & (note_edit->key_mask)) != 0 || (AGS_NOTE_EDIT_KEY_R_CONTROL & (note_edit->key_mask)) != 0){ ags_editor_cut(editor); } } break; case GDK_KEY_i: { /* invert notes */ if((AGS_NOTE_EDIT_KEY_L_CONTROL & (note_edit->key_mask)) != 0 || (AGS_NOTE_EDIT_KEY_R_CONTROL & (note_edit->key_mask)) != 0){ ags_editor_invert(editor); } } break; } } return(TRUE); } gboolean ags_note_edit_drawing_area_key_release_event(GtkWidget *widget, GdkEventKey *event, AgsNoteEdit *note_edit) { AgsEditor *editor; AgsMachine *machine; AgsChannel *channel; AgsMutexManager *mutex_manager; GList *list_notation; gint i; gboolean do_feedback; pthread_mutex_t *audio_mutex; auto void ags_note_edit_drawing_area_key_release_event_play_channel(AgsChannel *channel, AgsNote *note); void ags_note_edit_drawing_area_key_release_event_play_channel(AgsChannel *channel, AgsNote *note){ AgsDevout *devout; AgsAudio *audio; AgsStartDevout *start_devout; AgsInitChannel *init_channel; AgsAppendChannel *append_channel; AgsMutexManager *mutex_manager; AgsAudioLoop *audio_loop; AgsTaskThread *task_thread; AgsDevoutThread *devout_thread; AgsMain *ags_main; GList *tasks; pthread_mutex_t *devout_mutex; pthread_mutex_t *audio_mutex; pthread_mutex_t *channel_mutex; /* lookup channel mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); channel_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); /* get audio */ pthread_mutex_lock(channel_mutex); audio = (AgsAudio *) channel->audio; pthread_mutex_unlock(channel_mutex); /* lookup audio mutex */ pthread_mutex_lock(&(ags_application_mutex)); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); /* get devout */ pthread_mutex_lock(audio_mutex); devout = (AgsDevout *) audio->devout; pthread_mutex_unlock(audio_mutex); /* lookup devout mutex */ pthread_mutex_lock(&(ags_application_mutex)); devout_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) devout); pthread_mutex_unlock(&(ags_application_mutex)); /* get ags_main */ pthread_mutex_lock(devout_mutex); ags_main = (AgsMain *) devout->ags_main; pthread_mutex_unlock(devout_mutex); /* get threads */ pthread_mutex_lock(&(ags_application_mutex)); audio_loop = (AgsAudioLoop *) ags_main->main_loop; pthread_mutex_unlock(&(ags_application_mutex)); /* get task thread and devout thread */ task_thread = (AgsTaskThread *) ags_thread_find_type(audio_loop, AGS_TYPE_TASK_THREAD); devout_thread = (AgsDevoutThread *) ags_thread_find_type(audio_loop, AGS_TYPE_DEVOUT_THREAD); /* create tasks */ tasks = NULL; /* init channel for playback */ init_channel = ags_init_channel_new(channel, FALSE, TRUE, FALSE, FALSE); g_signal_connect_after(G_OBJECT(init_channel), "launch\0", G_CALLBACK(ags_note_edit_init_channel_launch_callback), note); tasks = g_list_prepend(tasks, init_channel); /* append channel for playback */ append_channel = ags_append_channel_new((GObject *) audio_loop, (GObject *) channel); tasks = g_list_prepend(tasks, append_channel); /* create start task */ start_devout = ags_start_devout_new(devout); tasks = g_list_prepend(tasks, start_devout); /* perform playback */ tasks = g_list_reverse(tasks); ags_task_thread_append_tasks(task_thread, tasks); } if(event->keyval == GDK_KEY_Tab){ return(FALSE); } editor = (AgsEditor *) gtk_widget_get_ancestor(GTK_WIDGET(note_edit), AGS_TYPE_EDITOR); machine = editor->selected_machine; do_feedback = FALSE; /* lookup audio mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) machine->audio); pthread_mutex_unlock(&(ags_application_mutex)); switch(event->keyval){ case GDK_KEY_Control_L: { note_edit->key_mask &= (~AGS_NOTE_EDIT_KEY_L_CONTROL); } break; case GDK_KEY_Control_R: { note_edit->key_mask &= (~AGS_NOTE_EDIT_KEY_R_CONTROL); } break; case GDK_KEY_Shift_L: { note_edit->key_mask &= (~AGS_NOTE_EDIT_KEY_L_SHIFT); } break; case GDK_KEY_Shift_R: { note_edit->key_mask &= (~AGS_NOTE_EDIT_KEY_R_SHIFT); } break; case GDK_KEY_Left: case GDK_KEY_leftarrow: { gdouble tact; guint x0_offset; tact = exp2(6.0 - (double) gtk_combo_box_get_active(editor->toolbar->zoom)); if((AGS_NOTE_EDIT_KEY_L_SHIFT & (note_edit->key_mask)) == 0 && (AGS_NOTE_EDIT_KEY_R_SHIFT & (note_edit->key_mask)) == 0){ /* position cursor */ if(note_edit->selected_x > 0){ if(note_edit->selected_x - (1 * tact) > 0){ note_edit->selected_x -= (1 * tact); }else{ note_edit->selected_x = 0; } do_feedback = TRUE; } x0_offset = note_edit->selected_x * note_edit->control_unit.control_width; if(x0_offset < GTK_RANGE(note_edit->hscrollbar)->adjustment->value){ gtk_range_set_value(GTK_RANGE(note_edit->hscrollbar), x0_offset * GTK_RANGE(note_edit->hscrollbar)->adjustment->step_increment); } }else{ AgsNote *note; /* shrink note */ i = 0; do_feedback = TRUE; while((i = ags_notebook_next_active_tab(editor->current_notebook, i)) != -1){ pthread_mutex_lock(audio_mutex); list_notation = g_list_nth(machine->audio->notation, i); pthread_mutex_unlock(audio_mutex); if(list_notation == NULL){ i++; continue; } pthread_mutex_lock(audio_mutex); note = ags_notation_find_point(AGS_NOTATION(list_notation->data), note_edit->selected_x, note_edit->selected_y, FALSE); if(note != NULL && note->x[1] - note->x[0] - tact >= tact){ note->x[1] -= tact; } pthread_mutex_unlock(audio_mutex); i++; } } gtk_widget_queue_draw(note_edit); } break; case GDK_KEY_Right: case GDK_KEY_rightarrow: { gdouble tact; guint x0_offset; tact = exp2(6.0 - (double) gtk_combo_box_get_active(editor->toolbar->zoom)); if((AGS_NOTE_EDIT_KEY_L_SHIFT & (note_edit->key_mask)) == 0 && (AGS_NOTE_EDIT_KEY_R_SHIFT & (note_edit->key_mask)) == 0){ /* position cursor */ if(note_edit->selected_x < 16.0 * AGS_NOTE_EDIT_MAX_CONTROLS){ note_edit->selected_x += (1.0 * tact); do_feedback = TRUE; } x0_offset = note_edit->selected_x * note_edit->control_unit.control_width; if(x0_offset + note_edit->control_current.control_width > GTK_RANGE(note_edit->hscrollbar)->adjustment->value + GTK_WIDGET(note_edit->drawing_area)->allocation.width){ gtk_range_set_value(GTK_RANGE(note_edit->hscrollbar), x0_offset * GTK_RANGE(note_edit->hscrollbar)->adjustment->step_increment); } }else{ AgsNote *note; /* grow note */ i = 0; do_feedback = TRUE; while((i = ags_notebook_next_active_tab(editor->current_notebook, i)) != -1){ pthread_mutex_lock(audio_mutex); list_notation = g_list_nth(machine->audio->notation, i); pthread_mutex_unlock(audio_mutex); if(list_notation == NULL){ i++; continue; } pthread_mutex_lock(audio_mutex); note = ags_notation_find_point(AGS_NOTATION(list_notation->data), note_edit->selected_x, note_edit->selected_y, FALSE); if(note != NULL){ note->x[1] += tact; } pthread_mutex_unlock(audio_mutex); i++; } } gtk_widget_queue_draw(note_edit); } break; case GDK_KEY_Up: case GDK_KEY_uparrow: { gdouble y0_offset; if(note_edit->selected_y > 0){ note_edit->selected_y -= 1; do_feedback = TRUE; } y0_offset = note_edit->selected_y * note_edit->control_height; if(y0_offset < GTK_RANGE(note_edit->vscrollbar)->adjustment->value){ gtk_range_set_value(GTK_RANGE(note_edit->vscrollbar), y0_offset * GTK_RANGE(note_edit->vscrollbar)->adjustment->step_increment); } gtk_widget_queue_draw(note_edit); } break; case GDK_KEY_Down: case GDK_KEY_downarrow: { gdouble y0_offset; if(note_edit->selected_y * (note_edit->control_height) < note_edit->map_height){ note_edit->selected_y += 1; do_feedback = TRUE; } y0_offset = note_edit->selected_y * note_edit->control_height; if(y0_offset + note_edit->control_height > GTK_RANGE(note_edit->vscrollbar)->adjustment->value + (GTK_WIDGET(note_edit->drawing_area)->allocation.height)){ gtk_range_set_value(GTK_RANGE(note_edit->vscrollbar), y0_offset * GTK_RANGE(note_edit->vscrollbar)->adjustment->step_increment); } gtk_widget_queue_draw(note_edit); } break; case GDK_KEY_space: { AgsNote *note; gdouble tact; i = 0; do_feedback = TRUE; tact = exp2(6.0 - (double) gtk_combo_box_get_active(editor->toolbar->zoom)); while((i = ags_notebook_next_active_tab(editor->current_notebook, i)) != -1){ pthread_mutex_lock(audio_mutex); list_notation = g_list_nth(machine->audio->notation, i); pthread_mutex_unlock(audio_mutex); if(list_notation == NULL){ i++; continue; } note = ags_note_new(); note->x[0] = note_edit->selected_x; note->x[1] = note_edit->selected_x + (1.0 * tact); note->y = note_edit->selected_y; pthread_mutex_lock(audio_mutex); ags_notation_add_note(AGS_NOTATION(list_notation->data), note, FALSE); pthread_mutex_unlock(audio_mutex); i++; } gtk_widget_queue_draw(note_edit); fprintf(stdout, "x0 = %llu\nx1 = %llu\ny = %llu\n\n\0", (long long unsigned int) note->x[0], (long long unsigned int) note->x[1], (long long unsigned int) note->y); } break; case GDK_KEY_Delete: { AgsNote *note; i = 0; while((i = ags_notebook_next_active_tab(editor->current_notebook, i)) != -1){ pthread_mutex_lock(audio_mutex); list_notation = g_list_nth(machine->audio->notation, i); pthread_mutex_unlock(audio_mutex); if(list_notation == NULL){ i++; continue; } pthread_mutex_lock(audio_mutex); ags_notation_remove_note_at_position(AGS_NOTATION(list_notation->data), note_edit->selected_x, note_edit->selected_y); pthread_mutex_unlock(audio_mutex); i++; } gtk_widget_queue_draw(note_edit); } break; } if(do_feedback){ AgsAudio *audio; AgsNote *current_note; guint flags; gboolean has_note; audio = machine->audio; /* audible feedback */ i = 0; while((i = ags_notebook_next_active_tab(editor->current_notebook, i)) != -1){ pthread_mutex_lock(audio_mutex); flags = audio->flags; list_notation = g_list_nth(audio->notation, i); pthread_mutex_unlock(audio_mutex); if(list_notation == NULL){ i++; continue; } pthread_mutex_lock(audio_mutex); has_note = (((current_note = ags_notation_find_point(list_notation->data, note_edit->selected_x, note_edit->selected_y, FALSE)) != NULL) ? TRUE: FALSE); pthread_mutex_unlock(audio_mutex); if(has_note){ channel = ags_channel_nth(machine->audio->input, i); if((AGS_AUDIO_REVERSE_MAPPING & (flags)) != 0){ channel = ags_channel_pad_nth(channel, machine->audio->input_pads - note_edit->selected_y - 1); }else{ channel = ags_channel_pad_nth(channel, note_edit->selected_y); } if(current_note != NULL){ ags_note_edit_drawing_area_key_release_event_play_channel(channel, current_note); } } i++; } } return(TRUE); } void ags_note_edit_init_channel_launch_callback(AgsTask *task, AgsNote *note) { AgsDevout *devout; AgsChannel *channel; AgsRecycling *recycling; AgsAddAudioSignal *add_audio_signal; AgsAudioLoop *audio_loop; AgsTaskThread *task_thread; GList *recall, *tmp; GList *delay_audio; guint samplerate; guint buffer_size; gdouble notation_delay; gchar *str; GValue value = {0,}; channel = AGS_INIT_CHANNEL(task)->channel; str = ags_config_get(config, AGS_CONFIG_DEVOUT, "buffer-size\0"); buffer_size = g_ascii_strtoull(str, NULL, 10); free(str); str = ags_config_get(config, AGS_CONFIG_DEVOUT, "samplerate\0"); samplerate = g_ascii_strtoull(str, NULL, 10); free(str); devout = AGS_DEVOUT(AGS_AUDIO(channel->audio)->devout); audio_loop = AGS_AUDIO_LOOP(AGS_MAIN(devout->ags_main)->main_loop); task_thread = ags_thread_find_type(audio_loop, AGS_TYPE_TASK_THREAD); #ifdef AGS_DEBUG g_message("launch\0"); #endif if(AGS_DEVOUT_PLAY(channel->devout_play) == NULL || AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[0] == NULL){ return; } /* connect done */ recall = ags_recall_find_provider_with_recycling_container(channel->play, G_OBJECT(channel), G_OBJECT(AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[0]->recycling_container)); tmp = recall; recall = ags_recall_find_type(recall, AGS_TYPE_PLAY_CHANNEL_RUN); /* */ delay_audio = channel->recall; delay_audio = ags_recall_find_type(delay_audio, AGS_TYPE_DELAY_AUDIO); if(delay_audio != NULL){ g_value_init(&value, G_TYPE_DOUBLE); ags_port_safe_read(AGS_DELAY_AUDIO(delay_audio->data)->notation_delay, &value); notation_delay = g_value_get_double(&value); }else{ notation_delay = 1.0; } //TODO:JK: fix me // g_list_free(tmp); if(recall != NULL){ AgsAudioSignal *audio_signal; /* add audio signal */ recycling = channel->first_recycling; while(recycling != channel->last_recycling->next){ audio_signal = ags_audio_signal_new((GObject *) devout, (GObject *) recycling, (GObject *) AGS_RECALL(recall->data)->recall_id); /* add audio signal */ ags_recycling_create_audio_signal_with_frame_count(recycling, audio_signal, ((double) samplerate / (double) notation_delay) * (note->x[1] - note->x[0]), 0.0, 0); audio_signal->stream_current = audio_signal->stream_beginning; ags_audio_signal_connect(audio_signal); /* * emit add_audio_signal on AgsRecycling */ ags_recycling_add_audio_signal(recycling, audio_signal); recycling = recycling->next; } } } void ags_note_edit_vscrollbar_value_changed(GtkRange *range, AgsNoteEdit *note_edit) { AgsEditor *editor; if((AGS_NOTE_EDIT_RESETING_VERTICALLY & (note_edit->flags)) != 0){ return; } editor = (AgsEditor *) gtk_widget_get_ancestor(GTK_WIDGET(note_edit), AGS_TYPE_EDITOR); ags_meter_paint(editor->current_meter); note_edit->flags |= AGS_NOTE_EDIT_RESETING_VERTICALLY; ags_note_edit_reset_vertically(note_edit, 0); note_edit->flags &= (~AGS_NOTE_EDIT_RESETING_VERTICALLY); } void ags_note_edit_hscrollbar_value_changed(GtkRange *range, AgsNoteEdit *note_edit) { if((AGS_NOTE_EDIT_RESETING_HORIZONTALLY & (note_edit->flags)) != 0){ return; } /* reset ruler */ gtk_adjustment_set_value(note_edit->ruler->adjustment, GTK_RANGE(note_edit->hscrollbar)->adjustment->value / (double) note_edit->control_current.control_width); gtk_widget_queue_draw((GtkWidget *) note_edit->ruler); /* update note edit */ note_edit->flags |= AGS_NOTE_EDIT_RESETING_HORIZONTALLY; ags_note_edit_reset_horizontally(note_edit, 0); note_edit->flags &= (~AGS_NOTE_EDIT_RESETING_HORIZONTALLY); } gsequencer-0.6.37/src/ags/X/editor/ags_machine_selector.c0000644000175000017500000002512012626272146020241 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include void ags_machine_selector_class_init(AgsMachineSelectorClass *machine_selector); void ags_machine_selector_connectable_interface_init(AgsConnectableInterface *connectable); void ags_machine_selector_init(AgsMachineSelector *machine_selector); void ags_machine_selector_connect(AgsConnectable *connectable); void ags_machine_selector_disconnect(AgsConnectable *connectable); void ags_machine_selector_show(GtkWidget *widget); /** * SECTION:ags_machine_selector * @short_description: machine radio buttons * @title: AgsMachineSelector * @section_id: * @include: ags/X/editor/ags_machine_selector.h * * The #AgsMachineSelector enables you make choice of an #AgsMachine. */ enum{ CHANGED, LAST_SIGNAL, }; static gpointer ags_machine_selector_parent_class = NULL; static guint machine_selector_signals[LAST_SIGNAL]; GType ags_machine_selector_get_type(void) { static GType ags_type_machine_selector = 0; if(!ags_type_machine_selector){ static const GTypeInfo ags_machine_selector_info = { sizeof (AgsMachineSelectorClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_machine_selector_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsMachineSelector), 0, /* n_preallocs */ (GInstanceInitFunc) ags_machine_selector_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_machine_selector_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_machine_selector = g_type_register_static(GTK_TYPE_VBOX, "AgsMachineSelector\0", &ags_machine_selector_info, 0); g_type_add_interface_static(ags_type_machine_selector, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return(ags_type_machine_selector); } void ags_machine_selector_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->is_ready = NULL; connectable->is_connected = NULL; connectable->connect = ags_machine_selector_connect; connectable->disconnect = ags_machine_selector_disconnect; } void ags_machine_selector_class_init(AgsMachineSelectorClass *machine_selector) { GObjectClass *gobject; ags_machine_selector_parent_class = g_type_class_peek_parent(machine_selector); /* GObjectClass */ gobject = (GObjectClass *) machine_selector; /* AgsMachineSelectorClass */ machine_selector->changed = NULL; machine_selector_signals[CHANGED] = g_signal_new("changed\0", G_TYPE_FROM_CLASS(machine_selector), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsMachineSelectorClass, changed), NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, G_TYPE_OBJECT); } void ags_machine_selector_init(AgsMachineSelector *machine_selector) { GtkHBox *hbox; GtkLabel *label; GtkMenuToolButton *menu_button; hbox = (GtkHBox *) gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(machine_selector), GTK_WIDGET(hbox), FALSE, FALSE, 0); label = (GtkLabel *) gtk_label_new("Notation\0"); gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(label), FALSE, FALSE, 0); machine_selector->current = NULL; machine_selector->popup = ags_machine_selector_popup_new(machine_selector); menu_button = g_object_new(GTK_TYPE_MENU_TOOL_BUTTON, "stock-id\0", GTK_STOCK_EXECUTE, "menu\0", machine_selector->popup, NULL); gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(menu_button), FALSE, FALSE, 0); } void ags_machine_selector_connect(AgsConnectable *connectable) { AgsMachineSelector *machine_selector; GList *list, *list_start; machine_selector = AGS_MACHINE_SELECTOR(connectable); list = list_start = gtk_container_get_children(machine_selector); list = list->next; while(list != NULL){ g_signal_connect_after(G_OBJECT(list->data), "clicked\0", G_CALLBACK(ags_machine_selector_radio_changed), machine_selector); list = list->next; } g_list_free(list_start); } void ags_machine_selector_disconnect(AgsConnectable *connectable) { //TODO:JK: implement me } /** * ags_machine_selector_changed: * * Emitted as #AgsMachineSelector modified. * * Since: 0.4 */ void ags_machine_selector_changed(AgsMachineSelector *machine_selector, AgsMachine *machine) { g_return_if_fail(AGS_IS_MACHINE_SELECTOR(machine_selector)); g_object_ref((GObject *) machine_selector); g_signal_emit((GObject *) machine_selector, machine_selector_signals[CHANGED], 0, machine); g_object_unref((GObject *) machine_selector); } /** * ags_machine_selector_new: * * Create a new #AgsMachineSelector. * * Since: 0.4 */ AgsMachineSelector* ags_machine_selector_new() { AgsMachineSelector *machine_selector; machine_selector = (AgsMachineSelector *) g_object_new(AGS_TYPE_MACHINE_SELECTOR, NULL); return(machine_selector); } /** * ags_machine_selector_popup_new: * * Create a new #AgsMachineSelectorPopup. * * Since: 0.4 */ GtkMenu* ags_machine_selector_popup_new(AgsMachineSelector *machine_selector) { GtkMenu *popup, *keys; GtkMenuItem *item; GList *list, *list_start; popup = (GtkMenu *) gtk_menu_new(); g_object_set_data((GObject *) popup, g_type_name(AGS_TYPE_MACHINE_SELECTOR), machine_selector); /* item = (GtkMenuItem *) gtk_menu_item_new_with_label(g_strdup("add tab\0")); gtk_menu_shell_append((GtkMenuShell*) popup, (GtkWidget*) item); item = (GtkMenuItem *) gtk_menu_item_new_with_label(g_strdup("remove tab\0")); gtk_menu_shell_append((GtkMenuShell*) popup, (GtkWidget*) item); */ item = (GtkMenuItem *) gtk_menu_item_new_with_label(g_strdup("add index\0")); gtk_menu_shell_append((GtkMenuShell*) popup, (GtkWidget*) item); item = (GtkMenuItem *) gtk_menu_item_new_with_label(g_strdup("remove index\0")); gtk_menu_shell_append((GtkMenuShell*) popup, (GtkWidget*) item); item = (GtkMenuItem *) gtk_menu_item_new_with_label(g_strdup("link index\0")); gtk_menu_shell_append((GtkMenuShell*) popup, (GtkWidget*) item); item = (GtkMenuItem *) gtk_check_menu_item_new_with_label(g_strdup("reverse mapping\0")); gtk_menu_shell_append((GtkMenuShell*) popup, (GtkWidget*) item); item = (GtkMenuItem *) gtk_menu_item_new_with_label(g_strdup("shift piano\0")); gtk_menu_shell_append((GtkMenuShell*) popup, (GtkWidget*) item); keys = (GtkMenu *) gtk_menu_new(); gtk_menu_item_set_submenu(item, keys); item = (GtkMenuItem *) gtk_menu_item_new_with_label(g_strdup("A\0")); gtk_menu_shell_append((GtkMenuShell*) keys, (GtkWidget*) item); item = (GtkMenuItem *) gtk_menu_item_new_with_label(g_strdup("A#\0")); gtk_menu_shell_append((GtkMenuShell*) keys, (GtkWidget*) item); item = (GtkMenuItem *) gtk_menu_item_new_with_label(g_strdup("H\0")); gtk_menu_shell_append((GtkMenuShell*) keys, (GtkWidget*) item); item = (GtkMenuItem *) gtk_menu_item_new_with_label(g_strdup("C\0")); gtk_menu_shell_append((GtkMenuShell*) keys, (GtkWidget*) item); item = (GtkMenuItem *) gtk_menu_item_new_with_label(g_strdup("C#\0")); gtk_menu_shell_append((GtkMenuShell*) keys, (GtkWidget*) item); item = (GtkMenuItem *) gtk_menu_item_new_with_label(g_strdup("D\0")); gtk_menu_shell_append((GtkMenuShell*) keys, (GtkWidget*) item); item = (GtkMenuItem *) gtk_menu_item_new_with_label(g_strdup("D#\0")); gtk_menu_shell_append((GtkMenuShell*) keys, (GtkWidget*) item); item = (GtkMenuItem *) gtk_menu_item_new_with_label(g_strdup("E\0")); gtk_menu_shell_append((GtkMenuShell*) keys, (GtkWidget*) item); item = (GtkMenuItem *) gtk_menu_item_new_with_label(g_strdup("F\0")); gtk_menu_shell_append((GtkMenuShell*) keys, (GtkWidget*) item); item = (GtkMenuItem *) gtk_menu_item_new_with_label(g_strdup("F#\0")); gtk_menu_shell_append((GtkMenuShell*) keys, (GtkWidget*) item); item = (GtkMenuItem *) gtk_menu_item_new_with_label(g_strdup("G\0")); gtk_menu_shell_append((GtkMenuShell*) keys, (GtkWidget*) item); item = (GtkMenuItem *) gtk_menu_item_new_with_label(g_strdup("G#\0")); gtk_menu_shell_append((GtkMenuShell*) keys, (GtkWidget*) item); /* connect */ list_start = list = gtk_container_get_children((GtkContainer *) popup); /* g_signal_connect(G_OBJECT(list->data), "activate\0", G_CALLBACK(ags_machine_selector_popup_add_tab_callback), (gpointer) machine_selector); list = list->next; g_signal_connect(G_OBJECT(list->data), "activate\0", G_CALLBACK(ags_machine_selector_popup_remove_tab_callback), (gpointer) machine_selector); list = list->next; */ g_signal_connect(G_OBJECT(list->data), "activate\0", G_CALLBACK(ags_machine_selector_popup_add_index_callback), (gpointer) machine_selector); list = list->next; g_signal_connect(G_OBJECT(list->data), "activate\0", G_CALLBACK(ags_machine_selector_popup_remove_index_callback), (gpointer) machine_selector); list = list->next; g_signal_connect(G_OBJECT(list->data), "activate\0", G_CALLBACK(ags_machine_selector_popup_link_index_callback), (gpointer) machine_selector); list = list->next; g_signal_connect_after(G_OBJECT(list->data), "activate\0", G_CALLBACK(ags_machine_selector_popup_reverse_mapping_callback), (gpointer) machine_selector); g_list_free(list_start); /* keys */ list_start = list = gtk_container_get_children((GtkContainer *) keys); while(list != NULL){ g_signal_connect(G_OBJECT(list->data), "activate\0", G_CALLBACK(ags_machine_selector_popup_shift_piano_callback), (gpointer) machine_selector); list = list->next; } g_list_free(list_start); /* show */ gtk_widget_show_all((GtkWidget *) keys); gtk_widget_show_all((GtkWidget *) popup); return(popup); } gsequencer-0.6.37/src/ags/X/editor/ags_file_selection.c0000644000175000017500000003110512626272146017721 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include void ags_file_selection_class_init(AgsFileSelectionClass *file_selection); void ags_file_selection_connectable_interface_init(AgsConnectableInterface *connectable); void ags_file_selection_init(AgsFileSelection *file_selection); void ags_file_selection_connect(AgsConnectable *connectable); void ags_file_selection_disconnect(AgsConnectable *connectable); static void ags_file_selection_finalize(GObject *gobject); void ags_file_selection_show(GtkWidget *widget); void ags_file_selection_real_add_entry(AgsFileSelection *file_selection, GtkWidget *widget); void ags_file_selection_real_remove_entry(AgsFileSelection *file_selection, GtkWidget *widget); void ags_file_selection_real_completed(AgsFileSelection *file_selection); enum{ ADD_ENTRY, REMOVE_ENTRY, COMPLETED, LAST_SIGNAL, }; static gpointer ags_file_selection_parent_class = NULL; static guint file_selection_signals[LAST_SIGNAL]; GType ags_file_selection_get_type(void) { static GType ags_type_file_selection = 0; if(!ags_type_file_selection){ static const GTypeInfo ags_file_selection_info = { sizeof (AgsFileSelectionClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_file_selection_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsFileSelection), 0, /* n_preallocs */ (GInstanceInitFunc) ags_file_selection_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_file_selection_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_file_selection = g_type_register_static(GTK_TYPE_VBOX, "AgsFileSelection\0", &ags_file_selection_info, 0); g_type_add_interface_static(ags_type_file_selection, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return(ags_type_file_selection); } void ags_file_selection_class_init(AgsFileSelectionClass *file_selection) { GObjectClass *gobject; GtkWidgetClass *widget; ags_file_selection_parent_class = g_type_class_peek_parent(file_selection); /* GtkObjectClass */ gobject = (GObjectClass *) file_selection; gobject->finalize = ags_file_selection_finalize; /* GtkWidgetClass */ widget = (GtkWidgetClass *) file_selection; widget->show = ags_file_selection_show; /* AgsFileSelectionClass */ file_selection->add_entry = ags_file_selection_real_add_entry; file_selection->remove_entry = ags_file_selection_real_remove_entry; file_selection->completed = NULL; file_selection_signals[ADD_ENTRY] = g_signal_new("add_entry\0", G_TYPE_FROM_CLASS(file_selection), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsFileSelectionClass, add_entry), NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, G_TYPE_OBJECT); file_selection_signals[REMOVE_ENTRY] = g_signal_new("remove_entry\0", G_TYPE_FROM_CLASS(file_selection), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsFileSelectionClass, remove_entry), NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, G_TYPE_OBJECT); file_selection_signals[COMPLETED] = g_signal_new("completed\0", G_TYPE_FROM_CLASS(file_selection), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsFileSelectionClass, completed), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); } void ags_file_selection_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->is_ready = NULL; connectable->is_connected = NULL; connectable->connect = ags_file_selection_connect; connectable->disconnect = ags_file_selection_disconnect; } void ags_file_selection_init(AgsFileSelection *file_selection) { GtkHBox *hbox; GtkLabel *label; file_selection->flags = 0; file_selection->directory = NULL; file_selection->entry_count = 0; file_selection->entry = NULL; hbox = (GtkHBox *) gtk_hbox_new(FALSE, 0); gtk_box_pack_end(GTK_BOX(file_selection), GTK_WIDGET(hbox), FALSE, FALSE, 0); label = (GtkLabel *) gtk_label_new("Choosed: \0"); gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(label), FALSE, FALSE, 0); file_selection->chosed = (GtkLabel *) g_object_new(GTK_TYPE_LABEL, "label\0", g_strdup_printf("%d\0", 0), NULL); gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(file_selection->chosed), FALSE, FALSE, 0); label = (GtkLabel *) gtk_label_new("/\0"); gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(label), FALSE, FALSE, 0); file_selection->selected = (GtkLabel *) g_object_new(GTK_TYPE_LABEL, "label\0", g_strdup_printf("%d\0", 0), NULL); gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(file_selection->selected), FALSE, FALSE, 0); } void ags_file_selection_connect(AgsConnectable *connectable) { AgsFileSelection *file_selection; /* AgsFileSelection */ file_selection = AGS_FILE_SELECTION(connectable); } void ags_file_selection_disconnect(AgsConnectable *connectable) { /* implement me */ } static void ags_file_selection_finalize(GObject *gobject) { AgsFileSelection *file_selection; file_selection = (AgsFileSelection *) gobject; /* free directory string */ if(file_selection->directory != NULL) free(file_selection->directory); /* free entries */ ags_list_free_and_free_link(file_selection->entry); /* call finalize of parent class */ G_OBJECT_CLASS(ags_file_selection_parent_class)->finalize(gobject); } void ags_file_selection_show(GtkWidget *widget) { AgsFileSelection *file_selection; file_selection = (AgsFileSelection *) widget; GTK_WIDGET_CLASS(ags_file_selection_parent_class)->show(widget); } /** * ags_file_selection_set_entry: * @file_selection an #AgsFileSelection * @entry a #GList * * Add new entries to the #AgsFileSelection. */ void ags_file_selection_set_entry(AgsFileSelection *file_selection, GList *entry_list) { AgsFileSelectionEntry *entry; auto GtkTable* ags_file_selection_set_entry_new_entry(); GtkTable* ags_file_selection_set_entry_new_entry(){ GtkTable *table; GtkTable *range_table; GtkLabel *label; GtkButton *remove; AgsInlinePlayer *inline_player; table = (GtkTable *) gtk_table_new(3, 3, FALSE); /* the range buttons */ range_table = (GtkTable *) gtk_table_new(2, 3, FALSE); gtk_table_attach(table, GTK_WIDGET(range_table), 1, 3, 0, 1, GTK_FILL, GTK_FILL, 0, 0); label = (GtkLabel *) g_object_new(GTK_TYPE_LABEL, "label\0", "nth sample: \0", "xalign\0", 0.0, NULL); gtk_table_attach(range_table, GTK_WIDGET(label), 0, 1, 0, 1, GTK_FILL, GTK_FILL, 0, 0); label = (GtkLabel *) g_object_new(GTK_TYPE_LABEL, "label\0", "nth channel: \0", "xalign\0", 0.0, NULL); gtk_table_attach(range_table, GTK_WIDGET(label), 0, 1, 1, 2, GTK_FILL, GTK_FILL, 0, 0); label = (GtkLabel *) g_object_new(GTK_TYPE_LABEL, "label\0", "count: \0", "xalign\0", 0.0, NULL); gtk_table_attach(range_table, GTK_WIDGET(label), 0, 1, 2, 3, GTK_FILL, GTK_FILL, 0, 0); entry->nth_sample = (GtkSpinButton *) gtk_spin_button_new_with_range(0.0, 65534.0, 1.0); gtk_table_attach(range_table, GTK_WIDGET(entry->nth_sample), 1, 2, 0, 1, GTK_FILL, GTK_FILL, 0, 0); entry->nth_channel = (GtkSpinButton *) gtk_spin_button_new_with_range(0.0, 65534.0, 1.0); gtk_table_attach(range_table, GTK_WIDGET(entry->nth_channel), 1, 2, 1, 2, GTK_FILL, GTK_FILL, 0, 0); entry->count = (GtkSpinButton *) gtk_spin_button_new_with_range(0.0, 65534.0, 1.0); gtk_table_attach(range_table, GTK_WIDGET(entry->count), 1, 2, 2, 3, GTK_FILL, GTK_FILL, 0, 0); /* the remove button */ remove = (GtkButton *) gtk_button_new_from_stock(GTK_STOCK_REMOVE); gtk_table_attach(table, GTK_WIDGET(remove), 2, 3, 1, 2, GTK_FILL, GTK_FILL, 0, 0); /* and it's callback */ g_signal_connect(G_OBJECT(remove), "clicked\0", G_CALLBACK(ags_file_selection_remove_callback), table); /* create an AgsInlinePlayer */ inline_player = ags_inline_player_new(); gtk_table_attach(table, GTK_WIDGET(inline_player), 0, 1, 2, 3, GTK_FILL|GTK_EXPAND, GTK_FILL|GTK_EXPAND, 0, 0); return(table); } while(entry_list != NULL){ if(g_str_has_suffix(AGS_FILE_SELECTION_ENTRY(entry_list->data)->filename, ".sf2\0")){ entry = AGS_FILE_SELECTION_ENTRY(entry_list->data); entry->table = ags_file_selection_set_entry_new_entry(); entry->entry = (GtkWidget *) ags_sf2_chooser_new(); gtk_table_attach(entry->table, GTK_WIDGET(entry->entry), 0, 1, 0, 2, GTK_FILL|GTK_EXPAND, GTK_FILL|GTK_EXPAND, 0, 0); ags_sf2_chooser_open(AGS_SF2_CHOOSER(entry->entry), entry->filename); ags_file_selection_add_entry(file_selection, (GtkWidget *) entry->table); ags_connectable_connect(AGS_CONNECTABLE(entry->entry)); } entry_list = entry_list->next; } } void ags_file_selection_add_entry(AgsFileSelection *file_selection, GtkWidget *widget) { g_return_if_fail(AGS_IS_FILE_SELECTION(file_selection)); g_object_ref((GObject *) file_selection); g_signal_emit(G_OBJECT(file_selection), file_selection_signals[ADD_ENTRY], 0, widget); g_object_unref((GObject *) file_selection); } void ags_file_selection_real_add_entry(AgsFileSelection *file_selection, GtkWidget *widget) { file_selection->entry_count++; gtk_label_set_text(file_selection->selected, g_strdup_printf("%d\0", file_selection->entry_count)); gtk_box_pack_start(GTK_BOX(file_selection), widget, FALSE, FALSE, 0); } void ags_file_selection_remove_entry(AgsFileSelection *file_selection, GtkWidget *widget) { g_return_if_fail(AGS_IS_FILE_SELECTION(file_selection)); g_object_ref((GObject *) file_selection); g_signal_emit(G_OBJECT(file_selection), file_selection_signals[REMOVE_ENTRY], 0, widget); g_object_unref((GObject *) file_selection); } void ags_file_selection_real_remove_entry(AgsFileSelection *file_selection, GtkWidget *widget) { file_selection->entry_count--; gtk_label_set_text(file_selection->selected, g_strdup_printf("%d\0", file_selection->entry_count)); gtk_widget_destroy(widget); } gboolean ags_file_selection_contains_file(AgsFileSelection *file_selection, gchar *filename) { GList *list; list = file_selection->entry; while(list != NULL){ if(!g_strcmp0(list->data, filename)) return(TRUE); } return(FALSE); } void ags_file_selection_completed(AgsFileSelection *file_selection) { g_return_if_fail(AGS_IS_FILE_SELECTION(file_selection)); g_object_ref((GObject *) file_selection); g_signal_emit(G_OBJECT(file_selection), file_selection_signals[COMPLETED], 0); g_object_unref((GObject *) file_selection); } AgsFileSelectionEntry* ags_file_selection_entry_alloc() { AgsFileSelectionEntry *entry; entry = (AgsFileSelectionEntry *) malloc(sizeof(AgsFileSelectionEntry)); entry->table = NULL; entry->entry = NULL; entry->chosed = FALSE; entry->filename = NULL; entry->nth_sample = NULL; entry->nth_channel = NULL; entry->count = NULL; return(entry); } AgsFileSelection* ags_file_selection_new() { AgsFileSelection *file_selection; file_selection = (AgsFileSelection *) g_object_new(AGS_TYPE_FILE_SELECTION, NULL); return(file_selection); } gsequencer-0.6.37/src/ags/X/editor/ags_file_selection_callbacks.c0000644000175000017500000000215212621463700021711 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include void ags_file_selection_remove_callback(GtkButton *button, GtkTable *table) { AgsFileSelection *file_selection; file_selection = (AgsFileSelection *) gtk_widget_get_ancestor(GTK_WIDGET(table), AGS_TYPE_FILE_SELECTION); ags_file_selection_remove_entry(file_selection, GTK_WIDGET(table)); } gsequencer-0.6.37/src/ags/X/editor/ags_note_edit.c0000644000175000017500000013176212626272146016721 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include static GType ags_accessible_note_edit_get_type(void); void ags_note_edit_class_init(AgsNoteEditClass *note_edit); void ags_accessible_note_edit_class_init(AtkObject *object); void ags_accessible_note_edit_action_interface_init(AtkActionIface *action); void ags_note_edit_connectable_interface_init(AgsConnectableInterface *connectable); void ags_note_edit_init(AgsNoteEdit *note_edit); void ags_note_edit_connect(AgsConnectable *connectable); void ags_note_edit_disconnect(AgsConnectable *connectable); AtkObject* ags_note_edit_get_accessible(GtkWidget *widget); gboolean ags_accessible_note_edit_do_action(AtkAction *action, gint i); gint ags_accessible_note_edit_get_n_actions(AtkAction *action); const gchar* ags_accessible_note_edit_get_description(AtkAction *action, gint i); const gchar* ags_accessible_note_edit_get_name(AtkAction *action, gint i); const gchar* ags_accessible_note_edit_get_keybinding(AtkAction *action, gint i); gboolean ags_accessible_note_edit_set_description(AtkAction *action, gint i); gchar* ags_accessible_note_edit_get_localized_name(AtkAction *action, gint i); /** * SECTION:ags_note_edit * @short_description: edit notes * @title: AgsNoteEdit * @section_id: * @include: ags/X/editor/ags_note_edit.h * * The #AgsNoteEdit lets you edit notes. */ GtkStyle *note_edit_style; extern pthread_mutex_t ags_application_mutex; static GQuark quark_accessible_object = 0; GType ags_note_edit_get_type(void) { static GType ags_type_note_edit = 0; if(!ags_type_note_edit){ static const GTypeInfo ags_note_edit_info = { sizeof (AgsNoteEditClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_note_edit_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsNoteEdit), 0, /* n_preallocs */ (GInstanceInitFunc) ags_note_edit_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_note_edit_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_note_edit = g_type_register_static(GTK_TYPE_TABLE, "AgsNoteEdit\0", &ags_note_edit_info, 0); g_type_add_interface_static(ags_type_note_edit, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return(ags_type_note_edit); } static GType ags_accessible_note_edit_get_type(void) { static GType ags_type_accessible_note_edit = 0; if(!ags_type_accessible_note_edit){ const GTypeInfo ags_accesssible_note_edit_info = { sizeof(GtkAccessibleClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_accessible_note_edit_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(GtkAccessible), 0, /* n_preallocs */ NULL, NULL }; static const GInterfaceInfo atk_action_interface_info = { (GInterfaceInitFunc) ags_accessible_note_edit_action_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_accessible_note_edit = g_type_register_static(GTK_TYPE_ACCESSIBLE, "AgsAccessibleNoteEdit\0", &ags_accesssible_note_edit_info, 0); g_type_add_interface_static(ags_type_accessible_note_edit, ATK_TYPE_ACTION, &atk_action_interface_info); } return(ags_type_accessible_note_edit); } void ags_note_edit_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->is_ready = NULL; connectable->is_connected = NULL; connectable->connect = ags_note_edit_connect; connectable->disconnect = ags_note_edit_disconnect; } void ags_note_edit_class_init(AgsNoteEditClass *note_edit) { quark_accessible_object = g_quark_from_static_string("ags-accessible-object\0"); } void ags_accessible_note_edit_class_init(AtkObject *object) { /* empty */ } void ags_accessible_note_edit_action_interface_init(AtkActionIface *action) { action->do_action = ags_accessible_note_edit_do_action; action->get_n_actions = ags_accessible_note_edit_get_n_actions; action->get_description = ags_accessible_note_edit_get_description; action->get_name = ags_accessible_note_edit_get_name; action->get_keybinding = ags_accessible_note_edit_get_keybinding; action->set_description = ags_accessible_note_edit_set_description; action->get_localized_name = ags_accessible_note_edit_get_localized_name; } void ags_note_edit_init(AgsNoteEdit *note_edit) { GtkAdjustment *adjustment; note_edit->key_mask = 0; adjustment = (GtkAdjustment *) gtk_adjustment_new(0.0, 0.0, 1.0, 1.0, 1.0, 1.0); note_edit->flags = 0; note_edit->ruler = ags_ruler_new(); gtk_table_attach(GTK_TABLE(note_edit), (GtkWidget *) note_edit->ruler, 0, 1, 0, 1, GTK_FILL|GTK_EXPAND, GTK_FILL, 0, 0); note_edit->drawing_area = (GtkDrawingArea *) gtk_drawing_area_new(); gtk_widget_set_style((GtkWidget *) note_edit->drawing_area, note_edit_style); gtk_widget_set_events(GTK_WIDGET(note_edit->drawing_area), GDK_EXPOSURE_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_CONTROL_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK); gtk_widget_set_can_focus(note_edit->drawing_area, TRUE); gtk_table_attach(GTK_TABLE(note_edit), (GtkWidget *) note_edit->drawing_area, 0, 1, 1, 2, GTK_FILL|GTK_EXPAND, GTK_FILL|GTK_EXPAND, 0, 0); note_edit->control.note = ags_note_new(); note_edit->width = 0; note_edit->height = 0; note_edit->map_width = AGS_NOTE_EDIT_MAX_CONTROLS * 16 * 64; note_edit->map_height = 78; note_edit->control_height = 14; note_edit->control_margin_y = 2; note_edit->control_width = 16; note_edit->y0 = 0; note_edit->y1 = 0; note_edit->nth_y = 0; note_edit->stop_y = 0; /* AgsNoteEditControlCurrent is used by ags_note_edit_draw_segment */ note_edit->control_current.control_count = AGS_NOTE_EDIT_MAX_CONTROLS; note_edit->control_current.control_width = 64; note_edit->control_current.x0 = 0; note_edit->control_current.x1 = 0; note_edit->control_current.nth_x = 0; /* AgsNoteEditControlUnit is used by ags_note_edit_draw_notation */ note_edit->control_unit.control_count = 16 * AGS_NOTE_EDIT_MAX_CONTROLS; note_edit->control_unit.control_width = 1 * 4; note_edit->control_unit.x0 = 0; note_edit->control_unit.x1 = 0; note_edit->control_unit.nth_x = 0; note_edit->control_unit.stop_x = 0; /* offset for pasting from clipboard */ note_edit->selected_x = 0; note_edit->selected_y = 0; /* GtkScrollbars */ adjustment = (GtkAdjustment *) gtk_adjustment_new(0.0, 0.0, 1.0, 1.0, 16.0, 1.0); note_edit->vscrollbar = (GtkVScrollbar *) gtk_vscrollbar_new(adjustment); gtk_table_attach(GTK_TABLE(note_edit), (GtkWidget *) note_edit->vscrollbar, 1, 2, 1, 2, GTK_FILL, GTK_FILL, 0, 0); adjustment = (GtkAdjustment *) gtk_adjustment_new(0.0, 0.0, 1.0, 1.0, (gdouble) note_edit->control_current.control_width, 1.0); note_edit->hscrollbar = (GtkHScrollbar *) gtk_hscrollbar_new(adjustment); gtk_table_attach(GTK_TABLE(note_edit), (GtkWidget *) note_edit->hscrollbar, 0, 1, 2, 3, GTK_FILL, GTK_FILL, 0, 0); } void ags_note_edit_connect(AgsConnectable *connectable) { AgsEditor *editor; AgsNoteEdit *note_edit; note_edit = AGS_NOTE_EDIT(connectable); editor = (AgsEditor *) gtk_widget_get_ancestor(GTK_WIDGET(note_edit), AGS_TYPE_EDITOR); if(editor != NULL && editor->selected_machine != NULL){ g_signal_connect(editor->selected_machine->audio, "set-audio-channels\0", G_CALLBACK(ags_note_edit_set_audio_channels_callback), note_edit); g_signal_connect(editor->selected_machine->audio, "set-pads\0", G_CALLBACK(ags_note_edit_set_pads_callback), note_edit); } g_signal_connect_after((GObject *) note_edit->drawing_area, "expose_event\0", G_CALLBACK(ags_note_edit_drawing_area_expose_event), (gpointer) note_edit); g_signal_connect_after((GObject *) note_edit->drawing_area, "configure_event\0", G_CALLBACK(ags_note_edit_drawing_area_configure_event), (gpointer) note_edit); g_signal_connect((GObject *) note_edit->drawing_area, "button_press_event\0", G_CALLBACK(ags_note_edit_drawing_area_button_press_event), (gpointer) note_edit); g_signal_connect((GObject *) note_edit->drawing_area, "button_release_event\0", G_CALLBACK(ags_note_edit_drawing_area_button_release_event), (gpointer) note_edit); g_signal_connect((GObject *) note_edit->drawing_area, "motion_notify_event\0", G_CALLBACK(ags_note_edit_drawing_area_motion_notify_event), (gpointer) note_edit); g_signal_connect((GObject *) note_edit->drawing_area, "key_press_event\0", G_CALLBACK(ags_note_edit_drawing_area_key_press_event), (gpointer) note_edit); g_signal_connect((GObject *) note_edit->drawing_area, "key_release_event\0", G_CALLBACK(ags_note_edit_drawing_area_key_release_event), (gpointer) note_edit); g_signal_connect_after((GObject *) note_edit->vscrollbar, "value-changed\0", G_CALLBACK(ags_note_edit_vscrollbar_value_changed), (gpointer) note_edit); g_signal_connect_after((GObject *) note_edit->hscrollbar, "value-changed\0", G_CALLBACK(ags_note_edit_hscrollbar_value_changed), (gpointer) note_edit); } void ags_note_edit_disconnect(AgsConnectable *connectable) { //TODO:JK: implement me } AtkObject* ags_note_edit_get_accessible(GtkWidget *widget) { AtkObject* accessible; accessible = g_object_get_qdata(G_OBJECT(widget), quark_accessible_object); if(!accessible){ accessible = g_object_new(ags_accessible_note_edit_get_type(), NULL); g_object_set_qdata(G_OBJECT(widget), quark_accessible_object, accessible); gtk_accessible_set_widget(accessible, widget); } return(accessible); } gboolean ags_accessible_note_edit_do_action(AtkAction *action, gint i) { AgsNoteEdit *note_edit; GdkEventKey *key_press, *key_release; GdkEventKey *modifier_press, *modifier_release; GdkEventKey *second_level_press, *second_level_release; if(!(i >= 0 && i < 13)){ return(FALSE); } note_edit = gtk_accessible_get_widget(ATK_OBJECT(action)); key_press = gdk_event_new(GDK_KEY_PRESS); key_release = gdk_event_new(GDK_KEY_RELEASE); /* create modifier */ modifier_press = gdk_event_new(GDK_KEY_PRESS); modifier_release = gdk_event_new(GDK_KEY_RELEASE); modifier_press->keyval = modifier_release->keyval = GDK_KEY_Control_R; /* create second level */ second_level_press = gdk_event_new(GDK_KEY_PRESS); second_level_release = gdk_event_new(GDK_KEY_RELEASE); second_level_press->keyval = second_level_release->keyval = GDK_KEY_Shift_R; switch(i){ case 0: { key_press->keyval = key_release->keyval = GDK_KEY_Left; /* send event */ gtk_widget_event(note_edit->drawing_area, key_press); gtk_widget_event(note_edit->drawing_area, key_release); } break; case 1: { key_press->keyval = key_release->keyval = GDK_KEY_Right; /* send event */ gtk_widget_event(note_edit->drawing_area, key_press); gtk_widget_event(note_edit->drawing_area, key_release); } break; case 2: { key_press->keyval = key_release->keyval = GDK_KEY_Up; /* send event */ gtk_widget_event(note_edit->drawing_area, key_press); gtk_widget_event(note_edit->drawing_area, key_release); } break; case 3: { key_press->keyval = key_release->keyval = GDK_KEY_Down; /* send event */ gtk_widget_event(note_edit->drawing_area, key_press); gtk_widget_event(note_edit->drawing_area, key_release); } break; case 4: { key_press->keyval = key_release->keyval = GDK_KEY_space; /* send event */ gtk_widget_event(note_edit->drawing_area, key_press); gtk_widget_event(note_edit->drawing_area, key_release); } break; case 5: { key_press->keyval = key_release->keyval = GDK_KEY_Left; /* send event */ gtk_widget_event(note_edit->drawing_area, second_level_press); gtk_widget_event(note_edit->drawing_area, key_press); gtk_widget_event(note_edit->drawing_area, key_release); gtk_widget_event(note_edit->drawing_area, second_level_release); } break; case 6: { key_press->keyval = key_release->keyval = GDK_KEY_Right; /* send event */ gtk_widget_event(note_edit->drawing_area, second_level_press); gtk_widget_event(note_edit->drawing_area, key_press); gtk_widget_event(note_edit->drawing_area, key_release); gtk_widget_event(note_edit->drawing_area, second_level_release); } break; case 7: { key_press->keyval = key_release->keyval = GDK_KEY_Delete; /* send event */ gtk_widget_event(note_edit->drawing_area, key_press); gtk_widget_event(note_edit->drawing_area, key_release); } break; case 8: { key_press->keyval = key_release->keyval = GDK_KEY_c; /* send event */ gtk_widget_event(note_edit->drawing_area, modifier_press); gtk_widget_event(note_edit->drawing_area, key_press); gtk_widget_event(note_edit->drawing_area, key_release); gtk_widget_event(note_edit->drawing_area, modifier_release); } break; case 9: { key_press->keyval = key_release->keyval = GDK_KEY_x; /* send event */ gtk_widget_event(note_edit->drawing_area, modifier_press); gtk_widget_event(note_edit->drawing_area, key_press); gtk_widget_event(note_edit->drawing_area, key_release); gtk_widget_event(note_edit->drawing_area, modifier_release); } break; case 10: { key_press->keyval = key_release->keyval = GDK_KEY_v; /* send event */ gtk_widget_event(note_edit->drawing_area, modifier_press); gtk_widget_event(note_edit->drawing_area, key_press); gtk_widget_event(note_edit->drawing_area, key_release); gtk_widget_event(note_edit->drawing_area, modifier_release); } break; case 11: { key_press->keyval = key_release->keyval = GDK_KEY_a; /* send event */ gtk_widget_event(note_edit->drawing_area, modifier_press); gtk_widget_event(note_edit->drawing_area, key_press); gtk_widget_event(note_edit->drawing_area, key_release); gtk_widget_event(note_edit->drawing_area, modifier_release); } break; case 12: { key_press->keyval = key_release->keyval = GDK_KEY_i; /* send event */ gtk_widget_event(note_edit->drawing_area, modifier_press); gtk_widget_event(note_edit->drawing_area, key_press); gtk_widget_event(note_edit->drawing_area, key_release); gtk_widget_event(note_edit->drawing_area, modifier_release); } break; } return(TRUE); } gint ags_accessible_note_edit_get_n_actions(AtkAction *action) { return(13); } const gchar* ags_accessible_note_edit_get_description(AtkAction *action, gint i) { static const gchar **actions = { "move cursor left\0", "move cursor right\0", "move cursor up\0", "move cursor down\0", "add audio note\0", "shrink audio note\0", "grow audio note\0", "remove audio note\0", "copy note to clipboard\0", "cut note to clipbaord\0", "paste note from clipboard\0", "select all note\0", "invert note\0", }; if(i >= 0 && i < 13){ return(actions[i]); }else{ return(NULL); } } const gchar* ags_accessible_note_edit_get_name(AtkAction *action, gint i) { static const gchar **actions = { "left\0", "right\0", "up\0", "down\0", "add\0", "shrink\0", "grow\0", "remove\0", "copy\0", "cut\0", "paste\0", "select-all\0", "invert\0", }; if(i >= 0 && i < 13){ return(actions[i]); }else{ return(NULL); } } const gchar* ags_accessible_note_edit_get_keybinding(AtkAction *action, gint i) { static const gchar **actions = { "left\0", "right\0", "up\0", "down\0", "space", "Shft+Left\0", "Shft+Right\0", "Del\0" "Ctrl+c" "Ctrl+x", "Ctrl+v", "Ctrl+a", "Ctrl+i", }; if(i >= 0 && i < 13){ return(actions[i]); }else{ return(NULL); } } gboolean ags_accessible_note_edit_set_description(AtkAction *action, gint i) { //TODO:JK: implement me return(FALSE); } gchar* ags_accessible_note_edit_get_localized_name(AtkAction *action, gint i) { //TODO:JK: implement me return(NULL); } /** * ags_note_edit_set_map_height: * @note_edit: the #AgsNoteEdit * @map_height: the new height * * Set the map height in pixel. * * Since: 0.4 */ void ags_note_edit_set_map_height(AgsNoteEdit *note_edit, guint map_height) { note_edit->map_height = map_height; note_edit->flags |= AGS_NOTE_EDIT_RESETING_VERTICALLY; ags_note_edit_reset_vertically(note_edit, AGS_NOTE_EDIT_RESET_VSCROLLBAR); note_edit->flags &= (~AGS_NOTE_EDIT_RESETING_VERTICALLY); note_edit->flags |= AGS_NOTE_EDIT_RESETING_HORIZONTALLY; ags_note_edit_reset_horizontally(note_edit, AGS_NOTE_EDIT_RESET_HSCROLLBAR); note_edit->flags &= (~AGS_NOTE_EDIT_RESETING_HORIZONTALLY); } /** * ags_note_edit_reset_vertically: * @note_edit: the #AgsNoteEdit * @flags: the #AgsNoteEditResetFlags * * Reset @note_edit as configured vertically. * * Since: 0.4 */ void ags_note_edit_reset_vertically(AgsNoteEdit *note_edit, guint flags) { AgsWindow *window; AgsEditor *editor; double tact_factor, zoom_factor; double tact; gdouble value; editor = (AgsEditor *) gtk_widget_get_ancestor(GTK_WIDGET(note_edit), AGS_TYPE_EDITOR); window = gtk_widget_get_ancestor(editor, AGS_TYPE_WINDOW); zoom_factor = 0.25; tact_factor = exp2(6.0 - (double) gtk_combo_box_get_active((GtkComboBox *) editor->toolbar->zoom)); tact = exp2((double) gtk_combo_box_get_active((GtkComboBox *) editor->toolbar->zoom) - 2.0); if(editor->selected_machine != NULL && editor->current_edit_widget == note_edit){ cairo_t *cr; gdouble value; value = GTK_RANGE(note_edit->vscrollbar)->adjustment->value; if((AGS_NOTE_EDIT_RESET_VSCROLLBAR & flags) != 0){ GtkWidget *widget; GtkAdjustment *adjustment; guint height; widget = GTK_WIDGET(note_edit->drawing_area); adjustment = GTK_RANGE(note_edit->vscrollbar)->adjustment; if(note_edit->map_height > widget->allocation.height){ height = widget->allocation.height; gtk_adjustment_set_upper(adjustment, (gdouble) (note_edit->map_height - height)); if(adjustment->value > adjustment->upper){ gtk_adjustment_set_value(adjustment, adjustment->upper); } }else{ height = note_edit->map_height; gtk_adjustment_set_upper(adjustment, 0.0); gtk_adjustment_set_value(adjustment, 0.0); } note_edit->height = height; } note_edit->y0 = ((guint) round((double) value)) % note_edit->control_height; if(note_edit->y0 != 0){ note_edit->y0 = note_edit->control_height - note_edit->y0; } note_edit->y1 = (note_edit->height - note_edit->y0) % note_edit->control_height; note_edit->nth_y = (guint) ceil(round((double) value) / (double)(note_edit->control_height)); note_edit->stop_y = note_edit->nth_y + (note_edit->height - note_edit->y0 - note_edit->y1) / note_edit->control_height; /* refresh display */ if(GTK_WIDGET_VISIBLE(editor)){ cr = gdk_cairo_create(GTK_WIDGET(note_edit->drawing_area)->window); cairo_surface_flush(cairo_get_target(cr)); cairo_push_group(cr); ags_note_edit_draw_segment(note_edit, cr); ags_note_edit_draw_notation(note_edit, cr); if(editor->toolbar->selected_edit_mode == editor->toolbar->position){ ags_note_edit_draw_position(note_edit, cr); } if((AGS_NOTE_EDIT_DRAW_FADER & (note_edit->flags)) != 0){ AgsCountBeatsAudioRun *count_beats_audio_run; AgsMutexManager *mutex_manager; GList *recall; gdouble position; pthread_mutex_t *audio_mutex; /* lookup audio mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) editor->selected_machine->audio); pthread_mutex_unlock(&(ags_application_mutex)); /* retrieve position */ pthread_mutex_lock(audio_mutex); recall = editor->selected_machine->audio->play; while((recall = ags_recall_find_type(recall, AGS_TYPE_COUNT_BEATS_AUDIO_RUN)) != NULL){ if(AGS_RECALL(recall->data)->recall_id != NULL && (AGS_RECALL_NOTATION & (AGS_RECALL(recall->data)->recall_id->flags)) != 0){ break; } recall = recall->next; } if(recall != NULL){ count_beats_audio_run = AGS_COUNT_BEATS_AUDIO_RUN(recall->data); position = count_beats_audio_run->notation_counter * note_edit->control_unit.control_width; } pthread_mutex_unlock(audio_mutex); /* draw fader */ if(recall != NULL){ ags_note_edit_draw_scroll(note_edit, cr, position); } } cairo_pop_group_to_source(cr); cairo_paint(cr); cairo_surface_mark_dirty(cairo_get_target(cr)); cairo_destroy(cr); } } } /** * ags_note_edit_reset_horizontally: * @note_edit: the #AgsNoteEdit * @flags: the #AgsNoteEditResetFlags * * Reset @note_edit as configured horizontally. * * Since: 0.4 */ void ags_note_edit_reset_horizontally(AgsNoteEdit *note_edit, guint flags) { AgsEditor *editor; double tact_factor, zoom_factor; double tact; gdouble value; editor = (AgsEditor *) gtk_widget_get_ancestor(GTK_WIDGET(note_edit), AGS_TYPE_EDITOR); zoom_factor = 0.25; tact_factor = exp2(6.0 - (double) gtk_combo_box_get_active((GtkComboBox *) editor->toolbar->zoom)); tact = exp2((double) gtk_combo_box_get_active((GtkComboBox *) editor->toolbar->zoom) - 2.0); if((AGS_NOTE_EDIT_RESET_WIDTH & flags) != 0){ note_edit->control_unit.control_width = (guint) (((double) note_edit->control_width * zoom_factor * tact)); note_edit->control_current.control_count = (guint) ((double) note_edit->control_unit.control_count * tact); note_edit->control_current.control_width = (note_edit->control_width * zoom_factor * tact_factor * tact); note_edit->map_width = (guint) ((double) note_edit->control_current.control_count * (double) note_edit->control_current.control_width); /* reset ruler */ note_edit->ruler->factor = tact_factor; note_edit->ruler->precision = tact; note_edit->ruler->scale_precision = 1.0 / tact; gtk_widget_queue_draw((GtkWidget *) note_edit->ruler); } value = GTK_RANGE(note_edit->hscrollbar)->adjustment->value; if((AGS_NOTE_EDIT_RESET_HSCROLLBAR & flags) != 0){ GtkWidget *widget; GtkAdjustment *adjustment; guint width; widget = GTK_WIDGET(note_edit->drawing_area); adjustment = GTK_RANGE(note_edit->hscrollbar)->adjustment; if(note_edit->map_width > widget->allocation.width){ width = widget->allocation.width; // gtk_adjustment_set_upper(adjustment, (double) (note_edit->map_width - width)); gtk_adjustment_set_upper(adjustment, (gdouble) (note_edit->map_width - width)); gtk_adjustment_set_upper(note_edit->ruler->adjustment, (gdouble) (note_edit->map_width - width) / note_edit->control_current.control_width); if(adjustment->value > adjustment->upper){ gtk_adjustment_set_value(adjustment, adjustment->upper); /* reset ruler */ gtk_adjustment_set_value(note_edit->ruler->adjustment, note_edit->ruler->adjustment->upper); gtk_widget_queue_draw((GtkWidget *) note_edit->ruler); } }else{ width = note_edit->map_width; gtk_adjustment_set_upper(adjustment, 0.0); gtk_adjustment_set_value(adjustment, 0.0); /* reset ruler */ gtk_adjustment_set_upper(note_edit->ruler->adjustment, 0.0); gtk_adjustment_set_value(note_edit->ruler->adjustment, 0.0); gtk_widget_queue_draw((GtkWidget *) note_edit->ruler); } note_edit->width = width; } /* reset AgsNoteEditControlCurrent */ if(note_edit->map_width > note_edit->width){ note_edit->control_current.x0 = ((guint) round((double) value)) % note_edit->control_current.control_width; if(note_edit->control_current.x0 != 0){ note_edit->control_current.x0 = note_edit->control_current.control_width - note_edit->control_current.x0; } note_edit->control_current.x1 = (note_edit->width - note_edit->control_current.x0) % note_edit->control_current.control_width; note_edit->control_current.nth_x = (guint) ceil((double)(value) / (double)(note_edit->control_current.control_width)); }else{ note_edit->control_current.x0 = 0; note_edit->control_current.x1 = 0; note_edit->control_current.nth_x = 0; } /* reset AgsNoteEditControlUnit */ if(note_edit->map_width > note_edit->width){ note_edit->control_unit.x0 = ((guint)round((double) value)) % note_edit->control_unit.control_width; if(note_edit->control_unit.x0 != 0){ note_edit->control_unit.x0 = note_edit->control_unit.control_width - note_edit->control_unit.x0; } note_edit->control_unit.x1 = (note_edit->width - note_edit->control_unit.x0) % note_edit->control_unit.control_width; note_edit->control_unit.nth_x = (guint) ceil(round((double) value) / (double) (note_edit->control_unit.control_width)); note_edit->control_unit.stop_x = note_edit->control_unit.nth_x + (note_edit->width - note_edit->control_unit.x0 - note_edit->control_unit.x1) / note_edit->control_unit.control_width; }else{ note_edit->control_unit.x0 = 0; note_edit->control_unit.x1 = 0; note_edit->control_unit.nth_x = 0; } /* refresh display */ if(editor->selected_machine != NULL){ cairo_t *cr; if(GTK_WIDGET_VISIBLE(editor)){ gdouble position; cr = gdk_cairo_create(GTK_WIDGET(note_edit->drawing_area)->window); cairo_surface_flush(cairo_get_target(cr)); cairo_push_group(cr); ags_note_edit_draw_segment(note_edit, cr); ags_note_edit_draw_notation(note_edit, cr); if(editor->toolbar->selected_edit_mode == editor->toolbar->position){ ags_note_edit_draw_position(note_edit, cr); } //TODO:JK: implement me // position = gtk_range_get_value(GTK_RANGE(note_edit->hscrollbar)); // position -= floor(position / note_edit->control_current.control_width); // ags_note_edit_draw_scroll(note_edit, cr, // position); /* fader */ if((AGS_NOTE_EDIT_DRAW_FADER & (note_edit->flags)) != 0){ AgsCountBeatsAudioRun *count_beats_audio_run; AgsMutexManager *mutex_manager; GList *recall; gdouble position; pthread_mutex_t *audio_mutex; /* lookup audio mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) editor->selected_machine->audio); pthread_mutex_unlock(&(ags_application_mutex)); /* retrieve position */ pthread_mutex_lock(audio_mutex); recall = editor->selected_machine->audio->play; while((recall = ags_recall_find_type(recall, AGS_TYPE_COUNT_BEATS_AUDIO_RUN)) != NULL){ if(AGS_RECALL(recall->data)->recall_id != NULL && (AGS_RECALL_NOTATION & (AGS_RECALL(recall->data)->recall_id->flags)) != 0){ break; } recall = recall->next; } if(recall != NULL){ count_beats_audio_run = AGS_COUNT_BEATS_AUDIO_RUN(recall->data); position = count_beats_audio_run->notation_counter * note_edit->control_unit.control_width; } pthread_mutex_unlock(audio_mutex); /* draw fader */ if(recall != NULL){ ags_note_edit_draw_scroll(note_edit, cr, position); } } cairo_pop_group_to_source(cr); cairo_paint(cr); cairo_surface_mark_dirty(cairo_get_target(cr)); cairo_destroy(cr); } } } /** * ags_note_edit_draw_segment: * @note_edit: the #AgsNoteEdit * @cr: the #cairo_t surface * * Draws horizontal and vertical lines. * * Since: 0.4 */ void ags_note_edit_draw_segment(AgsNoteEdit *note_edit, cairo_t *cr) { AgsEditor *editor; GtkWidget *widget; GtkStyle *note_edit_style; double tact; guint i, j; guint j_set; static const gdouble white_gc = 65535.0; widget = (GtkWidget *) note_edit->drawing_area; note_edit_style = gtk_widget_get_style(widget); editor = (AgsEditor *) gtk_widget_get_ancestor(GTK_WIDGET(note_edit), AGS_TYPE_EDITOR); /* clear with background color */ cairo_set_source_rgb(cr, note_edit_style->bg[0].red / white_gc, note_edit_style->bg[0].green / white_gc, note_edit_style->bg[0].blue / white_gc); cairo_rectangle(cr, 0.0, 0.0, (double) widget->allocation.width, (double) widget->allocation.height); cairo_fill(cr); /* horizontal lines */ cairo_set_line_width(cr, 1.0); cairo_set_source_rgb(cr, note_edit_style->fg[0].red / white_gc, note_edit_style->fg[0].green / white_gc, note_edit_style->fg[0].blue / white_gc); for(i = note_edit->y0 ; i < note_edit->height;){ cairo_move_to(cr, 0.0, (double) i); cairo_line_to(cr, (double) note_edit->width, (double) i); cairo_stroke(cr); i += note_edit->control_height; } cairo_move_to(cr, 0.0, (double) i); cairo_line_to(cr, (double) note_edit->width, (double) i); cairo_stroke(cr); /* vertical lines */ tact = exp2((double) gtk_combo_box_get_active((GtkComboBox *) editor->toolbar->zoom) - 2.0); i = note_edit->control_current.x0; if(i < note_edit->width && tact > 1.0 ){ j_set = note_edit->control_current.nth_x % ((guint) tact); /* thin lines */ cairo_set_source_rgb(cr, note_edit_style->mid[0].red / white_gc, note_edit_style->mid[0].green / white_gc, note_edit_style->mid[0].blue / white_gc); if(j_set != 0){ j = j_set; goto ags_note_edit_draw_segment0; } } for(; i < note_edit->width; ){ /* strong lines */ cairo_set_source_rgb(cr, note_edit_style->fg[0].red / white_gc, note_edit_style->fg[0].green / white_gc, note_edit_style->fg[0].blue / white_gc); cairo_move_to(cr, (double) i, 0.0); cairo_line_to(cr, (double) i, (double) note_edit->height); cairo_stroke(cr); i += note_edit->control_current.control_width; /* thin lines */ cairo_set_source_rgb(cr, note_edit_style->mid[0].red / white_gc, note_edit_style->mid[0].green / white_gc, note_edit_style->mid[0].blue / white_gc); for(j = 1; i < note_edit->width && j < tact; j++){ ags_note_edit_draw_segment0: cairo_move_to(cr, (double) i, 0.0); cairo_line_to(cr, (double) i, (double) note_edit->height); cairo_stroke(cr); i += note_edit->control_current.control_width; } } } /** * ags_note_edit_draw_position: * @note_edit: the #AgsNoteEdit * @cr: the #cairo_t surface * * Draws the cursor. * * Since: 0.4 */ void ags_note_edit_draw_position(AgsNoteEdit *note_edit, cairo_t *cr) { GtkStyle *note_edit_style; guint selected_x, selected_y; guint x_offset[2], y_offset[2]; guint x, y, width, height; gint size_width, size_height; static const gdouble white_gc = 65535.0; note_edit_style = gtk_widget_get_style(GTK_WIDGET(note_edit->drawing_area)); selected_x = note_edit->selected_x * note_edit->control_unit.control_width; selected_y = note_edit->selected_y * note_edit->control_height; size_width = GTK_WIDGET(note_edit->drawing_area)->allocation.width; size_height = GTK_WIDGET(note_edit->drawing_area)->allocation.height; x_offset[0] = (guint) gtk_range_get_value(GTK_RANGE(note_edit->hscrollbar)); x_offset[1] = x_offset[0] + (guint) size_width; y_offset[0] = (guint) gtk_range_get_value(GTK_RANGE(note_edit->vscrollbar)); y_offset[1] = y_offset[0] + (guint) size_height; /* calculate horizontally values */ if(selected_x < x_offset[0]){ if(selected_x + note_edit->control_current.control_width > x_offset[0]){ x = 0; width = selected_x + note_edit->control_current.control_width - x_offset[0]; }else{ return; } }else if(selected_x > x_offset[1]){ return; }else{ x = selected_x - x_offset[0]; if(selected_x + note_edit->control_current.control_width < x_offset[1]){ width = note_edit->control_current.control_width; }else{ width = x_offset[1] - selected_x; } } /* calculate vertically values */ if(selected_y < y_offset[0]){ if(selected_y + note_edit->control_height > y_offset[0]){ y = 0; height = selected_y + note_edit->control_height - y_offset[0]; }else{ return; } }else if(selected_y > y_offset[1]){ return; }else{ y = selected_y - y_offset[0]; if(selected_y + note_edit->control_height < y_offset[1]){ height = note_edit->control_height; }else{ height = y_offset[1] - selected_y; } } /* draw */ cairo_set_source_rgba(cr, note_edit_style->base[0].red / white_gc, note_edit_style->base[0].green / white_gc, note_edit_style->base[0].blue / white_gc, 0.5); cairo_rectangle(cr, (double) x, (double) y, (double) width, (double) height); cairo_fill(cr); } /** * ags_note_edit_draw_notation: * @note_edit: the #AgsNoteEdit * @cr: the #cairo_t surface * * Draw the #AgsNotation of selected #AgsMachine on @note_edit. * * Since: 0.4 */ void ags_note_edit_draw_notation(AgsNoteEdit *note_edit, cairo_t *cr) { AgsMachine *machine; AgsEditor *editor; GtkWidget *widget; GtkStyle *note_edit_style; AgsNote *note; AgsMutexManager *mutex_manager; GList *list_notation, *list_note; guint x_offset; guint control_height; guint x, y, width, height; gint selected_channel; gint i; pthread_mutex_t *audio_mutex; static const gdouble white_gc = 65535.0; note_edit_style = gtk_widget_get_style(GTK_WIDGET(note_edit->drawing_area)); editor = (AgsEditor *) gtk_widget_get_ancestor(GTK_WIDGET(note_edit), AGS_TYPE_EDITOR); if(editor->selected_machine == NULL || (machine = editor->selected_machine) == NULL){ return; } widget = (GtkWidget *) note_edit->drawing_area; /* lookup audio mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) editor->selected_machine->audio); pthread_mutex_unlock(&(ags_application_mutex)); /* draw */ pthread_mutex_lock(audio_mutex); cairo_set_source_rgb(cr, note_edit_style->fg[0].red / white_gc, note_edit_style->fg[0].green / white_gc, note_edit_style->fg[0].blue / white_gc); i = 0; while((selected_channel = ags_notebook_next_active_tab(editor->current_notebook, i)) != -1){ list_notation = g_list_nth(machine->audio->notation, selected_channel); if(list_notation == NULL){ i++; continue; } list_note = AGS_NOTATION(list_notation->data)->notes; control_height = note_edit->control_height - 2 * note_edit->control_margin_y; x_offset = (guint) GTK_RANGE(note_edit->hscrollbar)->adjustment->value; /* draw controls smaller than note_edit->nth_x */ while(list_note != NULL && (note = (AgsNote *) list_note->data)->x[0] < note_edit->control_unit.nth_x){ if(note->x[1] >= note_edit->control_unit.nth_x){ if(note->y >= note_edit->nth_y && note->y <= note_edit->stop_y){ x = 0; y = (note->y - note_edit->nth_y) * note_edit->control_height + note_edit->y0 + note_edit->control_margin_y; width = (guint) ((double) note->x[1] * note_edit->control_unit.control_width - (double) x_offset); if(width > widget->allocation.width) width = widget->allocation.width; height = control_height; /* draw note */ cairo_rectangle(cr, (double) x, (double) y, (double) width, (double) height); cairo_fill(cr); /* check if note is selected */ if((AGS_NOTE_IS_SELECTED & (note->flags)) != 0){ cairo_set_source_rgba(cr, note_edit_style->light[0].red / white_gc, note_edit_style->light[0].green / white_gc, note_edit_style->light[0].blue / white_gc, 0.7); cairo_rectangle(cr, (double) x, (double) y, (double) width, (double) height); cairo_stroke(cr); cairo_set_source_rgb(cr, note_edit_style->fg[0].red / white_gc, note_edit_style->fg[0].green / white_gc, note_edit_style->fg[0].blue / white_gc); } }else if(note->y == (note_edit->nth_y - 1) && note_edit->y0 != 0){ if(note_edit->y0 > note_edit->control_margin_y){ x = 0; width = (guint) ((double) note->x[1] * (double) note_edit->control_unit.control_width - x_offset); if(width > widget->allocation.width) width = widget->allocation.width; if(note_edit->y0 > control_height + note_edit->control_margin_y){ y = note_edit->y0 - (control_height + note_edit->control_margin_y); height = control_height; }else{ y = 0; height = note_edit->y0 - note_edit->control_margin_y; } /* draw note */ cairo_rectangle(cr, (double) x, (double) y, (double) width, (double) height); cairo_fill(cr); /* check if note is selected */ if((AGS_NOTE_IS_SELECTED & (note->flags)) != 0){ cairo_set_source_rgba(cr, note_edit_style->light[0].red / white_gc, note_edit_style->light[0].green / white_gc, note_edit_style->light[0].blue / white_gc, 0.7); cairo_rectangle(cr, (double) x, (double) y, (double) width, (double) height); cairo_stroke(cr); cairo_set_source_rgb(cr, note_edit_style->fg[0].red / white_gc, note_edit_style->fg[0].green / white_gc, note_edit_style->fg[0].blue / white_gc); } } }else if(note->y == (note_edit->stop_y + 1) && note_edit->y1 != 0){ if(note_edit->y1 > note_edit->control_margin_y){ x = 0; width = note->x[1] * note_edit->control_unit.control_width - x_offset; if(width > widget->allocation.width) width = widget->allocation.width; y = (note->y - note_edit->nth_y) * note_edit->control_height + note_edit->control_margin_y; if(note_edit->y1 > control_height + note_edit->control_margin_y){ height = control_height; }else{ height = note_edit->y1 - note_edit->control_margin_y; } /* draw note */ cairo_rectangle(cr, (double) x, (double) y, (double) width, (double) height); cairo_fill(cr); /* check if note is selected */ if((AGS_NOTE_IS_SELECTED & (note->flags)) != 0){ cairo_set_source_rgba(cr, note_edit_style->light[0].red / white_gc, note_edit_style->light[0].green / white_gc, note_edit_style->light[0].blue / white_gc, 0.7); cairo_rectangle(cr, (double) x, (double) y, (double) width, (double) height); cairo_stroke(cr); cairo_set_source_rgb(cr, note_edit_style->fg[0].red / white_gc, note_edit_style->fg[0].green / white_gc, note_edit_style->fg[0].blue / white_gc); } } } } list_note = list_note->next; } /* draw controls equal or greater than note_edit->nth_x */ while(list_note != NULL && (note = (AgsNote *) list_note->data)->x[0] <= note_edit->control_unit.stop_x){ if(note->y >= note_edit->nth_y && note->y <= note_edit->stop_y){ x = (guint) note->x[0] * note_edit->control_unit.control_width; y = (note->y - note_edit->nth_y) * note_edit->control_height + note_edit->y0 + note_edit->control_margin_y; width = note->x[1] * note_edit->control_unit.control_width - x; x -= x_offset; if(x + width > widget->allocation.width) width = widget->allocation.width - x; height = control_height; /* draw note*/ cairo_rectangle(cr, (double) x, (double) y, (double) width, (double) height); cairo_fill(cr); /* check if note is selected */ if((AGS_NOTE_IS_SELECTED & (note->flags)) != 0){ cairo_set_source_rgba(cr, note_edit_style->light[0].red / white_gc, note_edit_style->light[0].green / white_gc, note_edit_style->light[0].blue / white_gc, 0.7); cairo_rectangle(cr, (double) x, (double) y, (double) width, (double) height); cairo_stroke(cr); cairo_set_source_rgb(cr, note_edit_style->fg[0].red / white_gc, note_edit_style->fg[0].green / white_gc, note_edit_style->fg[0].blue / white_gc); } }else if(note->y == (note_edit->nth_y - 1) && note_edit->y0 != 0){ if(note_edit->y0 > note_edit->control_margin_y){ x = note->x[0] * note_edit->control_unit.control_width - x_offset; width = note->x[1] * note_edit->control_unit.control_width - x_offset - x; if(x + width > widget->allocation.width) width = widget->allocation.width - x; if(note_edit->y0 > control_height + note_edit->control_margin_y){ y = note_edit->y0 - (control_height + note_edit->control_margin_y); height = control_height; }else{ y = 0; height = note_edit->y0 - note_edit->control_margin_y; } /* draw note */ cairo_rectangle(cr, (double) x, (double) y, (double) width, (double) height); cairo_fill(cr); /* check if note is selected */ if((AGS_NOTE_IS_SELECTED & (note->flags)) != 0){ cairo_set_source_rgba(cr, note_edit_style->light[0].red / white_gc, note_edit_style->light[0].green / white_gc, note_edit_style->light[0].blue / white_gc, 0.7); cairo_rectangle(cr, (double) x, (double) y, (double) width, (double) height); cairo_stroke(cr); cairo_set_source_rgb(cr, note_edit_style->fg[0].red / white_gc, note_edit_style->fg[0].green / white_gc, note_edit_style->fg[0].blue / white_gc); } } }else if(note->y == (note_edit->stop_y + 1) && note_edit->y1 != 0){ if(note_edit->y1 > note_edit->control_margin_y){ x = note->x[0] * note_edit->control_unit.control_width - x_offset; width = note->x[1] * note_edit->control_unit.control_width - x_offset - x; if(x + width > widget->allocation.width) width = widget->allocation.width - x; y = (note->y - note_edit->nth_y) * note_edit->control_height + note_edit->control_margin_y; if(note_edit->y1 > control_height + note_edit->control_margin_y){ height = control_height; }else{ height = note_edit->y1 - note_edit->control_margin_y; } /* draw note */ cairo_rectangle(cr, (double) x, (double) y, (double) width, (double) height); cairo_fill(cr); /* check if note is selected */ if((AGS_NOTE_IS_SELECTED & (note->flags)) != 0){ cairo_set_source_rgba(cr, note_edit_style->light[0].red / white_gc, note_edit_style->light[0].green / white_gc, note_edit_style->light[0].blue / white_gc, 0.7); cairo_rectangle(cr, (double) x, (double) y, (double) width, (double) height); cairo_stroke(cr); cairo_set_source_rgb(cr, note_edit_style->fg[0].red / white_gc, note_edit_style->fg[0].green / white_gc, note_edit_style->fg[0].blue / white_gc); } } } list_note = list_note->next; } i++; } pthread_mutex_unlock(audio_mutex); } /** * ags_note_edit_draw_scroll: * @note_edit: the #AgsNoteEdit * @cr: the #cairo_t surface * @position: the new position * * Change visible x-position of @note_edit. * * Since: 0.4 */ void ags_note_edit_draw_scroll(AgsNoteEdit *note_edit, cairo_t *cr, gdouble position) { GtkStyle *note_edit_style; double x, y; double width, height; static const gdouble white_gc = 65535.0; note_edit_style = gtk_widget_get_style(GTK_WIDGET(note_edit->drawing_area)); y = 0.0; x = (position) - (GTK_RANGE(note_edit->hscrollbar)->adjustment->value); height = (double) GTK_WIDGET(note_edit->drawing_area)->allocation.height; width = 3.0; /* draw */ cairo_set_source_rgba(cr, note_edit_style->dark[0].red / white_gc, note_edit_style->dark[0].green / white_gc, note_edit_style->dark[0].blue / white_gc, 0.5); cairo_rectangle(cr, (double) x, (double) y, (double) width, (double) height); cairo_fill(cr); } /** * ags_note_edit_new: * * Create a new #AgsNoteEdit. * * Since: 0.4 */ AgsNoteEdit* ags_note_edit_new() { AgsNoteEdit *note_edit; note_edit = (AgsNoteEdit *) g_object_new(AGS_TYPE_NOTE_EDIT, NULL); return(note_edit); } gsequencer-0.6.37/src/ags/X/editor/ags_inline_player.c0000644000175000017500000001661412626272146017577 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include void ags_inline_player_class_init(AgsInlinePlayerClass *inline_player); void ags_inline_player_connectable_interface_init(AgsConnectableInterface *connectable); void ags_inline_player_init(AgsInlinePlayer *inline_player); void ags_inline_player_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_inline_player_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_inline_player_finalize(GObject *gobject); void ags_inline_player_connect(AgsConnectable *connectable); void ags_inline_player_disconnect(AgsConnectable *connectable); void ags_inline_player_show(GtkWidget *widget); void ags_inline_player_update(AgsInlinePlayer *inline_player); enum{ PROP_0, PROP_PLAYABLE, }; static gpointer ags_inline_player_parent_class = NULL; GType ags_inline_player_get_type(void) { static GType ags_type_inline_player = 0; if(!ags_type_inline_player){ static const GTypeInfo ags_inline_player_info = { sizeof (AgsInlinePlayerClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_inline_player_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsInlinePlayer), 0, /* n_preallocs */ (GInstanceInitFunc) ags_inline_player_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_inline_player_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_inline_player = g_type_register_static(GTK_TYPE_VBOX, "AgsInlinePlayer\0", &ags_inline_player_info, 0); g_type_add_interface_static(ags_type_inline_player, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return(ags_type_inline_player); } void ags_inline_player_class_init(AgsInlinePlayerClass *inline_player) { GObjectClass *gobject; GtkWidgetClass *widget; GParamSpec *param_spec; ags_inline_player_parent_class = g_type_class_peek_parent(inline_player); /* GObjectClass */ gobject = (GObjectClass *) inline_player; gobject->set_property = ags_inline_player_set_property; gobject->get_property = ags_inline_player_get_property; gobject->finalize = ags_inline_player_finalize; /* properties */ param_spec = g_param_spec_object("playable\0", "playable for player\0", "The AgsPlayable to use within the AgsInlinePlayer\0", G_TYPE_OBJECT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_PLAYABLE, param_spec); /* GtkWidgetClass */ widget = (GtkWidgetClass *) inline_player; widget->show = ags_inline_player_show; } void ags_inline_player_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->is_ready = NULL; connectable->is_connected = NULL; connectable->connect = ags_inline_player_connect; connectable->disconnect = ags_inline_player_disconnect; } void ags_inline_player_init(AgsInlinePlayer *inline_player) { GtkHBox *hbox; inline_player->playable = NULL; hbox = (GtkHBox *) gtk_hbox_new(FALSE, 0); gtk_box_pack_start((GtkBox *) inline_player, (GtkWidget *) hbox, FALSE, FALSE, 0); inline_player->play = (GtkToggleButton *) g_object_new(GTK_TYPE_TOGGLE_BUTTON, "image\0", (GtkWidget *) gtk_image_new_from_stock(GTK_STOCK_MEDIA_PLAY, GTK_ICON_SIZE_LARGE_TOOLBAR), NULL); gtk_box_pack_start((GtkBox *) hbox, (GtkWidget *) inline_player->play, FALSE, FALSE, 0); inline_player->position = (GtkHScale *) gtk_hscale_new_with_range(0.0, 1.0, 1.0); gtk_box_pack_start((GtkBox *) hbox, (GtkWidget *) inline_player->position, TRUE, TRUE, 0); inline_player->volume = (GtkVolumeButton *) gtk_volume_button_new(); gtk_box_pack_start((GtkBox *) hbox, (GtkWidget *) inline_player->volume, FALSE, FALSE, 0); } void ags_inline_player_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsInlinePlayer *inline_player; inline_player = AGS_INLINE_PLAYER(gobject); switch(prop_id){ case PROP_PLAYABLE: { AgsPlayable *playable; playable = (AgsPlayable *) g_value_get_object(value); if(inline_player->playable == playable) return; if(inline_player->playable != NULL){ g_object_unref(inline_player->playable); } if(playable != NULL){ g_object_ref(playable); } inline_player->playable = playable; } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_inline_player_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsInlinePlayer *inline_player; inline_player = AGS_INLINE_PLAYER(gobject); switch(prop_id){ case PROP_PLAYABLE: g_value_set_object(value, inline_player->playable); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_inline_player_finalize(GObject *gobject) { AgsInlinePlayer *inline_player; inline_player = (AgsInlinePlayer *) gobject; //TODO:JK: /* implement me */ G_OBJECT_CLASS(ags_inline_player_parent_class)->finalize(gobject); } void ags_inline_player_connect(AgsConnectable *connectable) { AgsInlinePlayer *inline_player; /* AgsInlinePlayer */ inline_player = AGS_INLINE_PLAYER(connectable); //TODO:JK: implement me /* g_signal_connect(G_OBJECT(inline_player->preset), "changed\0", G_CALLBACK(ags_inline_player_preset_changed), inline_player); g_signal_connect(G_OBJECT(inline_player->instrument), "changed\0", G_CALLBACK(ags_inline_player_instrument_changed), inline_player); g_signal_connect(G_OBJECT(inline_player->sample), "changed\0", G_CALLBACK(ags_inline_player_sample_changed), inline_player); */ } void ags_inline_player_disconnect(AgsConnectable *connectable) { //TODO:JK: /* implement me */ } void ags_inline_player_show(GtkWidget *widget) { AgsInlinePlayer *inline_player = (AgsInlinePlayer *) widget; GTK_WIDGET_CLASS(ags_inline_player_parent_class)->show(widget); //TODO:JK: /* perhaps empty */ } AgsInlinePlayer* ags_inline_player_new() { AgsInlinePlayer *inline_player; inline_player = (AgsInlinePlayer *) g_object_new(AGS_TYPE_INLINE_PLAYER, NULL); return(inline_player); } gsequencer-0.6.37/src/ags/X/editor/ags_machine_selector_callbacks.h0000644000175000017500000000350112621463700022235 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_MACHINE_SELECTOR_CALLBACKS_H__ #define __AGS_MACHINE_SELECTOR_CALLBACKS_H__ #include void ags_machine_selector_popup_add_tab_callback(GtkWidget *menu_item, AgsMachineSelector *machine_selector); void ags_machine_selector_popup_remove_tab_callback(GtkWidget *menu_item, AgsMachineSelector *machine_selector); void ags_machine_selector_popup_add_index_callback(GtkWidget *menu_item, AgsMachineSelector *machine_selector); void ags_machine_selector_popup_remove_index_callback(GtkWidget *menu_item, AgsMachineSelector *machine_selector); void ags_machine_selector_popup_link_index_callback(GtkWidget *menu_item, AgsMachineSelector *machine_selector); void ags_machine_selector_popup_reverse_mapping_callback(GtkWidget *menu_item, AgsMachineSelector *machine_selector); void ags_machine_selector_popup_shift_piano_callback(GtkWidget *menu_item, AgsMachineSelector *machine_selector); void ags_machine_selector_radio_changed(GtkWidget *radio_button, AgsMachineSelector *machine_selector); #endif /*__AGS_MACHINE_SELECTOR_CALLBACKS_H__*/ gsequencer-0.6.37/src/ags/X/editor/ags_meter_callbacks.h0000644000175000017500000000243712612232537020056 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_METER_CALLBACKS_H__ #define __AGS_METER_CALLBACKS_H__ #include #include #include #include gboolean ags_meter_destroy_callback(GtkObject *object, AgsMeter *meter); void ags_meter_show_callback(GtkWidget *widget, AgsMeter *meter); gboolean ags_meter_expose_event(GtkWidget *widget, GdkEventExpose *event, AgsMeter *meter); gboolean ags_meter_configure_event(GtkWidget *widget, GdkEventConfigure *event, AgsMeter *meter); #endif /*__AGS_METER_CALLBACKS_H__*/ gsequencer-0.6.37/src/ags/X/editor/ags_machine_radio_button.h0000644000175000017500000000416312621463700021114 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_MACHINE_RADIO_BUTTON_H__ #define __AGS_MACHINE_RADIO_BUTTON_H__ #include #include #include #include #define AGS_TYPE_MACHINE_RADIO_BUTTON (ags_machine_radio_button_get_type()) #define AGS_MACHINE_RADIO_BUTTON(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_MACHINE_RADIO_BUTTON, AgsMachineRadioButton)) #define AGS_MACHINE_RADIO_BUTTON_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_MACHINE_RADIO_BUTTON, AgsMachineRadioButtonClass)) #define AGS_IS_MACHINE_RADIO_BUTTON(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_MACHINE_RADIO_BUTTON)) #define AGS_IS_MACHINE_RADIO_BUTTON_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_MACHINE_RADIO_BUTTON)) #define AGS_MACHINE_RADIO_BUTTON_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS (obj, AGS_TYPE_MACHINE_RADIO_BUTTON, AgsMachineRadioButtonClass)) typedef struct _AgsMachineRadioButton AgsMachineRadioButton; typedef struct _AgsMachineRadioButtonClass AgsMachineRadioButtonClass; struct _AgsMachineRadioButton { GtkRadioButton radio_button; AgsMachine *machine; }; struct _AgsMachineRadioButtonClass { GtkRadioButtonClass radio_button; }; GType ags_machine_radio_button_get_type(void); AgsMachineRadioButton* ags_machine_radio_button_new(); #endif /*__AGS_MACHINE_RADIO_BUTTON_H__*/ gsequencer-0.6.37/src/ags/X/editor/ags_machine_selection.h0000644000175000017500000000433012621463700020404 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_MACHINE_SELECTION_H__ #define __AGS_MACHINE_SELECTION_H__ #include #include #include #include #define AGS_TYPE_MACHINE_SELECTION (ags_machine_selection_get_type()) #define AGS_MACHINE_SELECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_MACHINE_SELECTION, AgsMachineSelection)) #define AGS_MACHINE_SELECTION_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_MACHINE_SELECTION, AgsMachineSelectionClass)) #define AGS_IS_MACHINE_SELECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_MACHINE_SELECTION)) #define AGS_IS_MACHINE_SELECTION_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_MACHINE_SELECTION)) #define AGS_MACHINE_SELECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS (obj, AGS_TYPE_MACHINE_SELECTION, AgsMachineSelectionClass)) typedef struct _AgsMachineSelection AgsMachineSelection; typedef struct _AgsMachineSelectionClass AgsMachineSelectionClass; struct _AgsMachineSelection { GtkDialog dialog; AgsWindow *window; GList *machine; }; struct _AgsMachineSelectionClass { GtkDialogClass dialog; }; GType ags_machine_selection_get_type(void); void ags_machine_selection_load_defaults(AgsMachineSelection *machine_selection); AgsMachine* ags_machine_selection_run(AgsMachineSelection *machine_selection); AgsMachineSelection* ags_machine_selection_new(AgsWindow *window); #endif /*__AGS_MACHINE_SELECTION_H__*/ gsequencer-0.6.37/src/ags/X/editor/ags_sf2_chooser_callbacks.h0000644000175000017500000000237112621463700021151 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_SF2_CHOOSER_CALLBACKS_H__ #define __AGS_SF2_CHOOSER_CALLBACKS_H__ #include #include #include #include void ags_sf2_chooser_preset_changed(GtkComboBox *combo_box, AgsSF2Chooser *sf2_chooser); void ags_sf2_chooser_instrument_changed(GtkComboBox *combo_box, AgsSF2Chooser *sf2_chooser); void ags_sf2_chooser_sample_changed(GtkComboBox *combo_box, AgsSF2Chooser *sf2_chooser); #endif /*__AGS_SF2_CHOOSER_CALLBACKS_H__*/ gsequencer-0.6.37/src/ags/X/editor/ags_machine_radio_button.c0000644000175000017500000001531712626272146021121 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include void ags_machine_radio_button_class_init(AgsMachineRadioButtonClass *machine_radio_button); void ags_machine_radio_button_connectable_interface_init(AgsConnectableInterface *connectable); void ags_machine_radio_button_init(AgsMachineRadioButton *machine_radio_button); void ags_machine_radio_button_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_machine_radio_button_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_machine_radio_button_connect(AgsConnectable *connectable); void ags_machine_radio_button_disconnect(AgsConnectable *connectable); void ags_machine_radio_button_finalize(GObject *gobject); /** * SECTION:ags_machine_radio_button * @short_description: machine radio buttons * @title: AgsMachineRadioButton * @section_id: * @include: ags/X/editor/ags_machine_radio_button.h * * The #AgsMachineRadioButton enables you make choice of an #AgsMachine. */ enum{ PROP_0, PROP_MACHINE, }; static gpointer ags_machine_radio_button_parent_class = NULL; GType ags_machine_radio_button_get_type(void) { static GType ags_type_machine_radio_button = 0; if(!ags_type_machine_radio_button){ static const GTypeInfo ags_machine_radio_button_info = { sizeof (AgsMachineRadioButtonClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_machine_radio_button_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsMachineRadioButton), 0, /* n_preallocs */ (GInstanceInitFunc) ags_machine_radio_button_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_machine_radio_button_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_machine_radio_button = g_type_register_static(GTK_TYPE_RADIO_BUTTON, "AgsMachineRadioButton\0", &ags_machine_radio_button_info, 0); g_type_add_interface_static(ags_type_machine_radio_button, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return(ags_type_machine_radio_button); } void ags_machine_radio_button_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->is_ready = NULL; connectable->is_connected = NULL; connectable->connect = ags_machine_radio_button_connect; connectable->disconnect = ags_machine_radio_button_disconnect; } void ags_machine_radio_button_class_init(AgsMachineRadioButtonClass *machine_radio_button) { GObjectClass *gobject; GParamSpec *param_spec; ags_machine_radio_button_parent_class = g_type_class_peek_parent(machine_radio_button); /* GObjectClass */ gobject = (GObjectClass *) machine_radio_button; gobject->set_property = ags_machine_radio_button_set_property; gobject->get_property = ags_machine_radio_button_get_property; gobject->finalize = ags_machine_radio_button_finalize; /* properties */ param_spec = g_param_spec_object("machine\0", "assigned machine\0", "The machine it is assigned to\0", AGS_TYPE_MACHINE, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_MACHINE, param_spec); } void ags_machine_radio_button_init(AgsMachineRadioButton *machine_radio_button) { machine_radio_button->machine = NULL; } void ags_machine_radio_button_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsMachineRadioButton *machine_radio_button; machine_radio_button = AGS_MACHINE_RADIO_BUTTON(gobject); switch(prop_id){ case PROP_MACHINE: { AgsMachine *machine; AgsMachineSelector *machine_selector; machine = (AgsMachine *) g_value_get_object(value); if(machine == machine_radio_button->machine){ return; } if(machine_radio_button->machine != NULL){ g_object_unref(machine_radio_button->machine); } if(machine != NULL){ g_object_set(gobject, "label\0", g_strdup_printf("%s: %s\0", G_OBJECT_TYPE_NAME(machine), machine->name), NULL); g_object_ref(machine); } machine_radio_button->machine = machine; machine_selector = (AgsMachineSelector *) gtk_widget_get_ancestor((GtkWidget *) machine_radio_button, AGS_TYPE_MACHINE_SELECTOR); ags_machine_selector_changed(machine_selector, machine); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_machine_radio_button_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsMachineRadioButton *machine_radio_button; machine_radio_button = AGS_MACHINE_RADIO_BUTTON(gobject); switch(prop_id){ case PROP_MACHINE: g_value_set_object(value, machine_radio_button->machine); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_machine_radio_button_connect(AgsConnectable *connectable) { //TODO:JK: implement me } void ags_machine_radio_button_disconnect(AgsConnectable *connectable) { //TODO:JK: implement me } void ags_machine_radio_button_finalize(GObject *gobject) { AgsMachineRadioButton *machine_radio_button; machine_radio_button = AGS_MACHINE_RADIO_BUTTON(gobject); if(machine_radio_button->machine != NULL){ g_object_unref(G_OBJECT(machine_radio_button->machine)); } } /** * ags_machine_radio_button_new: * * Create a new #AgsMachineRadioButton. * * Since: 0.4 */ AgsMachineRadioButton* ags_machine_radio_button_new() { AgsMachineRadioButton *machine_radio_button; machine_radio_button = (AgsMachineRadioButton *) g_object_new(AGS_TYPE_MACHINE_RADIO_BUTTON, NULL); return(machine_radio_button); } gsequencer-0.6.37/src/ags/X/editor/ags_sf2_chooser_callbacks.c0000644000175000017500000000506012626272146021151 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include void ags_sf2_chooser_preset_changed(GtkComboBox *combo_box, AgsSF2Chooser *sf2_chooser) { AgsPlayable *playable; gchar *preset; GError *error; guint nth_level; /* Ipatch related */ playable = AGS_PLAYABLE(sf2_chooser->ipatch); nth_level = ags_playable_nth_level(playable); sf2_chooser->ipatch->nth_level = 1; preset = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(combo_box)); error = NULL; ags_playable_level_select(playable, 1, preset, &error); if(error != NULL){ g_error("%s\0", error->message); } } void ags_sf2_chooser_instrument_changed(GtkComboBox *combo_box, AgsSF2Chooser *sf2_chooser) { AgsPlayable *playable; gchar *instrument; GError *error; guint nth_level; /* Ipatch related */ playable = AGS_PLAYABLE(sf2_chooser->ipatch); nth_level = ags_playable_nth_level(playable); sf2_chooser->ipatch->nth_level = 2; instrument = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(combo_box)); error = NULL; ags_playable_level_select(playable, 2, instrument, &error); if(error != NULL){ g_error("%s\0", error->message); } } void ags_sf2_chooser_sample_changed(GtkComboBox *combo_box, AgsSF2Chooser *sf2_chooser) { AgsPlayable *playable; gchar *sample; GError *error; guint nth_level; /* Ipatch related */ playable = AGS_PLAYABLE(sf2_chooser->ipatch); nth_level = ags_playable_nth_level(playable); sf2_chooser->ipatch->nth_level = 3; sample = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(combo_box)); error = NULL; ags_playable_level_select(playable, 3, sample, &error); if(error != NULL){ g_error("%s\0", error->message); } } gsequencer-0.6.37/src/ags/X/editor/ags_sf2_chooser.h0000644000175000017500000000422212621463700017147 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_SF2_CHOOSER_H__ #define __AGS_SF2_CHOOSER_H__ #include #include #include #include #define AGS_TYPE_SF2_CHOOSER (ags_sf2_chooser_get_type ()) #define AGS_SF2_CHOOSER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_SF2_CHOOSER, AgsSF2Chooser)) #define AGS_SF2_CHOOSER_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_SF2_CHOOSER, AgsSF2ChooserClass)) #define AGS_IS_SF2_CHOOSER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_SF2_CHOOSER)) #define AGS_IS_SF2_CHOOSER_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_SF2_CHOOSER)) #define AGS_SF2_CHOOSER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_SF2_CHOOSER, AgsSF2ChooserClass)) typedef struct _AgsSF2Chooser AgsSF2Chooser; typedef struct _AgsSF2ChooserClass AgsSF2ChooserClass; struct _AgsSF2Chooser { GtkVBox vbox; AgsIpatch *ipatch; GtkComboBoxText *preset; GtkComboBoxText *instrument; GtkComboBoxText *sample; }; struct _AgsSF2ChooserClass { GtkVBoxClass vbox; }; GType ags_sf2_chooser_get_type(); void ags_sf2_chooser_open(AgsSF2Chooser *sf2_chooser, gchar *filename); gboolean ags_sf2_chooser_completed(AgsSF2Chooser *sf2_chooser); void ags_sf2_chooser_remove_all_from_combo(GtkComboBoxText *combo); AgsSF2Chooser* ags_sf2_chooser_new(); #endif /*__AGS_SF2_CHOOSER_H__*/ gsequencer-0.6.37/src/ags/X/editor/ags_notebook_callbacks.h0000644000175000017500000000222012626272146020555 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_NOTEBOOK_CALLBACKS_H__ #define __AGS_NOTEBOOK_CALLBACKS_H__ #include #include #include #include #include #include void ags_notebook_machine_changed_callback(AgsEditor *editor, AgsMachine *machine, AgsNotebook *notebook); #endif /*__AGS_NOTEBOOK_CALLBACKS_H__*/ gsequencer-0.6.37/src/ags/X/editor/ags_toolbar.h0000644000175000017500000000401112621463700016371 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_TOOLBAR_H__ #define __AGS_TOOLBAR_H__ #include #include #include #define AGS_TYPE_TOOLBAR (ags_toolbar_get_type()) #define AGS_TOOLBAR(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_TOOLBAR, AgsToolbar)) #define AGS_TOOLBAR_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_TOOLBAR, AgsToolbarClass)) #define AGS_IS_TOOLBAR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_TOOLBAR)) #define AGS_IS_TOOLBAR_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_TOOLBAR)) #define AGS_TOOLBAR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS (obj, AGS_TYPE_TOOLBAR, AgsToolbarClass)) typedef struct _AgsToolbar AgsToolbar; typedef struct _AgsToolbarClass AgsToolbarClass; struct _AgsToolbar { GtkToolbar toolbar; GtkToggleButton *selected_edit_mode; GtkToggleButton *position; GtkToggleButton *edit; GtkToggleButton *clear; GtkToggleButton *select; GtkButton *copy; GtkButton *cut; GtkButton *paste; GtkButton *invert; guint zoom_history; GtkComboBoxText *zoom; GtkComboBoxText *mode; }; struct _AgsToolbarClass { GtkToolbarClass toolbar; }; GType ags_toolbar_get_type(void); AgsToolbar* ags_toolbar_new(); #endif /*__AGS_TOOLBAR_H__*/ gsequencer-0.6.37/src/ags/X/editor/ags_machine_selection.c0000644000175000017500000001646412626272146020421 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include void ags_machine_selection_class_init(AgsMachineSelectionClass *machine_selection); void ags_machine_selection_connectable_interface_init(AgsConnectableInterface *connectable); void ags_machine_selection_init(AgsMachineSelection *machine_selection); void ags_machine_selection_connect(AgsConnectable *connectable); void ags_machine_selection_disconnect(AgsConnectable *connectable); /** * SECTION:ags_machine_selection * @short_description: machine radio buttons * @title: AgsMachineSelection * @section_id: * @include: ags/X/editor/ags_machine_selection.h * * The #AgsMachineSelection enables you make choice of an #AgsMachine. */ static gpointer ags_machine_selection_parent_class = NULL; GType ags_machine_selection_get_type(void) { static GType ags_type_machine_selection = 0; if(!ags_type_machine_selection){ static const GTypeInfo ags_machine_selection_info = { sizeof (AgsMachineSelectionClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_machine_selection_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsMachineSelection), 0, /* n_preallocs */ (GInstanceInitFunc) ags_machine_selection_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_machine_selection_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_machine_selection = g_type_register_static(GTK_TYPE_DIALOG, "AgsMachineSelection\0", &ags_machine_selection_info, 0); g_type_add_interface_static(ags_type_machine_selection, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return(ags_type_machine_selection); } void ags_machine_selection_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->is_ready = NULL; connectable->is_connected = NULL; connectable->connect = ags_machine_selection_connect; connectable->disconnect = ags_machine_selection_disconnect; } void ags_machine_selection_class_init(AgsMachineSelectionClass *machine_selection) { GObjectClass *gobject; ags_machine_selection_parent_class = g_type_class_peek_parent(machine_selection); /* GObjectClass */ gobject = (GObjectClass *) machine_selection; } void ags_machine_selection_init(AgsMachineSelection *machine_selection) { g_object_set(G_OBJECT(machine_selection), "modal\0", TRUE, "title\0", g_strdup("select machines\0"), NULL); gtk_dialog_add_buttons(GTK_DIALOG(machine_selection), GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, NULL); } void ags_machine_selection_connect(AgsConnectable *connectable) { //TODO:JK: implement me } void ags_machine_selection_disconnect(AgsConnectable *connectable) { //TODO:JK: implement me } void ags_machine_selection_load_defaults(AgsMachineSelection *machine_selection) { AgsMachine *machine; AgsMachineSelector *machine_selector; AgsMachineRadioButton *machine_radio_button; GtkVBox *vbox; GtkRadioButton *group; GList *list, *list_start, *index, *index_start; gint response; machine_selector = machine_selection->window->editor->machine_selector; machine_selection->machine = list = gtk_container_get_children(GTK_CONTAINER(machine_selection->window->machines)); machine = NULL; vbox = GTK_DIALOG(machine_selection)->vbox; group = NULL; while(list != NULL){ GtkRadioButton *radio_button; if(AGS_IS_FFPLAYER(list->data) || AGS_IS_DRUM(list->data) || AGS_IS_MATRIX(list->data)){ radio_button = (GtkRadioButton *) gtk_radio_button_new_with_label_from_widget(group, g_strdup_printf("%s: %s\0", G_OBJECT_TYPE_NAME(list->data), AGS_MACHINE(list->data)->name)); gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(radio_button), FALSE, FALSE, 0); if(group == NULL){ group = radio_button; } } list = list->next; } } /** * ags_machine_selection_run: * @machine_selection: the #AgsMachineSelection * * Run the dialog. Don't use this function you block all threads. * * Returns: the #AgsMachine */ //FIXME:JK: don't do this AgsMachine* ags_machine_selection_run(AgsMachineSelection *machine_selection) { AgsMachine *machine; AgsMachineSelector *machine_selector; AgsMachineRadioButton *machine_radio_button; GtkVBox *vbox; GtkRadioButton *group; GList *list, *list_start, *index, *index_start; gint response; machine_selector = machine_selection->window->editor->machine_selector; ags_machine_selection_load_defaults(machine_selection); gtk_widget_show_all((GtkWidget *) GTK_DIALOG(machine_selection)->vbox); response = gtk_dialog_run(GTK_DIALOG(machine_selection)); machine = NULL; if(response == GTK_RESPONSE_ACCEPT){ list_start = list = gtk_container_get_children(GTK_CONTAINER(machine_selection->window->machines)); index_start = index = gtk_container_get_children((GtkContainer *) vbox); while(index != NULL){ if(AGS_IS_FFPLAYER(list->data) || AGS_IS_DRUM(list->data) || AGS_IS_MATRIX(list->data)){ if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(index->data))){ machine = AGS_MACHINE(list->data); break; } index = index->next; } list = list->next; } g_list_free(list_start); g_list_free(index_start); machine_radio_button = NULL; list_start = list = gtk_container_get_children(GTK_CONTAINER(machine_selector)); list = list->next; while(list != NULL){ if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(list->data))){ machine_radio_button = AGS_MACHINE_RADIO_BUTTON(list->data); break; } list = list->next; } g_list_free(list_start); g_object_set(G_OBJECT(machine_radio_button), "machine\0", machine, NULL); } gtk_widget_destroy((GtkWidget *) machine_selection); return(machine); } /** * ags_machine_selection_new: * * Create a new #AgsMachineSelection. * * Since: 0.4 */ AgsMachineSelection* ags_machine_selection_new(AgsWindow *window) { AgsMachineSelection *machine_selection; machine_selection = (AgsMachineSelection *) g_object_new(AGS_TYPE_MACHINE_SELECTION, NULL); machine_selection->window = window; return(machine_selection); } gsequencer-0.6.37/src/ags/X/editor/ags_pattern_edit_callbacks.c0000644000175000017500000013330412627555633021430 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void ags_pattern_edit_init_channel_launch_callback(AgsTask *task, gpointer data); extern pthread_mutex_t ags_application_mutex; void ags_pattern_edit_set_audio_channels_callback(AgsAudio *audio, guint audio_channels, guint audio_channels_old, AgsPatternEdit *pattern_edit) { AgsEditor *editor; AgsEditorChild *editor_child; GList *list; GList *tabs; GList *notation; guint i; editor = (AgsEditor *) gtk_widget_get_ancestor(GTK_WIDGET(pattern_edit), AGS_TYPE_EDITOR); editor_child = NULL; list = editor->editor_child; while(list != NULL){ if(AGS_EDITOR_CHILD(list->data)->edit_widget == pattern_edit){ editor_child = AGS_EDITOR_CHILD(list->data); break; } list = list->next; } if(audio_channels_old < audio_channels){ notation = g_list_nth(audio->notation, audio_channels_old - 1); for(i = audio_channels_old; i < audio_channels; i++){ ags_notebook_insert_tab(editor_child->notebook, i); tabs = editor_child->notebook->tabs; notation = notation->next; AGS_NOTEBOOK_TAB(tabs->data)->notation = notation->data; gtk_toggle_button_set_active(AGS_NOTEBOOK_TAB(tabs->data)->toggle, TRUE); } gtk_widget_show_all(editor_child->notebook); }else{ for(i = audio_channels; i < audio_channels_old; i++){ ags_notebook_remove_tab(editor_child->notebook, i); } } } void ags_pattern_edit_set_pads_callback(AgsAudio *audio, GType channel_type, guint pads, guint pads_old, AgsPatternEdit *pattern_edit) { AgsEditor *editor; editor = (AgsEditor *) gtk_widget_get_ancestor(GTK_WIDGET(pattern_edit), AGS_TYPE_EDITOR); if((AGS_AUDIO_NOTATION_DEFAULT & (audio->flags)) != 0){ if(!g_type_is_a(channel_type, AGS_TYPE_INPUT)){ return; } }else{ if(!g_type_is_a(channel_type, AGS_TYPE_OUTPUT)){ return; } } if(AGS_IS_PATTERN_EDIT(pattern_edit)){ ags_pattern_edit_set_map_height(pattern_edit, pads * pattern_edit->control_height); }else if(AGS_IS_PATTERN_EDIT(pattern_edit)){ ags_pattern_edit_set_map_height(AGS_PATTERN_EDIT(pattern_edit), pads * AGS_PATTERN_EDIT(pattern_edit)->control_height); } gtk_widget_queue_draw(editor->current_meter); } gboolean ags_pattern_edit_drawing_area_expose_event(GtkWidget *widget, GdkEventExpose *event, AgsPatternEdit *pattern_edit) { AgsEditor *editor; guint width; double zoom, zoom_old; double tact_factor, zoom_factor; double tact; gdouble old_upper, new_upper; gdouble position; guint history; editor = (AgsEditor *) gtk_widget_get_ancestor(GTK_WIDGET(pattern_edit), AGS_TYPE_EDITOR); /* calculate zoom */ history = gtk_combo_box_get_active(editor->toolbar->zoom); zoom = exp2((double) history - 2.0); zoom_old = exp2((double) editor->toolbar->zoom_history - 2.0); zoom_factor = 0.25; tact_factor = exp2(6.0 - (double) gtk_combo_box_get_active((GtkComboBox *) editor->toolbar->zoom)); tact = exp2((double) gtk_combo_box_get_active((GtkComboBox *) editor->toolbar->zoom) - 2.0); editor->toolbar->zoom_history = history; position = GTK_RANGE(pattern_edit->hscrollbar)->adjustment->value; old_upper = GTK_RANGE(pattern_edit->hscrollbar)->adjustment->upper; pattern_edit->flags |= AGS_PATTERN_EDIT_RESETING_HORIZONTALLY; ags_pattern_edit_reset_horizontally(pattern_edit, AGS_PATTERN_EDIT_RESET_HSCROLLBAR | AGS_PATTERN_EDIT_RESET_WIDTH); pattern_edit->flags &= (~AGS_PATTERN_EDIT_RESETING_HORIZONTALLY); new_upper = GTK_RANGE(pattern_edit->hscrollbar)->adjustment->upper; gtk_adjustment_set_value(GTK_RANGE(pattern_edit->hscrollbar)->adjustment, position / old_upper * new_upper); /* reset adjsutments */ width = widget->allocation.width; gtk_adjustment_set_upper(GTK_RANGE(pattern_edit->hscrollbar)->adjustment, (gdouble) (pattern_edit->map_width - width)); gtk_adjustment_set_upper(pattern_edit->ruler->adjustment, (gdouble) (pattern_edit->map_width - width) / pattern_edit->control_current.control_width); if(editor->selected_machine != NULL){ AgsMachine *machine; machine = editor->selected_machine; if(machine != NULL){ cairo_t *cr; cr = gdk_cairo_create(widget->window); cairo_push_group(cr); if(AGS_IS_PANEL(machine)){ }else if(AGS_IS_MIXER(machine)){ }else if(AGS_IS_DRUM(machine)){ ags_pattern_edit_draw_segment(pattern_edit, cr); ags_pattern_edit_draw_notation(pattern_edit, cr); }else if(AGS_IS_MATRIX(machine)){ ags_pattern_edit_draw_segment(pattern_edit, cr); ags_pattern_edit_draw_notation(pattern_edit, cr); }else if(AGS_IS_SYNTH(machine)){ ags_pattern_edit_draw_segment(pattern_edit, cr); ags_pattern_edit_draw_notation(pattern_edit, cr); }else if(AGS_IS_FFPLAYER(machine)){ ags_pattern_edit_draw_segment(pattern_edit, cr); ags_pattern_edit_draw_notation(pattern_edit, cr); } if(editor->toolbar->selected_edit_mode == editor->toolbar->position){ ags_pattern_edit_draw_position(pattern_edit, cr); } cairo_pop_group_to_source(cr); cairo_paint(cr); } ags_meter_paint(editor->current_meter); } return(TRUE); } gboolean ags_pattern_edit_drawing_area_configure_event(GtkWidget *widget, GdkEventConfigure *event, AgsPatternEdit *pattern_edit) { pattern_edit->flags |= AGS_PATTERN_EDIT_RESETING_VERTICALLY; ags_pattern_edit_reset_vertically(pattern_edit, AGS_PATTERN_EDIT_RESET_VSCROLLBAR); pattern_edit->flags &= (~AGS_PATTERN_EDIT_RESETING_VERTICALLY); pattern_edit->flags |= AGS_PATTERN_EDIT_RESETING_HORIZONTALLY; ags_pattern_edit_reset_horizontally(pattern_edit, AGS_PATTERN_EDIT_RESET_HSCROLLBAR); pattern_edit->flags &= (~AGS_PATTERN_EDIT_RESETING_HORIZONTALLY); return(FALSE); } gboolean ags_pattern_edit_drawing_area_button_press_event(GtkWidget *widget, GdkEventButton *event, AgsPatternEdit *pattern_edit) { AgsMachine *machine; AgsEditor *editor; double tact, zoom; auto void ags_pattern_edit_drawing_area_button_press_event_set_control(); void ags_pattern_edit_drawing_area_button_press_event_set_control(){ AgsNote *note; guint note_offset_x0, note_offset_y0; guint note_x, note_y; if(pattern_edit->control.y0 >= pattern_edit->map_height || pattern_edit->control.x0 >= pattern_edit->map_width) return; note_offset_x0 = (guint) (ceil((double) (pattern_edit->control.x0_offset) / (double) (pattern_edit->control_current.control_width))); if(pattern_edit->control.x0 >= pattern_edit->control_current.x0) note_x = (guint) (floor((double) (pattern_edit->control.x0 - pattern_edit->control_current.x0) / (double) (pattern_edit->control_current.control_width))); else{ note_offset_x0 -= 1; note_x = 0; } note_offset_y0 = (guint) ceil((double) (pattern_edit->control.y0_offset) / (double) (pattern_edit->control_height)); if(pattern_edit->control.y0 >= pattern_edit->y0) note_y = (guint) floor((double) (pattern_edit->control.y0 - pattern_edit->y0) / (double) (pattern_edit->control_height)); else{ note_offset_y0 -= 1; note_y = 0; } note = pattern_edit->control.note; note->flags = AGS_NOTE_GUI; note->x[0] = (note_x * tact) + (note_offset_x0 * tact); note->x[1] = note->x[0] + 1; note->y = note_y + note_offset_y0; } editor = (AgsEditor *) gtk_widget_get_ancestor(GTK_WIDGET(pattern_edit), AGS_TYPE_EDITOR); gtk_widget_grab_focus(pattern_edit->drawing_area); if(editor->selected_machine != NULL && event->button == 1 && (machine = editor->selected_machine) != NULL){ AgsToolbar *toolbar; toolbar = editor->toolbar; if(toolbar->selected_edit_mode == toolbar->position){ pattern_edit->flags |= AGS_PATTERN_EDIT_POSITION_CURSOR; }else if(toolbar->selected_edit_mode == toolbar->edit){ pattern_edit->flags |= AGS_PATTERN_EDIT_ADDING_NOTE; }else if(toolbar->selected_edit_mode == toolbar->clear){ pattern_edit->flags |= AGS_PATTERN_EDIT_DELETING_NOTE; }else if(toolbar->selected_edit_mode == toolbar->select){ pattern_edit->flags |= AGS_PATTERN_EDIT_SELECTING_NOTES; } /* store the events position */ pattern_edit->control.x0_offset = (guint) round((double) GTK_RANGE(pattern_edit->hscrollbar)->adjustment->value); pattern_edit->control.y0_offset = (guint) round((double) GTK_RANGE(pattern_edit->vscrollbar)->adjustment->value); pattern_edit->control.x0 = (guint) event->x; pattern_edit->control.y0 = (guint) event->y; if((AGS_PATTERN_EDIT_ADDING_NOTE & (pattern_edit->flags)) != 0 || (AGS_PATTERN_EDIT_POSITION_CURSOR & (pattern_edit->flags)) != 0){ tact = exp2(6.0 - (double) gtk_combo_box_get_active(editor->toolbar->zoom)); if(AGS_IS_PANEL(machine)){ }else if(AGS_IS_MIXER(machine)){ }else if(AGS_IS_DRUM(machine)){ ags_pattern_edit_drawing_area_button_press_event_set_control(); }else if(AGS_IS_MATRIX(machine)){ ags_pattern_edit_drawing_area_button_press_event_set_control(); }else if(AGS_IS_SYNTH(machine)){ ags_pattern_edit_drawing_area_button_press_event_set_control(); }else if(AGS_IS_FFPLAYER(machine)){ ags_pattern_edit_drawing_area_button_press_event_set_control(); } } } return(TRUE); } gboolean ags_pattern_edit_drawing_area_button_release_event(GtkWidget *widget, GdkEventButton *event, AgsPatternEdit *pattern_edit) { AgsMachine *machine; AgsEditor *editor; GtkStyle *pattern_edit_style; AgsNote *note, *note0; double tact; static const gdouble white_gc = 65535.0; auto void ags_pattern_edit_drawing_area_button_release_event_set_control(); auto void ags_pattern_edit_drawing_area_button_release_event_draw_control(cairo_t *cr); auto void ags_pattern_edit_drawing_area_button_release_event_delete_point(); auto void ags_pattern_edit_drawing_area_button_release_event_select_region(); void ags_pattern_edit_drawing_area_button_release_event_set_control(){ AgsAudio *audio; AgsMutexManager *mutex_manager; GList *list_notation; gint i; guint note_x, note_y; guint note_offset_x1; gint history; pthread_mutex_t *audio_mutex; audio = machine->audio; /* lookup audio mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); /* get offset x1 */ if(pattern_edit->control.x0 >= pattern_edit->map_width){ pattern_edit->control.x0 = pattern_edit->map_width - 1; } note_offset_x1 = (guint) (ceil((double) (pattern_edit->control.x1_offset) / (double) (pattern_edit->control_current.control_width))); if(pattern_edit->control.x1 >= pattern_edit->control_current.x0){ note_x = (guint) (ceil((double) (pattern_edit->control.x1 - pattern_edit->control_current.x0) / (double) (pattern_edit->control_current.control_width))); }else{ note_offset_x1 -= 1; note_x = 0; } /* add note */ pthread_mutex_lock(audio_mutex); list_notation = audio->notation; pthread_mutex_unlock(audio_mutex); i = 0; while((i = ags_notebook_next_active_tab(editor->current_notebook, i)) != -1){ /* retrieve notation */ pthread_mutex_lock(audio_mutex); list_notation = g_list_nth(audio->notation, i); pthread_mutex_unlock(audio_mutex); if(list_notation == NULL){ i++; continue; } note0 = ags_note_duplicate(note); /* do it so */ pthread_mutex_lock(audio_mutex); ags_notation_add_note(AGS_NOTATION(list_notation->data), note0, FALSE); pthread_mutex_unlock(audio_mutex); /* iterate */ i++; } fprintf(stdout, "x0 = %llu\nx1 = %llu\ny = %llu\n\n\0", (long long unsigned int) note->x[0], (long long unsigned int) note->x[1], (long long unsigned int) note->y); } void ags_pattern_edit_drawing_area_button_release_event_draw_control(cairo_t *cr){ guint x, y, width, height; widget = (GtkWidget *) pattern_edit->drawing_area; // cr = gdk_cairo_create(widget->window); x = note->x[0] * pattern_edit->control_unit.control_width; width = note->x[1] * pattern_edit->control_unit.control_width; if(x < pattern_edit->control.x1_offset){ if(width > pattern_edit->control.x1_offset){ width -= (guint) x; x = 0; }else{ return; } }else if(x < pattern_edit->control.x1_offset + widget->allocation.width){ width -= x; x -= pattern_edit->control.x1_offset; }else{ return; } if(x + width > widget->allocation.width) width = widget->allocation.width - x; y = note->y * pattern_edit->control_height; if(y < pattern_edit->control.y1_offset){ if(y + pattern_edit->control_height - pattern_edit->control_margin_y < pattern_edit->control.y1_offset){ return; }else{ if(y + pattern_edit->control_margin_y < pattern_edit->control.y1_offset){ height = pattern_edit->control_height; y = y + pattern_edit->control_margin_y - pattern_edit->control.y1_offset; }else{ height = pattern_edit->y0; y -= pattern_edit->control.y1_offset; } } }else if(y < pattern_edit->control.y1_offset + widget->allocation.height - pattern_edit->control_height){ height = pattern_edit->control_height - 2 * pattern_edit->control_margin_y; y = y - pattern_edit->control.y1_offset + pattern_edit->control_margin_y; }else{ if(y > pattern_edit->control.y1_offset + widget->allocation.height - pattern_edit->y1 + pattern_edit->control_margin_y){ return; }else{ height = pattern_edit->y0; y = y - pattern_edit->control.y1_offset + pattern_edit->control_margin_y; } } cairo_set_source_rgb(cr, pattern_edit_style->fg[0].red / white_gc, pattern_edit_style->fg[0].green / white_gc, pattern_edit_style->fg[0].blue / white_gc); cairo_rectangle(cr, (double) x, (double) y, (double) width, (double) height); cairo_fill(cr); } void ags_pattern_edit_drawing_area_button_release_event_delete_point(){ AgsAudio *audio; AgsMutexManager *mutex_manager; GList *list_notation; guint x, y; gint history; gint i; pthread_mutex_t *audio_mutex; audio = machine->audio; /* lookup audio mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); /* retrieve point */ x = pattern_edit->control.x0_offset + pattern_edit->control.x0 - 1; y = pattern_edit->control.y0_offset + pattern_edit->control.y0; x = (guint) ceil((double) x / (double) (pattern_edit->control_unit.control_width)); y = (guint) floor((double) y / (double) (pattern_edit->control_height)); #ifdef AGS_DEBUG g_message("%d, %d\0", x, y); #endif /* select notes */ pthread_mutex_lock(audio_mutex); list_notation = audio->notation; pthread_mutex_unlock(audio_mutex); i = 0; while((i = ags_notebook_next_active_tab(editor->current_notebook, i)) != -1){ /* retrieve notation */ pthread_mutex_lock(audio_mutex); list_notation = g_list_nth(audio->notation, i); pthread_mutex_unlock(audio_mutex); if(list_notation == NULL){ i++; continue; } /* do it so */ pthread_mutex_lock(audio_mutex); ags_notation_remove_note_at_position(AGS_NOTATION(list_notation->data), x, y); pthread_mutex_unlock(audio_mutex); /* iterate */ i++; } } void ags_pattern_edit_drawing_area_button_release_event_select_region(){ AgsAudio *audio; AgsMutexManager *mutex_manager; GList *list_notation; guint x0, x1, y0, y1; gint i; pthread_mutex_t *audio_mutex; audio = machine->audio; /* lookup audio mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); /* get real size and offset */ x0 = pattern_edit->control.x0_offset + pattern_edit->control.x0; x1 = pattern_edit->control.x1_offset + pattern_edit->control.x1; if(x0 > x1){ guint tmp; tmp = x1; x1 = x0; x0 = tmp; } /* convert to region */ x0 = (guint) (floor((double) x0 / (double) (pattern_edit->control_current.control_width)) * tact); x1 = (guint) (ceil((double) x1 / (double) (pattern_edit->control_current.control_width)) * tact); /* get real size and offset */ y0 = pattern_edit->control.y0_offset + pattern_edit->control.y0; y1 = pattern_edit->control.y1_offset + pattern_edit->control.y1; if(y0 > y1){ guint tmp; tmp = y1; y1 = y0; y0 = tmp; } /* convert to region */ y0 = (guint) floor((double) y0 / (double) (pattern_edit->control_height)); y1 = (guint) ceil((double) y1 / (double) (pattern_edit->control_height)); /* select notes */ pthread_mutex_lock(audio_mutex); list_notation = audio->notation; pthread_mutex_unlock(audio_mutex); i = 0; while((i = ags_notebook_next_active_tab(editor->current_notebook, i)) != -1){ /* retrieve notation */ pthread_mutex_lock(audio_mutex); list_notation = g_list_nth(audio->notation, i); pthread_mutex_unlock(audio_mutex); if(list_notation == NULL){ i++; continue; } /* do it so */ pthread_mutex_lock(audio_mutex); ags_notation_add_region_to_selection(AGS_NOTATION(list_notation->data), x0, y0, x1, y1, TRUE); pthread_mutex_unlock(audio_mutex); /* iterate */ i++; } } editor = (AgsEditor *) gtk_widget_get_ancestor(GTK_WIDGET(pattern_edit), AGS_TYPE_EDITOR); if(editor->selected_machine != NULL && event->button == 1){ AgsMutexManager *mutex_manager; cairo_t *cr; pthread_mutex_t *audio_mutex; pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) editor->selected_machine->audio); pthread_mutex_unlock(&(ags_application_mutex)); if(event->x >= 0.0){ pattern_edit->control.x1 = (guint) event->x; }else{ pattern_edit->control.x1 = 0; } if(event->y >= 0.0){ pattern_edit->control.y1 = (guint) event->y; }else{ pattern_edit->control.y1 = 0; } machine = editor->selected_machine; note = pattern_edit->control.note; pattern_edit_style = gtk_widget_get_style(widget); /* store the events position */ pattern_edit->control.x1_offset = (guint) round((double) pattern_edit->hscrollbar->scrollbar.range.adjustment->value); pattern_edit->control.y1_offset = (guint) round((double) pattern_edit->vscrollbar->scrollbar.range.adjustment->value); tact = exp2(6.0 - (double) gtk_combo_box_get_active(editor->toolbar->zoom)); cr = gdk_cairo_create(widget->window); cairo_push_group(cr); if((AGS_PATTERN_EDIT_POSITION_CURSOR & (pattern_edit->flags)) != 0){ pattern_edit->flags &= (~AGS_PATTERN_EDIT_POSITION_CURSOR); ags_pattern_edit_draw_segment(pattern_edit, cr); ags_pattern_edit_draw_notation(pattern_edit, cr); pattern_edit->selected_x = pattern_edit->control.note->x[0]; pattern_edit->selected_y = pattern_edit->control.note->y; if(AGS_IS_PANEL(machine)){ }else if(AGS_IS_MIXER(machine)){ }else if(AGS_IS_DRUM(machine)){ ags_pattern_edit_draw_position(pattern_edit, cr); }else if(AGS_IS_MATRIX(machine)){ ags_pattern_edit_draw_position(pattern_edit, cr); }else if(AGS_IS_FFPLAYER(machine)){ ags_pattern_edit_draw_position(pattern_edit, cr); }else if(AGS_IS_SYNTH(machine)){ ags_pattern_edit_draw_position(pattern_edit, cr); } }else if((AGS_PATTERN_EDIT_ADDING_NOTE & (pattern_edit->flags)) != 0){ pattern_edit->flags &= (~AGS_PATTERN_EDIT_ADDING_NOTE); ags_pattern_edit_draw_segment(pattern_edit, cr); ags_pattern_edit_draw_notation(pattern_edit, cr); pthread_mutex_lock(audio_mutex); if(AGS_IS_PANEL(machine)){ }else if(AGS_IS_MIXER(machine)){ }else if(AGS_IS_DRUM(machine)){ ags_pattern_edit_drawing_area_button_release_event_set_control(); }else if(AGS_IS_MATRIX(machine)){ ags_pattern_edit_drawing_area_button_release_event_set_control(); }else if(AGS_IS_FFPLAYER(machine)){ ags_pattern_edit_drawing_area_button_release_event_set_control(); }else if(AGS_IS_SYNTH(machine)){ ags_pattern_edit_drawing_area_button_release_event_set_control(); } pthread_mutex_unlock(audio_mutex); if(AGS_IS_PANEL(machine)){ }else if(AGS_IS_MIXER(machine)){ }else if(AGS_IS_DRUM(machine)){ ags_pattern_edit_drawing_area_button_release_event_draw_control(cr); }else if(AGS_IS_MATRIX(machine)){ ags_pattern_edit_drawing_area_button_release_event_draw_control(cr); }else if(AGS_IS_FFPLAYER(machine)){ ags_pattern_edit_drawing_area_button_release_event_draw_control(cr); }else if(AGS_IS_SYNTH(machine)){ ags_pattern_edit_drawing_area_button_release_event_draw_control(cr); } }else if((AGS_PATTERN_EDIT_DELETING_NOTE & (pattern_edit->flags)) != 0){ pattern_edit->flags &= (~AGS_PATTERN_EDIT_DELETING_NOTE); pthread_mutex_lock(audio_mutex); ags_pattern_edit_drawing_area_button_release_event_delete_point(); pthread_mutex_unlock(audio_mutex); ags_pattern_edit_draw_segment(pattern_edit, cr); ags_pattern_edit_draw_notation(pattern_edit, cr); }else if((AGS_PATTERN_EDIT_SELECTING_NOTES & (pattern_edit->flags)) != 0){ pattern_edit->flags &= (~AGS_PATTERN_EDIT_SELECTING_NOTES); // pthread_mutex_lock(audio_mutex); ags_pattern_edit_drawing_area_button_release_event_select_region(); // pthread_mutex_unlock(audio_mutex); ags_pattern_edit_draw_segment(pattern_edit, cr); ags_pattern_edit_draw_notation(pattern_edit, cr); } cairo_pop_group_to_source(cr); cairo_paint(cr); } return(FALSE); } gboolean ags_pattern_edit_drawing_area_motion_notify_event (GtkWidget *widget, GdkEventMotion *event, AgsPatternEdit *pattern_edit) { AgsMachine *machine; AgsEditor *editor; GtkStyle *pattern_edit_style; AgsNote *note, *note0; double value[2]; double tact; guint note_x1; guint prev_x1; static const gdouble white_gc = 65535.0; void ags_pattern_edit_drawing_area_motion_notify_event_set_control(){ guint note_x, note_y; guint note_offset_x1; if(pattern_edit->control.x0 >= pattern_edit->map_width){ pattern_edit->control.x0 = pattern_edit->map_width - 1; } note_offset_x1 = (guint) (ceil(pattern_edit->control.x1_offset / (double) (pattern_edit->control_current.control_width))); if(pattern_edit->control.x1 >= pattern_edit->control_current.x0){ note_x = (guint) (ceil((double) (pattern_edit->control.x1 - pattern_edit->control_current.x0) / (double) (pattern_edit->control_current.control_width))); }else{ note_offset_x1 -= 1; note_x = 0; } note_x1 = (note_x * tact) + (note_offset_x1 * tact); #ifdef AGS_DEBUG fprintf(stdout, "x0 = %llu\nx1 = %llu\ny = %llu\n\n\0", (long long unsigned int) note->x[0], (long long unsigned int) note->x[1], (long long unsigned int) note->y); #endif } void ags_pattern_edit_drawing_area_motion_notify_event_draw_control(cairo_t *cr){ guint x, y, width, height; widget = (GtkWidget *) pattern_edit->drawing_area; x = note->x[0] * pattern_edit->control_unit.control_width; width = note_x1 * pattern_edit->control_unit.control_width; if(x < pattern_edit->control.x1_offset){ if(width > pattern_edit->control.x1_offset){ width -= x; x = 0; }else{ return; } }else if(x < pattern_edit->control.x1_offset + widget->allocation.width){ width -= x; x -= pattern_edit->control.x1_offset; }else{ return; } width = pattern_edit->control_unit.control_width; if(x + width > widget->allocation.width) width = widget->allocation.width - x; y = note->y * pattern_edit->control_height; if(y < pattern_edit->control.y1_offset){ if(y + pattern_edit->control_height - pattern_edit->control_margin_y < pattern_edit->control.y1_offset){ return; }else{ if(y + pattern_edit->control_margin_y < pattern_edit->control.y1_offset){ height = pattern_edit->control_height; y = y + pattern_edit->control_margin_y - pattern_edit->control.y1_offset; }else{ height = pattern_edit->y0; y -= pattern_edit->control.y1_offset; } } }else if(y < pattern_edit->control.y1_offset + widget->allocation.height - pattern_edit->control_height){ height = pattern_edit->control_height - 2 * pattern_edit->control_margin_y; y = y - pattern_edit->control.y1_offset + pattern_edit->control_margin_y; }else{ if(y > pattern_edit->control.y1_offset + widget->allocation.height - pattern_edit->y1 + pattern_edit->control_margin_y){ return; }else{ height = pattern_edit->y0; y = y - pattern_edit->control.y1_offset + pattern_edit->control_margin_y; } } cairo_set_source_rgb(cr, pattern_edit_style->fg[0].red / white_gc, pattern_edit_style->fg[0].green / white_gc, pattern_edit_style->fg[0].blue / white_gc); cairo_rectangle(cr, (double) x, (double) y, (double) width, (double) height); cairo_fill(cr); } void ags_pattern_edit_drawing_area_motion_notify_event_draw_selection(cairo_t *cr){ GtkAllocation allocation; guint x0_offset, x1_offset, y0_offset, y1_offset; guint x0, x1, y0, y1, width, height; guint x0_viewport, x1_viewport, y0_viewport, y1_viewport; /* get viewport */ gtk_widget_get_allocation(widget, &allocation); x0_viewport = pattern_edit->control.x1_offset; x1_viewport = pattern_edit->control.x1_offset + allocation.width; y0_viewport = pattern_edit->control.y1_offset; y1_viewport = pattern_edit->control.y1_offset + allocation.height; /* get real size and offset */ x0 = pattern_edit->control.x0_offset + pattern_edit->control.x0; x1 = pattern_edit->control.x1_offset + pattern_edit->control.x1; if(x0 > x1){ x0_offset = x1; x1_offset = x0; x1 = x0_offset; x0 = x1_offset; }else{ x0_offset = x0; x1_offset = x1; } /* get drawable size and offset */ if(x0 < x0_viewport){ // x0 = 0; // width = x1_offset - x0_viewport; x0 -= x0_viewport; width = x1 - x0; }else{ x0 -= x0_viewport; width = x1 - x0; } if(x1 > x1_viewport){ width -= (x1 - x1_viewport); }else{ width -= x0_viewport; } /* get real size and offset */ y0 = pattern_edit->control.y0_offset + pattern_edit->control.y0; y1 = pattern_edit->control.y1_offset + pattern_edit->control.y1; if(y0 > y1){ y0_offset = y1; y1_offset = y0; y1 = y0_offset; y0 = y1_offset; }else{ y0_offset = y0; y1_offset = y1; } /* get drawable size and offset */ if(y0 < y0_viewport){ y0 = 0; height = y1_offset - y0_viewport; }else{ y0 -= y0_viewport; height = y1 - y0; } if(y1 > y1_viewport){ height -= (y1 - y1_viewport); }else{ height -= y0_viewport; } cairo_set_source_rgba(cr, 1.0, 0.0, 0.0, 0.3); cairo_rectangle(cr, (double) x0, (double) y0, (double) width, (double) height); cairo_fill(cr); } editor = (AgsEditor *) gtk_widget_get_ancestor(GTK_WIDGET(pattern_edit), AGS_TYPE_EDITOR); if(editor->selected_machine != NULL){ cairo_t *cr; prev_x1 = pattern_edit->control.x1; if(event->x >= 0.0){ pattern_edit->control.x1 = (guint) event->x; }else{ pattern_edit->control.x1 = 0; } if(event->y >= 0.0){ pattern_edit->control.y1 = (guint) event->y; }else{ pattern_edit->control.y1 = 0; } machine = editor->selected_machine; note = pattern_edit->control.note; pattern_edit_style = gtk_widget_get_style(widget); pattern_edit->control.x1_offset = (guint) round((double) pattern_edit->hscrollbar->scrollbar.range.adjustment->value); pattern_edit->control.y1_offset = (guint) round((double) pattern_edit->vscrollbar->scrollbar.range.adjustment->value); tact = exp2(6.0 - (double) gtk_combo_box_get_active(editor->toolbar->zoom)); cr = gdk_cairo_create(widget->window); cairo_push_group(cr); if((AGS_PATTERN_EDIT_ADDING_NOTE & (pattern_edit->flags)) != 0){ if(prev_x1 > pattern_edit->control.x1){ ags_pattern_edit_draw_segment(pattern_edit, cr); ags_pattern_edit_draw_notation(pattern_edit, cr); } if(AGS_IS_PANEL(machine)){ }else if(AGS_IS_MIXER(machine)){ }else if(AGS_IS_DRUM(machine)){ ags_pattern_edit_drawing_area_motion_notify_event_set_control(); ags_pattern_edit_drawing_area_motion_notify_event_draw_control(cr); }else if(AGS_IS_MATRIX(machine)){ ags_pattern_edit_drawing_area_motion_notify_event_set_control(); ags_pattern_edit_drawing_area_motion_notify_event_draw_control(cr); }else if(AGS_IS_FFPLAYER(machine)){ ags_pattern_edit_drawing_area_motion_notify_event_set_control(); ags_pattern_edit_drawing_area_motion_notify_event_draw_control(cr); } }else if((AGS_PATTERN_EDIT_SELECTING_NOTES & (pattern_edit->flags)) != 0){ ags_pattern_edit_draw_segment(pattern_edit, cr); ags_pattern_edit_draw_notation(pattern_edit, cr); ags_pattern_edit_drawing_area_motion_notify_event_draw_selection(cr); } cairo_pop_group_to_source(cr); cairo_paint(cr); } return(FALSE); } gboolean ags_pattern_edit_drawing_area_key_press_event(GtkWidget *widget, GdkEventKey *event, AgsPatternEdit *pattern_edit) { AgsEditor *editor; if(event->keyval == GDK_KEY_Tab){ return(FALSE); } editor = (AgsEditor *) gtk_widget_get_ancestor(GTK_WIDGET(pattern_edit), AGS_TYPE_EDITOR); if(editor->selected_machine != NULL){ switch(event->keyval){ case GDK_KEY_Control_L: { pattern_edit->key_mask |= AGS_PATTERN_EDIT_KEY_L_CONTROL; } break; case GDK_KEY_Control_R: { pattern_edit->key_mask |= AGS_PATTERN_EDIT_KEY_R_CONTROL; } break; case GDK_KEY_a: { /* select all patterns */ if((AGS_PATTERN_EDIT_KEY_L_CONTROL & (pattern_edit->key_mask)) != 0 || (AGS_PATTERN_EDIT_KEY_R_CONTROL & (pattern_edit->key_mask)) != 0){ ags_editor_select_all(editor); } } break; case GDK_KEY_c: { /* copy patterns */ if((AGS_PATTERN_EDIT_KEY_L_CONTROL & (pattern_edit->key_mask)) != 0 || (AGS_PATTERN_EDIT_KEY_R_CONTROL & (pattern_edit->key_mask)) != 0){ ags_editor_copy(editor); } } break; case GDK_KEY_v: { /* paste patterns */ if((AGS_PATTERN_EDIT_KEY_L_CONTROL & (pattern_edit->key_mask)) != 0 || (AGS_PATTERN_EDIT_KEY_R_CONTROL & (pattern_edit->key_mask)) != 0){ ags_editor_paste(editor); } } break; case GDK_KEY_x: { /* cut patterns */ if((AGS_PATTERN_EDIT_KEY_L_CONTROL & (pattern_edit->key_mask)) != 0 || (AGS_PATTERN_EDIT_KEY_R_CONTROL & (pattern_edit->key_mask)) != 0){ ags_editor_cut(editor); } } break; case GDK_KEY_i: { /* cut patterns */ if((AGS_PATTERN_EDIT_KEY_L_CONTROL & (pattern_edit->key_mask)) != 0 || (AGS_PATTERN_EDIT_KEY_R_CONTROL & (pattern_edit->key_mask)) != 0){ ags_editor_invert(editor); } } break; } } return(TRUE); } gboolean ags_pattern_edit_drawing_area_key_release_event(GtkWidget *widget, GdkEventKey *event, AgsPatternEdit *pattern_edit) { AgsEditor *editor; AgsMachine *machine; AgsChannel *channel; AgsMutexManager *mutex_manager; GList *list_notation; gint i; gboolean do_feedback; pthread_mutex_t *audio_mutex; auto void ags_pattern_edit_drawing_area_key_release_event_play_channel(AgsChannel *channel); void ags_pattern_edit_drawing_area_key_release_event_play_channel(AgsChannel *channel){ AgsDevout *devout; AgsAudio *audio; AgsStartDevout *start_devout; AgsInitChannel *init_channel; AgsAppendChannel *append_channel; AgsAudioLoop *audio_loop; AgsTaskThread *task_thread; AgsDevoutThread *devout_thread; AgsMutexManager *mutex_manager; AgsMain *ags_main; GList *tasks; pthread_mutex_t *devout_mutex; pthread_mutex_t *audio_mutex; pthread_mutex_t *channel_mutex; /* lookup channel mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); channel_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); /* get audio */ pthread_mutex_lock(channel_mutex); audio = (AgsAudio *) channel->audio; pthread_mutex_unlock(channel_mutex); /* lookup audio mutex */ pthread_mutex_lock(&(ags_application_mutex)); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); /* get devout */ pthread_mutex_lock(audio_mutex); devout = (AgsDevout *) audio->devout; pthread_mutex_unlock(audio_mutex); /* lookup audio mutex */ pthread_mutex_lock(&(ags_application_mutex)); devout_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) devout); pthread_mutex_unlock(&(ags_application_mutex)); /* get ags_main */ pthread_mutex_lock(devout_mutex); ags_main = (AgsMain *) devout->ags_main; pthread_mutex_unlock(devout_mutex); /* get threads */ pthread_mutex_lock(&(ags_application_mutex)); audio_loop = (AgsAudioLoop *) ags_main->main_loop; pthread_mutex_unlock(&(ags_application_mutex)); /* get task thread and devout thread */ task_thread = (AgsTaskThread *) ags_thread_find_type(audio_loop, AGS_TYPE_TASK_THREAD); devout_thread = (AgsDevoutThread *) ags_thread_find_type(audio_loop, AGS_TYPE_DEVOUT_THREAD); /* create tasks */ tasks = NULL; /* init channel for playback */ init_channel = ags_init_channel_new(channel, FALSE, TRUE, FALSE, FALSE); g_signal_connect_after(G_OBJECT(init_channel), "launch\0", G_CALLBACK(ags_pattern_edit_init_channel_launch_callback), NULL); tasks = g_list_prepend(tasks, init_channel); /* append channel for playback */ append_channel = ags_append_channel_new((GObject *) audio_loop, (GObject *) channel); tasks = g_list_prepend(tasks, append_channel); /* create start task */ start_devout = ags_start_devout_new(devout); tasks = g_list_prepend(tasks, start_devout); /* perform playback */ tasks = g_list_reverse(tasks); ags_task_thread_append_tasks(task_thread, tasks); } if(event->keyval == GDK_KEY_Tab){ return(FALSE); } editor = (AgsEditor *) gtk_widget_get_ancestor(GTK_WIDGET(pattern_edit), AGS_TYPE_EDITOR); machine = editor->selected_machine; do_feedback = FALSE; /* lookup audio mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) machine->audio); pthread_mutex_unlock(&(ags_application_mutex)); if(machine != NULL){ switch(event->keyval){ case GDK_KEY_Control_L: { pattern_edit->key_mask &= (~AGS_PATTERN_EDIT_KEY_L_CONTROL); } break; case GDK_KEY_Control_R: { pattern_edit->key_mask &= (~AGS_PATTERN_EDIT_KEY_R_CONTROL); } break; case GDK_KEY_Left: case GDK_KEY_leftarrow: { gdouble tact; guint x0_offset; tact = exp2(6.0 - (double) gtk_combo_box_get_active(editor->toolbar->zoom)); if(pattern_edit->selected_x > 0){ if(pattern_edit->selected_x - (1 * tact) > 0){ pattern_edit->selected_x -= (1 * tact); }else{ pattern_edit->selected_x = 0; } do_feedback = TRUE; } x0_offset = pattern_edit->selected_x * pattern_edit->control_unit.control_width; if(x0_offset < GTK_RANGE(pattern_edit->hscrollbar)->adjustment->value){ gtk_range_set_value(GTK_RANGE(pattern_edit->hscrollbar), x0_offset * GTK_RANGE(pattern_edit->hscrollbar)->adjustment->step_increment); } gtk_widget_queue_draw(pattern_edit); } break; case GDK_KEY_Right: case GDK_KEY_rightarrow: { gdouble tact; guint x0_offset; tact = exp2(6.0 - (double) gtk_combo_box_get_active(editor->toolbar->zoom)); if(pattern_edit->selected_x < 16.0 * AGS_PATTERN_EDIT_MAX_CONTROLS){ pattern_edit->selected_x += (1.0 * tact); do_feedback = TRUE; } x0_offset = pattern_edit->selected_x * pattern_edit->control_unit.control_width; if(x0_offset + pattern_edit->control_current.control_width > GTK_RANGE(pattern_edit->hscrollbar)->adjustment->value + GTK_WIDGET(pattern_edit->drawing_area)->allocation.width){ gtk_range_set_value(GTK_RANGE(pattern_edit->hscrollbar), x0_offset * GTK_RANGE(pattern_edit->hscrollbar)->adjustment->step_increment); } gtk_widget_queue_draw(pattern_edit); } break; case GDK_KEY_Up: case GDK_KEY_uparrow: { gdouble y0_offset; if(pattern_edit->selected_y > 0){ pattern_edit->selected_y -= 1; do_feedback = TRUE; } y0_offset = pattern_edit->selected_y * pattern_edit->control_height; if(y0_offset < GTK_RANGE(pattern_edit->vscrollbar)->adjustment->value){ gtk_range_set_value(GTK_RANGE(pattern_edit->vscrollbar), y0_offset * GTK_RANGE(pattern_edit->vscrollbar)->adjustment->step_increment); } gtk_widget_queue_draw(pattern_edit); } break; case GDK_KEY_Down: case GDK_KEY_downarrow: { gdouble y0_offset; if(pattern_edit->selected_y * (pattern_edit->control_height) < pattern_edit->map_height){ pattern_edit->selected_y += 1; do_feedback = TRUE; } y0_offset = pattern_edit->selected_y * pattern_edit->control_height; if(y0_offset + pattern_edit->control_height > GTK_RANGE(pattern_edit->vscrollbar)->adjustment->value + (GTK_WIDGET(pattern_edit->drawing_area)->allocation.height)){ gtk_range_set_value(GTK_RANGE(pattern_edit->vscrollbar), y0_offset * GTK_RANGE(pattern_edit->vscrollbar)->adjustment->step_increment); } gtk_widget_queue_draw(pattern_edit); } break; case GDK_KEY_space: { AgsNote *note; i = 0; do_feedback = TRUE; while((i = ags_notebook_next_active_tab(editor->current_notebook, i)) != -1){ pthread_mutex_lock(audio_mutex); list_notation = g_list_nth(machine->audio->notation, i); pthread_mutex_unlock(audio_mutex); if(list_notation == NULL){ i++; continue; } note = ags_note_new(); note->x[0] = pattern_edit->selected_x; note->x[1] = pattern_edit->selected_x + 1; note->y = pattern_edit->selected_y; pthread_mutex_lock(audio_mutex); ags_notation_add_note(AGS_NOTATION(list_notation->data), note, FALSE); pthread_mutex_unlock(audio_mutex); i++; } gtk_widget_queue_draw(pattern_edit); fprintf(stdout, "x0 = %llu\nx1 = %llu\ny = %llu\n\n\0", (long long unsigned int) note->x[0], (long long unsigned int) note->x[1], (long long unsigned int) note->y); } break; case GDK_KEY_Delete: { machine = editor->selected_machine; i = 0; while((i = ags_notebook_next_active_tab(editor->current_notebook, i)) != -1){ pthread_mutex_lock(audio_mutex); list_notation = g_list_nth(machine->audio->notation, i); pthread_mutex_unlock(audio_mutex); if(list_notation == NULL){ i++; continue; } pthread_mutex_lock(audio_mutex); ags_notation_remove_note_at_position(AGS_NOTATION(list_notation->data), pattern_edit->selected_x, pattern_edit->selected_y); pthread_mutex_unlock(audio_mutex); i++; } gtk_widget_queue_draw(pattern_edit); } break; } } if(do_feedback){ AgsAudio *audio; AgsNote *current_note; guint flags; gboolean has_note; audio = machine->audio; /* audible feedback */ i = 0; while((i = ags_notebook_next_active_tab(editor->current_notebook, i)) != -1){ pthread_mutex_lock(audio_mutex); flags = audio->flags; list_notation = g_list_nth(audio->notation, i); pthread_mutex_unlock(audio_mutex); if(list_notation == NULL){ i++; continue; } pthread_mutex_lock(audio_mutex); has_note = ((ags_notation_find_point(list_notation->data, pattern_edit->selected_x, pattern_edit->selected_y, FALSE) != NULL) ? TRUE: FALSE); pthread_mutex_unlock(audio_mutex); if(has_note){ channel = ags_channel_nth(machine->audio->input, i); if((AGS_AUDIO_REVERSE_MAPPING & (flags)) != 0){ channel = ags_channel_pad_nth(channel, machine->audio->input_pads - pattern_edit->selected_y - 1); }else{ channel = ags_channel_pad_nth(channel, pattern_edit->selected_y); } ags_pattern_edit_drawing_area_key_release_event_play_channel(channel); } i++; } } return(TRUE); } void ags_pattern_edit_init_channel_launch_callback(AgsTask *task, gpointer data) { AgsDevout *devout; AgsChannel *channel; AgsRecycling *recycling; AgsAddAudioSignal *add_audio_signal; AgsAudioLoop *audio_loop; AgsTaskThread *task_thread; AgsMutexManager *mutex_manager; GList *recall, *tmp; pthread_mutex_t *audio_mutex; channel = AGS_INIT_CHANNEL(task)->channel; devout = AGS_DEVOUT(AGS_AUDIO(channel->audio)->devout); audio_loop = AGS_AUDIO_LOOP(AGS_MAIN(devout->ags_main)->main_loop); task_thread = ags_thread_find_type(audio_loop, AGS_TYPE_TASK_THREAD); #ifdef AGS_DEBUG g_message("launch\0"); #endif if(AGS_DEVOUT_PLAY(channel->devout_play) == NULL || AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[0] == NULL){ return; } /* connect done */ recall = ags_recall_find_provider_with_recycling_container(channel->play, G_OBJECT(channel), G_OBJECT(AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[0]->recycling_container)); tmp = recall; recall = ags_recall_find_type(recall, AGS_TYPE_PLAY_CHANNEL_RUN); //TODO:JK: fix me // g_list_free(tmp); if(recall != NULL){ AgsAudioSignal *audio_signal; /* add audio signal */ recycling = channel->first_recycling; while(recycling != channel->last_recycling->next){ audio_signal = ags_audio_signal_new((GObject *) devout, (GObject *) recycling, (GObject *) AGS_RECALL(recall->data)->recall_id); /* add audio signal */ ags_recycling_create_audio_signal_with_defaults(recycling, audio_signal, 0.0, 0); audio_signal->stream_current = audio_signal->stream_beginning; ags_audio_signal_connect(audio_signal); /* * emit add_audio_signal on AgsRecycling */ ags_recycling_add_audio_signal(recycling, audio_signal); recycling = recycling->next; } } } void ags_pattern_edit_vscrollbar_value_changed(GtkRange *range, AgsPatternEdit *pattern_edit) { AgsEditor *editor; if((AGS_PATTERN_EDIT_RESETING_VERTICALLY & pattern_edit->flags) != 0){ return; } editor = (AgsEditor *) gtk_widget_get_ancestor(GTK_WIDGET(pattern_edit), AGS_TYPE_EDITOR); ags_meter_paint(editor->current_meter); pattern_edit->flags |= AGS_PATTERN_EDIT_RESETING_VERTICALLY; ags_pattern_edit_reset_vertically(pattern_edit, 0); pattern_edit->flags &= (~AGS_PATTERN_EDIT_RESETING_VERTICALLY); } void ags_pattern_edit_hscrollbar_value_changed(GtkRange *range, AgsPatternEdit *pattern_edit) { if((AGS_PATTERN_EDIT_RESETING_HORIZONTALLY & pattern_edit->flags) != 0){ return; } /* reset ruler */ gtk_adjustment_set_value(pattern_edit->ruler->adjustment, GTK_RANGE(pattern_edit->hscrollbar)->adjustment->value / (double) pattern_edit->control_current.control_width); gtk_widget_queue_draw(pattern_edit->ruler); /* update pattern edit */ pattern_edit->flags |= AGS_PATTERN_EDIT_RESETING_HORIZONTALLY; ags_pattern_edit_reset_horizontally(pattern_edit, 0); pattern_edit->flags &= (~AGS_PATTERN_EDIT_RESETING_HORIZONTALLY); } gsequencer-0.6.37/src/ags/X/editor/ags_pattern_edit_callbacks.h0000644000175000017500000000456012621463700021421 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_PATTERN_EDIT_CALLBACKS_H__ #define __AGS_PATTERN_EDIT_CALLBACKS_H__ #include #include #include #include void ags_pattern_edit_set_audio_channels_callback(AgsAudio *audio, guint audio_channels, guint audio_channels_old, AgsPatternEdit *pattern_edit); void ags_pattern_edit_set_pads_callback(AgsAudio *audio, GType channel_type, guint pads, guint pads_old, AgsPatternEdit *pattern_edit); gboolean ags_pattern_edit_drawing_area_expose_event(GtkWidget *widget, GdkEventExpose *event, AgsPatternEdit *pattern_edit); gboolean ags_pattern_edit_drawing_area_configure_event(GtkWidget *widget, GdkEventConfigure *event, AgsPatternEdit *pattern_edit); gboolean ags_pattern_edit_drawing_area_button_press_event(GtkWidget *widget, GdkEventButton *event, AgsPatternEdit *pattern_edit); gboolean ags_pattern_edit_drawing_area_button_release_event(GtkWidget *widget, GdkEventButton *event, AgsPatternEdit *pattern_edit); gboolean ags_pattern_edit_drawing_area_motion_notify_event(GtkWidget *widget, GdkEventMotion *event, AgsPatternEdit *pattern_edit); gboolean ags_pattern_edit_drawing_area_key_press_event(GtkWidget *widget, GdkEventKey *event, AgsPatternEdit *pattern_edit); gboolean ags_pattern_edit_drawing_area_key_release_event(GtkWidget *widget, GdkEventKey *event, AgsPatternEdit *pattern_edit); void ags_pattern_edit_vscrollbar_value_changed(GtkRange *range, AgsPatternEdit *pattern_edit); void ags_pattern_edit_hscrollbar_value_changed(GtkRange *range, AgsPatternEdit *pattern_edit); #endif /*__AGS_PATTERN_EDIT_CALLBACKS_H__*/ gsequencer-0.6.37/src/ags/X/editor/ags_inline_player_callbacks.h0000644000175000017500000000176112621463700021571 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_INLINE_PLAYER_CALLBACKS_H__ #define __AGS_INLINE_PLAYER_CALLBACKS_H__ #include #include #include #include #endif /*__AGS_INLINE_PLAYER_CALLBACKS_H__*/ gsequencer-0.6.37/src/ags/X/editor/ags_machine_selector.h0000644000175000017500000000440512626272146020251 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_MACHINE_SELECTOR_H__ #define __AGS_MACHINE_SELECTOR_H__ #include #include #include #include #define AGS_TYPE_MACHINE_SELECTOR (ags_machine_selector_get_type()) #define AGS_MACHINE_SELECTOR(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_MACHINE_SELECTOR, AgsMachineSelector)) #define AGS_MACHINE_SELECTOR_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_MACHINE_SELECTOR, AgsMachineSelectorClass)) #define AGS_IS_MACHINE_SELECTOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_MACHINE_SELECTOR)) #define AGS_IS_MACHINE_SELECTOR_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_MACHINE_SELECTOR)) #define AGS_MACHINE_SELECTOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS (obj, AGS_TYPE_MACHINE_SELECTOR, AgsMachineSelectorClass)) typedef struct _AgsMachineSelector AgsMachineSelector; typedef struct _AgsMachineSelectorClass AgsMachineSelectorClass; struct _AgsMachineSelector { GtkVBox vbox; GtkWidget *current; GtkMenu *popup; }; struct _AgsMachineSelectorClass { GtkVBoxClass vbox; void (*changed)(AgsMachineSelector *machine_selector, AgsMachine *machine); }; GType ags_machine_selector_get_type(void); void ags_machine_selector_changed(AgsMachineSelector *machine_selector, AgsMachine *machine); GtkMenu* ags_machine_selector_popup_new(AgsMachineSelector *machine_selector); AgsMachineSelector* ags_machine_selector_new(); #endif /*__AGS_MACHINE_SELECTOR_H__*/ gsequencer-0.6.37/src/ags/X/editor/ags_sf2_chooser.c0000644000175000017500000002424012626272146017153 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include void ags_sf2_chooser_class_init(AgsSF2ChooserClass *sf2_chooser); void ags_sf2_chooser_connectable_interface_init(AgsConnectableInterface *connectable); void ags_sf2_chooser_init(AgsSF2Chooser *sf2_chooser); void ags_sf2_chooser_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_sf2_chooser_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_sf2_chooser_finalize(GObject *gobject); void ags_sf2_chooser_connect(AgsConnectable *connectable); void ags_sf2_chooser_disconnect(AgsConnectable *connectable); void ags_sf2_chooser_show(GtkWidget *widget); void ags_sf2_chooser_update(AgsSF2Chooser *sf2_chooser); enum{ PROP_0, PROP_IPATCH, }; static gpointer ags_sf2_chooser_parent_class = NULL; GType ags_sf2_chooser_get_type(void) { static GType ags_type_sf2_chooser = 0; if(!ags_type_sf2_chooser){ static const GTypeInfo ags_sf2_chooser_info = { sizeof (AgsSF2ChooserClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_sf2_chooser_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsSF2Chooser), 0, /* n_preallocs */ (GInstanceInitFunc) ags_sf2_chooser_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_sf2_chooser_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_sf2_chooser = g_type_register_static(GTK_TYPE_VBOX, "AgsSF2Chooser\0", &ags_sf2_chooser_info, 0); g_type_add_interface_static(ags_type_sf2_chooser, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return(ags_type_sf2_chooser); } void ags_sf2_chooser_class_init(AgsSF2ChooserClass *sf2_chooser) { GObjectClass *gobject; GtkWidgetClass *widget; GParamSpec *param_spec; ags_sf2_chooser_parent_class = g_type_class_peek_parent(sf2_chooser); /* GObjectClass */ gobject = (GObjectClass *) sf2_chooser; gobject->set_property = ags_sf2_chooser_set_property; gobject->get_property = ags_sf2_chooser_get_property; gobject->finalize = ags_sf2_chooser_finalize; /* properties */ param_spec = g_param_spec_object("ipatch\0", "current ipatch\0", "The current AgsIpatch\0", AGS_TYPE_IPATCH, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_IPATCH, param_spec); /* GtkWidgetClass */ widget = (GtkWidgetClass *) sf2_chooser; widget->show = ags_sf2_chooser_show; } void ags_sf2_chooser_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->is_ready = NULL; connectable->is_connected = NULL; connectable->connect = ags_sf2_chooser_connect; connectable->disconnect = ags_sf2_chooser_disconnect; } void ags_sf2_chooser_init(AgsSF2Chooser *sf2_chooser) { GtkTable *table; GtkLabel *label; sf2_chooser->ipatch = NULL; table = (GtkTable *) gtk_table_new(2, 3, FALSE); gtk_box_pack_start(GTK_BOX(sf2_chooser), GTK_WIDGET(table), FALSE, FALSE, 0); /* first row - preset */ label = (GtkLabel *) g_object_new(GTK_TYPE_LABEL, "label\0", "preset: \0", "xalign\0", 0.0, NULL); gtk_table_attach(table, GTK_WIDGET(label), 0, 1, 0, 1, GTK_FILL, GTK_FILL, 0, 0); sf2_chooser->preset = (GtkComboBoxText *) gtk_combo_box_text_new(); gtk_table_attach(table, GTK_WIDGET(sf2_chooser->preset), 1, 2, 0, 1, GTK_FILL, GTK_FILL, 0, 0); /* second row - instrument */ label = (GtkLabel *) g_object_new(GTK_TYPE_LABEL, "label\0", "instrument: \0", "xalign\0", 0.0, NULL); gtk_table_attach(table, GTK_WIDGET(label), 0, 1, 1, 2, GTK_FILL, GTK_FILL, 0, 0); sf2_chooser->instrument = (GtkComboBoxText *) gtk_combo_box_text_new(); gtk_table_attach(table, GTK_WIDGET(sf2_chooser->instrument), 1, 2, 1, 2, GTK_FILL, GTK_FILL, 0, 0); /* third row - sample */ label = (GtkLabel *) g_object_new(GTK_TYPE_LABEL, "label\0", "sample: \0", "xalign\0", 0.0, NULL); gtk_table_attach(table, GTK_WIDGET(label), 0, 1, 2, 3, GTK_FILL, GTK_FILL, 0, 0); sf2_chooser->sample = (GtkComboBoxText *) gtk_combo_box_text_new(); gtk_table_attach(table, GTK_WIDGET(sf2_chooser->sample), 1, 2, 2, 3, GTK_FILL, GTK_FILL, 0, 0); } void ags_sf2_chooser_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsSF2Chooser *sf2_chooser; sf2_chooser = AGS_SF2_CHOOSER(gobject); switch(prop_id){ case PROP_IPATCH: { AgsIpatch *ipatch; ipatch = (AgsIpatch *) g_value_get_object(value); if(sf2_chooser->ipatch == ipatch) return; if(sf2_chooser->ipatch != NULL){ g_object_unref(sf2_chooser->ipatch); } if(ipatch != NULL){ g_object_ref(ipatch); } sf2_chooser->ipatch = ipatch; } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_sf2_chooser_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsSF2Chooser *sf2_chooser; sf2_chooser = AGS_SF2_CHOOSER(gobject); switch(prop_id){ case PROP_IPATCH: g_value_set_object(value, sf2_chooser->ipatch); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_sf2_chooser_finalize(GObject *gobject) { AgsSF2Chooser *sf2_chooser; sf2_chooser = (AgsSF2Chooser *) gobject; //TODO:JK: /* implement me */ G_OBJECT_CLASS(ags_sf2_chooser_parent_class)->finalize(gobject); } void ags_sf2_chooser_connect(AgsConnectable *connectable) { AgsSF2Chooser *sf2_chooser; /* AgsSF2Chooser */ sf2_chooser = AGS_SF2_CHOOSER(connectable); g_signal_connect(G_OBJECT(sf2_chooser->preset), "changed\0", G_CALLBACK(ags_sf2_chooser_preset_changed), sf2_chooser); g_signal_connect(G_OBJECT(sf2_chooser->instrument), "changed\0", G_CALLBACK(ags_sf2_chooser_instrument_changed), sf2_chooser); g_signal_connect(G_OBJECT(sf2_chooser->sample), "changed\0", G_CALLBACK(ags_sf2_chooser_sample_changed), sf2_chooser); } void ags_sf2_chooser_disconnect(AgsConnectable *connectable) { //TODO:JK: /* implement me */ } void ags_sf2_chooser_show(GtkWidget *widget) { AgsSF2Chooser *sf2_chooser = (AgsSF2Chooser *) widget; GTK_WIDGET_CLASS(ags_sf2_chooser_parent_class)->show(widget); //TODO:JK: /* perhaps empty */ } void ags_sf2_chooser_open(AgsSF2Chooser *sf2_chooser, gchar *filename) { AgsIpatch *ipatch; AgsIpatchSF2Reader *sf2_reader; AgsPlayable *playable; gchar **preset; gchar **instrument; gchar **sample; GError *error; /* clear preset, instrument and sample*/ ags_combo_box_text_remove_all(sf2_chooser->preset); ags_combo_box_text_remove_all(sf2_chooser->instrument); ags_combo_box_text_remove_all(sf2_chooser->sample); /* Ipatch related */ ipatch = g_object_new(AGS_TYPE_IPATCH, "mode\0", AGS_IPATCH_READ, "filename\0", filename, NULL); ags_ipatch_open(ipatch, filename); sf2_reader = ags_ipatch_sf2_reader_new(); sf2_reader->ipatch = ipatch; ipatch->reader = (GObject *) sf2_reader; g_object_set(G_OBJECT(sf2_chooser), "ipatch\0", ipatch, NULL); /* fill sf2_chooser->preset */ playable = AGS_PLAYABLE(ipatch); ags_playable_open(playable, filename); error = NULL; ags_playable_level_select(playable, 0, filename, &error); if(error != NULL){ g_error("%s\0", error->message); } preset = ags_playable_sublevel_names(playable); while(*preset != NULL){ gtk_combo_box_text_append_text(sf2_chooser->preset, *preset); preset++; } /* fill sf2_chooser->instrument */ sf2_chooser->ipatch->nth_level = 1; instrument = ags_playable_sublevel_names(playable); while(*instrument != NULL){ gtk_combo_box_text_append_text(sf2_chooser->instrument, *instrument); instrument++; } /* fill sf2_chooser->sample */ sf2_chooser->ipatch->nth_level = 2; sample = ags_playable_sublevel_names(playable); while(*sample != NULL){ gtk_combo_box_text_append_text(sf2_chooser->sample, *sample); sample++; } /* reset nth_level */ sf2_chooser->ipatch->nth_level = 0; } void ags_sf2_chooser_update(AgsSF2Chooser *sf2_chooser) { //TODO:JK: /* implement me */ } gboolean ags_sf2_chooser_completed(AgsSF2Chooser *sf2_chooser) { gchar *preset, *instrument, *sample; preset = gtk_combo_box_text_get_active_text(sf2_chooser->preset); instrument = gtk_combo_box_text_get_active_text(sf2_chooser->instrument); sample = gtk_combo_box_text_get_active_text(sf2_chooser->sample); if(preset != NULL && preset[0] != '\0' && instrument != NULL && instrument[0] != '\0' && sample != NULL && sample[0] != '\0'){ return(TRUE); }else{ return(FALSE); } } AgsSF2Chooser* ags_sf2_chooser_new() { AgsSF2Chooser *sf2_chooser; sf2_chooser = (AgsSF2Chooser *) g_object_new(AGS_TYPE_SF2_CHOOSER, NULL); return(sf2_chooser); } gsequencer-0.6.37/src/ags/X/editor/ags_pattern_edit.c0000644000175000017500000013227112626272146017425 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include static GType ags_accessible_pattern_edit_get_type(void); void ags_pattern_edit_class_init(AgsPatternEditClass *pattern_edit); void ags_accessible_pattern_edit_class_init(AtkObject *object); void ags_accessible_pattern_edit_action_interface_init(AtkActionIface *action); void ags_pattern_edit_connectable_interface_init(AgsConnectableInterface *connectable); void ags_pattern_edit_init(AgsPatternEdit *pattern_edit); void ags_pattern_edit_connect(AgsConnectable *connectable); void ags_pattern_edit_disconnect(AgsConnectable *connectable); AtkObject* ags_pattern_edit_get_accessible(GtkWidget *widget); gboolean ags_accessible_pattern_edit_do_action(AtkAction *action, gint i); gint ags_accessible_pattern_edit_get_n_actions(AtkAction *action); const gchar* ags_accessible_pattern_edit_get_description(AtkAction *action, gint i); const gchar* ags_accessible_pattern_edit_get_name(AtkAction *action, gint i); const gchar* ags_accessible_pattern_edit_get_keybinding(AtkAction *action, gint i); gboolean ags_accessible_pattern_edit_set_description(AtkAction *action, gint i); gchar* ags_accessible_pattern_edit_get_localized_name(AtkAction *action, gint i); void ags_pattern_edit_paint(AgsPatternEdit *pattern_edit); /** * SECTION:ags_pattern_edit * @short_description: edit notes * @title: AgsPatternEdit * @section_id: * @include: ags/X/editor/ags_pattern_edit.h * * The #AgsPatternEdit lets you edit notes. */ GtkStyle *pattern_edit_style; extern pthread_mutex_t ags_application_mutex; static GQuark quark_accessible_object = 0; GType ags_pattern_edit_get_type(void) { static GType ags_type_pattern_edit = 0; if(!ags_type_pattern_edit){ static const GTypeInfo ags_pattern_edit_info = { sizeof (AgsPatternEditClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_pattern_edit_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsPatternEdit), 0, /* n_preallocs */ (GInstanceInitFunc) ags_pattern_edit_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_pattern_edit_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_pattern_edit = g_type_register_static(GTK_TYPE_TABLE, "AgsPatternEdit\0", &ags_pattern_edit_info, 0); g_type_add_interface_static(ags_type_pattern_edit, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return(ags_type_pattern_edit); } static GType ags_accessible_pattern_edit_get_type(void) { static GType ags_type_accessible_pattern_edit = 0; if(!ags_type_accessible_pattern_edit){ const GTypeInfo ags_accesssible_pattern_edit_info = { sizeof(GtkAccessibleClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_accessible_pattern_edit_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(GtkAccessible), 0, /* n_preallocs */ NULL, NULL }; static const GInterfaceInfo atk_action_interface_info = { (GInterfaceInitFunc) ags_accessible_pattern_edit_action_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_accessible_pattern_edit = g_type_register_static(GTK_TYPE_ACCESSIBLE, "AgsAccessiblePatternEdit\0", &ags_accesssible_pattern_edit_info, 0); g_type_add_interface_static(ags_type_accessible_pattern_edit, ATK_TYPE_ACTION, &atk_action_interface_info); } return(ags_type_accessible_pattern_edit); } void ags_pattern_edit_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->is_ready = NULL; connectable->is_connected = NULL; connectable->connect = ags_pattern_edit_connect; connectable->disconnect = ags_pattern_edit_disconnect; } void ags_pattern_edit_class_init(AgsPatternEditClass *pattern_edit) { quark_accessible_object = g_quark_from_static_string("ags-accessible-object\0"); } void ags_accessible_pattern_edit_class_init(AtkObject *object) { /* empty */ } void ags_accessible_pattern_edit_action_interface_init(AtkActionIface *action) { action->do_action = ags_accessible_pattern_edit_do_action; action->get_n_actions = ags_accessible_pattern_edit_get_n_actions; action->get_description = ags_accessible_pattern_edit_get_description; action->get_name = ags_accessible_pattern_edit_get_name; action->get_keybinding = ags_accessible_pattern_edit_get_keybinding; action->set_description = ags_accessible_pattern_edit_set_description; action->get_localized_name = ags_accessible_pattern_edit_get_localized_name; } void ags_pattern_edit_init(AgsPatternEdit *pattern_edit) { GtkAdjustment *adjustment; pattern_edit->key_mask = 0; adjustment = (GtkAdjustment *) gtk_adjustment_new(0.0, 0.0, 1.0, 1.0, 1.0, 1.0); pattern_edit->ruler = ags_ruler_new(); gtk_table_attach(GTK_TABLE(pattern_edit), (GtkWidget *) pattern_edit->ruler, 0, 1, 0, 1, GTK_FILL|GTK_EXPAND, GTK_FILL, 0, 0); pattern_edit->drawing_area = (GtkDrawingArea *) gtk_drawing_area_new(); gtk_widget_set_style((GtkWidget *) pattern_edit->drawing_area, pattern_edit_style); gtk_widget_set_events(GTK_WIDGET (pattern_edit->drawing_area), GDK_EXPOSURE_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_CONTROL_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK ); gtk_widget_set_can_focus(pattern_edit->drawing_area, TRUE); gtk_table_attach(GTK_TABLE(pattern_edit), (GtkWidget *) pattern_edit->drawing_area, 0, 1, 1, 2, GTK_FILL|GTK_EXPAND, GTK_FILL|GTK_EXPAND, 0, 0); pattern_edit->control.note = ags_note_new(); pattern_edit->width = 0; pattern_edit->height = 0; pattern_edit->map_width = AGS_PATTERN_EDIT_MAX_CONTROLS * 16 * 64; pattern_edit->map_height = 78; pattern_edit->control_height = 14; pattern_edit->control_margin_y = 2; pattern_edit->control_width = 16; pattern_edit->y0 = 0; pattern_edit->y1 = 0; pattern_edit->nth_y = 0; pattern_edit->stop_y = 0; /* AgsPatternEditControlCurrent is used by ags_pattern_edit_draw_segment */ pattern_edit->control_current.control_count = AGS_PATTERN_EDIT_MAX_CONTROLS; pattern_edit->control_current.control_width = 64; pattern_edit->control_current.x0 = 0; pattern_edit->control_current.x1 = 0; pattern_edit->control_current.nth_x = 0; /* AgsPatternEditControlUnit is used by ags_pattern_edit_draw_notation */ pattern_edit->control_unit.control_count = 16 * AGS_PATTERN_EDIT_MAX_CONTROLS; pattern_edit->control_unit.control_width = 1 * 4; pattern_edit->control_unit.x0 = 0; pattern_edit->control_unit.x1 = 0; pattern_edit->control_unit.nth_x = 0; pattern_edit->control_unit.stop_x = 0; /* offset for pasting from clipboard */ pattern_edit->selected_x = 0; pattern_edit->selected_y = 0; /* GtkScrollbars */ adjustment = (GtkAdjustment *) gtk_adjustment_new(0.0, 0.0, 1.0, 1.0, 16.0, 1.0); pattern_edit->vscrollbar = (GtkVScrollbar *) gtk_vscrollbar_new(adjustment); gtk_table_attach(GTK_TABLE(pattern_edit), (GtkWidget *) pattern_edit->vscrollbar, 1, 2, 1, 2, GTK_FILL, GTK_FILL, 0, 0); adjustment = (GtkAdjustment *) gtk_adjustment_new(0.0, 0.0, 1.0, 1.0, (gdouble) pattern_edit->control_current.control_width, 1.0); pattern_edit->hscrollbar = (GtkHScrollbar *) gtk_hscrollbar_new(adjustment); gtk_table_attach(GTK_TABLE(pattern_edit), (GtkWidget *) pattern_edit->hscrollbar, 0, 1, 2, 3, GTK_FILL, GTK_FILL, 0, 0); } void ags_pattern_edit_connect(AgsConnectable *connectable) { AgsEditor *editor; AgsPatternEdit *pattern_edit; pattern_edit = AGS_PATTERN_EDIT(connectable); editor = (AgsEditor *) gtk_widget_get_ancestor(GTK_WIDGET(pattern_edit), AGS_TYPE_EDITOR); if(editor != NULL && editor->selected_machine != NULL){ g_signal_connect(editor->selected_machine->audio, "set-audio-channels\0", G_CALLBACK(ags_pattern_edit_set_audio_channels_callback), pattern_edit); g_signal_connect(editor->selected_machine->audio, "set-pads\0", G_CALLBACK(ags_pattern_edit_set_pads_callback), pattern_edit); } g_signal_connect_after((GObject *) pattern_edit->drawing_area, "expose_event\0", G_CALLBACK (ags_pattern_edit_drawing_area_expose_event), (gpointer) pattern_edit); g_signal_connect_after((GObject *) pattern_edit->drawing_area, "configure_event\0", G_CALLBACK (ags_pattern_edit_drawing_area_configure_event), (gpointer) pattern_edit); g_signal_connect((GObject *) pattern_edit->drawing_area, "button_press_event\0", G_CALLBACK (ags_pattern_edit_drawing_area_button_press_event), (gpointer) pattern_edit); g_signal_connect((GObject *) pattern_edit->drawing_area, "button_release_event\0", G_CALLBACK (ags_pattern_edit_drawing_area_button_release_event), (gpointer) pattern_edit); g_signal_connect((GObject *) pattern_edit->drawing_area, "motion_notify_event\0", G_CALLBACK (ags_pattern_edit_drawing_area_motion_notify_event), (gpointer) pattern_edit); g_signal_connect((GObject *) pattern_edit->drawing_area, "key_press_event\0", G_CALLBACK(ags_pattern_edit_drawing_area_key_press_event), (gpointer) pattern_edit); g_signal_connect((GObject *) pattern_edit->drawing_area, "key_release_event\0", G_CALLBACK(ags_pattern_edit_drawing_area_key_release_event), (gpointer) pattern_edit); g_signal_connect_after((GObject *) pattern_edit->vscrollbar, "value-changed\0", G_CALLBACK (ags_pattern_edit_vscrollbar_value_changed), (gpointer) pattern_edit); g_signal_connect_after((GObject *) pattern_edit->hscrollbar, "value-changed\0", G_CALLBACK (ags_pattern_edit_hscrollbar_value_changed), (gpointer) pattern_edit); } void ags_pattern_edit_disconnect(AgsConnectable *connectable) { //TODO:JK: implement me } AtkObject* ags_pattern_edit_get_accessible(GtkWidget *widget) { AtkObject* accessible; accessible = g_object_get_qdata(G_OBJECT(widget), quark_accessible_object); if(!accessible){ accessible = g_object_new(ags_accessible_pattern_edit_get_type(), NULL); g_object_set_qdata(G_OBJECT(widget), quark_accessible_object, accessible); gtk_accessible_set_widget(accessible, widget); } return(accessible); } gboolean ags_accessible_pattern_edit_do_action(AtkAction *action, gint i) { AgsPatternEdit *pattern_edit; GdkEventKey *key_press, *key_release; GdkEventKey *modifier_press, *modifier_release; if(!(i >= 0 && i < 11)){ return(FALSE); } pattern_edit = gtk_accessible_get_widget(ATK_OBJECT(action)); key_press = gdk_event_new(GDK_KEY_PRESS); key_release = gdk_event_new(GDK_KEY_RELEASE); /* create modifier */ modifier_press = gdk_event_new(GDK_KEY_PRESS); modifier_release = gdk_event_new(GDK_KEY_RELEASE); modifier_press->keyval = modifier_release->keyval = GDK_KEY_Control_R; switch(i){ case 0: { key_press->keyval = key_release->keyval = GDK_KEY_Left; /* send event */ gtk_widget_event(pattern_edit->drawing_area, key_press); gtk_widget_event(pattern_edit->drawing_area, key_release); } break; case 1: { key_press->keyval = key_release->keyval = GDK_KEY_Right; /* send event */ gtk_widget_event(pattern_edit->drawing_area, key_press); gtk_widget_event(pattern_edit->drawing_area, key_release); } break; case 2: { key_press->keyval = key_release->keyval = GDK_KEY_Up; /* send event */ gtk_widget_event(pattern_edit->drawing_area, key_press); gtk_widget_event(pattern_edit->drawing_area, key_release); } break; case 3: { key_press->keyval = key_release->keyval = GDK_KEY_Down; /* send event */ gtk_widget_event(pattern_edit->drawing_area, key_press); gtk_widget_event(pattern_edit->drawing_area, key_release); } break; case 4: { key_press->keyval = key_release->keyval = GDK_KEY_space; /* send event */ gtk_widget_event(pattern_edit->drawing_area, key_press); gtk_widget_event(pattern_edit->drawing_area, key_release); } break; case 5: { key_press->keyval = key_release->keyval = GDK_KEY_Delete; /* send event */ gtk_widget_event(pattern_edit->drawing_area, key_press); gtk_widget_event(pattern_edit->drawing_area, key_release); } break; case 6: { key_press->keyval = key_release->keyval = GDK_KEY_c; /* send event */ gtk_widget_event(pattern_edit->drawing_area, modifier_press); gtk_widget_event(pattern_edit->drawing_area, key_press); gtk_widget_event(pattern_edit->drawing_area, key_release); gtk_widget_event(pattern_edit->drawing_area, modifier_release); } break; case 7: { key_press->keyval = key_release->keyval = GDK_KEY_x; /* send event */ gtk_widget_event(pattern_edit->drawing_area, modifier_press); gtk_widget_event(pattern_edit->drawing_area, key_press); gtk_widget_event(pattern_edit->drawing_area, key_release); gtk_widget_event(pattern_edit->drawing_area, modifier_release); } break; case 8: { key_press->keyval = key_release->keyval = GDK_KEY_v; /* send event */ gtk_widget_event(pattern_edit->drawing_area, modifier_press); gtk_widget_event(pattern_edit->drawing_area, key_press); gtk_widget_event(pattern_edit->drawing_area, key_release); gtk_widget_event(pattern_edit->drawing_area, modifier_release); } break; case 9: { key_press->keyval = key_release->keyval = GDK_KEY_a; /* send event */ gtk_widget_event(pattern_edit->drawing_area, modifier_press); gtk_widget_event(pattern_edit->drawing_area, key_press); gtk_widget_event(pattern_edit->drawing_area, key_release); gtk_widget_event(pattern_edit->drawing_area, modifier_release); } break; case 10: { key_press->keyval = key_release->keyval = GDK_KEY_i; /* send event */ gtk_widget_event(pattern_edit->drawing_area, modifier_press); gtk_widget_event(pattern_edit->drawing_area, key_press); gtk_widget_event(pattern_edit->drawing_area, key_release); gtk_widget_event(pattern_edit->drawing_area, modifier_release); } break; } return(TRUE); } gint ags_accessible_pattern_edit_get_n_actions(AtkAction *action) { return(11); } const gchar* ags_accessible_pattern_edit_get_description(AtkAction *action, gint i) { static const gchar **actions = { "move cursor left\0", "move cursor right\0", "move cursor up\0", "move cursor down\0", "add audio pattern\0", "remove audio pattern\0" "copy pattern to clipboard\0", "cut pattern to clipbaord\0", "paste pattern from clipboard\0", "select all pattern\0", "invert pattern\0", }; if(i >= 0 && i < 11){ return(actions[i]); }else{ return(NULL); } } const gchar* ags_accessible_pattern_edit_get_name(AtkAction *action, gint i) { static const gchar **actions = { "left\0", "right\0", "up\0", "down\0", "add\0", "remove\0", "copy\0", "cut\0", "paste\0", "select-all\0", "invert\0", }; if(i >= 0 && i < 11){ return(actions[i]); }else{ return(NULL); } } const gchar* ags_accessible_pattern_edit_get_keybinding(AtkAction *action, gint i) { static const gchar **actions = { "left\0", "right\0", "up\0", "down\0", "space", "Del\0", "Ctrl+c" "Ctrl+x", "Ctrl+v", "Ctrl+a", "Ctrl+i", }; if(i >= 0 && i < 11){ return(actions[i]); }else{ return(NULL); } } gboolean ags_accessible_pattern_edit_set_description(AtkAction *action, gint i) { //TODO:JK: implement me return(FALSE); } gchar* ags_accessible_pattern_edit_get_localized_name(AtkAction *action, gint i) { //TODO:JK: implement me return(NULL); } /** * ags_pattern_edit_set_map_height: * @pattern_edit: the #AgsPatternEdit * @map_height: the new height * * Set the map height in pixel. * * Since: 0.4.2 */ void ags_pattern_edit_set_map_height(AgsPatternEdit *pattern_edit, guint map_height) { pattern_edit->map_height = map_height; pattern_edit->flags |= AGS_PATTERN_EDIT_RESETING_VERTICALLY; ags_pattern_edit_reset_vertically(pattern_edit, AGS_PATTERN_EDIT_RESET_VSCROLLBAR); pattern_edit->flags &= (~AGS_PATTERN_EDIT_RESETING_VERTICALLY); pattern_edit->flags |= AGS_PATTERN_EDIT_RESETING_HORIZONTALLY; ags_pattern_edit_reset_horizontally(pattern_edit, AGS_PATTERN_EDIT_RESET_HSCROLLBAR); pattern_edit->flags &= (~AGS_PATTERN_EDIT_RESETING_HORIZONTALLY); } /** * ags_pattern_edit_reset_vertically: * @pattern_edit: the #AgsPatternEdit * @flags: the #AgsPatternEditResetFlags * * Reset @pattern_edit as configured vertically. * * Since: 0.4.2 */ void ags_pattern_edit_reset_vertically(AgsPatternEdit *pattern_edit, guint flags) { AgsEditor *editor; editor = (AgsEditor *) gtk_widget_get_ancestor(GTK_WIDGET(pattern_edit), AGS_TYPE_EDITOR); if(editor->selected_machine != NULL){ cairo_t *cr; gdouble value; value = GTK_RANGE(pattern_edit->vscrollbar)->adjustment->value; if((AGS_PATTERN_EDIT_RESET_VSCROLLBAR & flags) != 0){ GtkWidget *widget; GtkAdjustment *adjustment; guint height; widget = GTK_WIDGET(pattern_edit->drawing_area); adjustment = GTK_RANGE(pattern_edit->vscrollbar)->adjustment; if(pattern_edit->map_height > widget->allocation.height){ height = widget->allocation.height; gtk_adjustment_set_upper(adjustment, (gdouble) (pattern_edit->map_height - height)); if(adjustment->value > adjustment->upper){ gtk_adjustment_set_value(adjustment, adjustment->upper); } }else{ height = pattern_edit->map_height; gtk_adjustment_set_upper(adjustment, 0.0); gtk_adjustment_set_value(adjustment, 0.0); } pattern_edit->height = height; } pattern_edit->y0 = ((guint) round((double) value)) % pattern_edit->control_height; if(pattern_edit->y0 != 0){ pattern_edit->y0 = pattern_edit->control_height - pattern_edit->y0; } pattern_edit->y1 = (pattern_edit->height - pattern_edit->y0) % pattern_edit->control_height; pattern_edit->nth_y = (guint) ceil(round((double) value) / (double)(pattern_edit->control_height)); pattern_edit->stop_y = pattern_edit->nth_y + (pattern_edit->height - pattern_edit->y0 - pattern_edit->y1) / pattern_edit->control_height; /* refresh display */ if(GTK_WIDGET_VISIBLE(editor)){ cr = gdk_cairo_create(GTK_WIDGET(pattern_edit->drawing_area)->window); cairo_surface_flush(cairo_get_target(cr)); cairo_push_group(cr); ags_pattern_edit_draw_segment(pattern_edit, cr); ags_pattern_edit_draw_notation(pattern_edit, cr); if(editor->toolbar->selected_edit_mode == editor->toolbar->position){ ags_pattern_edit_draw_position(pattern_edit, cr); } /* fader */ if((AGS_PATTERN_EDIT_DRAW_FADER & (pattern_edit->flags)) != 0){ AgsCountBeatsAudioRun *count_beats_audio_run; AgsMutexManager *mutex_manager; GList *recall; gdouble position; pthread_mutex_t *audio_mutex; /* lookup audio mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) editor->selected_machine->audio); pthread_mutex_unlock(&(ags_application_mutex)); /* retrieve position */ pthread_mutex_lock(audio_mutex); recall = editor->selected_machine->audio->play; while((recall = ags_recall_find_type(recall, AGS_TYPE_COUNT_BEATS_AUDIO_RUN)) != NULL){ if(AGS_RECALL(recall->data)->recall_id != NULL && (AGS_RECALL_NOTATION & (AGS_RECALL(recall->data)->recall_id->flags)) != 0){ break; } recall = recall->next; } if(recall != NULL){ count_beats_audio_run = AGS_COUNT_BEATS_AUDIO_RUN(recall->data); position = count_beats_audio_run->notation_counter * pattern_edit->control_unit.control_width; } pthread_mutex_unlock(audio_mutex); /* draw fader */ if(recall != NULL){ ags_pattern_edit_draw_scroll(pattern_edit, cr, position); } } cairo_pop_group_to_source(cr); cairo_paint(cr); cairo_surface_mark_dirty(cairo_get_target(cr)); cairo_destroy(cr); } // ags_meter_paint(editor->current_meter); } } /** * ags_pattern_edit_reset_horizontally: * @pattern_edit: the #AgsPatternEdit * @flags: the #AgsPatternEditResetFlags * * Reset @pattern_edit as configured horizontally. * * Since: 0.4.2 */ void ags_pattern_edit_reset_horizontally(AgsPatternEdit *pattern_edit, guint flags) { AgsWindow *window; AgsEditor *editor; double tact_factor, zoom_factor; double tact; gdouble value; editor = (AgsEditor *) gtk_widget_get_ancestor(GTK_WIDGET(pattern_edit), AGS_TYPE_EDITOR); window = gtk_widget_get_ancestor(editor, AGS_TYPE_WINDOW); zoom_factor = 0.25; tact_factor = exp2(6.0 - (double) gtk_combo_box_get_active((GtkComboBox *) editor->toolbar->zoom)); tact = exp2((double) gtk_combo_box_get_active((GtkComboBox *) editor->toolbar->zoom) - 2.0); if((AGS_PATTERN_EDIT_RESET_WIDTH & flags) != 0){ pattern_edit->control_unit.control_width = (guint) (((double) pattern_edit->control_width * zoom_factor * tact)); pattern_edit->control_current.control_count = (guint) ((double) pattern_edit->control_unit.control_count * tact); pattern_edit->control_current.control_width = (pattern_edit->control_width * zoom_factor * tact_factor * tact); pattern_edit->map_width = (guint) ((double) pattern_edit->control_current.control_count * (double) pattern_edit->control_current.control_width); /* reset ruler */ pattern_edit->ruler->factor = tact_factor; pattern_edit->ruler->precision = tact; pattern_edit->ruler->scale_precision = 1.0 / tact; gtk_widget_queue_draw((GtkWidget *) pattern_edit->ruler); } value = GTK_RANGE(pattern_edit->hscrollbar)->adjustment->value; if((AGS_PATTERN_EDIT_RESET_HSCROLLBAR & flags) != 0){ GtkWidget *widget; GtkAdjustment *adjustment; guint width; widget = GTK_WIDGET(pattern_edit->drawing_area); adjustment = GTK_RANGE(pattern_edit->hscrollbar)->adjustment; if(pattern_edit->map_width > widget->allocation.width){ width = widget->allocation.width; // gtk_adjustment_set_upper(adjustment, (double) (pattern_edit->map_width - width)); gtk_adjustment_set_upper(adjustment, (gdouble) (pattern_edit->map_width - width)); gtk_adjustment_set_upper(pattern_edit->ruler->adjustment, (gdouble) (pattern_edit->map_width - width) / pattern_edit->control_current.control_width); if(adjustment->value > adjustment->upper){ gtk_adjustment_set_value(adjustment, adjustment->upper); /* reset ruler */ gtk_adjustment_set_value(pattern_edit->ruler->adjustment, pattern_edit->ruler->adjustment->upper); gtk_widget_queue_draw((GtkWidget *) pattern_edit->ruler); } }else{ width = pattern_edit->map_width; gtk_adjustment_set_upper(adjustment, 0.0); gtk_adjustment_set_value(adjustment, 0.0); /* reset ruler */ gtk_adjustment_set_upper(pattern_edit->ruler->adjustment, 0.0); gtk_adjustment_set_value(pattern_edit->ruler->adjustment, 0.0); gtk_widget_queue_draw((GtkWidget *) pattern_edit->ruler); } pattern_edit->width = width; } /* reset AgsPatternEditControlCurrent */ if(pattern_edit->map_width > pattern_edit->width){ pattern_edit->control_current.x0 = ((guint) round((double) value)) % pattern_edit->control_current.control_width; if(pattern_edit->control_current.x0 != 0){ pattern_edit->control_current.x0 = pattern_edit->control_current.control_width - pattern_edit->control_current.x0; } pattern_edit->control_current.x1 = (pattern_edit->width - pattern_edit->control_current.x0) % pattern_edit->control_current.control_width; pattern_edit->control_current.nth_x = (guint) ceil((double)(value) / (double)(pattern_edit->control_current.control_width)); }else{ pattern_edit->control_current.x0 = 0; pattern_edit->control_current.x1 = 0; pattern_edit->control_current.nth_x = 0; } /* reset AgsPatternEditControlUnit */ if(pattern_edit->map_width > pattern_edit->width){ pattern_edit->control_unit.x0 = ((guint)round((double) value)) % pattern_edit->control_unit.control_width; if(pattern_edit->control_unit.x0 != 0) pattern_edit->control_unit.x0 = pattern_edit->control_unit.control_width - pattern_edit->control_unit.x0; pattern_edit->control_unit.x1 = (pattern_edit->width - pattern_edit->control_unit.x0) % pattern_edit->control_unit.control_width; pattern_edit->control_unit.nth_x = (guint) ceil(round((double) value) / (double) (pattern_edit->control_unit.control_width)); pattern_edit->control_unit.stop_x = pattern_edit->control_unit.nth_x + (pattern_edit->width - pattern_edit->control_unit.x0 - pattern_edit->control_unit.x1) / pattern_edit->control_unit.control_width; }else{ pattern_edit->control_unit.x0 = 0; pattern_edit->control_unit.x1 = 0; pattern_edit->control_unit.nth_x = 0; } /* refresh display */ if(editor->selected_machine != NULL && editor->current_edit_widget == pattern_edit){ cairo_t *cr; if(GTK_WIDGET_VISIBLE(editor)){ gdouble position; cr = gdk_cairo_create(GTK_WIDGET(pattern_edit->drawing_area)->window); cairo_surface_flush(cairo_get_target(cr)); cairo_push_group(cr); ags_pattern_edit_draw_segment(pattern_edit, cr); ags_pattern_edit_draw_notation(pattern_edit, cr); if(editor->toolbar->selected_edit_mode == editor->toolbar->position){ ags_pattern_edit_draw_position(pattern_edit, cr); } /* fader */ if((AGS_PATTERN_EDIT_DRAW_FADER & (pattern_edit->flags)) != 0){ AgsCountBeatsAudioRun *count_beats_audio_run; AgsMutexManager *mutex_manager; GList *recall; gdouble position; pthread_mutex_t *audio_mutex; /* lookup audio mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) editor->selected_machine->audio); pthread_mutex_unlock(&(ags_application_mutex)); /* retrieve position */ pthread_mutex_lock(audio_mutex); recall = editor->selected_machine->audio->play; while((recall = ags_recall_find_type(recall, AGS_TYPE_COUNT_BEATS_AUDIO_RUN)) != NULL){ if(AGS_RECALL(recall->data)->recall_id != NULL && (AGS_RECALL_NOTATION & (AGS_RECALL(recall->data)->recall_id->flags)) != 0){ break; } recall = recall->next; } if(recall != NULL){ count_beats_audio_run = AGS_COUNT_BEATS_AUDIO_RUN(recall->data); position = count_beats_audio_run->notation_counter * pattern_edit->control_unit.control_width; } pthread_mutex_unlock(audio_mutex); /* draw fader */ if(recall != NULL){ ags_pattern_edit_draw_scroll(pattern_edit, cr, position); } } cairo_pop_group_to_source(cr); cairo_paint(cr); cairo_surface_mark_dirty(cairo_get_target(cr)); cairo_destroy(cr); } } } /** * ags_pattern_edit_draw_segment: * @pattern_edit: the #AgsPatternEdit * @cr: the #cairo_t surface * * Draws horizontal and vertical lines. * * Since: 0.4.2 */ void ags_pattern_edit_draw_segment(AgsPatternEdit *pattern_edit, cairo_t *cr) { AgsEditor *editor; GtkWidget *widget; GtkStyle *pattern_edit_style; double tact; guint i, j; guint j_set; static const gdouble white_gc = 65535.0; pattern_edit_style = gtk_widget_get_style(GTK_WIDGET(pattern_edit->drawing_area)); widget = (GtkWidget *) pattern_edit->drawing_area; editor = (AgsEditor *) gtk_widget_get_ancestor(GTK_WIDGET(pattern_edit), AGS_TYPE_EDITOR); /* clear with background color */ cairo_set_source_rgb(cr, pattern_edit_style->bg[0].red / white_gc, pattern_edit_style->bg[0].green / white_gc, pattern_edit_style->bg[0].blue / white_gc); cairo_rectangle(cr, 0.0, 0.0, (double) widget->allocation.width, (double) widget->allocation.height); cairo_fill(cr); /* horizontal lines */ cairo_set_line_width(cr, 1.0); cairo_set_source_rgb(cr, pattern_edit_style->fg[0].red / white_gc, pattern_edit_style->fg[0].green / white_gc, pattern_edit_style->fg[0].blue / white_gc); for(i = pattern_edit->y0 ; i < pattern_edit->height;){ cairo_move_to(cr, 0.0, (double) i); cairo_line_to(cr, (double) pattern_edit->width, (double) i); cairo_stroke(cr); i += pattern_edit->control_height; } cairo_move_to(cr, 0.0, (double) i); cairo_line_to(cr, (double) pattern_edit->width, (double) i); cairo_stroke(cr); /* vertical lines */ tact = exp2((double) gtk_combo_box_get_active(editor->toolbar->zoom) - 2.0); i = pattern_edit->control_current.x0; if(i < pattern_edit->width && tact > 1.0 ){ j_set = pattern_edit->control_current.nth_x % ((guint) tact); /* thin lines */ cairo_set_source_rgb(cr, pattern_edit_style->mid[0].red / white_gc, pattern_edit_style->mid[0].green / white_gc, pattern_edit_style->mid[0].blue / white_gc); if(j_set != 0){ j = j_set; goto ags_pattern_edit_draw_segment0; } } for(; i < pattern_edit->width; ){ /* strong lines */ cairo_set_source_rgb(cr, pattern_edit_style->fg[0].red / white_gc, pattern_edit_style->fg[0].green / white_gc, pattern_edit_style->fg[0].blue / white_gc); cairo_move_to(cr, (double) i, 0.0); cairo_line_to(cr, (double) i, (double) pattern_edit->height); cairo_stroke(cr); i += pattern_edit->control_current.control_width; /* thin lines */ cairo_set_source_rgb(cr, pattern_edit_style->mid[0].red / white_gc, pattern_edit_style->mid[0].green / white_gc, pattern_edit_style->mid[0].blue / white_gc); for(j = 1; i < pattern_edit->width && j < tact; j++){ ags_pattern_edit_draw_segment0: cairo_move_to(cr, (double) i, 0.0); cairo_line_to(cr, (double) i, (double) pattern_edit->height); cairo_stroke(cr); i += pattern_edit->control_current.control_width; } } } /** * ags_pattern_edit_draw_position: * @pattern_edit: the #AgsPatternEdit * @cr: the #cairo_t surface * * Draws the cursor. * * Since: 0.4.2 */ void ags_pattern_edit_draw_position(AgsPatternEdit *pattern_edit, cairo_t *cr) { GtkStyle *pattern_edit_style; guint selected_x, selected_y; guint x_offset[2], y_offset[2]; guint x, y, width, height; gint size_width, size_height; static const gdouble white_gc = 65535.0; pattern_edit_style = gtk_widget_get_style(GTK_WIDGET(pattern_edit->drawing_area)); selected_x = pattern_edit->selected_x * pattern_edit->control_unit.control_width; selected_y = pattern_edit->selected_y * pattern_edit->control_height; size_width = GTK_WIDGET(pattern_edit->drawing_area)->allocation.width; size_height = GTK_WIDGET(pattern_edit->drawing_area)->allocation.height; x_offset[0] = (guint) gtk_range_get_value(GTK_RANGE(pattern_edit->hscrollbar)); x_offset[1] = x_offset[0] + (guint) size_width; y_offset[0] = (guint) gtk_range_get_value(GTK_RANGE(pattern_edit->vscrollbar)); y_offset[1] = y_offset[0] + (guint) size_height; /* calculate horizontally values */ if(selected_x < x_offset[0]){ if(selected_x + pattern_edit->control_current.control_width > x_offset[0]){ x = 0; width = selected_x + pattern_edit->control_current.control_width - x_offset[0]; }else{ return; } }else if(selected_x > x_offset[1]){ return; }else{ x = selected_x - x_offset[0]; if(selected_x + pattern_edit->control_current.control_width < x_offset[1]){ width = pattern_edit->control_current.control_width; }else{ width = x_offset[1] - selected_x; } } /* calculate vertically values */ if(selected_y < y_offset[0]){ if(selected_y + pattern_edit->control_height > y_offset[0]){ y = 0; height = selected_y + pattern_edit->control_height - y_offset[0]; }else{ return; } }else if(selected_y > y_offset[1]){ return; }else{ y = selected_y - y_offset[0]; if(selected_y + pattern_edit->control_height < y_offset[1]){ height = pattern_edit->control_height; }else{ height = y_offset[1] - selected_y; } } /* draw */ cairo_set_source_rgba(cr, pattern_edit_style->base[0].red / white_gc, pattern_edit_style->base[0].green / white_gc, pattern_edit_style->base[0].blue / white_gc, 0.5); cairo_rectangle(cr, (double) x, (double) y, (double) width, (double) height); cairo_fill(cr); } /** * ags_pattern_edit_draw_notation: * @pattern_edit: the #AgsPatternEdit * @cr: the #cairo_t surface * * Draw the #AgsNotation of selected #AgsMachine on @pattern_edit. * * Since: 0.4.2 */ void ags_pattern_edit_draw_notation(AgsPatternEdit *pattern_edit, cairo_t *cr) { AgsMachine *machine; AgsEditor *editor; GtkWidget *widget; GtkStyle *pattern_edit_style; AgsNote *note; AgsMutexManager *mutex_manager; GList *list_notation, *list_note; guint x_offset; guint control_height; guint x, y, width, height; gint selected_channel; gint i; pthread_mutex_t *audio_mutex; static const gdouble white_gc = 65535.0; pattern_edit_style = gtk_widget_get_style(GTK_WIDGET(pattern_edit->drawing_area)); editor = (AgsEditor *) gtk_widget_get_ancestor(GTK_WIDGET(pattern_edit), AGS_TYPE_EDITOR); if(editor->selected_machine == NULL || (machine = editor->selected_machine) == NULL){ return; } widget = (GtkWidget *) pattern_edit->drawing_area; /* lookup audio mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) editor->selected_machine->audio); pthread_mutex_unlock(&(ags_application_mutex)); /* draw */ pthread_mutex_lock(audio_mutex); cairo_set_source_rgb(cr, pattern_edit_style->fg[0].red / white_gc, pattern_edit_style->fg[0].green / white_gc, pattern_edit_style->fg[0].blue / white_gc); i = 0; while((selected_channel = ags_notebook_next_active_tab(editor->current_notebook, i)) != -1){ list_notation = g_list_nth(machine->audio->notation, selected_channel); if(list_notation == NULL){ i++; continue; } list_note = AGS_NOTATION(list_notation->data)->notes; control_height = pattern_edit->control_height - 2 * pattern_edit->control_margin_y; x_offset = (guint) GTK_RANGE(pattern_edit->hscrollbar)->adjustment->value; /* draw controls smaller than pattern_edit->nth_x */ while(list_note != NULL && (note = (AgsNote *) list_note->data)->x[0] < pattern_edit->control_unit.nth_x){ if(note->x[1] >= pattern_edit->control_unit.nth_x){ if(note->y >= pattern_edit->nth_y && note->y <= pattern_edit->stop_y){ x = 0; y = (note->y - pattern_edit->nth_y) * pattern_edit->control_height + pattern_edit->y0 + pattern_edit->control_margin_y; width = (guint) ((double) note->x[1] * pattern_edit->control_unit.control_width - (double) x_offset); if(width > widget->allocation.width) width = widget->allocation.width; height = control_height; /* draw note */ cairo_rectangle(cr, (double) x, (double) y, (double) width, (double) height); cairo_fill(cr); /* check if note is selected */ if((AGS_NOTE_IS_SELECTED & (note->flags)) != 0){ cairo_set_source_rgba(cr, pattern_edit_style->light[0].red / white_gc, pattern_edit_style->light[0].green / white_gc, pattern_edit_style->light[0].blue / white_gc, 0.7); cairo_rectangle(cr, (double) x, (double) y, (double) width, (double) height); cairo_stroke(cr); cairo_set_source_rgb(cr, pattern_edit_style->fg[0].red / white_gc, pattern_edit_style->fg[0].green / white_gc, pattern_edit_style->fg[0].blue / white_gc); } }else if(note->y == (pattern_edit->nth_y - 1) && pattern_edit->y0 != 0){ if(pattern_edit->y0 > pattern_edit->control_margin_y){ x = 0; width = (guint) ((double) note->x[1] * (double) pattern_edit->control_unit.control_width - x_offset); if(width > widget->allocation.width) width = widget->allocation.width; if(pattern_edit->y0 > control_height + pattern_edit->control_margin_y){ y = pattern_edit->y0 - (control_height + pattern_edit->control_margin_y); height = control_height; }else{ y = 0; height = pattern_edit->y0 - pattern_edit->control_margin_y; } /* draw note */ cairo_rectangle(cr, (double) x, (double) y, (double) width, (double) height); cairo_fill(cr); /* check if note is selected */ if((AGS_NOTE_IS_SELECTED & (note->flags)) != 0){ cairo_set_source_rgba(cr, pattern_edit_style->light[0].red / white_gc, pattern_edit_style->light[0].green / white_gc, pattern_edit_style->light[0].blue / white_gc, 0.7); cairo_rectangle(cr, (double) x, (double) y, (double) width, (double) height); cairo_stroke(cr); cairo_set_source_rgb(cr, pattern_edit_style->fg[0].red / white_gc, pattern_edit_style->fg[0].green / white_gc, pattern_edit_style->fg[0].blue / white_gc); } } }else if(note->y == (pattern_edit->stop_y + 1) && pattern_edit->y1 != 0){ if(pattern_edit->y1 > pattern_edit->control_margin_y){ x = 0; width = note->x[1] * pattern_edit->control_unit.control_width - x_offset; if(width > widget->allocation.width) width = widget->allocation.width; y = (note->y - pattern_edit->nth_y) * pattern_edit->control_height + pattern_edit->control_margin_y; if(pattern_edit->y1 > control_height + pattern_edit->control_margin_y){ height = control_height; }else{ height = pattern_edit->y1 - pattern_edit->control_margin_y; } /* draw note */ cairo_rectangle(cr, (double) x, (double) y, (double) width, (double) height); cairo_fill(cr); /* check if note is selected */ if((AGS_NOTE_IS_SELECTED & (note->flags)) != 0){ cairo_set_source_rgba(cr, pattern_edit_style->light[0].red / white_gc, pattern_edit_style->light[0].green / white_gc, pattern_edit_style->light[0].blue / white_gc, 0.7); cairo_rectangle(cr, (double) x, (double) y, (double) width, (double) height); cairo_stroke(cr); cairo_set_source_rgb(cr, pattern_edit_style->fg[0].red / white_gc, pattern_edit_style->fg[0].green / white_gc, pattern_edit_style->fg[0].blue / white_gc); } } } } list_note = list_note->next; } /* draw controls equal or greater than pattern_edit->nth_x */ while(list_note != NULL && (note = (AgsNote *) list_note->data)->x[0] <= pattern_edit->control_unit.stop_x){ if(note->y >= pattern_edit->nth_y && note->y <= pattern_edit->stop_y){ x = (guint) note->x[0] * pattern_edit->control_unit.control_width; y = (note->y - pattern_edit->nth_y) * pattern_edit->control_height + pattern_edit->y0 + pattern_edit->control_margin_y; width = note->x[1] * pattern_edit->control_unit.control_width - x; x -= x_offset; if(x + width > widget->allocation.width) width = widget->allocation.width - x; height = control_height; /* draw note*/ cairo_rectangle(cr, (double) x, (double) y, (double) width, (double) height); cairo_fill(cr); /* check if note is selected */ if((AGS_NOTE_IS_SELECTED & (note->flags)) != 0){ cairo_set_source_rgba(cr, pattern_edit_style->light[0].red / white_gc, pattern_edit_style->light[0].green / white_gc, pattern_edit_style->light[0].blue / white_gc, 0.7); cairo_rectangle(cr, (double) x, (double) y, (double) width, (double) height); cairo_stroke(cr); cairo_set_source_rgb(cr, pattern_edit_style->fg[0].red / white_gc, pattern_edit_style->fg[0].green / white_gc, pattern_edit_style->fg[0].blue / white_gc); } }else if(note->y == (pattern_edit->nth_y - 1) && pattern_edit->y0 != 0){ if(pattern_edit->y0 > pattern_edit->control_margin_y){ x = note->x[0] * pattern_edit->control_unit.control_width - x_offset; width = note->x[1] * pattern_edit->control_unit.control_width - x_offset - x; if(x + width > widget->allocation.width) width = widget->allocation.width - x; if(pattern_edit->y0 > control_height + pattern_edit->control_margin_y){ y = pattern_edit->y0 - (control_height + pattern_edit->control_margin_y); height = control_height; }else{ y = 0; height = pattern_edit->y0 - pattern_edit->control_margin_y; } /* draw note */ cairo_rectangle(cr, (double) x, (double) y, (double) width, (double) height); cairo_fill(cr); /* check if note is selected */ if((AGS_NOTE_IS_SELECTED & (note->flags)) != 0){ cairo_set_source_rgba(cr, pattern_edit_style->light[0].red / white_gc, pattern_edit_style->light[0].green / white_gc, pattern_edit_style->light[0].blue / white_gc, 0.7); cairo_rectangle(cr, (double) x, (double) y, (double) width, (double) height); cairo_stroke(cr); cairo_set_source_rgb(cr, pattern_edit_style->fg[0].red / white_gc, pattern_edit_style->fg[0].green / white_gc, pattern_edit_style->fg[0].blue / white_gc); } } }else if(note->y == (pattern_edit->stop_y + 1) && pattern_edit->y1 != 0){ if(pattern_edit->y1 > pattern_edit->control_margin_y){ x = note->x[0] * pattern_edit->control_unit.control_width - x_offset; width = note->x[1] * pattern_edit->control_unit.control_width - x_offset - x; if(x + width > widget->allocation.width) width = widget->allocation.width - x; y = (note->y - pattern_edit->nth_y) * pattern_edit->control_height + pattern_edit->control_margin_y; if(pattern_edit->y1 > control_height + pattern_edit->control_margin_y){ height = control_height; }else{ height = pattern_edit->y1 - pattern_edit->control_margin_y; } /* draw note */ cairo_rectangle(cr, (double) x, (double) y, (double) width, (double) height); cairo_fill(cr); /* check if note is selected */ if((AGS_NOTE_IS_SELECTED & (note->flags)) != 0){ cairo_set_source_rgba(cr, pattern_edit_style->light[0].red / white_gc, pattern_edit_style->light[0].green / white_gc, pattern_edit_style->light[0].blue / white_gc, 0.7); cairo_rectangle(cr, (double) x, (double) y, (double) width, (double) height); cairo_stroke(cr); cairo_set_source_rgb(cr, pattern_edit_style->fg[0].red / white_gc, pattern_edit_style->fg[0].green / white_gc, pattern_edit_style->fg[0].blue / white_gc); } } } list_note = list_note->next; } i++; } pthread_mutex_unlock(audio_mutex); } /** * ags_pattern_edit_draw_scroll: * @pattern_edit: the #AgsPatternEdit * @cr: the #cairo_t surface * @position: the new position * * Change visible x-position of @pattern_edit. * * Since: 0.4.2 */ void ags_pattern_edit_draw_scroll(AgsPatternEdit *pattern_edit, cairo_t *cr, gdouble position) { GtkStyle *pattern_edit_style; double x, y; double width, height; static const gdouble white_gc = 65535.0; pattern_edit_style = gtk_widget_get_style(GTK_WIDGET(pattern_edit->drawing_area)); y = 0.0; x = (position) - (GTK_RANGE(pattern_edit->hscrollbar)->adjustment->value); height = (double) GTK_WIDGET(pattern_edit->drawing_area)->allocation.height; width = 3.0; /* draw */ cairo_set_source_rgba(cr, pattern_edit_style->dark[0].red / white_gc, pattern_edit_style->dark[0].green / white_gc, pattern_edit_style->dark[0].blue / white_gc, 0.5); cairo_rectangle(cr, (double) x, (double) y, (double) width, (double) height); cairo_fill(cr); } /** * ags_pattern_edit_new: * * Create a new #AgsPatternEdit. * * Since: 0.4.2 */ AgsPatternEdit* ags_pattern_edit_new() { AgsPatternEdit *pattern_edit; pattern_edit = (AgsPatternEdit *) g_object_new(AGS_TYPE_PATTERN_EDIT, NULL); return(pattern_edit); } gsequencer-0.6.37/src/ags/X/editor/ags_file_selection.h0000644000175000017500000000624512621463700017726 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_FILE_SELECTION_H__ #define __AGS_FILE_SELECTION_H__ #include #include #include #include #include #define AGS_TYPE_FILE_SELECTION (ags_file_selection_get_type()) #define AGS_FILE_SELECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_FILE_SELECTION, AgsFileSelection)) #define AGS_FILE_SELECTION_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_FILE_SELECTION, AgsFileSelectionClass)) #define AGS_IS_FILE_SELECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_FILE_SELECTION)) #define AGS_IS_FILE_SELECTION_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_FILE_SELECTION)) #define AGS_FILE_SELECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_FILE_SELECTION, AgsFileSelectionClass)) #define AGS_FILE_SELECTION_ENTRY(strct) ((AgsFileSelectionEntry *) (strct)) typedef struct _AgsFileSelection AgsFileSelection; typedef struct _AgsFileSelectionClass AgsFileSelectionClass; typedef struct _AgsFileSelectionEntry AgsFileSelectionEntry; typedef enum{ AGS_FILE_SELECTION_COMPLETED = 1, }AgsFileSelectionFlags; struct _AgsFileSelection { GtkVBox vbox; guint flags; gchar *directory; guint entry_count; GList *entry; GtkLabel *chosed; GtkLabel *selected; }; struct _AgsFileSelectionClass { GtkVBoxClass vbox; void (*add_entry)(AgsFileSelection *file_selection, GtkWidget *widget); void (*remove_entry)(AgsFileSelection *file_selection, GtkWidget *widget); void (*completed)(AgsFileSelection *file_selection); }; struct _AgsFileSelectionEntry { GtkTable *table; GtkWidget *entry; gboolean chosed; gchar *filename; GtkSpinButton *nth_sample; GtkSpinButton *nth_channel; GtkSpinButton *count; }; GType ags_file_selection_get_type(void); AgsFileSelectionEntry* ags_file_selection_entry_alloc(); void ags_file_selection_set_entry(AgsFileSelection *file_selection, GList *entry); void ags_file_selection_add_entry(AgsFileSelection *file_selection, GtkWidget *widget); void ags_file_selection_remove_entry(AgsFileSelection *file_selection, GtkWidget *widget); gboolean ags_file_selection_contains_file(AgsFileSelection *file_selection, gchar *filename); void ags_file_selection_completed(AgsFileSelection *file_selection); AgsFileSelection* ags_file_selection_new(); #endif /*__AGS_FILE_SELECTION_H__*/ gsequencer-0.6.37/src/ags/X/editor/ags_notebook_callbacks.c0000644000175000017500000000146312626272146020560 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include gsequencer-0.6.37/src/ags/X/editor/ags_meter.h0000644000175000017500000000347312612232537016060 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_METER_H__ #define __AGS_METER_H__ #include #include #include #include #define AGS_TYPE_METER (ags_meter_get_type()) #define AGS_METER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_METER, AgsMeter)) #define AGS_METER_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_METER, AgsMeterClass)) #define AGS_IS_METER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_METER)) #define AGS_IS_METER_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_METER)) #define AGS_METER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS (obj, AGS_TYPE_METER, AgsMeterClass)) typedef struct _AgsMeter AgsMeter; typedef struct _AgsMeterClass AgsMeterClass; struct _AgsMeter { GtkDrawingArea drawing_area; }; struct _AgsMeterClass { GtkDrawingAreaClass drawing_area; }; GType ags_meter_get_type(void); char* ags_meter_sound_string(); void ags_meter_paint(AgsMeter *meter); // , guint rows, guint nth_y, guint y0 AgsMeter* ags_meter_new(); #endif /*__AGS_METER_H__*/ gsequencer-0.6.37/src/ags/X/editor/ags_notebook.h0000644000175000017500000000524612626272146016571 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_NOTEBOOK_H__ #define __AGS_NOTEBOOK_H__ #include #include #include #define AGS_TYPE_NOTEBOOK (ags_notebook_get_type()) #define AGS_NOTEBOOK(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_NOTEBOOK, AgsNotebook)) #define AGS_NOTEBOOK_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_NOTEBOOK, AgsNotebookClass)) #define AGS_IS_NOTEBOOK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_NOTEBOOK)) #define AGS_IS_NOTEBOOK_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_NOTEBOOK)) #define AGS_NOTEBOOK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS (obj, AGS_TYPE_NOTEBOOK, AgsNotebookClass)) #define AGS_NOTEBOOK_TAB(x) ((AgsNotebookTab *)(x)) typedef struct _AgsNotebook AgsNotebook; typedef struct _AgsNotebookClass AgsNotebookClass; typedef struct _AgsNotebookTab AgsNotebookTab; typedef enum{ AGS_NOTEBOOK_TAB_VISIBLE = 1, AGS_NOTEBOOK_TAB_MODE_NORMAL = 1 << 1, AGS_NOTEBOOK_TAB_MODE_OVERLAY = 1 << 2, }AgsNotebookTabFlags; struct _AgsNotebook { GtkVBox vbox; guint flags; GtkHBox *hbox; GList *tabs; GtkWidget *child; }; struct _AgsNotebookClass { GtkVBoxClass vbox; }; struct _AgsNotebookTab { guint flags; GtkToggleButton *toggle; GObject *notation; }; GType ags_notebook_get_type(void); gint ags_notebook_tab_index(AgsNotebook *notebook, GObject *notation); gint ags_notebook_next_active_tab(AgsNotebook *notebook, gint position); gint ags_notebook_add_tab(AgsNotebook *notebook); void ags_notebook_insert_tab(AgsNotebook *notebook, gint position); void ags_notebook_remove_tab(AgsNotebook *notebook, gint nth); void ags_notebook_add_child(AgsNotebook *notebook, GtkWidget *child); void ags_notebook_remove_child(AgsNotebook *notebook, GtkWidget *child); AgsNotebook* ags_notebook_new(); #endif /*__AGS_NOTEBOOK_H__*/ gsequencer-0.6.37/src/ags/X/editor/ags_toolbar.c0000644000175000017500000002175712626272146016413 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void ags_toolbar_class_init(AgsToolbarClass *toolbar); void ags_toolbar_connectable_interface_init(AgsConnectableInterface *connectable); void ags_toolbar_init(AgsToolbar *toolbar); void ags_toolbar_connect(AgsConnectable *connectable); void ags_toolbar_disconnect(AgsConnectable *connectable); void ags_toolbar_show(GtkWidget *widget); /** * SECTION:ags_toolbar * @short_description: edit tool * @title: AgsToolbar * @section_id: * @include: ags/X/editor/ags_toolbar.h * * The #AgsToolbar lets you choose edit tool. */ GType ags_toolbar_get_type(void) { static GType ags_type_toolbar = 0; if (!ags_type_toolbar){ static const GTypeInfo ags_toolbar_info = { sizeof (AgsToolbarClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_toolbar_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsToolbar), 0, /* n_preallocs */ (GInstanceInitFunc) ags_toolbar_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_toolbar_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_toolbar = g_type_register_static(GTK_TYPE_TOOLBAR, "AgsToolbar\0", &ags_toolbar_info, 0); g_type_add_interface_static(ags_type_toolbar, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_toolbar); } void ags_toolbar_class_init(AgsToolbarClass *toolbar) { } void ags_toolbar_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->is_ready = NULL; connectable->is_connected = NULL; connectable->connect = ags_toolbar_connect; connectable->disconnect = ags_toolbar_disconnect; } void ags_toolbar_init(AgsToolbar *toolbar) { GtkLabel *label; GtkMenu *menu; GtkMenuItem *item; toolbar->position = (GtkToggleButton *) g_object_new(GTK_TYPE_TOGGLE_BUTTON, "image\0", (GtkWidget *) gtk_image_new_from_stock(GTK_STOCK_JUMP_TO, GTK_ICON_SIZE_LARGE_TOOLBAR), "relief\0", GTK_RELIEF_NONE, NULL); gtk_toolbar_append_widget((GtkToolbar *) toolbar, (GtkWidget *) toolbar->position, "position cursor\0", NULL); toolbar->edit = (GtkToggleButton *) g_object_new(GTK_TYPE_TOGGLE_BUTTON, "image\0", (GtkWidget *) gtk_image_new_from_stock(GTK_STOCK_EDIT, GTK_ICON_SIZE_LARGE_TOOLBAR), "relief\0", GTK_RELIEF_NONE, "active\0", TRUE, NULL); gtk_toolbar_append_widget((GtkToolbar *) toolbar, (GtkWidget *) toolbar->edit, "edit notes\0", NULL); toolbar->selected_edit_mode = toolbar->edit; toolbar->clear = (GtkToggleButton *) g_object_new(GTK_TYPE_TOGGLE_BUTTON, "image\0", (GtkWidget *) gtk_image_new_from_stock(GTK_STOCK_CLEAR, GTK_ICON_SIZE_LARGE_TOOLBAR), "relief\0", GTK_RELIEF_NONE, NULL); gtk_toolbar_append_widget((GtkToolbar *) toolbar, (GtkWidget *) toolbar->clear, "clear notes\0", NULL); toolbar->select = (GtkToggleButton *) g_object_new(GTK_TYPE_TOGGLE_BUTTON, "image\0", (GtkWidget *) gtk_image_new_from_stock(GTK_STOCK_SELECT_ALL, GTK_ICON_SIZE_LARGE_TOOLBAR), "relief\0", GTK_RELIEF_NONE, NULL); gtk_toolbar_append_widget((GtkToolbar *) toolbar, (GtkWidget *) toolbar->select, "select notes\0", NULL); toolbar->copy = (GtkButton *) g_object_new(GTK_TYPE_BUTTON, "image\0", (GtkWidget *) gtk_image_new_from_stock(GTK_STOCK_COPY, GTK_ICON_SIZE_LARGE_TOOLBAR), "relief\0", GTK_RELIEF_NONE, NULL); gtk_toolbar_append_widget((GtkToolbar *) toolbar, (GtkWidget *) toolbar->copy, "copy notes\0", NULL); toolbar->cut = (GtkButton *) g_object_new(GTK_TYPE_BUTTON, "image\0", (GtkWidget *) gtk_image_new_from_stock(GTK_STOCK_CUT, GTK_ICON_SIZE_LARGE_TOOLBAR), "relief\0", GTK_RELIEF_NONE, NULL); gtk_toolbar_append_widget((GtkToolbar *) toolbar, (GtkWidget *) toolbar->cut, "cut notes\0", NULL); toolbar->paste = (GtkButton *) g_object_new(GTK_TYPE_BUTTON, "image\0", (GtkWidget *) gtk_image_new_from_stock(GTK_STOCK_PASTE, GTK_ICON_SIZE_LARGE_TOOLBAR), "relief\0", GTK_RELIEF_NONE, NULL); gtk_toolbar_append_widget((GtkToolbar *) toolbar, (GtkWidget *) toolbar->paste, "paste notes\0", NULL); toolbar->invert = (GtkButton *) g_object_new(GTK_TYPE_BUTTON, "image\0", (GtkWidget *) gtk_image_new_from_stock(GTK_STOCK_CONVERT, GTK_ICON_SIZE_LARGE_TOOLBAR), "relief\0", GTK_RELIEF_NONE, NULL); gtk_toolbar_append_widget((GtkToolbar *) toolbar, (GtkWidget *) toolbar->invert, "invert notes\0", NULL); /* zoom */ label = (GtkLabel *) gtk_label_new("zoom\0"); gtk_toolbar_append_widget((GtkToolbar *) toolbar, (GtkWidget *) label, NULL, NULL); toolbar->zoom_history = 2; toolbar->zoom = (GtkComboBoxText *) ags_zoom_combo_box_new(); gtk_combo_box_set_active((GtkComboBox *) toolbar->zoom, 2); gtk_toolbar_append_widget((GtkToolbar *) toolbar, (GtkWidget *) toolbar->zoom, NULL , NULL); /* edit modes */ label = (GtkLabel *) gtk_label_new("mode\0"); gtk_toolbar_append_widget((GtkToolbar *) toolbar, (GtkWidget *) label, NULL, NULL); //TODO:JK: uncomment me toolbar->mode = (GtkComboBoxText *) gtk_combo_box_text_new(); gtk_combo_box_text_append_text(toolbar->mode, AGS_TOOLBAR_MODE_SINGLE_CHANNEL); // gtk_combo_box_text_append_text(toolbar->mode, // AGS_TOOLBAR_MODE_MULTI_CHANNEL); // gtk_combo_box_text_append_text(toolbar->mode, // AGS_TOOLBAR_MODE_ALL_CHANNELS); gtk_combo_box_set_active((GtkComboBox *) toolbar->mode, 0); gtk_toolbar_append_widget((GtkToolbar *) toolbar, (GtkWidget *) toolbar->mode, NULL, NULL); } void ags_toolbar_connect(AgsConnectable *connectable) { AgsToolbar *toolbar; toolbar = AGS_TOOLBAR(connectable); g_signal_connect((GObject *) toolbar, "show\0", G_CALLBACK(ags_toolbar_show_callback), (gpointer) toolbar); /* tool */ g_signal_connect_after((GObject *) toolbar->position, "toggled\0", G_CALLBACK(ags_toolbar_position_callback), (gpointer) toolbar); g_signal_connect_after((GObject *) toolbar->edit, "toggled\0", G_CALLBACK(ags_toolbar_edit_callback), (gpointer) toolbar); g_signal_connect_after((GObject *) toolbar->clear, "toggled\0", G_CALLBACK(ags_toolbar_clear_callback), (gpointer) toolbar); g_signal_connect_after((GObject *) toolbar->select, "toggled\0", G_CALLBACK(ags_toolbar_select_callback), (gpointer) toolbar); /* edit */ g_signal_connect((GObject *) toolbar->copy, "clicked\0", G_CALLBACK(ags_toolbar_copy_or_cut_callback), (gpointer) toolbar); g_signal_connect((GObject *) toolbar->cut, "clicked\0", G_CALLBACK(ags_toolbar_copy_or_cut_callback), (gpointer) toolbar); g_signal_connect((GObject *) toolbar->paste, "clicked\0", G_CALLBACK(ags_toolbar_paste_callback), (gpointer) toolbar); g_signal_connect((GObject *) toolbar->invert, "clicked\0", G_CALLBACK(ags_toolbar_invert_callback), (gpointer) toolbar); /* zoom */ g_signal_connect_after((GObject *) toolbar->zoom, "changed\0", G_CALLBACK(ags_toolbar_zoom_callback), (gpointer) toolbar); /* mode */ g_signal_connect_after((GObject *) toolbar->mode, "changed\0", G_CALLBACK(ags_toolbar_mode_callback), (gpointer) toolbar); } void ags_toolbar_disconnect(AgsConnectable *connectable) { //TODO:JK: implement me } void ags_toolbar_show(GtkWidget *widget) { /* GList *list; list = gtk_container_get_children((GtkContainer *) widget); while(list != NULL){ gtk_widget_show_all((GtkWidget *) widget); list = list->next; } */ } /** * ags_toolbar_new: * * Create a new #AgsToolbar. * * Since: 0.3 */ AgsToolbar* ags_toolbar_new() { AgsToolbar *toolbar; toolbar = (AgsToolbar *) g_object_new(AGS_TYPE_TOOLBAR, NULL); return(toolbar); } gsequencer-0.6.37/src/ags/X/editor/ags_notebook.c0000644000175000017500000001467412626272146016571 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include void ags_notebook_class_init(AgsNotebookClass *notebook); void ags_notebook_connectable_interface_init(AgsConnectableInterface *connectable); void ags_notebook_init(AgsNotebook *notebook); void ags_notebook_connect(AgsConnectable *connectable); void ags_notebook_disconnect(AgsConnectable *connectable); void ags_notebook_paint(AgsNotebook *notebook); AgsNotebookTab* ags_notebook_tab_alloc(); /** * SECTION:ags_notebook * @short_description: select channel * @title: AgsNotebook * @section_id: * @include: ags/X/editor/ags_notebook.h * * The #AgsNotebook lets select/deselect channels to edit. */ GType ags_notebook_get_type(void) { static GType ags_type_notebook = 0; if(!ags_type_notebook){ static const GTypeInfo ags_notebook_info = { sizeof (AgsNotebookClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_notebook_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsNotebook), 0, /* n_preallocs */ (GInstanceInitFunc) ags_notebook_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_notebook_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_notebook = g_type_register_static(GTK_TYPE_VBOX, "AgsNotebook\0", &ags_notebook_info, 0); g_type_add_interface_static(ags_type_notebook, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return(ags_type_notebook); } void ags_notebook_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->is_ready = NULL; connectable->is_connected = NULL; connectable->connect = ags_notebook_connect; connectable->disconnect = ags_notebook_disconnect; } void ags_notebook_class_init(AgsNotebookClass *notebook) { } void ags_notebook_init(AgsNotebook *notebook) { notebook->flags = 0; notebook->hbox = (GtkHBox *) gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(notebook), GTK_WIDGET(notebook->hbox), FALSE, FALSE, 0); notebook->tabs = NULL; notebook->child = NULL; } void ags_notebook_connect(AgsConnectable *connectable) { AgsNotebook *notebook; AgsEditor *editor; notebook = AGS_NOTEBOOK(connectable); editor = (AgsEditor *) gtk_widget_get_ancestor((GtkWidget *) notebook, AGS_TYPE_EDITOR); } void ags_notebook_disconnect(AgsConnectable *connectable) { //TODO:JK: implement me } AgsNotebookTab* ags_notebook_tab_alloc() { AgsNotebookTab *notebook_tab; notebook_tab = (AgsNotebookTab *) malloc(sizeof(AgsNotebookTab)); notebook_tab->flags = 0; notebook_tab->toggle = NULL; notebook_tab->notation = NULL; return(notebook_tab); } gint ags_notebook_tab_index(AgsNotebook *notebook, GObject *notation) { GList *list; gint i; list = notebook->tabs; for(i = g_list_length(notebook->tabs) - 1; list != NULL; i--){ if(AGS_NOTEBOOK_TAB(list->data)->notation == notation){ return(i); } list = list->next; } return(-1); } gint ags_notebook_add_tab(AgsNotebook *notebook) { AgsNotebookTab *tab; gint index; tab = ags_notebook_tab_alloc(); notebook->tabs = g_list_prepend(notebook->tabs, tab); index = g_list_length(notebook->tabs); tab->toggle = (GtkToggleButton *) gtk_toggle_button_new_with_label(g_strdup_printf("channel %d\0", index)); gtk_toggle_button_set_active(tab->toggle, TRUE); gtk_box_pack_start(GTK_BOX(notebook->hbox), GTK_WIDGET(tab->toggle), FALSE, FALSE, 0); return(index); } gint ags_notebook_next_active_tab(AgsNotebook *notebook, gint position) { GList *list, *list_start; gint i; list_start = g_list_copy(notebook->tabs); list_start = list = g_list_reverse(list_start); list = g_list_nth(list, position); for(i = 0; list != NULL; i++){ if(gtk_toggle_button_get_active(AGS_NOTEBOOK_TAB(list->data)->toggle)){ g_list_free(list_start); return(position + i); } list = list->next; } g_list_free(list_start); return(-1); } void ags_notebook_insert_tab(AgsNotebook *notebook, gint position) { AgsNotebookTab *tab; gint length; length = g_list_length(notebook->tabs); tab = ags_notebook_tab_alloc(); notebook->tabs = g_list_insert(notebook->tabs, tab, length - position); tab->toggle = (GtkToggleButton *) gtk_toggle_button_new_with_label(g_strdup_printf("channel %d\0", position + 1)); gtk_box_pack_start(GTK_BOX(notebook->hbox), GTK_WIDGET(tab->toggle), FALSE, FALSE, 0); gtk_box_reorder_child(GTK_BOX(notebook->hbox), GTK_WIDGET(tab->toggle), position); } void ags_notebook_remove_tab(AgsNotebook *notebook, gint nth) { AgsNotebookTab *tab; gint length; if(notebook->tabs == NULL){ return; } length = g_list_length(notebook->tabs); tab = g_list_nth_data(notebook->tabs, length - nth - 1); notebook->tabs = g_list_remove(notebook->tabs, tab); gtk_widget_destroy(GTK_WIDGET(tab->toggle)); free(tab); } void ags_notebook_add_child(AgsNotebook *notebook, GtkWidget *child) { gtk_box_pack_start(GTK_BOX(notebook), child, FALSE, FALSE, 0); } void ags_notebook_remove_child(AgsNotebook *notebook, GtkWidget *child) { gtk_widget_destroy(child); } /** * ags_notebook_new: * * Create a new #AgsNotebook. * * Since: 0.4 */ AgsNotebook* ags_notebook_new() { AgsNotebook *notebook; notebook = (AgsNotebook *) g_object_new(AGS_TYPE_NOTEBOOK, NULL); return(notebook); } gsequencer-0.6.37/src/ags/X/editor/ags_file_selection_callbacks.h0000644000175000017500000000210312621463700021712 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_FILE_SELECTION_CALLBACKS_H__ #define __AGS_FILE_SELECTION_CALLBACKS_H__ #include #include #include #include void ags_file_selection_remove_callback(GtkButton *button, GtkTable *hbox); #endif /*__AGS_FILE_SELECTION_CALLBACKS_H__*/ gsequencer-0.6.37/src/ags/X/editor/ags_inline_player_callbacks.c0000644000175000017500000000147012621463700021561 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include gsequencer-0.6.37/src/ags/X/editor/ags_toolbar_callbacks.c0000644000175000017500000002333712621463700020377 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include void ags_toolbar_show_callback(GtkWidget *widget, AgsToolbar *toolbar) { ags_toolbar_show(widget); } void ags_toolbar_position_callback(GtkToggleButton *toggle_button, AgsToolbar *toolbar) { AgsEditor *editor; editor = (AgsEditor *) gtk_widget_get_ancestor(GTK_WIDGET(toolbar), AGS_TYPE_EDITOR); if(toggle_button == toolbar->selected_edit_mode){ GdkRectangle *rectangle; gint width, height; rectangle = g_new(GdkRectangle, 1); rectangle->x = 0; rectangle->y = 0; if(AGS_IS_NOTE_EDIT(editor->current_edit_widget)){ /* refresh editor */ gtk_widget_get_size_request(GTK_WIDGET(AGS_NOTE_EDIT(editor->current_edit_widget)->drawing_area), &width, &height); rectangle->width = width; rectangle->height = height; gdk_window_invalidate_rect(GTK_WIDGET(AGS_NOTE_EDIT(editor->current_edit_widget)->drawing_area)->window, rectangle, TRUE); gdk_window_process_updates(GTK_WIDGET(AGS_NOTE_EDIT(editor->current_edit_widget)->drawing_area)->window, TRUE); }else if(AGS_IS_PATTERN_EDIT(editor->current_edit_widget)){ /* refresh editor */ gtk_widget_get_size_request(GTK_WIDGET(AGS_PATTERN_EDIT(editor->current_edit_widget)->drawing_area), &width, &height); rectangle->width = width; rectangle->height = height; gdk_window_invalidate_rect(GTK_WIDGET(AGS_PATTERN_EDIT(editor->current_edit_widget)->drawing_area)->window, rectangle, TRUE); gdk_window_process_updates(GTK_WIDGET(AGS_PATTERN_EDIT(editor->current_edit_widget)->drawing_area)->window, TRUE); } g_free(rectangle); if(!gtk_toggle_button_get_active(toggle_button)){ gtk_toggle_button_set_active(toggle_button, TRUE); } }else if(gtk_toggle_button_get_active(toggle_button)){ GtkToggleButton *old_selected_edit_mode; cairo_t *cr; old_selected_edit_mode = toolbar->selected_edit_mode; toolbar->selected_edit_mode = toggle_button; gtk_toggle_button_set_active(old_selected_edit_mode, FALSE); /* refresh note_edit */ if(AGS_IS_NOTE_EDIT(editor->current_edit_widget)){ cr = gdk_cairo_create(GTK_WIDGET(AGS_NOTE_EDIT(editor->current_edit_widget)->drawing_area)->window); ags_note_edit_draw_position(AGS_NOTE_EDIT(editor->current_edit_widget), cr); }else if(AGS_IS_PATTERN_EDIT(editor->current_edit_widget)){ cr = gdk_cairo_create(GTK_WIDGET(AGS_PATTERN_EDIT(editor->current_edit_widget)->drawing_area)->window); ags_pattern_edit_draw_position(AGS_PATTERN_EDIT(editor->current_edit_widget), cr); } } } void ags_toolbar_edit_callback(GtkToggleButton *toggle_button, AgsToolbar *toolbar) { if(toggle_button == toolbar->selected_edit_mode){ if(!gtk_toggle_button_get_active(toggle_button)){ gtk_toggle_button_set_active(toggle_button, TRUE); } }else if(gtk_toggle_button_get_active(toggle_button)){ GtkToggleButton *old_selected_edit_mode; old_selected_edit_mode = toolbar->selected_edit_mode; toolbar->selected_edit_mode = toggle_button; gtk_toggle_button_set_active(old_selected_edit_mode, FALSE); } } void ags_toolbar_clear_callback(GtkToggleButton *toggle_button, AgsToolbar *toolbar) { if(toggle_button == toolbar->selected_edit_mode){ if(!gtk_toggle_button_get_active(toggle_button)){ gtk_toggle_button_set_active(toggle_button, TRUE); } }else if(gtk_toggle_button_get_active(toggle_button)){ GtkToggleButton *old_selected_edit_mode; old_selected_edit_mode = toolbar->selected_edit_mode; toolbar->selected_edit_mode = toggle_button; gtk_toggle_button_set_active(old_selected_edit_mode, FALSE); } } void ags_toolbar_select_callback(GtkToggleButton *toggle_button, AgsToolbar *toolbar) { if(toggle_button == toolbar->selected_edit_mode){ if(!gtk_toggle_button_get_active(toggle_button)){ gtk_toggle_button_set_active(toggle_button, TRUE); } }else if(gtk_toggle_button_get_active(toggle_button)){ GtkToggleButton *old_selected_edit_mode; old_selected_edit_mode = toolbar->selected_edit_mode; toolbar->selected_edit_mode = toggle_button; gtk_toggle_button_set_active(old_selected_edit_mode, FALSE); } } void ags_toolbar_copy_or_cut_callback(GtkWidget *widget, AgsToolbar *toolbar) { AgsMachine *machine; AgsEditor *editor; AgsNotation *notation; GList *list_notation; xmlDocPtr clipboard; xmlNodePtr audio_node, notation_node; xmlChar *buffer; int size; gint i; gint selected_channel; /* add notation to root node */ editor = AGS_EDITOR(gtk_widget_get_ancestor(GTK_WIDGET(toolbar), AGS_TYPE_EDITOR)); if((machine = editor->selected_machine) != NULL){ if(widget == (GtkWidget *) toolbar->copy){ ags_editor_copy(editor); }else{ ags_editor_cut(editor); } } } void ags_toolbar_paste_callback(GtkWidget *widget, AgsToolbar *toolbar) { AgsEditor *editor; editor = (AgsEditor *) gtk_widget_get_ancestor(GTK_WIDGET(toolbar), AGS_TYPE_EDITOR); ags_editor_paste(editor); } void ags_toolbar_invert_callback(GtkWidget *widget, AgsToolbar *toolbar) { AgsEditor *editor; editor = (AgsEditor *) gtk_widget_get_ancestor(GTK_WIDGET(toolbar), AGS_TYPE_EDITOR); ags_editor_invert(editor); } void ags_toolbar_zoom_callback(GtkComboBox *combo_box, AgsToolbar *toolbar) { AgsEditor *editor; GtkWidget *widget; GtkAdjustment *adjustment; double zoom, zoom_old; double tact_factor, zoom_factor; double tact; gdouble old_upper, new_upper; gdouble position; guint history; editor = (AgsEditor *) gtk_widget_get_ancestor((GtkWidget *) toolbar, AGS_TYPE_EDITOR); history = gtk_combo_box_get_active(combo_box); zoom = exp2((double) history - 2.0); zoom_old = exp2((double) toolbar->zoom_history - 2.0); zoom_factor = 0.25; tact_factor = exp2(6.0 - (double) gtk_combo_box_get_active((GtkComboBox *) editor->toolbar->zoom)); tact = exp2((double) gtk_combo_box_get_active((GtkComboBox *) editor->toolbar->zoom) - 2.0); toolbar->zoom_history = history; if(AGS_IS_NOTE_EDIT(editor->current_edit_widget)){ position = GTK_RANGE(AGS_NOTE_EDIT(editor->current_edit_widget)->hscrollbar)->adjustment->value; old_upper = GTK_RANGE(AGS_NOTE_EDIT(editor->current_edit_widget)->hscrollbar)->adjustment->upper; AGS_NOTE_EDIT(editor->current_edit_widget)->flags |= AGS_NOTE_EDIT_RESETING_HORIZONTALLY; ags_note_edit_reset_horizontally(AGS_NOTE_EDIT(editor->current_edit_widget), AGS_NOTE_EDIT_RESET_HSCROLLBAR | AGS_NOTE_EDIT_RESET_WIDTH); AGS_NOTE_EDIT(editor->current_edit_widget)->flags &= (~AGS_NOTE_EDIT_RESETING_HORIZONTALLY); new_upper = GTK_RANGE(AGS_NOTE_EDIT(editor->current_edit_widget)->hscrollbar)->adjustment->upper; gtk_adjustment_set_value(GTK_RANGE(AGS_NOTE_EDIT(editor->current_edit_widget)->hscrollbar)->adjustment, position / old_upper * new_upper); }else if(AGS_IS_PATTERN_EDIT(editor->current_edit_widget)){ position = GTK_RANGE(AGS_PATTERN_EDIT(editor->current_edit_widget)->hscrollbar)->adjustment->value; old_upper = GTK_RANGE(AGS_PATTERN_EDIT(editor->current_edit_widget)->hscrollbar)->adjustment->upper; AGS_PATTERN_EDIT(editor->current_edit_widget)->flags |= AGS_PATTERN_EDIT_RESETING_HORIZONTALLY; ags_pattern_edit_reset_horizontally(AGS_PATTERN_EDIT(editor->current_edit_widget), AGS_PATTERN_EDIT_RESET_HSCROLLBAR | AGS_PATTERN_EDIT_RESET_WIDTH); AGS_PATTERN_EDIT(editor->current_edit_widget)->flags &= (~AGS_PATTERN_EDIT_RESETING_HORIZONTALLY); new_upper = GTK_RANGE(AGS_PATTERN_EDIT(editor->current_edit_widget)->hscrollbar)->adjustment->upper; gtk_adjustment_set_value(GTK_RANGE(AGS_PATTERN_EDIT(editor->current_edit_widget)->hscrollbar)->adjustment, position / old_upper * new_upper); } } void ags_toolbar_mode_callback(GtkWidget *widget, AgsToolbar *toolbar) { AgsEditor *editor; AgsNotebook *notebook; GList *list; gint history; /* retrieve some variables */ editor = (AgsEditor *) gtk_widget_get_ancestor(GTK_WIDGET(toolbar), AGS_TYPE_EDITOR); notebook = editor->current_notebook; /* toggle AgsNotebook */ history = gtk_combo_box_get_active((GtkComboBox *) toolbar->mode); switch(history){ case 0: { list = g_list_reverse(notebook->tabs); if(list != NULL){ gtk_toggle_button_set_active(AGS_NOTEBOOK_TAB(list->data)->toggle, TRUE); list = list->next; } while(list != NULL){ gtk_toggle_button_set_active(AGS_NOTEBOOK_TAB(list->data)->toggle, FALSE); list = list->next; } } break; case 1: { //NOTE: you're on your own } break; case 2: { list = g_list_reverse(notebook->tabs); while(list != NULL){ gtk_toggle_button_set_active(AGS_NOTEBOOK_TAB(list->data)->toggle, TRUE); list = list->next; } } break; default: g_message("unknown editor mode\0"); } } gsequencer-0.6.37/src/ags/X/editor/ags_machine_selector_callbacks.c0000644000175000017500000001705312621463700022237 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include void ags_machine_selector_selection_response(GtkWidget *machine_selection, gint response, AgsMachineSelector *machine_selector); void ags_machine_selector_popup_add_tab_callback(GtkWidget *menu_item, AgsMachineSelector *machine_selector) { //TODO:JK: implement me } void ags_machine_selector_popup_remove_tab_callback(GtkWidget *menu_item, AgsMachineSelector *machine_selector) { //TODO:JK: implement me } void ags_machine_selector_popup_add_index_callback(GtkWidget *menu_item, AgsMachineSelector *machine_selector) { AgsMachineRadioButton *machine_radio_button, *group; GList *list, *list_start; list_start = list = gtk_container_get_children(GTK_CONTAINER(machine_selector)); list = list->next; if(list == NULL){ group = NULL; }else{ group = AGS_MACHINE_RADIO_BUTTON(list->data); } g_list_free(list_start); machine_radio_button = (AgsMachineRadioButton *) g_object_new(AGS_TYPE_MACHINE_RADIO_BUTTON, "group\0", group, NULL); gtk_box_pack_start(GTK_BOX(machine_selector), GTK_WIDGET(machine_radio_button), FALSE, FALSE, 0); g_signal_connect_after(G_OBJECT(machine_radio_button), "clicked\0", G_CALLBACK(ags_machine_selector_radio_changed), machine_selector); gtk_widget_show_all((GtkWidget *) machine_radio_button); } void ags_machine_selector_popup_remove_index_callback(GtkWidget *menu_item, AgsMachineSelector *machine_selector) { AgsEditor *editor; AgsMachineRadioButton *machine_radio_button; GList *list, *list_start; editor = gtk_widget_get_ancestor(machine_selector, AGS_TYPE_EDITOR); /* emit changed */ machine_radio_button = NULL; list_start = list = gtk_container_get_children(GTK_CONTAINER(machine_selector)); list = list->next; while(list != NULL){ if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(list->data))){ machine_radio_button = AGS_MACHINE_RADIO_BUTTON(list->data); ags_machine_selector_changed(machine_selector, NULL); break; } list = list->next; } g_list_free(list_start); /* destroy edit widgets */ if(machine_radio_button != NULL){ if(machine_radio_button->machine != NULL){ list = editor->editor_child; while(list != NULL){ if(AGS_EDITOR_CHILD(list->data) == machine_radio_button->machine){ gtk_widget_destroy(AGS_EDITOR_CHILD(list->data)->notebook); gtk_widget_destroy(AGS_EDITOR_CHILD(list->data)->meter); gtk_widget_destroy(AGS_EDITOR_CHILD(list->data)->edit_widget); break; } list = list->next; } } /**/ gtk_widget_destroy(GTK_WIDGET(machine_radio_button)); } } void ags_machine_selector_popup_link_index_callback(GtkWidget *menu_item, AgsMachineSelector *machine_selector) { AgsWindow *window; AgsMachine *machine; AgsMachineSelection *machine_selection; AgsMachineRadioButton *machine_radio_button; GList *list; list = gtk_window_list_toplevels(); while(list != NULL && !AGS_IS_WINDOW(list->data)) list = list->next; window = list->data; machine_selection = (AgsMachineSelection *) ags_machine_selection_new(window); ags_machine_selection_load_defaults(machine_selection); g_signal_connect(G_OBJECT(machine_selection), "response\0", G_CALLBACK(ags_machine_selector_selection_response), machine_selector); gtk_widget_show_all(machine_selection); } void ags_machine_selector_selection_response(GtkWidget *machine_selection, gint response, AgsMachineSelector *machine_selector) { AgsMachine *machine; AgsMachineRadioButton *machine_radio_button, *existing_radio_button; GtkVBox *vbox; GtkContainer *content_area; GList *list, *list_start, *index, *index_start;; if(response == GTK_RESPONSE_ACCEPT){ /* retrieve machine */ machine = NULL; vbox = GTK_DIALOG(machine_selection)->vbox; if(response == GTK_RESPONSE_ACCEPT){ list_start = list = gtk_container_get_children(GTK_CONTAINER(AGS_MACHINE_SELECTION(machine_selection)->window->machines)); index_start = index = gtk_container_get_children(vbox); while(list != NULL){ if(AGS_IS_FFPLAYER(list->data) || AGS_IS_DRUM(list->data) || AGS_IS_MATRIX(list->data)){ if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(index->data))){ machine = AGS_MACHINE(list->data); break; } index = index->next; } list = list->next; } g_list_free(list_start); g_list_free(index_start); } /* retrieve selected */ machine_radio_button = NULL; existing_radio_button = NULL; list_start = list = gtk_container_get_children(GTK_CONTAINER(machine_selector)); list = list->next; while(list != NULL){ if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(list->data))){ machine_radio_button = AGS_MACHINE_RADIO_BUTTON(list->data); } if(AGS_MACHINE_RADIO_BUTTON(list->data)->machine == machine){ existing_radio_button = AGS_MACHINE_RADIO_BUTTON(list->data); } list = list->next; } g_list_free(list_start); /* decide if link to editor or change index */ if(existing_radio_button != NULL){ gtk_button_clicked(existing_radio_button); }else{ g_object_set(G_OBJECT(machine_radio_button), "machine\0", machine, NULL); } } gtk_widget_destroy(machine_selection); } void ags_machine_selector_radio_changed(GtkWidget *radio_button, AgsMachineSelector *machine_selector) { ags_machine_selector_changed(machine_selector, AGS_MACHINE_RADIO_BUTTON(radio_button)->machine); } void ags_machine_selector_popup_reverse_mapping_callback(GtkWidget *menu_item, AgsMachineSelector *machine_selector) { AgsEditor *editor; editor = gtk_widget_get_ancestor(machine_selector, AGS_TYPE_EDITOR); if(editor->selected_machine != NULL){ if(gtk_check_menu_item_get_active(menu_item)){ editor->selected_machine->audio->flags |= AGS_AUDIO_REVERSE_MAPPING; }else{ editor->selected_machine->audio->flags &= (~AGS_AUDIO_REVERSE_MAPPING); } } } void ags_machine_selector_popup_shift_piano_callback(GtkWidget *menu_item, AgsMachineSelector *machine_selector) { AgsEditor *editor; editor = gtk_widget_get_ancestor(machine_selector, AGS_TYPE_EDITOR); if(editor->selected_machine != NULL){ GList *notation; notation = editor->selected_machine->audio->notation; while(notation != NULL){ g_free(AGS_NOTATION(notation->data)->base_note); AGS_NOTATION(notation->data)->base_note = g_strdup(gtk_menu_item_get_label(menu_item)); notation = notation->next; } ags_meter_paint(editor->current_meter); } } gsequencer-0.6.37/src/ags/X/editor/ags_note_edit_callbacks.h0000644000175000017500000000442612621463700020712 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_NOTE_EDIT_CALLBACKS_H__ #define __AGS_NOTE_EDIT_CALLBACKS_H__ #include #include #include #include void ags_note_edit_set_audio_channels_callback(AgsAudio *audio, guint audio_channels, guint audio_channels_old, AgsNoteEdit *note_edit); void ags_note_edit_set_pads_callback(AgsAudio *audio, GType channel_type, guint pads, guint pads_old, AgsNoteEdit *note_edit); gboolean ags_note_edit_drawing_area_expose_event(GtkWidget *widget, GdkEventExpose *event, AgsNoteEdit *note_edit); gboolean ags_note_edit_drawing_area_configure_event(GtkWidget *widget, GdkEventConfigure *event, AgsNoteEdit *note_edit); gboolean ags_note_edit_drawing_area_button_press_event(GtkWidget *widget, GdkEventButton *event, AgsNoteEdit *note_edit); gboolean ags_note_edit_drawing_area_button_release_event(GtkWidget *widget, GdkEventButton *event, AgsNoteEdit *note_edit); gboolean ags_note_edit_drawing_area_motion_notify_event(GtkWidget *widget, GdkEventMotion *event, AgsNoteEdit *note_edit); gboolean ags_note_edit_drawing_area_key_press_event(GtkWidget *widget, GdkEventKey *event, AgsNoteEdit *note_edit); gboolean ags_note_edit_drawing_area_key_release_event(GtkWidget *widget, GdkEventKey *event, AgsNoteEdit *note_edit); void ags_note_edit_vscrollbar_value_changed(GtkRange *range, AgsNoteEdit *note_edit); void ags_note_edit_hscrollbar_value_changed(GtkRange *range, AgsNoteEdit *note_edit); #endif /*__AGS_NOTE_EDIT_CALLBACKS_H__*/ gsequencer-0.6.37/src/ags/X/editor/ags_toolbar_callbacks.h0000644000175000017500000000346612621463700020405 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_TOOLBAR_CALLBACKS_H__ #define __AGS_TOOLBAR_CALLBACKS_H__ #include #include #include gboolean ags_toolbar_destroy_callback(GtkObject *object, AgsToolbar *toolbar); void ags_toolbar_show_callback(GtkWidget *widget, AgsToolbar *toolbar); void ags_toolbar_position_callback(GtkToggleButton *toggle_button, AgsToolbar *toolbar); void ags_toolbar_edit_callback(GtkToggleButton *toggle_button, AgsToolbar *toolbar); void ags_toolbar_clear_callback(GtkToggleButton *toggle_button, AgsToolbar *toolbar); void ags_toolbar_select_callback(GtkToggleButton *toggle_button, AgsToolbar *toolbar); void ags_toolbar_copy_or_cut_callback(GtkWidget *widget, AgsToolbar *toolbar); void ags_toolbar_paste_callback(GtkWidget *widget, AgsToolbar *toolbar); void ags_toolbar_invert_callback(GtkWidget *widget, AgsToolbar *toolbar); void ags_toolbar_zoom_callback(GtkComboBox *combo_box, AgsToolbar *toolbar); void ags_toolbar_mode_callback(GtkWidget *widget, AgsToolbar *toolbar); #endif /*__AGS_TOOLBAR_CALLBACKS_H__*/ gsequencer-0.6.37/src/ags/X/editor/ags_toolbar_mode_stock.h0000644000175000017500000000204112621463700020601 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_TOOLBAR_MODE_STOCK_H__ #define __AGS_TOOLBAR_MODE_STOCK_H__ #define AGS_TOOLBAR_MODE_SINGLE_CHANNEL "single channel\0" #define AGS_TOOLBAR_MODE_MULTI_CHANNEL "multi channel\0" #define AGS_TOOLBAR_MODE_ALL_CHANNELS "all channels\0" #endif /*__AGS_TOOLBAR_MODE_STOCK_H__*/ gsequencer-0.6.37/src/ags/X/editor/ags_meter_callbacks.c0000644000175000017500000000513512612232537020047 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include gboolean ags_meter_destroy_callback(GtkObject *object, AgsMeter *meter) { ags_meter_destroy(object); return(FALSE); } void ags_meter_show_callback(GtkWidget *widget, AgsMeter *meter) { ags_meter_show(widget); } gboolean ags_meter_expose_event(GtkWidget *widget, GdkEventExpose *event, AgsMeter *meter) { /* AgsEditor *editor; AgsMachine *machine; guint rows, nth_y, y0; editor = (AgsEditor *) gtk_widget_get_ancestor(widget, AGS_TYPE_EDITOR); nth_y = ceil(GTK_RANGE(editor->vscrollbar)->adjustment->value / (double)editor->control_height); y0 = editor->control_height - (guint)(GTK_RANGE(editor->vscrollbar)->adjustment->value) % editor->control_height; if(editor->selected != NULL){ machine = (AgsMachine *) g_object_get_data((GObject *) editor->selected, g_type_name(AGS_TYPE_MACHINE)); rows = (machine != NULL) ? machine->audio->input_pads: 0; }else rows = 0; ags_meter_paint(meter, rows, nth_y, y0); */ ags_meter_paint(meter); return(TRUE); } gboolean ags_meter_configure_event(GtkWidget *widget, GdkEventConfigure *event, AgsMeter *meter) { /* AgsEditor *editor; AgsMachine *machine; guint rows, nth_y, y0; editor = (AgsEditor *) gtk_widget_get_ancestor(widget, AGS_TYPE_EDITOR); nth_y = ceil(GTK_RANGE(editor->vscrollbar)->adjustment->value / (double)editor->control_height); y0 = editor->control_height - (guint)(GTK_RANGE(editor->vscrollbar)->adjustment->value) % editor->control_height; if(editor->selected != NULL){ machine = (AgsMachine *) g_object_get_data((GObject *) editor->selected, g_type_name(AGS_TYPE_MACHINE)); rows = (machine != NULL) ? machine->audio->input_pads: 0; }else rows = 0; ags_meter_paint(meter, rows, nth_y, y0); */ ags_meter_paint(meter); return(FALSE); } gsequencer-0.6.37/src/ags/X/editor/ags_inline_player.h0000644000175000017500000000376212626272146017604 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_INLINE_PLAYER_H__ #define __AGS_INLINE_PLAYER_H__ #include #include #include #include #define AGS_TYPE_INLINE_PLAYER (ags_inline_player_get_type ()) #define AGS_INLINE_PLAYER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_INLINE_PLAYER, AgsInlinePlayer)) #define AGS_INLINE_PLAYER_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_INLINE_PLAYER, AgsInlinePlayerClass)) #define AGS_IS_INLINE_PLAYER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_INLINE_PLAYER)) #define AGS_IS_INLINE_PLAYER_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_INLINE_PLAYER)) #define AGS_INLINE_PLAYER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_INLINE_PLAYER, AgsInlinePlayerClass)) typedef struct _AgsInlinePlayer AgsInlinePlayer; typedef struct _AgsInlinePlayerClass AgsInlinePlayerClass; struct _AgsInlinePlayer { GtkHBox vbox; AgsPlayable *playable; GtkToggleButton *play; GtkHScale *position; GtkVolumeButton *volume; }; struct _AgsInlinePlayerClass { GtkHBoxClass vbox; }; GType ags_inline_player_get_type(); AgsInlinePlayer* ags_inline_player_new(); #endif /*__AGS_INLINE_PLAYER_H__*/ gsequencer-0.6.37/src/ags/X/editor/ags_note_edit.h0000644000175000017500000001046312621463700016711 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_NOTE_EDIT_H__ #define __AGS_NOTE_EDIT_H__ #include #include #include #include #include #include #define AGS_TYPE_NOTE_EDIT (ags_note_edit_get_type()) #define AGS_NOTE_EDIT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_NOTE_EDIT, AgsNoteEdit)) #define AGS_NOTE_EDIT_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_NOTE_EDIT, AgsNoteEditClass)) #define AGS_IS_NOTE_EDIT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_NOTE_EDIT)) #define AGS_IS_NOTE_EDIT_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_NOTE_EDIT)) #define AGS_NOTE_EDIT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS (obj, AGS_TYPE_NOTE_EDIT, AgsNoteEditClass)) #define AGS_NOTE_EDIT_MAX_CONTROLS 1200 typedef struct _AgsNoteEdit AgsNoteEdit; typedef struct _AgsNoteEditClass AgsNoteEditClass; typedef enum{ AGS_NOTE_EDIT_RESETING_VERTICALLY = 1, AGS_NOTE_EDIT_RESETING_HORIZONTALLY = 1 << 1, AGS_NOTE_EDIT_POSITION_CURSOR = 1 << 2, AGS_NOTE_EDIT_ADDING_NOTE = 1 << 3, AGS_NOTE_EDIT_DELETING_NOTE = 1 << 4, AGS_NOTE_EDIT_SELECTING_NOTES = 1 << 5, AGS_NOTE_EDIT_DRAW_FADER = 1 << 6, }AgsNoteEditFlags; typedef enum{ AGS_NOTE_EDIT_RESET_VSCROLLBAR = 1, AGS_NOTE_EDIT_RESET_HSCROLLBAR = 1 << 1, AGS_NOTE_EDIT_RESET_WIDTH = 1 << 2, AGS_NOTE_EDIT_RESET_HEIGHT = 1 << 3, // reserved }AgsNoteEditResetFlags; typedef enum{ AGS_NOTE_EDIT_KEY_L_CONTROL = 1, AGS_NOTE_EDIT_KEY_R_CONTROL = 1 << 1, AGS_NOTE_EDIT_KEY_L_SHIFT = 1 << 2, AGS_NOTE_EDIT_KEY_R_SHIFT = 1 << 3, }AgsNoteEditKeyMask; struct _AgsNoteEdit { GtkTable table; guint flags; guint key_mask; AgsRuler *ruler; GtkDrawingArea *drawing_area; struct _AgsNoteEditControl{ // values retrieved by mouse pressed and released callback AgsNote *note; guint x0_offset; guint y0_offset; guint x0; guint y0; guint x1_offset; guint y1_offset; guint x1; guint y1; }control; guint width; guint height; guint map_width; guint map_height; guint control_height; guint control_margin_y; guint control_width; guint y0; guint y1; guint nth_y; guint stop_y; struct _AgsNoteEditControlCurrent{ // values for drawing refering to current tic and zoom guint control_count; guint control_width; guint x0; guint x1; guint nth_x; }control_current; struct _AgsNoteEditControlUnit{ // values for drawing refering to smallest tic and current zoom guint control_count; guint control_width; guint x0; guint x1; guint nth_x; guint stop_x; }control_unit; guint selected_x; guint selected_y; GtkVScrollbar *vscrollbar; GtkHScrollbar *hscrollbar; }; struct _AgsNoteEditClass { GtkTableClass table; }; GType ags_note_edit_get_type(void); void ags_note_edit_set_map_height(AgsNoteEdit *note_edit, guint map_height); void ags_note_edit_reset_vertically(AgsNoteEdit *note_edit, guint flags); void ags_note_edit_reset_horizontally(AgsNoteEdit *note_edit, guint flags); void ags_note_edit_draw_segment(AgsNoteEdit *note_edit, cairo_t *cr); void ags_note_edit_draw_position(AgsNoteEdit *note_edit, cairo_t *cr); void ags_note_edit_draw_notation(AgsNoteEdit *note_edit, cairo_t *cr); void ags_note_edit_draw_scroll(AgsNoteEdit *note_edit, cairo_t *cr, gdouble position); AgsNoteEdit* ags_note_edit_new(); #endif /*__AGS_NOTE_EDIT_H__*/ gsequencer-0.6.37/src/ags/X/ags_machine.h0000644000175000017500000001057012626272146015063 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_MACHINE_H__ #define __AGS_MACHINE_H__ #include #include #include #include #define AGS_TYPE_MACHINE (ags_machine_get_type()) #define AGS_MACHINE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_MACHINE, AgsMachine)) #define AGS_MACHINE_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_MACHINE, AgsMachineClass)) #define AGS_IS_MACHINE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_MACHINE)) #define AGS_IS_MACHINE_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_MACHINE)) #define AGS_MACHINE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_MACHINE, AgsMachineClass)) #define AGS_MACHINE_DEFAULT_VERSION "0.4.2\0" #define AGS_MACHINE_DEFAULT_BUILD_ID "CEST 02-10-2014 19:36\0" typedef struct _AgsMachine AgsMachine; typedef struct _AgsMachineClass AgsMachineClass; typedef enum{ AGS_MACHINE_SOLO = 1, AGS_MACHINE_IS_EFFECT = 1 << 1, AGS_MACHINE_IS_SEQUENCER = 1 << 2, AGS_MACHINE_IS_SYNTHESIZER = 1 << 3, AGS_MACHINE_TAKES_FILE_INPUT = 1 << 4, AGS_MACHINE_MAPPED_RECALL = 1 << 5, AGS_MACHINE_PREMAPPED_RECALL = 1 << 6, AGS_MACHINE_BLOCK_PLAY = 1 << 7, AGS_MACHINE_BLOCK_STOP = 1 << 8, AGS_MACHINE_CONNECTED = 1 << 9, AGS_MACHINE_REVERSE_NOTATION = 1 << 10, }AgsMachineFlags; typedef enum{ AGS_MACHINE_ACCEPT_WAV = 1, AGS_MACHINE_ACCEPT_OGG = 1 << 1, AGS_MACHINE_ACCEPT_SOUNDFONT2 = 1 << 2, }AgsMachineFileInputFlags; typedef enum{ AGS_MACHINE_MONO = 1, }AgsMachineMappingFlags; typedef enum{ AGS_MACHINE_POPUP_COPY_PATTERN = 1, AGS_MACHINE_POPUP_PASTE_PATTERN = 1 << 1, }AgsMachineEditOptions; struct _AgsMachine { GtkHandleBox handle_box; GObject *ags_main; char *name; gchar *version; gchar *build_id; guint flags; guint file_input_flags; guint mapping_flags; guint bank_0; guint bank_1; AgsAudio *audio; GtkToggleButton *play; GType output_pad_type; GType output_line_type; GtkContainer *output; GtkWidget *selected_output_pad; GType input_pad_type; GType input_line_type; GtkContainer *input; GtkWidget *selected_input_pad; GList *port; GtkMenu *popup; GtkDialog *properties; GtkDialog *rename; }; struct _AgsMachineClass { GtkHandleBoxClass handle_box; void (*map_recall)(AgsMachine *machine); GList* (*find_port)(AgsMachine *machine); }; GType ags_machine_get_type(void); void ags_machine_set_audio_channels(AgsAudio *audio, guint audio_channels, guint audio_channels_old, AgsMachine *machine); void ags_machine_set_pads(AgsAudio *audio, GType type, guint pads, guint pads_old, AgsMachine *machine); void ags_machine_add_default_recalls(AgsMachine *machine) G_DEPRECATED_FOR(ags_machine_map_recall); void ags_machine_map_recall(AgsMachine *machine); GtkListStore* ags_machine_get_possible_links(AgsMachine *machine); AgsMachine* ags_machine_find_by_name(GList *list, char *name); GList* ags_machine_find_port(AgsMachine *machine); void ags_machine_set_run(AgsMachine *machine, gboolean run); void ags_machine_set_run_extended(AgsMachine *machine, gboolean run, gboolean sequencer, gboolean notation); GtkFileChooserDialog* ags_machine_file_chooser_dialog_new(AgsMachine *machine); void ags_machine_open_files(AgsMachine *machine, GSList *filenames, gboolean overwrite_channels, gboolean create_channels); void ags_machine_copy_pattern(AgsMachine *machine); AgsMachine* ags_machine_new(GObject *devout); #endif /*__AGS_MACHINE_H__*/ gsequencer-0.6.37/src/ags/X/ags_line_member.h0000644000175000017500000000575112626272146015742 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_LINE_MEMBER_H__ #define __AGS_LINE_MEMBER_H__ #include #include #include #include #include #include #define AGS_TYPE_LINE_MEMBER (ags_line_member_get_type()) #define AGS_LINE_MEMBER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_LINE_MEMBER, AgsLineMember)) #define AGS_LINE_MEMBER_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_LINE_MEMBER, AgsLineMemberClass)) #define AGS_IS_LINE_MEMBER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_LINE_MEMBER)) #define AGS_IS_LINE_MEMBER_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_LINE_MEMBER)) #define AGS_LINE_MEMBER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_LINE_MEMBER, AgsLineMemberClass)) typedef struct _AgsLineMember AgsLineMember; typedef struct _AgsLineMemberClass AgsLineMemberClass; typedef enum{ AGS_LINE_MEMBER_DEFAULT_TEMPLATE = 1, AGS_LINE_MEMBER_RESET_BY_ATOMIC = 1 << 1, AGS_LINE_MEMBER_RESET_BY_TASK = 1 << 2, AGS_LINE_MEMBER_APPLY_RECALL = 1 << 3, AGS_LINE_MEMBER_PLAY_CALLBACK_WRITE = 1 << 4, AGS_LINE_MEMBER_RECALL_CALLBACK_WRITE = 1 << 5, AGS_LINE_MEMBER_CALLBACK_READ_BLOCK = 1 << 6, AGS_LINE_MEMBER_CALLBACK_WRITE_BLOCK = 1 << 7, }AgsLineMemberFlags; struct _AgsLineMember { GtkFrame frame; guint flags; GType widget_type; gchar *widget_label; gchar *plugin_name; gchar *specifier; gchar *control_port; AgsPort *port; gpointer port_data; gboolean active; AgsPort *recall_port; gpointer recall_port_data; gboolean recall_active; GType task_type; }; struct _AgsLineMemberClass { GtkFrameClass frame; void (*change_port)(AgsLineMember *line_member, gpointer port_data); }; GType ags_line_member_get_type(void); GtkWidget* ags_line_member_get_widget(AgsLineMember *line_member); void ags_line_member_set_label(AgsLineMember *line_member, gchar *label); void ags_line_member_change_port(AgsLineMember *line_member, gpointer port_data); void ags_line_member_find_port(AgsLineMember *line_member); AgsLineMember* ags_line_member_new(); #endif /*__AGS_LINE_MEMBER_H__*/ gsequencer-0.6.37/src/ags/X/ags_export_window.c0000644000175000017500000003112612626272146016362 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include void ags_export_window_class_init(AgsExportWindowClass *export_window); void ags_export_window_connectable_interface_init(AgsConnectableInterface *connectable); void ags_export_window_init(AgsExportWindow *export_window); void ags_export_window_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_export_window_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_export_window_finalize(GObject *gobject); void ags_export_window_connect(AgsConnectable *connectable); void ags_export_window_disconnect(AgsConnectable *connectable); void ags_export_window_show(GtkWidget *widget); gboolean ags_export_window_delete_event(GtkWidget *widget, GdkEventAny *event); /** * SECTION:ags_export_window * @short_description: The export dialog * @title: AgsExportWindow * @section_id: * @include: ags/X/ags_export_window.h * * #AgsExportWindow lets you export to audio files. Currently only * WAV supported. */ enum{ PROP_0, PROP_DEVOUT, PROP_MAIN, }; static gpointer ags_export_window_parent_class = NULL; GType ags_export_window_get_type() { static GType ags_type_export_window = 0; if(!ags_type_export_window){ static const GTypeInfo ags_export_window_info = { sizeof (AgsExportWindowClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_export_window_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsExportWindow), 0, /* n_preallocs */ (GInstanceInitFunc) ags_export_window_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_export_window_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_export_window = g_type_register_static(GTK_TYPE_WINDOW, "AgsExportWindow\0", &ags_export_window_info, 0); g_type_add_interface_static(ags_type_export_window, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return(ags_type_export_window); } void ags_export_window_class_init(AgsExportWindowClass *export_window) { GObjectClass *gobject; GtkWidgetClass *widget; GParamSpec *param_spec; ags_export_window_parent_class = g_type_class_peek_parent(export_window); /* GObjectClass */ gobject = (GObjectClass *) export_window; gobject->set_property = ags_export_window_set_property; gobject->get_property = ags_export_window_get_property; gobject->finalize = ags_export_window_finalize; /* properties */ /** * AgsExportWindow:devout: * * The assigned #AgsDevout acting as default sink. * * Since: 0.4 */ param_spec = g_param_spec_object("devout\0", "assigned devout\0", "The devout it is assigned with\0", G_TYPE_OBJECT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_DEVOUT, param_spec); /** * AgsExportWindow:ags-main: * * The assigned #AgsMain to give control of application. * * Since: 0.4 */ param_spec = g_param_spec_object("ags-main\0", "assigned ags main\0", "The AgsMain it is assigned with\0", G_TYPE_OBJECT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_MAIN, param_spec); /* GtkWidgetClass */ widget = (GtkWidgetClass *) export_window; widget->show = ags_export_window_show; widget->delete_event = ags_export_window_delete_event; } void ags_export_window_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->is_ready = NULL; connectable->is_connected = NULL; connectable->connect = ags_export_window_connect; connectable->disconnect = ags_export_window_disconnect; } void ags_export_window_init(AgsExportWindow *export_window) { GtkVBox *vbox; GtkHBox *hbox; GtkTable *table; GtkLabel *label; export_window->flags = 0; g_object_set(export_window, "title\0", "export to audio data\0", NULL); vbox = (GtkVBox *) gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(export_window), GTK_WIDGET(vbox)); export_window->live_export = (GtkCheckButton *) gtk_check_button_new_with_label("live export\0"); gtk_toggle_button_set_active((GtkToggleButton *) export_window->live_export, TRUE); gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(export_window->live_export), FALSE, FALSE, 0); export_window->exclude_sequencer = (GtkCheckButton *) gtk_check_button_new_with_label("exclude sequencers\0"); gtk_toggle_button_set_active((GtkToggleButton *) export_window->exclude_sequencer, TRUE); gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(export_window->exclude_sequencer), FALSE, FALSE, 0); table = (GtkTable *) gtk_table_new(5, 2, FALSE); gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(table), FALSE, FALSE, 0); /* */ label = (GtkLabel *) gtk_label_new("file\0"); g_object_set(G_OBJECT(label), "xalign\0", 0.0, NULL); gtk_table_attach(table, GTK_WIDGET(label), 0, 1, 0, 1, GTK_FILL|GTK_EXPAND, GTK_FILL|GTK_EXPAND, 0, 0); hbox = (GtkHBox *) gtk_hbox_new(FALSE, 0); gtk_table_attach(table, GTK_WIDGET(hbox), 1, 2, 0, 1, GTK_FILL, GTK_FILL, 0, 0); export_window->filename = (GtkEntry *) gtk_entry_new(); gtk_entry_set_text(export_window->filename, "out.wav\0"); gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(export_window->filename), TRUE, TRUE, 0); export_window->file_chooser_button = (GtkButton *) gtk_button_new_with_label("open\0"); gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(export_window->file_chooser_button), TRUE, TRUE, 0); /* */ label = (GtkLabel *) gtk_label_new("mode\0"); g_object_set(G_OBJECT(label), "xalign\0", 0.0, NULL); gtk_table_attach(table, GTK_WIDGET(label), 0, 1, 1, 2, GTK_FILL|GTK_EXPAND, GTK_FILL|GTK_EXPAND, 0, 0); export_window->mode = (GtkComboBoxText *) gtk_combo_box_text_new(); gtk_combo_box_text_append_text(export_window->mode, "tact\0"); //TODO:JK: uncomment me // gtk_combo_box_text_append_text(export_window->mode, // "time\0"); gtk_combo_box_set_active((GtkComboBox *) export_window->mode, 0); gtk_table_attach(table, GTK_WIDGET(export_window->mode), 1, 2, 1, 2, GTK_FILL, GTK_FILL, 0, 0); /* */ label = (GtkLabel *) gtk_label_new("tact"); g_object_set(G_OBJECT(label), "xalign\0", 0.0, NULL); gtk_table_attach(table, GTK_WIDGET(label), 0, 1, 2, 3, GTK_FILL|GTK_EXPAND, GTK_FILL|GTK_EXPAND, 0, 0); export_window->tact = (GtkSpinButton *) gtk_spin_button_new_with_range(0.0, AGS_NOTATION_DEFAULT_LENGTH, 0.25); gtk_spin_button_set_digits(export_window->tact, 2); gtk_table_attach(table, GTK_WIDGET(export_window->tact), 1, 2, 2, 3, GTK_FILL, GTK_FILL, 0, 0); label = (GtkLabel *) gtk_label_new("time"); g_object_set(G_OBJECT(label), "xalign\0", 0.0, NULL); gtk_table_attach(table, GTK_WIDGET(label), 0, 1, 3, 4, GTK_FILL|GTK_EXPAND, GTK_FILL|GTK_EXPAND, 0, 0); hbox = (GtkHBox *) gtk_hbox_new(FALSE, 0); gtk_table_attach(table, GTK_WIDGET(hbox), 1, 2, 3, 4, GTK_FILL|GTK_EXPAND, GTK_FILL|GTK_EXPAND, 0, 0); export_window->duration = (GtkLabel *) gtk_label_new(ags_navigation_tact_to_time_string(0.0, AGS_DEVOUT_DEFAULT_BPM, 1.0)); gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(export_window->duration), FALSE, FALSE, 0); /* */ label = (GtkLabel *) gtk_label_new("output format\0"); g_object_set(G_OBJECT(label), "xalign\0", 0.0, NULL); gtk_table_attach(table, GTK_WIDGET(label), 0, 1, 4, 5, GTK_FILL|GTK_EXPAND, GTK_FILL|GTK_EXPAND, 0, 0); export_window->output_format = (GtkComboBoxText *) gtk_combo_box_text_new(); gtk_combo_box_text_append_text(export_window->output_format, "WAV\0"); gtk_combo_box_set_active((GtkComboBox *) export_window->output_format, 0); gtk_table_attach(table, GTK_WIDGET(export_window->output_format), 1, 2, 4, 5, GTK_FILL, GTK_FILL, 0, 0); hbox = (GtkHBox *) gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(hbox), FALSE, FALSE, 0); export_window->export = (GtkToggleButton *) gtk_toggle_button_new_with_label("export\0"); gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(export_window->export), FALSE, FALSE, 0); } void ags_export_window_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsExportWindow *export_window; export_window = AGS_EXPORT_WINDOW(gobject); switch(prop_id){ case PROP_DEVOUT: { AgsDevout *devout; devout = g_value_get_object(value); if(export_window->devout == devout) return; if(devout != NULL) g_object_ref(devout); export_window->devout = devout; } break; case PROP_MAIN: { AgsMain *ags_main; ags_main = (AgsMain *) g_value_get_object(value); if((AgsMain *) export_window->ags_main == ags_main) return; if(export_window->ags_main != NULL){ g_object_unref(export_window->ags_main); } if(ags_main != NULL){ g_object_ref(ags_main); } export_window->ags_main = (GObject *) ags_main; } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_export_window_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsExportWindow *export_window; export_window = AGS_EXPORT_WINDOW(gobject); switch(prop_id){ case PROP_DEVOUT: g_value_set_object(value, export_window->devout); break; case PROP_MAIN: g_value_set_object(value, export_window->ags_main); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_export_window_connect(AgsConnectable *connectable) { AgsExportWindow *export_window; export_window = AGS_EXPORT_WINDOW(connectable); g_signal_connect_after(G_OBJECT(export_window->file_chooser_button), "clicked\0", G_CALLBACK(ags_export_window_file_chooser_button_callback), export_window); g_signal_connect_after(G_OBJECT(export_window->tact), "value-changed\0", G_CALLBACK(ags_export_window_tact_callback), export_window); g_signal_connect_after(G_OBJECT(export_window->export), "clicked\0", G_CALLBACK(ags_export_window_export_callback), export_window); } void ags_export_window_disconnect(AgsConnectable *connectable) { //TODO:JK: /* implement me */ } void ags_export_window_finalize(GObject *gobject) { AgsExportWindow *export_window; export_window = (AgsExportWindow *) gobject; G_OBJECT_CLASS(ags_export_window_parent_class)->finalize(gobject); } void ags_export_window_show(GtkWidget *widget) { AgsExportWindow *export_window; GTK_WIDGET_CLASS(ags_export_window_parent_class)->show(widget); export_window = (AgsExportWindow *) widget; } gboolean ags_export_window_delete_event(GtkWidget *widget, GdkEventAny *event) { gtk_widget_hide(widget); // GTK_WIDGET_CLASS(ags_export_window_parent_class)->delete_event(widget, event); return(TRUE); } AgsExportWindow* ags_export_window_new() { AgsExportWindow *export_window; export_window = (AgsExportWindow *) g_object_new(AGS_TYPE_EXPORT_WINDOW, NULL); return(export_window); } gsequencer-0.6.37/src/ags/X/ags_listing_editor_callbacks.h0000644000175000017500000000253312621463700020466 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_LISTING_EDITOR_CALLBACKS_H__ #define __AGS_LISTING_EDITOR_CALLBACKS_H__ #include #include #include #include #include #include int ags_listing_editor_parent_set_callback(GtkWidget *widget, GtkObject *old_parent, AgsListingEditor *listing_editor); void ags_listing_editor_set_pads_callback(AgsAudio *audio, GType channel_type, guint pads, guint pads_old, AgsListingEditor *listing_editor); #endif /*__AGS_LISTING_EDITOR_CALLBACKS_H__*/ gsequencer-0.6.37/src/ags/X/ags_server_preferences.c0000644000175000017500000002105612626272146017342 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include void ags_server_preferences_class_init(AgsServerPreferencesClass *server_preferences); void ags_server_preferences_connectable_interface_init(AgsConnectableInterface *connectable); void ags_server_preferences_applicable_interface_init(AgsApplicableInterface *applicable); void ags_server_preferences_init(AgsServerPreferences *server_preferences); void ags_server_preferences_connect(AgsConnectable *connectable); void ags_server_preferences_disconnect(AgsConnectable *connectable); void ags_server_preferences_set_update(AgsApplicable *applicable, gboolean update); void ags_server_preferences_apply(AgsApplicable *applicable); void ags_server_preferences_reset(AgsApplicable *applicable); static void ags_server_preferences_finalize(GObject *gobject); void ags_server_preferences_show(GtkWidget *widget); /** * SECTION:ags_server_preferences * @short_description: A composite widget to do server related preferences * @title: AgsServerPreferences * @section_id: * @include: ags/X/ags_server_preferences.h * * #AgsServerPreferences enables you to make server related preferences. */ static gpointer ags_server_preferences_parent_class = NULL; GType ags_server_preferences_get_type(void) { static GType ags_type_server_preferences = 0; if(!ags_type_server_preferences){ static const GTypeInfo ags_server_preferences_info = { sizeof (AgsServerPreferencesClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_server_preferences_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsServerPreferences), 0, /* n_preallocs */ (GInstanceInitFunc) ags_server_preferences_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_server_preferences_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_applicable_interface_info = { (GInterfaceInitFunc) ags_server_preferences_applicable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_server_preferences = g_type_register_static(GTK_TYPE_VBOX, "AgsServerPreferences\0", &ags_server_preferences_info, 0); g_type_add_interface_static(ags_type_server_preferences, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_server_preferences, AGS_TYPE_APPLICABLE, &ags_applicable_interface_info); } return(ags_type_server_preferences); } void ags_server_preferences_class_init(AgsServerPreferencesClass *server_preferences) { GObjectClass *gobject; GtkWidgetClass *widget; ags_server_preferences_parent_class = g_type_class_peek_parent(server_preferences); /* GtkObjectClass */ gobject = (GObjectClass *) server_preferences; gobject->finalize = ags_server_preferences_finalize; /* GtkWidgetClass */ widget = (GtkWidgetClass *) server_preferences; widget->show = ags_server_preferences_show; } void ags_server_preferences_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->is_ready = NULL; connectable->is_connected = NULL; connectable->connect = ags_server_preferences_connect; connectable->disconnect = ags_server_preferences_disconnect; } void ags_server_preferences_applicable_interface_init(AgsApplicableInterface *applicable) { applicable->set_update = ags_server_preferences_set_update; applicable->apply = ags_server_preferences_apply; applicable->reset = ags_server_preferences_reset; } void ags_server_preferences_init(AgsServerPreferences *server_preferences) { GtkTable *table; GtkLabel *label; table = (GtkTable *) gtk_table_new(2, 5, FALSE); gtk_box_pack_start(GTK_BOX(server_preferences), GTK_WIDGET(table), FALSE, FALSE, 2); server_preferences->start = (GtkCheckButton *) gtk_check_button_new_with_label("start server\0"); gtk_table_attach(table, GTK_WIDGET(server_preferences->start), 0, 2, 0, 1, GTK_FILL, GTK_FILL, 0, 0); gtk_widget_set_sensitive((GtkWidget *) server_preferences->start, FALSE); /* address */ label = (GtkLabel *) g_object_new(GTK_TYPE_LABEL, "label\0", "address\0", "xalign\0", 0.0, NULL); gtk_table_attach(table, GTK_WIDGET(label), 0, 1, 1, 2, GTK_FILL, GTK_FILL, 0, 0); server_preferences->address = (GtkEntry *) gtk_entry_new(); gtk_table_attach(table, GTK_WIDGET(server_preferences->address), 1, 2, 1, 2, GTK_FILL, GTK_FILL, 0, 0); gtk_widget_set_sensitive((GtkWidget *) server_preferences->address, FALSE); /* port */ label = (GtkLabel *) g_object_new(GTK_TYPE_LABEL, "label\0", "port\0", "xalign\0", 0.0, NULL); gtk_table_attach(table, GTK_WIDGET(label), 0, 1, 2, 3, GTK_FILL, GTK_FILL, 0, 0); server_preferences->port = (GtkEntry *) gtk_entry_new(); gtk_table_attach(table, GTK_WIDGET(server_preferences->port), 1, 2, 2, 3, GTK_FILL, GTK_FILL, 0, 0); gtk_widget_set_sensitive((GtkWidget *) server_preferences->port, FALSE); /* username */ label = (GtkLabel *) g_object_new(GTK_TYPE_LABEL, "label\0", "username\0", "xalign\0", 0.0, NULL); gtk_table_attach(table, GTK_WIDGET(label), 0, 1, 3, 4, GTK_FILL, GTK_FILL, 0, 0); server_preferences->username = (GtkEntry *) gtk_entry_new(); gtk_table_attach(table, GTK_WIDGET(server_preferences->username), 1, 2, 3, 4, GTK_FILL, GTK_FILL, 0, 0); gtk_widget_set_sensitive((GtkWidget *) server_preferences->username, FALSE); /* password */ label = (GtkLabel *) g_object_new(GTK_TYPE_LABEL, "label\0", "password\0", "xalign\0", 0.0, NULL); gtk_table_attach(table, GTK_WIDGET(label), 0, 1, 4, 5, GTK_FILL, GTK_FILL, 0, 0); server_preferences->password = (GtkEntry *) gtk_entry_new(); gtk_entry_set_visibility(server_preferences->password, FALSE); gtk_table_attach(table, GTK_WIDGET(server_preferences->password), 1, 2, 4, 5, GTK_FILL, GTK_FILL, 0, 0); gtk_widget_set_sensitive((GtkWidget *) server_preferences->password, FALSE); } void ags_server_preferences_connect(AgsConnectable *connectable) { AgsServerPreferences *server_preferences; server_preferences = AGS_SERVER_PREFERENCES(connectable); } void ags_server_preferences_disconnect(AgsConnectable *connectable) { /* empty */ } void ags_server_preferences_set_update(AgsApplicable *applicable, gboolean update) { //TODO:JK: implement me } void ags_server_preferences_apply(AgsApplicable *applicable) { //TODO:JK: implement me } void ags_server_preferences_reset(AgsApplicable *applicable) { //TODO:JK: implement me } static void ags_server_preferences_finalize(GObject *gobject) { } void ags_server_preferences_show(GtkWidget *widget) { AgsServerPreferences *server_preferences; pthread_t thread; server_preferences = AGS_SERVER_PREFERENCES(widget); GTK_WIDGET_CLASS(ags_server_preferences_parent_class)->show(widget); } /** * ags_server_preferences_new: * * Creates an #AgsServerPreferences * * Returns: a new #AgsServerPreferences * * Since: 0.4 */ AgsServerPreferences* ags_server_preferences_new() { AgsServerPreferences *server_preferences; server_preferences = (AgsServerPreferences *) g_object_new(AGS_TYPE_SERVER_PREFERENCES, NULL); return(server_preferences); } gsequencer-0.6.37/src/ags/X/ags_ladspa_browser_callbacks.h0000644000175000017500000000301312626272146020457 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_LADSPA_BROWSER_CALLBACKS_H__ #define __AGS_LADSPA_BROWSER_CALLBACKS_H__ #include #include #include #include void ags_ladspa_browser_plugin_filename_callback(GtkComboBoxText *combo_box, AgsLadspaBrowser *ladspa_browser); void ags_ladspa_browser_plugin_effect_callback(GtkComboBoxText *combo_box, AgsLadspaBrowser *ladspa_browser); void ags_ladspa_browser_preview_close_callback(GtkWidget *preview, AgsLadspaBrowser *ladspa_browser); int ags_ladspa_browser_ok_callback(GtkWidget *widget, AgsLadspaBrowser *ladspa_browser); int ags_ladspa_browser_cancel_callback(GtkWidget *widget, AgsLadspaBrowser *ladspa_browser); #endif /*__AGS_LADSPA_BROWSER_CALLBACKS_H__*/ gsequencer-0.6.37/src/ags/X/machine/0000755000175000017500000000000012633241336014130 500000000000000gsequencer-0.6.37/src/ags/X/machine/ags_pattern_box.h0000644000175000017500000000545212621245070017402 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_PATTERN_BOX_H__ #define __AGS_PATTERN_BOX_H__ #include #include #include #define AGS_TYPE_PATTERN_BOX (ags_pattern_box_get_type()) #define AGS_PATTERN_BOX(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_PATTERN_BOX, AgsPatternBox)) #define AGS_PATTERN_BOX_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_PATTERN_BOX, AgsPatternBoxClass)) #define AGS_IS_PATTERN_BOX(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_PATTERN_BOX)) #define AGS_IS_PATTERN_BOX_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_PATTERN_BOX)) #define AGS_PATTERN_BOX_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_PATTERN_BOX, AgsPatternBoxClass)) #define AGS_PATTERN_BOX_DEFAULT_PAD_WIDTH (24) #define AGS_PATTERN_BOX_DEFAULT_PAD_HEIGHT (24) #define AGS_PATTERN_BOX_LED_DEFAULT_WIDTH (8) #define AGS_PATTERN_BOX_LED_DEFAULT_HEIGHT (4) #define AGS_PATTERN_BOX_N_CONTROLS (16) #define AGS_PATTERN_BOX_N_INDICES (4) typedef struct _AgsPatternBox AgsPatternBox; typedef struct _AgsPatternBoxClass AgsPatternBoxClass; typedef enum{ AGS_PATTERN_BOX_BLOCK_PATTERN = 1, AGS_PATTERN_BOX_CONNECTED = 1 << 1, }AgsPatternBoxFlags; typedef enum{ AGS_PATTERN_BOX_KEY_L_CONTROL = 1, AGS_PATTERN_BOX_KEY_R_CONTROL = 1 << 1, }AgsPatternBoxKeyMask; typedef enum{ AGS_PATTERN_BOX_MOVE_LEFT, AGS_PATTERN_BOX_MOVE_RIGHT, AGS_PATTERN_BOX_INDEX_DECREMENT, AGS_PATTERN_BOX_INDEX_INCREMENT, AGS_PATTERN_BOX_TOGGLE_PAD, AGS_PATTERN_BOX_COPY_PATTERN, }AgsPatternBoxAction; struct _AgsPatternBox { GtkTable table; guint flags; guint key_mask; guint n_controls; guint n_indices; guint cursor_x; guint cursor_y; guint active_led; GtkHBox *led; GtkHBox *pattern; GtkVBox *offset; }; struct _AgsPatternBoxClass { GtkTableClass table; }; GType ags_pattern_box_get_type(void); void ags_pattern_box_set_pattern(AgsPatternBox *pattern_box); AgsPatternBox* ags_pattern_box_new(); #endif /*__AGS_PATTERN_BOX_H__*/ gsequencer-0.6.37/src/ags/X/machine/ags_panel_input_line.h0000644000175000017500000000377212621463700020407 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_PANEL_INPUT_LINE_H__ #define __AGS_PANEL_INPUT_LINE_H__ #include #include #include #include #define AGS_TYPE_PANEL_INPUT_LINE (ags_panel_input_line_get_type()) #define AGS_PANEL_INPUT_LINE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_PANEL_INPUT_LINE, AgsPanelInputLine)) #define AGS_PANEL_INPUT_LINE_CLASS(class) (G_TYPE_CHECK_CLASS_CAST(class, AGS_TYPE_PANEL_INPUT_LINE, AgsPanelInputLineClass)) #define AGS_IS_PANEL_INPUT_LINE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_PANEL_INPUT_LINE)) #define AGS_IS_PANEL_INPUT_LINE_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_PANEL_INPUT_LINE)) #define AGS_PANEL_INPUT_LINE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS(obj, AGS_TYPE_PANEL_INPUT_LINE, AgsPanelInputLineClass)) typedef struct _AgsPanelInputLine AgsPanelInputLine; typedef struct _AgsPanelInputLineClass AgsPanelInputLineClass; struct _AgsPanelInputLine { AgsLine line; gchar *name; gchar *xml_type; }; struct _AgsPanelInputLineClass { AgsLineClass line; }; GType ags_panel_input_line_get_type(); AgsPanelInputLine* ags_panel_input_line_new(AgsChannel *channel); #endif /*__AGS_PANEL_INPUT_LINE_H__*/ gsequencer-0.6.37/src/ags/X/machine/ags_synth_input_pad.h0000644000175000017500000000373212626272146020275 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_SYNTH_INPUT_PAD_H__ #define __AGS_SYNTH_INPUT_PAD_H__ #include #include #include #include #define AGS_TYPE_SYNTH_INPUT_PAD (ags_synth_input_pad_get_type()) #define AGS_SYNTH_INPUT_PAD(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_SYNTH_INPUT_PAD, AgsSynthInputPad)) #define AGS_SYNTH_INPUT_PAD_CLASS(class) (G_TYPE_CHECK_CLASS_CAST(class, AGS_TYPE_SYNTH_INPUT_PAD, AgsSynthInputPadClass)) #define AGS_IS_SYNTH_INPUT_PAD(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_SYNTH_INPUT_PAD)) #define AGS_IS_SYNTH_INPUT_PAD_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_SYNTH_INPUT_PAD)) #define AGS_SYNTH_INPUT_PAD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS(obj, AGS_TYPE_SYNTH_INPUT_PAD, AgsSynthInputPadClass)) typedef struct _AgsSynthInputPad AgsSynthInputPad; typedef struct _AgsSynthInputPadClass AgsSynthInputPadClass; struct _AgsSynthInputPad { AgsPad pad; gchar *name; gchar *xml_type; }; struct _AgsSynthInputPadClass { AgsPadClass pad; }; GType ags_synth_input_pad_get_type(); AgsSynthInputPad* ags_synth_input_pad_new(AgsChannel *channel); #endif /*__AGS_SYNTH_INPUT_PAD_H__*/ gsequencer-0.6.37/src/ags/X/machine/ags_ffplayer.c0000644000175000017500000010134712633161242016661 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void ags_ffplayer_class_init(AgsFFPlayerClass *ffplayer); void ags_ffplayer_connectable_interface_init(AgsConnectableInterface *connectable); void ags_ffplayer_plugin_interface_init(AgsPluginInterface *plugin); void ags_ffplayer_init(AgsFFPlayer *ffplayer); void ags_ffplayer_connect(AgsConnectable *connectable); void ags_ffplayer_disconnect(AgsConnectable *connectable); void ags_ffplayer_finalize(GObject *gobject); void ags_ffplayer_show(GtkWidget *widget); void ags_ffplayer_map_recall(AgsMachine *machine); gchar* ags_ffplayer_get_name(AgsPlugin *plugin); void ags_ffplayer_set_name(AgsPlugin *plugin, gchar *name); gchar* ags_ffplayer_get_xml_type(AgsPlugin *plugin); void ags_ffplayer_set_xml_type(AgsPlugin *plugin, gchar *xml_type); void ags_ffplayer_read(AgsFile *file, xmlNode *node, AgsPlugin *plugin); void ags_ffplayer_read_resolve_audio(AgsFileLookup *file_lookup, AgsMachine *machine); void ags_ffplayer_launch_task(AgsFileLaunch *file_launch, AgsFFPlayer *ffplayer); xmlNode* ags_ffplayer_write(AgsFile *file, xmlNode *parent, AgsPlugin *plugin); void ags_ffplayer_set_audio_channels(AgsAudio *audio, guint audio_channels, guint audio_channels_old, gpointer data); void ags_ffplayer_set_pads(AgsAudio *audio, GType type, guint pads, guint pads_old, gpointer data); void ags_ffplayer_output_map_recall(AgsFFPlayer *ffplayer, guint output_pad_start); void ags_ffplayer_input_map_recall(AgsFFPlayer *ffplayer, guint input_pad_start); void ags_ffplayer_paint(AgsFFPlayer *ffplayer); /** * SECTION:ags_ffplayer * @short_description: ffplayer notation * @title: AgsFFPlayer * @section_id: * @include: ags/X/machine/ags_ffplayer.h * * The #AgsFFPlayer is a composite widget to act as soundfont2 notation player. */ static gpointer ags_ffplayer_parent_class = NULL; static AgsConnectableInterface *ags_ffplayer_parent_connectable_interface; GtkStyle *ffplayer_style; GType ags_ffplayer_get_type(void) { static GType ags_type_ffplayer = 0; if(!ags_type_ffplayer){ static const GTypeInfo ags_ffplayer_info = { sizeof(AgsFFPlayerClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_ffplayer_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(AgsFFPlayer), 0, /* n_preallocs */ (GInstanceInitFunc) ags_ffplayer_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_ffplayer_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_plugin_interface_info = { (GInterfaceInitFunc) ags_ffplayer_plugin_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_ffplayer = g_type_register_static(AGS_TYPE_MACHINE, "AgsFFPlayer\0", &ags_ffplayer_info, 0); g_type_add_interface_static(ags_type_ffplayer, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_ffplayer, AGS_TYPE_PLUGIN, &ags_plugin_interface_info); } return(ags_type_ffplayer); } void ags_ffplayer_class_init(AgsFFPlayerClass *ffplayer) { GObjectClass *gobject; GtkWidgetClass *widget; AgsMachineClass *machine; ags_ffplayer_parent_class = g_type_class_peek_parent(ffplayer); /* GObjectClass */ gobject = (GObjectClass *) ffplayer; gobject->finalize = ags_ffplayer_finalize; /* GtkWidgetClass */ widget = (GtkWidgetClass *) ffplayer; widget->show = ags_ffplayer_show; /* AgsMachineClass */ machine = (AgsMachineClass *) ffplayer; machine->map_recall = ags_ffplayer_map_recall; } void ags_ffplayer_connectable_interface_init(AgsConnectableInterface *connectable) { AgsConnectableInterface *ags_ffplayer_connectable_parent_interface; ags_ffplayer_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_ffplayer_connect; } void ags_ffplayer_plugin_interface_init(AgsPluginInterface *plugin) { plugin->get_name = ags_ffplayer_get_name; plugin->set_name = ags_ffplayer_set_name; plugin->get_xml_type = ags_ffplayer_get_xml_type; plugin->set_xml_type = ags_ffplayer_set_xml_type; plugin->read = ags_ffplayer_read; plugin->write = ags_ffplayer_write; } void ags_ffplayer_init(AgsFFPlayer *ffplayer) { AgsAudio *audio; GtkTable *table; GtkHScrollbar *hscrollbar; GtkVBox *vbox; GtkHBox *hbox; GtkLabel *label; PangoAttrList *attr_list; PangoAttribute *attr; g_signal_connect_after((GObject *) ffplayer, "parent_set\0", G_CALLBACK(ags_ffplayer_parent_set_callback), (gpointer) ffplayer); audio = AGS_MACHINE(ffplayer)->audio; audio->flags |= (AGS_AUDIO_OUTPUT_HAS_RECYCLING | AGS_AUDIO_INPUT_HAS_RECYCLING | AGS_AUDIO_INPUT_TAKES_FILE | AGS_AUDIO_SYNC | AGS_AUDIO_ASYNC | AGS_AUDIO_NOTATION_DEFAULT | AGS_AUDIO_HAS_NOTATION); AGS_MACHINE(ffplayer)->flags |= (AGS_MACHINE_IS_SYNTHESIZER | AGS_MACHINE_REVERSE_NOTATION); AGS_MACHINE(ffplayer)->file_input_flags |= AGS_MACHINE_ACCEPT_SOUNDFONT2; AGS_MACHINE(ffplayer)->input_pad_type = G_TYPE_NONE; AGS_MACHINE(ffplayer)->input_line_type = G_TYPE_NONE; AGS_MACHINE(ffplayer)->output_pad_type = G_TYPE_NONE; AGS_MACHINE(ffplayer)->output_line_type = G_TYPE_NONE; g_signal_connect_after(G_OBJECT(ffplayer->machine.audio), "set_audio_channels\0", G_CALLBACK(ags_ffplayer_set_audio_channels), NULL); g_signal_connect_after(G_OBJECT(ffplayer->machine.audio), "set_pads\0", G_CALLBACK(ags_ffplayer_set_pads), NULL); ffplayer->mapped_input_pad = 0; ffplayer->mapped_output_pad = 0; ffplayer->name = NULL; ffplayer->xml_type = "ags-ffplayer\0"; /* create widgets */ table = (GtkTable *) gtk_table_new(3, 2, FALSE); gtk_container_add((GtkContainer *) (gtk_bin_get_child((GtkBin *) ffplayer)), (GtkWidget *) table); hbox = (GtkHBox *) gtk_hbox_new(FALSE, 0); gtk_table_attach(table, GTK_WIDGET(hbox), 0, 1, 1, 2, GTK_FILL, GTK_FILL, 0, 0); label = (GtkLabel *) g_object_new(GTK_TYPE_LABEL, "label\0", "preset\0", "xalign\0", 0.0, NULL); gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(label), FALSE, FALSE, 0); ffplayer->preset = (GtkComboBoxText *) gtk_combo_box_text_new(); gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(ffplayer->preset), TRUE, FALSE, 0); label = (GtkLabel *) g_object_new(GTK_TYPE_LABEL, "label\0", "instrument\0", "xalign\0", 0.0, NULL); gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(label), FALSE, FALSE, 0); ffplayer->instrument = (GtkComboBoxText *) gtk_combo_box_text_new(); gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(ffplayer->instrument), TRUE, FALSE, 0); ffplayer->open = (GtkButton *) g_object_new(GTK_TYPE_BUTTON, "label\0", GTK_STOCK_OPEN, "use-stock\0", TRUE, NULL); gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(ffplayer->open), FALSE, FALSE, 0); ffplayer->open_dialog = NULL; vbox = (GtkVBox *) gtk_vbox_new(FALSE, 2); gtk_table_attach(table, (GtkWidget *) vbox, 1, 2, 0, 3, GTK_FILL, GTK_FILL, 0, 0); ffplayer->control_width = 12; ffplayer->control_height = 40; ffplayer->drawing_area = (GtkDrawingArea *) gtk_drawing_area_new(); gtk_widget_set_size_request((GtkWidget *) ffplayer->drawing_area, 16 * ffplayer->control_width, ffplayer->control_width * 8 + ffplayer->control_height); gtk_widget_set_style((GtkWidget *) ffplayer->drawing_area, ffplayer_style); gtk_widget_set_events ((GtkWidget *) ffplayer->drawing_area, GDK_EXPOSURE_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_BUTTON_PRESS_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK); gtk_box_pack_start((GtkBox *) vbox, (GtkWidget *) ffplayer->drawing_area, FALSE, FALSE, 0); ffplayer->hadjustment = (GtkAdjustment *) gtk_adjustment_new(0.0, 0.0, 76 * ffplayer->control_width - GTK_WIDGET(ffplayer->drawing_area)->allocation.width, 1.0, (double) ffplayer->control_width, (double) (16 * ffplayer->control_width)); hscrollbar = (GtkHScrollbar *) gtk_hscrollbar_new(ffplayer->hadjustment); gtk_widget_set_style((GtkWidget *) hscrollbar, ffplayer_style); gtk_box_pack_start((GtkBox *) vbox, (GtkWidget *) hscrollbar, FALSE, FALSE, 0); } void ags_ffplayer_map_recall(AgsMachine *machine) { AgsWindow *window; AgsFFPlayer *ffplayer; AgsAudio *audio; AgsChannel *channel; AgsDelayAudio *play_delay_audio; AgsDelayAudioRun *play_delay_audio_run; AgsCountBeatsAudio *play_count_beats_audio; AgsCountBeatsAudioRun *play_count_beats_audio_run; AgsPlayNotationAudio *play_notation; AgsPlayNotationAudio *recall_notation_audio; AgsPlayNotationAudioRun *recall_notation_audio_run; GList *notation; GList *list; guint i, j; GValue value = {0,}; if((AGS_MACHINE_MAPPED_RECALL & (machine->flags)) != 0 || (AGS_MACHINE_PREMAPPED_RECALL & (machine->flags)) != 0){ return; } window = gtk_widget_get_ancestor(machine, AGS_TYPE_WINDOW); ffplayer = AGS_FFPLAYER(machine); audio = machine->audio; /* ags-delay */ ags_recall_factory_create(audio, NULL, NULL, "ags-delay\0", 0, 0, 0, 0, (AGS_RECALL_FACTORY_OUTPUT | AGS_RECALL_FACTORY_ADD | AGS_RECALL_FACTORY_PLAY), 0); list = ags_recall_find_type(audio->play, AGS_TYPE_DELAY_AUDIO_RUN); if(list != NULL){ play_delay_audio_run = AGS_DELAY_AUDIO_RUN(list->data); // AGS_RECALL(play_delay_audio_run)->flags |= AGS_RECALL_PERSISTENT; } /* ags-count-beats */ ags_recall_factory_create(audio, NULL, NULL, "ags-count-beats\0", 0, 0, 0, 0, (AGS_RECALL_FACTORY_OUTPUT | AGS_RECALL_FACTORY_ADD | AGS_RECALL_FACTORY_PLAY), 0); list = ags_recall_find_type(audio->play, AGS_TYPE_COUNT_BEATS_AUDIO_RUN); if(list != NULL){ play_count_beats_audio_run = AGS_COUNT_BEATS_AUDIO_RUN(list->data); /* set dependency */ g_object_set(G_OBJECT(play_count_beats_audio_run), "delay-audio-run\0", play_delay_audio_run, NULL); ags_seekable_seek(AGS_SEEKABLE(play_count_beats_audio_run), window->navigation->position_tact->adjustment->value * AGS_DEVOUT(audio->devout)->delay[AGS_DEVOUT(audio->devout)->tic_counter], TRUE); g_value_init(&value, G_TYPE_BOOLEAN); g_value_set_boolean(&value, gtk_toggle_button_get_active(window->navigation->loop)); ags_port_safe_write(AGS_COUNT_BEATS_AUDIO(AGS_RECALL_AUDIO_RUN(play_count_beats_audio_run)->recall_audio)->notation_loop, &value); } /* ags-play-notation */ ags_recall_factory_create(audio, NULL, NULL, "ags-play-notation\0", 0, 0, 0, 0, (AGS_RECALL_FACTORY_INPUT | AGS_RECALL_FACTORY_ADD | AGS_RECALL_FACTORY_RECALL), 0); list = ags_recall_find_type(audio->recall, AGS_TYPE_PLAY_NOTATION_AUDIO_RUN); if(list != NULL){ recall_notation_audio_run = AGS_PLAY_NOTATION_AUDIO_RUN(list->data); /* set dependency */ g_object_set(G_OBJECT(recall_notation_audio_run), "delay-audio-run\0", play_delay_audio_run, NULL); /* set dependency */ g_object_set(G_OBJECT(recall_notation_audio_run), "count-beats-audio-run\0", play_count_beats_audio_run, NULL); } /* depending on destination */ ags_ffplayer_input_map_recall(ffplayer, 0); /* depending on destination */ ags_ffplayer_output_map_recall(ffplayer, 0); AGS_MACHINE_CLASS(ags_ffplayer_parent_class)->map_recall(machine); } void ags_ffplayer_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_ffplayer_parent_class)->finalize(gobject); } void ags_ffplayer_connect(AgsConnectable *connectable) { AgsWindow *window; AgsFFPlayer *ffplayer; GList *list; if((AGS_MACHINE_CONNECTED & (AGS_MACHINE(connectable)->flags)) != 0){ return; } ags_ffplayer_parent_connectable_interface->connect(connectable); ffplayer = AGS_FFPLAYER(connectable); window = (AgsWindow *) gtk_widget_get_toplevel((GtkWidget *) ffplayer); g_signal_connect((GObject *) ffplayer, "destroy\0", G_CALLBACK(ags_ffplayer_destroy_callback), (gpointer) ffplayer); /* AgsFFPlayer */ g_signal_connect((GObject *) ffplayer->open, "clicked\0", G_CALLBACK(ags_ffplayer_open_clicked_callback), (gpointer) ffplayer); g_signal_connect_after((GObject *) ffplayer->preset, "changed\0", G_CALLBACK(ags_ffplayer_preset_changed_callback), (gpointer) ffplayer); g_signal_connect_after((GObject *) ffplayer->instrument, "changed\0", G_CALLBACK(ags_ffplayer_instrument_changed_callback), (gpointer) ffplayer); g_signal_connect((GObject *) ffplayer->drawing_area, "expose_event\0", G_CALLBACK(ags_ffplayer_drawing_area_expose_callback), (gpointer) ffplayer); g_signal_connect((GObject *) ffplayer->drawing_area, "button_press_event\0", G_CALLBACK(ags_ffplayer_drawing_area_button_press_callback), (gpointer) ffplayer); g_signal_connect((GObject *) ffplayer->hadjustment, "value_changed\0", G_CALLBACK(ags_ffplayer_hscrollbar_value_changed), (gpointer) ffplayer); /* AgsAudio */ //TODO:JK: magnify it if(!gtk_toggle_button_get_active((GtkToggleButton *) window->navigation->loop)){ GList *list; list = ags_recall_find_type(ffplayer->machine.audio->play, AGS_TYPE_COUNT_BEATS_AUDIO_RUN); if(list != NULL){ AgsCountBeatsAudioRun *play_count_beats_audio_run; GValue value = {0,}; play_count_beats_audio_run = AGS_COUNT_BEATS_AUDIO_RUN(list->data); g_value_init(&value, G_TYPE_BOOLEAN); g_value_set_boolean(&value, FALSE); ags_port_safe_write(AGS_COUNT_BEATS_AUDIO(AGS_RECALL_AUDIO_RUN(play_count_beats_audio_run)->recall_audio)->notation_loop, &value); } } } void ags_ffplayer_disconnect(AgsConnectable *connectable) { ags_ffplayer_parent_connectable_interface->disconnect(connectable); //TODO:JK /* implement me */ } void ags_ffplayer_show(GtkWidget *widget) { GTK_WIDGET_CLASS(ags_ffplayer_parent_class)->show(widget); } gchar* ags_ffplayer_get_name(AgsPlugin *plugin) { return(AGS_FFPLAYER(plugin)->name); } void ags_ffplayer_set_name(AgsPlugin *plugin, gchar *name) { AGS_FFPLAYER(plugin)->name = name; } gchar* ags_ffplayer_get_xml_type(AgsPlugin *plugin) { return(AGS_FFPLAYER(plugin)->xml_type); } void ags_ffplayer_set_xml_type(AgsPlugin *plugin, gchar *xml_type) { AGS_FFPLAYER(plugin)->xml_type = xml_type; } void ags_ffplayer_read(AgsFile *file, xmlNode *node, AgsPlugin *plugin) { AgsFFPlayer *gobject; AgsFileLookup *file_lookup; AgsFileLaunch *file_launch; GList *list; gobject = AGS_FFPLAYER(plugin); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", gobject, NULL)); /* lookup */ list = file->lookup; while((list = ags_file_lookup_find_by_node(list, node->parent)) != NULL){ file_lookup = AGS_FILE_LOOKUP(list->data); if(g_signal_handler_find(list->data, G_SIGNAL_MATCH_FUNC, 0, 0, NULL, ags_file_read_machine_resolve_audio, NULL) != 0){ g_signal_connect_after(G_OBJECT(file_lookup), "resolve\0", G_CALLBACK(ags_ffplayer_read_resolve_audio), gobject); break; } list = list->next; } /* launch */ file_launch = (AgsFileLaunch *) g_object_new(AGS_TYPE_FILE_LAUNCH, "node\0", node, NULL); g_signal_connect(G_OBJECT(file_launch), "start\0", G_CALLBACK(ags_ffplayer_launch_task), gobject); ags_file_add_launch(file, G_OBJECT(file_launch)); } void ags_ffplayer_read_resolve_audio(AgsFileLookup *file_lookup, AgsMachine *machine) { AgsFFPlayer *ffplayer; ffplayer = AGS_FFPLAYER(machine); g_signal_connect_after(G_OBJECT(machine->audio), "set_audio_channels\0", G_CALLBACK(ags_ffplayer_set_audio_channels), ffplayer); g_signal_connect_after(G_OBJECT(machine->audio), "set_pads\0", G_CALLBACK(ags_ffplayer_set_pads), ffplayer); if((AGS_MACHINE_PREMAPPED_RECALL & (machine->flags)) == 0){ /* ags-play-notation */ ags_recall_factory_create(machine->audio, NULL, NULL, "ags-play-notation\0", 0, machine->audio->audio_channels, 0, 0, (AGS_RECALL_FACTORY_INPUT | AGS_RECALL_FACTORY_REMAP | AGS_RECALL_FACTORY_RECALL), 0); ags_ffplayer_output_map_recall(ffplayer, 0); ags_ffplayer_input_map_recall(ffplayer, 0); }else{ ffplayer->mapped_output_pad = machine->audio->output_pads; ffplayer->mapped_input_pad = machine->audio->input_pads; } } void ags_ffplayer_launch_task(AgsFileLaunch *file_launch, AgsFFPlayer *ffplayer) { AgsWindow *window; xmlNode *node; gchar *filename; window = AGS_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(ffplayer))); node = file_launch->node; filename = xmlGetProp(node, "filename\0"); if(g_str_has_suffix(filename, ".sf2\0")){ AgsIpatch *ipatch; GtkTreeModel *list_store; GtkTreeIter iter; AgsPlayable *playable; gchar **preset, **instrument; xmlChar *selected; GError *error; /* clear preset, instrument and sample*/ gtk_list_store_clear(GTK_LIST_STORE(gtk_combo_box_get_model(ffplayer->preset))); gtk_list_store_clear(GTK_LIST_STORE(gtk_combo_box_get_model(ffplayer->instrument))); /* Ipatch related */ ffplayer->ipatch = ipatch = g_object_new(AGS_TYPE_IPATCH, "mode\0", AGS_IPATCH_READ, "filename\0", filename, NULL); ipatch->devout = window->devout; ags_ipatch_open(ipatch, filename); playable = AGS_PLAYABLE(ipatch); ags_playable_open(playable, filename); error = NULL; ipatch->nth_level = 0; ags_playable_level_select(playable, 0, filename, &error); if(error != NULL){ g_warning("%s\0", error->message); } /* select first preset */ ipatch->nth_level = 1; preset = ags_playable_sublevel_names(playable); error = NULL; ags_playable_level_select(playable, 1, *preset, &error); if(error != NULL){ g_warning("%s\0", error->message); } /* fill ffplayer->preset */ while(*preset != NULL){ gtk_combo_box_text_append_text(ffplayer->preset, *preset); preset++; } /* Get the first iter in the list */ selected = xmlGetProp(node, "preset\0"); list_store = gtk_combo_box_get_model((GtkComboBox *) ffplayer->preset); if(gtk_tree_model_get_iter_first(list_store, &iter)){ guint i; i = 0; do{ gchar *str; gtk_tree_model_get(list_store, &iter, 0, &str, -1); if(!g_strcmp0(selected, str)){ break; } i++; }while(gtk_tree_model_iter_next(list_store, &iter)); gtk_combo_box_set_active(GTK_COMBO_BOX(ffplayer->preset), i); } /* select first instrument */ ipatch->nth_level = 2; instrument = ags_playable_sublevel_names(playable); error = NULL; ags_playable_level_select(playable, 2, *instrument, &error); if(error != NULL){ g_warning("%s\0", error->message); } /* fill ffplayer->instrument */ while(*instrument != NULL){ gtk_combo_box_text_append_text(ffplayer->instrument, *instrument); instrument++; } /* Get the first iter in the list */ selected = xmlGetProp(node, "instrument\0"); list_store = gtk_combo_box_get_model((GtkComboBox *) ffplayer->instrument); if(gtk_tree_model_get_iter_first(list_store, &iter)){ guint i; i = 0; do{ gchar *str; gtk_tree_model_get(list_store, &iter, 0, &str, -1); if(!g_strcmp0(selected, str)){ break; } i++; }while(gtk_tree_model_iter_next(list_store, &iter)); gtk_combo_box_set_active(GTK_COMBO_BOX(ffplayer->instrument), i); } } } xmlNode* ags_ffplayer_write(AgsFile *file, xmlNode *parent, AgsPlugin *plugin) { AgsFFPlayer *ffplayer; xmlNode *node; gchar *id; ffplayer = AGS_FFPLAYER(plugin); id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-ffplayer\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", ffplayer, NULL)); if(ffplayer->ipatch != NULL && ffplayer->ipatch->filename != NULL){ xmlNewProp(node, "filename\0", g_strdup(ffplayer->ipatch->filename)); xmlNewProp(node, "preset\0", g_strdup(gtk_combo_box_text_get_active_text((GtkComboBoxText *) ffplayer->preset))); xmlNewProp(node, "instrument\0", g_strdup(gtk_combo_box_text_get_active_text((GtkComboBoxText *) ffplayer->instrument))); } xmlAddChild(parent, node); return(node); } void ags_ffplayer_set_audio_channels(AgsAudio *audio, guint audio_channels, guint audio_channels_old, gpointer data) { AgsFFPlayer *ffplayer; ffplayer = AGS_FFPLAYER(audio->machine); } void ags_ffplayer_set_pads(AgsAudio *audio, GType type, guint pads, guint pads_old, gpointer data) { AgsFFPlayer *ffplayer; AgsMachine *machine; gboolean grow; ffplayer = AGS_FFPLAYER(audio->machine); machine = audio->machine; if(pads_old == pads){ return; } if(pads_old < pads){ grow = TRUE; }else{ grow = FALSE; } if(type == AGS_TYPE_INPUT){ if(grow){ /* depending on destination */ if((AGS_MACHINE_MAPPED_RECALL & (machine->flags)) != 0){ ags_ffplayer_input_map_recall(ffplayer, pads_old); } }else{ ffplayer->mapped_input_pad = pads; } }else{ if(grow){ /* depending on destination */ if((AGS_MACHINE_MAPPED_RECALL & (machine->flags)) != 0){ ags_ffplayer_output_map_recall(ffplayer, pads_old); } }else{ ffplayer->mapped_output_pad = pads; } } } void ags_ffplayer_input_map_recall(AgsFFPlayer *ffplayer, guint input_pad_start) { AgsAudio *audio; AgsChannel *source, *current; GList *list; audio = AGS_MACHINE(ffplayer)->audio; if(ffplayer->mapped_input_pad > input_pad_start){ return; } source = ags_channel_nth(audio->input, input_pad_start * audio->audio_channels); /* map dependending on output */ current = source; while(current != NULL){ /* ags-buffer */ ags_recall_factory_create(audio, NULL, NULL, "ags-buffer\0", 0, audio->audio_channels, current->pad, current->pad + 1, (AGS_RECALL_FACTORY_INPUT | AGS_RECALL_FACTORY_RECALL | AGS_RECALL_FACTORY_ADD), 0); current = current->next_pad; } /* */ current = source; while(current != NULL){ /* ags-play */ ags_recall_factory_create(audio, NULL, NULL, "ags-play\0", 0, audio->audio_channels, current->pad, current->pad + 1, (AGS_RECALL_FACTORY_INPUT | AGS_RECALL_FACTORY_PLAY | AGS_RECALL_FACTORY_ADD), 0); current = current->next_pad; } /* */ current = source; while(current != NULL){ /* ags-stream */ ags_recall_factory_create(audio, NULL, NULL, "ags-stream\0", 0, audio->audio_channels, current->pad, current->pad + 1, (AGS_RECALL_FACTORY_INPUT | AGS_RECALL_FACTORY_PLAY | AGS_RECALL_FACTORY_RECALL | AGS_RECALL_FACTORY_ADD), 0); current = current->next_pad; } ffplayer->mapped_input_pad = audio->input_pads; } void ags_ffplayer_output_map_recall(AgsFFPlayer *ffplayer, guint output_pad_start) { AgsAudio *audio; AgsChannel *source, *input, *current; AgsDelayAudio *recall_delay_audio; AgsCountBeatsAudioRun *recall_count_beats_audio_run; GList *list; audio = AGS_MACHINE(ffplayer)->audio; if(ffplayer->mapped_output_pad > output_pad_start){ return; } source = ags_channel_nth(audio->output, output_pad_start * audio->audio_channels); /* remap for input */ input = audio->input; while(input != NULL){ /* ags-buffer */ ags_recall_factory_create(audio, NULL, NULL, "ags-buffer\0", 0, audio->audio_channels, input->pad, input->pad + 1, (AGS_RECALL_FACTORY_INPUT | AGS_RECALL_FACTORY_RECALL | AGS_RECALL_FACTORY_ADD), 0); input = input->next_pad; } current = ags_channel_nth(audio->output, output_pad_start * audio->audio_channels); while(current != NULL){ /* ags-stream */ ags_recall_factory_create(audio, NULL, NULL, "ags-stream\0", 0, audio->audio_channels, current->pad, current->pad + 1, (AGS_RECALL_FACTORY_OUTPUT | AGS_RECALL_FACTORY_PLAY | AGS_RECALL_FACTORY_ADD), 0); current = current->next_pad; } ffplayer->mapped_output_pad = audio->output_pads; } void ags_ffplayer_paint(AgsFFPlayer *ffplayer) { GtkWidget *widget; GtkStyle *ffplayer_style; cairo_t *cr; double semi_key_height; guint bitmap; guint x[2]; guint i, i_stop, j, j0; static const gdouble white_gc = 65535.0; widget = (GtkWidget *) ffplayer->drawing_area; ffplayer_style = gtk_widget_get_style(widget); semi_key_height = 2.0 / 3.0 * (double) ffplayer->control_height; bitmap = 0x52a52a; // description of the keyboard j = (guint) ceil(ffplayer->hadjustment->value / (double) ffplayer->control_width); j = j % 12; x[0] = (guint) round(ffplayer->hadjustment->value) % ffplayer->control_width; if(x[0] != 0){ x[0] = ffplayer->control_width - x[0]; } x[1] = ((guint) widget->allocation.width - x[0]) % ffplayer->control_width; i_stop = (widget->allocation.width - x[0] - x[1]) / ffplayer->control_width; cr = gdk_cairo_create(widget->window); /* clear with background color */ cairo_set_source_rgb(cr, ffplayer_style->bg[0].red / white_gc, ffplayer_style->bg[0].green / white_gc, ffplayer_style->bg[0].blue / white_gc); cairo_rectangle(cr, 0.0, 0.0, (double) widget->allocation.width, (double) widget->allocation.height); cairo_fill(cr); /* draw piano */ cairo_set_line_width(cr, 1.0); cairo_set_source_rgb(cr, ffplayer_style->fg[0].red / white_gc, ffplayer_style->fg[0].green / white_gc, ffplayer_style->fg[0].blue / white_gc); if(x[0] != 0){ j0 = (j != 0) ? j -1: 11; if(((1 << j0) & bitmap) != 0){ cairo_rectangle(cr, 0.0, 0.0, x[0], (double) semi_key_height); cairo_fill(cr); if(x[0] > ffplayer->control_width / 2){ cairo_move_to(cr, (double) (x[0] - ffplayer->control_width / 2), semi_key_height); cairo_line_to(cr, (double) (x[0] - ffplayer->control_width / 2), (double) ffplayer->control_height); cairo_stroke(cr); } cairo_move_to(cr, 0.0, ffplayer->control_height); cairo_line_to(cr, (double) x[0], ffplayer->control_height); cairo_stroke(cr); }else{ if(((1 << (j0 + 1)) & bitmap) == 0){ cairo_move_to(cr, (double) x[0], 0.0); cairo_line_to(cr, (double) x[0], ffplayer->control_height); cairo_stroke(cr); } cairo_move_to(cr, 0.0, ffplayer->control_height); cairo_line_to(cr, (double) x[0], ffplayer->control_height); cairo_stroke(cr); } } for(i = 0; i < i_stop; i++){ if(((1 << j) & bitmap) != 0){ // draw semi tone key cairo_rectangle(cr, (double) (i * ffplayer->control_width + x[0]), 0.0, (double) ffplayer->control_width, semi_key_height); cairo_fill(cr); cairo_move_to(cr, (double) (i * ffplayer->control_width + x[0] + ffplayer->control_width / 2), semi_key_height); cairo_line_to(cr, (double) (i * ffplayer->control_width + x[0] + ffplayer->control_width / 2), ffplayer->control_height); cairo_stroke(cr); cairo_move_to(cr, (double) (i * ffplayer->control_width + x[0]), ffplayer->control_height); cairo_line_to(cr, (double) (i * ffplayer->control_width + x[0] + ffplayer->control_width), ffplayer->control_height); cairo_stroke(cr); }else{ // no semi tone key if(((1 << (j + 1)) & bitmap) == 0){ cairo_move_to(cr, (double) (i * ffplayer->control_width + x[0] + ffplayer->control_width), 0.0); cairo_line_to(cr, (double) (i * ffplayer->control_width + x[0] + ffplayer->control_width), ffplayer->control_height); cairo_stroke(cr); } cairo_move_to(cr, (double) (i * ffplayer->control_width + x[0]), ffplayer->control_height); cairo_line_to(cr, (double) (i * ffplayer->control_width + x[0] + ffplayer->control_width), ffplayer->control_height); cairo_stroke(cr); } if(j == 11) j = 0; else j++; } if(x[1] != 0){ j0 = j; if(((1 << j0) & bitmap) != 0){ cairo_rectangle(cr, (double) (widget->allocation.width - x[1]), 0.0, (double) x[1], semi_key_height); cairo_fill(cr); if(x[1] > ffplayer->control_width / 2){ cairo_move_to(cr, (double) (widget->allocation.width - x[1] + ffplayer->control_width / 2), semi_key_height); cairo_line_to(cr, (double) (widget->allocation.width - x[1] + ffplayer->control_width / 2), ffplayer->control_height); cairo_stroke(cr); } cairo_move_to(cr, (double) (widget->allocation.width - x[1]), ffplayer->control_height); cairo_line_to(cr, (double) widget->allocation.width, ffplayer->control_height); cairo_stroke(cr); }else{ cairo_move_to(cr, (double) (widget->allocation.width - x[1]), ffplayer->control_height); cairo_line_to(cr, (double) widget->allocation.width, ffplayer->control_height); cairo_stroke(cr); } } } /** * ags_ffplayer_new: * @devout: the assigned devout. * * Creates an #AgsFFPlayer * * Returns: a new #AgsFFPlayer * * Since: 0.3 */ AgsFFPlayer* ags_ffplayer_new(GObject *devout) { AgsFFPlayer *ffplayer; GValue value = {0,}; ffplayer = (AgsFFPlayer *) g_object_new(AGS_TYPE_FFPLAYER, NULL); if(devout != NULL){ g_value_init(&value, G_TYPE_OBJECT); g_value_set_object(&value, devout); g_object_set_property(G_OBJECT(ffplayer->machine.audio), "devout\0", &value); g_value_unset(&value); } return(ffplayer); } gsequencer-0.6.37/src/ags/X/machine/ags_ffplayer_callbacks.c0000644000175000017500000002524112632714323020661 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void ags_ffplayer_open_dialog_response_callback(GtkWidget *widget, gint response, AgsMachine *machine); void ags_ffplayer_link_channel_launch_callback(AgsTask *task, AgsAudioSignal *audio_signal); extern pthread_mutex_t ags_application_mutex; void ags_ffplayer_parent_set_callback(GtkWidget *widget, GtkObject *old_parent, AgsFFPlayer *ffplayer) { AgsWindow *window; AgsAudio *audio; if(old_parent != NULL) return; window = (AgsWindow *) gtk_widget_get_toplevel(widget); audio = ffplayer->machine.audio; audio->devout = (GObject *) window->devout; AGS_MACHINE(ffplayer)->name = g_strdup_printf("Default %d\0", ags_window_find_machine_counter(window, AGS_TYPE_FFPLAYER)->counter); ags_window_increment_machine_counter(window, AGS_TYPE_FFPLAYER); } void ags_ffplayer_destroy_callback(GtkWidget *widget, AgsFFPlayer *ffplayer) { if(ffplayer->open_dialog != NULL){ gtk_widget_destroy(ffplayer->open_dialog); } } void ags_ffplayer_open_clicked_callback(GtkWidget *widget, AgsFFPlayer *ffplayer) { GtkFileChooserDialog *file_chooser; ffplayer->open_dialog = file_chooser = ags_machine_file_chooser_dialog_new(AGS_MACHINE(ffplayer)); gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(file_chooser), FALSE); g_signal_connect((GObject *) file_chooser, "response\0", G_CALLBACK(ags_ffplayer_open_dialog_response_callback), AGS_MACHINE(ffplayer)); gtk_widget_show_all((GtkWidget *) file_chooser); } void ags_ffplayer_open_dialog_response_callback(GtkWidget *widget, gint response, AgsMachine *machine) { AgsWindow *window; AgsFFPlayer *ffplayer; GtkFileChooserDialog *file_chooser; AgsDevout *devout; window = AGS_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(machine))); ffplayer = AGS_FFPLAYER(machine); file_chooser = GTK_FILE_CHOOSER_DIALOG(widget); if(response == GTK_RESPONSE_ACCEPT){ gchar *filename; filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(widget)); if(g_str_has_suffix(filename, ".sf2\0")){ AgsIpatch *ipatch; AgsPlayable *playable; gchar **preset; GError *error; /* clear preset and instrument */ gtk_list_store_clear(GTK_LIST_STORE(gtk_combo_box_get_model(ffplayer->preset))); gtk_list_store_clear(GTK_LIST_STORE(gtk_combo_box_get_model(ffplayer->instrument))); /* Ipatch related */ ipatch = g_object_new(AGS_TYPE_IPATCH, "mode\0", AGS_IPATCH_READ, "filename\0", filename, NULL); ffplayer->ipatch = ipatch; ipatch->devout = window->devout; playable = AGS_PLAYABLE(ipatch); error = NULL; ags_playable_level_select(playable, 0, filename, &error); /* select first preset */ ipatch->nth_level = 1; preset = ags_playable_sublevel_names(playable); error = NULL; ags_playable_level_select(playable, 1, *preset, &error); /* fill ffplayer->preset */ while(preset != NULL && preset[0] != NULL){ gtk_combo_box_text_append_text(ffplayer->preset, *preset); preset++; } } gtk_combo_box_set_active(GTK_COMBO_BOX(ffplayer->preset), 0); } ffplayer->open_dialog = NULL; gtk_widget_destroy(widget); } void ags_ffplayer_preset_changed_callback(GtkComboBox *preset, AgsFFPlayer *ffplayer) { AgsPlayable *playable; AgsIpatch *ipatch; gchar *preset_name; gchar **instrument; GError *error; playable = AGS_PLAYABLE(ffplayer->ipatch); ipatch = ffplayer->ipatch; if(ipatch == NULL){ return; } preset_name = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(preset)); /* load presets */ error = NULL; ags_playable_level_select(playable, 1, preset_name, &error); /* select first instrument */ gtk_list_store_clear(GTK_LIST_STORE(gtk_combo_box_get_model(ffplayer->instrument))); ipatch->nth_level = 2; instrument = ags_playable_sublevel_names(playable); error = NULL; ags_playable_level_select(playable, 2, *instrument, &error); /* fill ffplayer->instrument */ while(instrument != NULL && instrument[0] != NULL){ gtk_combo_box_text_append_text(ffplayer->instrument, *instrument); instrument++; } gtk_combo_box_set_active(GTK_COMBO_BOX(ffplayer->instrument), 0); } void ags_ffplayer_instrument_changed_callback(GtkComboBox *instrument, AgsFFPlayer *ffplayer) { AgsWindow *window; AgsDevout *devout; AgsAudio *audio; AgsChannel *channel; AgsRecycling *recycling; AgsLinkChannel *link_channel; AgsAddAudioSignal *add_audio_signal; AgsMutexManager *mutex_manager; AgsAudioLoop *audio_loop; AgsTaskThread *task_thread; AgsMain *ags_main; AgsPlayable *playable; gchar *instrument_name; gchar **preset; gchar **sample; GList *task; GList *list; guint count; int i; gboolean has_more; GError *error; pthread_mutex_t *audio_mutex; pthread_mutex_t *channel_mutex; window = (AgsWindow *) gtk_widget_get_toplevel(ffplayer); ags_main = window->ags_main; audio = AGS_MACHINE(ffplayer)->audio; /* get audio loop */ pthread_mutex_lock(&(ags_application_mutex)); audio_loop = ags_main->main_loop; pthread_mutex_unlock(&(ags_application_mutex)); /* get task thread */ task_thread = (AgsTaskThread *) ags_thread_find_type(audio_loop, AGS_TYPE_TASK_THREAD); /* lookup audio mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); /* */ playable = AGS_PLAYABLE(ffplayer->ipatch); instrument_name = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(instrument)); if(instrument_name == NULL){ return; } /* select instrument */ error = NULL; ags_playable_level_select(playable, 2, instrument_name, &error); if(error != NULL){ g_error("%s\0", error->message); } /* select first sample */ sample = NULL; AGS_IPATCH(ffplayer->ipatch)->nth_level = 3; sample = ags_playable_sublevel_names(playable); error = NULL; ags_playable_level_select(playable, 3, *sample, &error); if(error != NULL){ g_error("%s\0", error->message); } count = 0; while(*sample != NULL){ sample++; count++; } /* read all samples */ ags_audio_set_audio_channels(audio, AGS_IPATCH_DEFAULT_CHANNELS); AGS_IPATCH(ffplayer->ipatch)->nth_level = 3; ags_playable_iter_start(playable); ags_audio_set_pads(audio, AGS_TYPE_INPUT, count); pthread_mutex_lock(audio_mutex); devout = audio->devout; channel = audio->input; pthread_mutex_unlock(audio_mutex); task = NULL; has_more = TRUE; while(channel != NULL && has_more){ list = ags_playable_read_audio_signal(playable, (AgsDevout *) AGS_MACHINE(ffplayer)->audio->devout, channel->audio_channel, AGS_IPATCH_DEFAULT_CHANNELS); for(i = 0; i < AGS_IPATCH_DEFAULT_CHANNELS && list != NULL; i++){ /* create tasks */ link_channel = ags_link_channel_new(channel, NULL); task = g_list_prepend(task, link_channel); g_object_ref(link_channel); g_signal_connect_after((GObject *) link_channel, "launch\0", G_CALLBACK(ags_ffplayer_link_channel_launch_callback), list->data); /* iterate */ channel = channel->next; list = list->next; } has_more = ags_playable_iter_next(playable); } /* append tasks */ task = g_list_reverse(task); ags_task_thread_append_tasks(task_thread, task); } void ags_ffplayer_link_channel_launch_callback(AgsTask *task, AgsAudioSignal *audio_signal) { AgsChannel *channel; AgsAudioSignal *audio_signal_source_old; if(!AGS_IS_AUDIO_SIGNAL(audio_signal)){ return; } channel = AGS_LINK_CHANNEL(task)->channel; /* replace template audio signal */ audio_signal_source_old = ags_audio_signal_get_template(channel->first_recycling->audio_signal); g_object_ref(channel->first_recycling); ags_recycling_remove_audio_signal(channel->first_recycling, (gpointer) audio_signal_source_old); audio_signal->flags |= AGS_AUDIO_SIGNAL_TEMPLATE; ags_recycling_add_audio_signal(channel->first_recycling, audio_signal); // g_object_unref(channel->first_recycling); g_object_unref(task); } gboolean ags_ffplayer_drawing_area_expose_callback(GtkWidget *widget, GdkEventExpose *event, AgsFFPlayer *ffplayer) { ags_ffplayer_paint(ffplayer); return(FALSE); } gboolean ags_ffplayer_drawing_area_configure_callback(GtkWidget *widget, GdkEventConfigure *event, AgsFFPlayer *ffplayer) { ags_ffplayer_paint(ffplayer); return(FALSE); } gboolean ags_ffplayer_drawing_area_button_press_callback(GtkWidget *widget, AgsFFPlayer *ffplayer) { return(FALSE); } void ags_ffplayer_hscrollbar_value_changed(GtkAdjustment *adjustment, AgsFFPlayer *ffplayer) { ags_ffplayer_paint(ffplayer); } gsequencer-0.6.37/src/ags/X/machine/ags_drum_input_line_callbacks.c0000644000175000017500000000414712626272146022255 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void ags_drum_input_line_parent_set_callback(GtkWidget *widget, GtkObject *old_parent, AgsDrumInputLine *drum_input_line) { AgsDrum *drum; if(old_parent != NULL){ return; } drum = (AgsDrum *) gtk_widget_get_ancestor(widget, AGS_TYPE_DRUM); if(drum != NULL && G_OBJECT(AGS_MACHINE(drum)->audio) != NULL){ /* AgsAudio */ g_signal_connect_after(G_OBJECT(AGS_MACHINE(drum)->audio), "set_pads\0", G_CALLBACK(ags_drum_input_line_audio_set_pads_callback), drum_input_line); } } void ags_drum_input_line_audio_set_pads_callback(AgsAudio *audio, GType type, guint pads, guint pads_old, AgsDrumInputLine *drum_input_line) { /* empty */ } gsequencer-0.6.37/src/ags/X/machine/ags_matrix_callbacks.c0000644000175000017500000002112512626272146020357 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include extern const char *AGS_MATRIX_INDEX; extern pthread_mutex_t ags_application_mutex; void ags_matrix_parent_set_callback(GtkWidget *widget, GtkObject *old_parent, AgsMatrix *matrix) { AgsWindow *window; if(old_parent != NULL) return; window = (AgsWindow *) gtk_widget_get_toplevel(widget); AGS_MACHINE(matrix)->name = g_strdup_printf("Default %d\0", ags_window_find_machine_counter(window, AGS_TYPE_MATRIX)->counter); ags_window_increment_machine_counter(window, AGS_TYPE_MATRIX); } void ags_matrix_index_callback(GtkWidget *widget, AgsMatrix *matrix) { GtkToggleButton *toggle; if(matrix->selected != NULL){ if(GTK_TOGGLE_BUTTON(widget) != matrix->selected){ AgsAudio *audio; AgsCopyPatternAudio *recall_copy_pattern_audio, *play_copy_pattern_audio; GList *list; guint64 index1; GValue play_value = {0,}; GValue recall_value = {0,}; audio = AGS_MACHINE(matrix)->audio; /* refresh GUI */ toggle = matrix->selected; matrix->selected = NULL; gtk_toggle_button_set_active(toggle, FALSE); matrix->selected = (GtkToggleButton*) widget; gtk_widget_queue_draw(matrix->cell_pattern); /* */ AGS_MACHINE(matrix)->bank_1 = index1 = ((guint) g_ascii_strtoull(matrix->selected->button.label_text, NULL, 10)) - 1; /* recall */ list = ags_recall_find_type(audio->recall, AGS_TYPE_COPY_PATTERN_AUDIO); if(list != NULL){ recall_copy_pattern_audio = AGS_COPY_PATTERN_AUDIO(list->data); } g_value_init(&recall_value, G_TYPE_UINT64); g_value_set_uint64(&recall_value, index1); ags_port_safe_write(recall_copy_pattern_audio->bank_index_1, &recall_value); g_value_unset(&recall_value); }else{ toggle = matrix->selected; matrix->selected = NULL; gtk_toggle_button_set_active(toggle, TRUE); matrix->selected = toggle; } } } void ags_matrix_length_spin_callback(GtkWidget *spin_button, AgsMatrix *matrix) { AgsWindow *window; AgsApplySequencerLength *apply_sequencer_length; AgsThread *audio_loop; AgsTaskThread *task_thread; AgsMain *ags_main; gdouble length; window = (AgsWindow *) gtk_widget_get_toplevel(GTK_WIDGET(matrix)); ags_main = window->ags_main; /* get audio loop */ pthread_mutex_lock(&(ags_application_mutex)); audio_loop = ags_main->main_loop; pthread_mutex_unlock(&(ags_application_mutex)); /* find task thread */ task_thread = ags_thread_find_type(audio_loop, AGS_TYPE_TASK_THREAD); length = GTK_SPIN_BUTTON(spin_button)->adjustment->value; apply_sequencer_length = ags_apply_sequencer_length_new(G_OBJECT(AGS_MACHINE(matrix)->audio), length); ags_task_thread_append_task(task_thread, AGS_TASK(apply_sequencer_length)); } void ags_matrix_loop_button_callback(GtkWidget *button, AgsMatrix *matrix) { AgsCountBeatsAudio *count_beats_audio; GList *list; gboolean loop; loop = (GTK_TOGGLE_BUTTON(button)->active) ? TRUE: FALSE; /* AgsCopyPatternAudio */ list = AGS_MACHINE(matrix)->audio->play; while((list = ags_recall_find_type(list, AGS_TYPE_COUNT_BEATS_AUDIO)) != NULL){ count_beats_audio = AGS_COUNT_BEATS_AUDIO(list->data); count_beats_audio->sequencer_loop->port_value.ags_port_boolean = loop; list = list->next; } list = AGS_MACHINE(matrix)->audio->recall; while((list = ags_recall_find_type(list, AGS_TYPE_COUNT_BEATS_AUDIO)) != NULL){ count_beats_audio = AGS_COUNT_BEATS_AUDIO(list->data); count_beats_audio->sequencer_loop->port_value.ags_port_boolean = loop; list = list->next; } } void ags_matrix_tact_callback(AgsAudio *audio, AgsRecallID *recall_id, AgsMatrix *matrix) { AgsWindow *window; AgsCountBeatsAudio *play_count_beats_audio; AgsCountBeatsAudioRun *play_count_beats_audio_run; AgsToggleLed *toggle_led; AgsMutexManager *mutex_manager; AgsThread *audio_loop; AgsTaskThread *task_thread; AgsMain *ags_main; GList *list; guint counter, active_led; gdouble active_led_old, active_led_new; GValue value = {0,}; pthread_mutex_t *audio_mutex; if((AGS_RECALL_ID_SEQUENCER & (recall_id->flags)) == 0){ return; } window = gtk_widget_get_ancestor(matrix, AGS_TYPE_WINDOW); ags_main = window->ags_main; /* get audio loop */ pthread_mutex_lock(&(ags_application_mutex)); audio_loop = ags_main->main_loop; pthread_mutex_unlock(&(ags_application_mutex)); /* find task thread */ task_thread = ags_thread_find_type(audio_loop, AGS_TYPE_TASK_THREAD); /* get audio mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) AGS_MACHINE(matrix)->audio); pthread_mutex_unlock(&(ags_application_mutex)); /* get some recalls */ pthread_mutex_lock(audio_mutex); list = ags_recall_find_type(audio->play, AGS_TYPE_COUNT_BEATS_AUDIO); if(list != NULL){ play_count_beats_audio = AGS_COUNT_BEATS_AUDIO(list->data); } list = ags_recall_find_type_with_recycling_container(audio->play, AGS_TYPE_COUNT_BEATS_AUDIO_RUN, (GObject *) recall_id->recycling_container); if(list != NULL){ play_count_beats_audio_run = AGS_COUNT_BEATS_AUDIO_RUN(list->data); } /* set optical feedback */ active_led_new = play_count_beats_audio_run->sequencer_counter; matrix->cell_pattern->active_led = (guint) active_led_new; if(active_led_new == 0){ g_value_init(&value, G_TYPE_DOUBLE); ags_port_safe_read(play_count_beats_audio->sequencer_loop_end, &value); active_led_old = g_value_get_double(&value) - 1.0; g_value_unset(&value); }else{ active_led_old = (gdouble) matrix->cell_pattern->active_led - 1.0; } //FIXME:JK: memory leak of GList toggle_led = ags_toggle_led_new(gtk_container_get_children(GTK_CONTAINER(matrix->cell_pattern->led)), (guint) active_led_new, (guint) active_led_old); ags_task_thread_append_task(task_thread, AGS_TASK(toggle_led)); pthread_mutex_unlock(audio_mutex); } void ags_matrix_done_callback(AgsAudio *audio, AgsRecallID *recall_id, AgsMatrix *matrix) { GList *devout_play; gboolean all_done; devout_play = AGS_DEVOUT_PLAY_DOMAIN(audio->devout_play_domain)->devout_play; /* check unset */ all_done = TRUE; while(devout_play != NULL){ if(AGS_DEVOUT_PLAY(devout_play->data)->recall_id[1] != NULL){ all_done = FALSE; break; } devout_play = devout_play->next; } if(all_done){ GList *list, *list_start; /* unset led */ list_start = list = gtk_container_get_children(GTK_CONTAINER(matrix->cell_pattern->led)); while(list != NULL){ ags_led_unset_active(AGS_LED(list->data)); list = list->next; } g_list_free(list_start); } } gsequencer-0.6.37/src/ags/X/machine/ags_matrix.c0000644000175000017500000007117012633023150016350 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define AGS_MATRIX_INPUT_LINE_MAPPED_KEY "AGS_MATRIX_INPUT_LINE_MAPPED_KEY" #define AGS_MATRIX_INPUT_LINE_MAPPED_DATA "AGS_MATRIX_INPUT_LINE_MAPPED_DATA" void ags_matrix_class_init(AgsMatrixClass *matrix); void ags_matrix_connectable_interface_init(AgsConnectableInterface *connectable); void ags_matrix_plugin_interface_init(AgsPluginInterface *plugin); void ags_matrix_init(AgsMatrix *matrix); void ags_matrix_finalize(GObject *gobject); void ags_matrix_connect(AgsConnectable *connectable); void ags_matrix_disconnect(AgsConnectable *connectable); void ags_matrix_show(GtkWidget *widget); void ags_matrix_show_all(GtkWidget *widget); void ags_matrix_map_recall(AgsMachine *machine); gchar* ags_matrix_get_name(AgsPlugin *plugin); void ags_matrix_set_name(AgsPlugin *plugin, gchar *name); gchar* ags_matrix_get_xml_type(AgsPlugin *plugin); void ags_matrix_set_xml_type(AgsPlugin *plugin, gchar *xml_type); void ags_matrix_read(AgsFile *file, xmlNode *node, AgsPlugin *plugin); void ags_matrix_read_resolve_audio(AgsFileLookup *file_lookup, AgsMachine *machine); void ags_matrix_launch_task(AgsFileLaunch *file_launch, AgsMatrix *matrix); xmlNode* ags_matrix_write(AgsFile *file, xmlNode *parent, AgsPlugin *plugin); void ags_matrix_set_audio_channels(AgsAudio *audio, guint audio_channels, guint audio_channels_old, gpointer data); void ags_matrix_set_pads(AgsAudio *audio, GType type, guint pads, guint pads_old, gpointer data); /** * SECTION:ags_matrix * @short_description: matrix sequencer * @title: AgsMatrix * @section_id: * @include: ags/X/machine/ags_matrix.h * * The #AgsMatrix is a composite widget to act as matrix sequencer. */ static gpointer ags_matrix_parent_class = NULL; static AgsConnectableInterface *ags_matrix_parent_connectable_interface; extern const char *AGS_COPY_PATTERN; const char *AGS_MATRIX_INDEX = "AgsMatrixIndex\0"; extern pthread_mutex_t ags_application_mutex; GType ags_matrix_get_type(void) { static GType ags_type_matrix = 0; if(!ags_type_matrix){ static const GTypeInfo ags_matrix_info = { sizeof(AgsMatrixClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_matrix_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(AgsMatrix), 0, /* n_preallocs */ (GInstanceInitFunc) ags_matrix_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_matrix_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_plugin_interface_info = { (GInterfaceInitFunc) ags_matrix_plugin_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_matrix = g_type_register_static(AGS_TYPE_MACHINE, "AgsMatrix\0", &ags_matrix_info, 0); g_type_add_interface_static(ags_type_matrix, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_matrix, AGS_TYPE_PLUGIN, &ags_plugin_interface_info); } return(ags_type_matrix); } void ags_matrix_class_init(AgsMatrixClass *matrix) { GObjectClass *gobject; GtkWidgetClass *widget; AgsMachineClass *machine; ags_matrix_parent_class = g_type_class_peek_parent(matrix); /* GObjectClass */ gobject = (GObjectClass *) matrix; gobject->finalize = ags_matrix_finalize; /* GtkWidget */ widget = (GtkWidgetClass *) matrix; widget->show = ags_matrix_show; widget->show_all = ags_matrix_show_all; /* AgsMachine */ machine = (AgsMachineClass *) matrix; machine->map_recall = ags_matrix_map_recall; } void ags_matrix_connectable_interface_init(AgsConnectableInterface *connectable) { AgsConnectableInterface *ags_matrix_connectable_parent_interface; ags_matrix_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_matrix_connect; connectable->disconnect = ags_matrix_disconnect; } void ags_matrix_plugin_interface_init(AgsPluginInterface *plugin) { plugin->get_name = ags_matrix_get_name; plugin->set_name = ags_matrix_set_name; plugin->get_xml_type = ags_matrix_get_xml_type; plugin->set_xml_type = ags_matrix_set_xml_type; plugin->read = ags_matrix_read; plugin->write = ags_matrix_write; } void ags_matrix_init(AgsMatrix *matrix) { GtkFrame *frame; GtkTable *table; GtkToggleButton *button; GtkVBox *vbox; GtkHBox *hbox; AgsAudio *audio; GList *list; int i, j; g_signal_connect_after((GObject *) matrix, "parent_set\0", G_CALLBACK(ags_matrix_parent_set_callback), (gpointer) matrix); audio = AGS_MACHINE(matrix)->audio; audio->flags |= (AGS_AUDIO_OUTPUT_HAS_RECYCLING | AGS_AUDIO_INPUT_HAS_RECYCLING | AGS_AUDIO_SYNC | AGS_AUDIO_ASYNC | AGS_AUDIO_NOTATION_DEFAULT | AGS_AUDIO_HAS_NOTATION | AGS_AUDIO_PATTERN_MODE); // audio->audio_channels = 1; AGS_MACHINE(matrix)->input_pad_type = G_TYPE_NONE; AGS_MACHINE(matrix)->input_line_type = G_TYPE_NONE; AGS_MACHINE(matrix)->output_pad_type = G_TYPE_NONE; AGS_MACHINE(matrix)->output_line_type = G_TYPE_NONE; g_signal_connect_after(G_OBJECT(AGS_MACHINE(matrix)->audio), "set_audio_channels\0", G_CALLBACK(ags_matrix_set_audio_channels), NULL); g_signal_connect_after(G_OBJECT(AGS_MACHINE(matrix)->audio), "set_pads\0", G_CALLBACK(ags_matrix_set_pads), NULL); /* */ AGS_MACHINE(matrix)->flags |= (AGS_MACHINE_IS_SEQUENCER | AGS_MACHINE_REVERSE_NOTATION); AGS_MACHINE(matrix)->mapping_flags |= AGS_MACHINE_MONO; matrix->flags = 0; matrix->name = NULL; matrix->xml_type = "ags-matrix\0"; matrix->mapped_input_pad = 0; matrix->mapped_output_pad = 0; ags_machine_popup_add_edit_options(matrix, (AGS_MACHINE_POPUP_COPY_PATTERN)); /* create widgets */ frame = (GtkFrame *) (gtk_bin_get_child((GtkBin *) matrix)); matrix->table = (GtkTable *) gtk_table_new(4, 4, FALSE); gtk_container_add((GtkContainer *) frame, (GtkWidget *) matrix->table); AGS_MACHINE(matrix)->play = matrix->run = (GtkToggleButton *) gtk_toggle_button_new_with_label("run\0"); gtk_table_attach(matrix->table, (GtkWidget *) matrix->run, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 0, 0); table = (GtkTable *) gtk_table_new(3, 3, FALSE); gtk_table_attach(matrix->table, (GtkWidget *) table, 1, 2, 0, 2, GTK_FILL, GTK_FILL, 0, 0); matrix->selected = NULL; for(i = 0; i < 3; i++){ for(j = 0; j < 3; j++){ //TODO:JK: verify leak of string matrix->index[i * 3 + j] = button = (GtkToggleButton *) gtk_toggle_button_new_with_label(g_strdup_printf("%d\0", i * 3 + j +1)); g_object_set_data((GObject *) button, AGS_MATRIX_INDEX, GUINT_TO_POINTER(i * 3 + j)); gtk_table_attach(table, (GtkWidget *) button, j, j +1, i, i +1, GTK_FILL, GTK_FILL, 0, 0); } } matrix->selected = matrix->index[0]; gtk_toggle_button_set_active(matrix->selected, TRUE); /* sequencer */ matrix->cell_pattern = ags_cell_pattern_new(); gtk_table_attach(matrix->table, (GtkWidget *) matrix->cell_pattern, 2, 3, 0, 1, GTK_FILL, GTK_FILL, 0, 0); /* length and loop */ vbox = (GtkVBox *) gtk_vbox_new(FALSE, 0); gtk_table_attach(matrix->table, (GtkWidget *) vbox, 3, 4, 0, 1, GTK_FILL, GTK_FILL, 0, 0); hbox = (GtkHBox *) gtk_hbox_new(FALSE, 0); gtk_box_pack_start((GtkBox *) vbox, (GtkWidget *) hbox, FALSE, FALSE, 0); gtk_box_pack_start((GtkBox *) hbox, gtk_label_new("length\0"), FALSE, FALSE, 0); matrix->length_spin = (GtkSpinButton *) gtk_spin_button_new_with_range(1.0, 32.0, 1.0); matrix->length_spin->adjustment->value = 16.0; gtk_box_pack_start((GtkBox *) hbox, (GtkWidget *) matrix->length_spin, FALSE, FALSE, 0); matrix->loop_button = (GtkCheckButton *) gtk_check_button_new_with_label("loop\0"); gtk_box_pack_start((GtkBox *) vbox, (GtkWidget *) matrix->loop_button, FALSE, FALSE, 0); } void ags_matrix_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_matrix_parent_class)->finalize(gobject); } void ags_matrix_connect(AgsConnectable *connectable) { AgsMatrix *matrix; AgsDelayAudioRun *play_delay_audio_run; AgsRecallHandler *recall_handler; GList *list; int i; if((AGS_MACHINE_CONNECTED & (AGS_MACHINE(connectable)->flags)) != 0){ return; } ags_matrix_parent_connectable_interface->connect(connectable); /* AgsMatrix */ matrix = AGS_MATRIX(connectable); for(i = 0; i < 9; i++){ g_signal_connect (G_OBJECT (matrix->index[i]), "clicked\0", G_CALLBACK (ags_matrix_index_callback), (gpointer) matrix); } ags_connectable_connect(AGS_CONNECTABLE(matrix->cell_pattern)); g_signal_connect_after((GObject *) matrix->length_spin, "value-changed\0", G_CALLBACK(ags_matrix_length_spin_callback), (gpointer) matrix); g_signal_connect((GObject *) matrix->loop_button, "clicked\0", G_CALLBACK(ags_matrix_loop_button_callback), (gpointer) matrix); g_signal_connect_after(G_OBJECT(AGS_MACHINE(matrix)->audio), "tact\0", G_CALLBACK(ags_matrix_tact_callback), matrix); g_signal_connect_after(G_OBJECT(AGS_MACHINE(matrix)->audio), "done\0", G_CALLBACK(ags_matrix_done_callback), matrix); } void ags_matrix_disconnect(AgsConnectable *connectable) { AgsMatrix *matrix; ags_matrix_parent_connectable_interface->disconnect(connectable); /* AgsMatrix */ matrix = AGS_MATRIX(connectable); //TODO:JK: implement me } void ags_matrix_show(GtkWidget *widget) { GTK_WIDGET_CLASS(ags_matrix_parent_class)->show(widget); } void ags_matrix_show_all(GtkWidget *widget) { GTK_WIDGET_CLASS(ags_matrix_parent_class)->show_all(widget); } void ags_matrix_set_audio_channels(AgsAudio *audio, guint audio_channels, guint audio_channels_old, gpointer data) { printf("AgsMatrix only pads can be adjusted\n\0"); // _ags_audio_set_audio_channels(audio, audio_channels); } void ags_matrix_set_pads(AgsAudio *audio, GType type, guint pads, guint pads_old, gpointer data) { AgsMachine *machine; AgsMatrix *matrix; AgsChannel *channel, *source; AgsAudioSignal *audio_signal; AgsMutexManager *mutex_manager; guint i, j; gboolean grow; GValue value = {0,}; pthread_mutex_t *devout_mutex; pthread_mutex_t *audio_mutex; pthread_mutex_t *source_mutex; if(pads == pads_old){ return; } /* lookup audio mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); /* get machine */ pthread_mutex_lock(audio_mutex); matrix = (AgsMatrix *) audio->machine; pthread_mutex_unlock(audio_mutex); machine = AGS_MACHINE(matrix); /* set size request if needed */ if(g_type_is_a(type, AGS_TYPE_INPUT)){ if(pads < AGS_CELL_PATTERN_MAX_CONTROLS_SHOWN_VERTICALLY){ gtk_widget_set_size_request((GtkWidget *) matrix->cell_pattern, -1, pads * matrix->cell_pattern->cell_height + 1); }else if(pads_old < AGS_CELL_PATTERN_MAX_CONTROLS_SHOWN_VERTICALLY){ gtk_widget_set_size_request((GtkWidget *) matrix->cell_pattern, -1, AGS_CELL_PATTERN_MAX_CONTROLS_SHOWN_VERTICALLY * matrix->cell_pattern->cell_height + 1); } } if(pads_old < pads){ grow = TRUE; }else{ grow = FALSE; } if(g_type_is_a(type, AGS_TYPE_INPUT)){ AgsPattern *pattern; GList *list, *notation; pthread_mutex_lock(audio_mutex); source = audio->input; pthread_mutex_unlock(audio_mutex); if(grow){ /* create pattern */ source = ags_channel_nth(source, pads_old); while(source != NULL){ /* lookup source mutex */ pthread_mutex_lock(&(ags_application_mutex)); source_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) source); pthread_mutex_unlock(&(ags_application_mutex)); /* instantiate pattern */ pthread_mutex_lock(source_mutex); if(source->pattern == NULL){ source->pattern = g_list_alloc(); source->pattern->data = (gpointer) ags_pattern_new(); ags_pattern_set_dim((AgsPattern *) source->pattern->data, 1, 9, 32); } source = source->next; pthread_mutex_unlock(source_mutex); } if((AGS_MACHINE_MAPPED_RECALL & (machine->flags)) != 0){ ags_matrix_input_map_recall(matrix, pads_old); } }else{ matrix->mapped_input_pad = pads; /* empty */ } }else{ if(grow){ AgsChannel *current, *output; GList *recall; GList *list; guint stop; pthread_mutex_lock(audio_mutex); source = audio->output; pthread_mutex_unlock(audio_mutex); source = ags_channel_nth(audio->output, pads_old); if(source != NULL){ AgsDevout *devout; AgsRecycling *recycling; AgsAudioSignal *audio_signal; pthread_mutex_lock(audio_mutex); devout = audio->devout; pthread_mutex_unlock(audio_mutex); /* lookup source mutex */ pthread_mutex_lock(&(ags_application_mutex)); source_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) source); pthread_mutex_unlock(&(ags_application_mutex)); /* get recycling */ pthread_mutex_lock(source_mutex); recycling = source->first_recycling; pthread_mutex_unlock(source_mutex); /* instantiate template audio signal */ audio_signal = ags_audio_signal_new((GObject *) devout, (GObject *) recycling, NULL); audio_signal->flags |= AGS_AUDIO_SIGNAL_TEMPLATE; ags_recycling_add_audio_signal(recycling, audio_signal); ags_matrix_output_map_recall(matrix, pads_old); } }else{ matrix->mapped_output_pad = pads; /* empty */ } } } void ags_matrix_map_recall(AgsMachine *machine) { AgsWindow *window; AgsMatrix *matrix; AgsAudio *audio; AgsChannel *channel; AgsPattern *pattern; AgsDelayAudio *play_delay_audio; AgsDelayAudioRun *play_delay_audio_run; AgsCountBeatsAudio *play_count_beats_audio; AgsCountBeatsAudioRun *play_count_beats_audio_run; AgsCopyPatternAudio *recall_copy_pattern_audio; AgsCopyPatternAudioRun *recall_copy_pattern_audio_run; AgsPlayNotationAudio *play_notation; AgsCopyPatternChannel *copy_pattern_channel; AgsPlayNotationAudio *recall_notation_audio; AgsPlayNotationAudioRun *recall_notation_audio_run; GList *notation; GList *list; guint i, j; GValue value = {0,}; if((AGS_MACHINE_MAPPED_RECALL & (machine->flags)) != 0 || (AGS_MACHINE_PREMAPPED_RECALL & (machine->flags)) != 0){ return; } window = gtk_widget_get_ancestor(machine, AGS_TYPE_WINDOW); matrix = AGS_MATRIX(machine); audio = machine->audio; /* ags-delay */ ags_recall_factory_create(audio, NULL, NULL, "ags-delay\0", 0, 0, 0, 0, (AGS_RECALL_FACTORY_OUTPUT | AGS_RECALL_FACTORY_ADD | AGS_RECALL_FACTORY_PLAY), 0); list = ags_recall_find_type(audio->play, AGS_TYPE_DELAY_AUDIO_RUN); if(list != NULL){ play_delay_audio_run = AGS_DELAY_AUDIO_RUN(list->data); // AGS_RECALL(play_delay_audio_run)->flags |= AGS_RECALL_PERSISTENT; } /* ags-count-beats */ ags_recall_factory_create(audio, NULL, NULL, "ags-count-beats\0", 0, 0, 0, 0, (AGS_RECALL_FACTORY_OUTPUT | AGS_RECALL_FACTORY_ADD | AGS_RECALL_FACTORY_PLAY), 0); list = ags_recall_find_type(audio->play, AGS_TYPE_COUNT_BEATS_AUDIO_RUN); if(list != NULL){ play_count_beats_audio_run = AGS_COUNT_BEATS_AUDIO_RUN(list->data); /* set dependency */ g_object_set(G_OBJECT(play_count_beats_audio_run), "delay-audio-run\0", play_delay_audio_run, NULL); ags_seekable_seek(AGS_SEEKABLE(play_count_beats_audio_run), window->navigation->position_tact->adjustment->value * AGS_DEVOUT(audio->devout)->delay[AGS_DEVOUT(audio->devout)->tic_counter], TRUE); g_value_init(&value, G_TYPE_BOOLEAN); g_value_set_boolean(&value, gtk_toggle_button_get_active(window->navigation->loop)); ags_port_safe_write(AGS_COUNT_BEATS_AUDIO(AGS_RECALL_AUDIO_RUN(play_count_beats_audio_run)->recall_audio)->notation_loop, &value); } /* ags-copy-pattern */ ags_recall_factory_create(audio, NULL, NULL, "ags-copy-pattern\0", 0, audio->audio_channels, 0, audio->input_lines, (AGS_RECALL_FACTORY_INPUT | AGS_RECALL_FACTORY_ADD | AGS_RECALL_FACTORY_RECALL), 0); list = ags_recall_find_type(audio->recall, AGS_TYPE_COPY_PATTERN_AUDIO_RUN); if(list != NULL){ recall_copy_pattern_audio_run = AGS_COPY_PATTERN_AUDIO_RUN(list->data); /* set dependency */ g_object_set(G_OBJECT(recall_copy_pattern_audio_run), "delay-audio-run\0", play_delay_audio_run, "count-beats-audio-run\0", play_count_beats_audio_run, NULL); } /* set pattern object on port */ channel = ags_channel_pad_nth(audio->input, 0); for(i = 0; i < audio->input_pads; i++){ for(j = 0; j < audio->audio_channels; j++){ list = ags_recall_template_find_type(channel->recall, AGS_TYPE_COPY_PATTERN_CHANNEL); copy_pattern_channel = AGS_COPY_PATTERN_CHANNEL(list->data); list = channel->pattern; pattern = AGS_PATTERN(list->data); copy_pattern_channel->pattern->port_value.ags_port_object = (GObject *) pattern; ags_portlet_set_port(AGS_PORTLET(pattern), copy_pattern_channel->pattern); channel = channel->next; } } /* ags-play-notation */ ags_recall_factory_create(audio, NULL, NULL, "ags-play-notation\0", 0, 0, 0, 0, (AGS_RECALL_FACTORY_INPUT | AGS_RECALL_FACTORY_ADD | AGS_RECALL_FACTORY_RECALL), 0); list = ags_recall_find_type(audio->recall, AGS_TYPE_PLAY_NOTATION_AUDIO_RUN); if(list != NULL){ recall_notation_audio_run = AGS_PLAY_NOTATION_AUDIO_RUN(list->data); /* set dependency */ g_object_set(G_OBJECT(recall_notation_audio_run), "delay-audio-run\0", play_delay_audio_run, NULL); /* set dependency */ g_object_set(G_OBJECT(recall_notation_audio_run), "count-beats-audio-run\0", play_count_beats_audio_run, NULL); } /* depending on destination */ ags_matrix_input_map_recall(matrix, 0); /* depending on destination */ ags_matrix_output_map_recall(matrix, 0); AGS_MACHINE_CLASS(ags_matrix_parent_class)->map_recall(machine); } void ags_matrix_input_map_recall(AgsMatrix *matrix, guint input_pad_start) { AgsAudio *audio; AgsChannel *source, *current; GList *list; audio = AGS_MACHINE(matrix)->audio; if(matrix->mapped_input_pad > input_pad_start){ return; } source = ags_channel_nth(audio->input, input_pad_start * audio->audio_channels); /* map dependending on output */ current = source; while(current != NULL){ /* ags-buffer */ ags_recall_factory_create(audio, NULL, NULL, "ags-buffer\0", 0, audio->audio_channels, current->pad, current->pad + 1, (AGS_RECALL_FACTORY_INPUT | AGS_RECALL_FACTORY_RECALL | AGS_RECALL_FACTORY_ADD), 0); current = current->next_pad; } /* */ current = source; while(current != NULL){ /* ags-play */ ags_recall_factory_create(audio, NULL, NULL, "ags-play\0", current->audio_channel, current->audio_channel + 1, current->pad, current->pad + 1, (AGS_RECALL_FACTORY_INPUT | AGS_RECALL_FACTORY_PLAY | AGS_RECALL_FACTORY_ADD), 0); current = current->next_pad; } /* */ current = source; while(current != NULL){ /* ags-stream */ ags_recall_factory_create(audio, NULL, NULL, "ags-stream\0", current->audio_channel, current->audio_channel + 1, current->pad, current->pad + 1, (AGS_RECALL_FACTORY_INPUT | AGS_RECALL_FACTORY_PLAY | AGS_RECALL_FACTORY_RECALL | AGS_RECALL_FACTORY_ADD), 0); current = current->next_pad; } matrix->mapped_input_pad = audio->input_pads; } void ags_matrix_output_map_recall(AgsMatrix *matrix, guint output_pad_start) { AgsAudio *audio; AgsChannel *source, *input, *current; AgsDelayAudio *recall_delay_audio; AgsCountBeatsAudioRun *recall_count_beats_audio_run; GList *list; audio = AGS_MACHINE(matrix)->audio; if(matrix->mapped_output_pad > output_pad_start){ return; } source = ags_channel_nth(audio->output, output_pad_start * audio->audio_channels); /* remap for input */ input = audio->input; while(input != NULL){ /* ags-buffer */ ags_recall_factory_create(audio, NULL, NULL, "ags-buffer\0", 0, audio->audio_channels, input->pad, input->pad + 1, (AGS_RECALL_FACTORY_INPUT | AGS_RECALL_FACTORY_RECALL | AGS_RECALL_FACTORY_ADD), 0); input = input->next_pad; } current = ags_channel_nth(audio->output, output_pad_start * audio->audio_channels); while(current != NULL){ /* ags-stream */ ags_recall_factory_create(audio, NULL, NULL, "ags-stream\0", current->audio_channel, current->audio_channel + 1, current->pad, current->pad + 1, (AGS_RECALL_FACTORY_OUTPUT | AGS_RECALL_FACTORY_PLAY | AGS_RECALL_FACTORY_ADD), 0); current = current->next; } matrix->mapped_output_pad = audio->output_pads; } gchar* ags_matrix_get_name(AgsPlugin *plugin) { return(AGS_MATRIX(plugin)->name); } void ags_matrix_set_name(AgsPlugin *plugin, gchar *name) { AGS_MATRIX(plugin)->name = name; } gchar* ags_matrix_get_xml_type(AgsPlugin *plugin) { return(AGS_MATRIX(plugin)->xml_type); } void ags_matrix_set_xml_type(AgsPlugin *plugin, gchar *xml_type) { AGS_MATRIX(plugin)->xml_type = xml_type; } void ags_matrix_read(AgsFile *file, xmlNode *node, AgsPlugin *plugin) { AgsMatrix *gobject; AgsFileLookup *file_lookup; AgsFileLaunch *file_launch; GList *list; gobject = AGS_MATRIX(plugin); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", gobject, NULL)); /* lookup */ list = file->lookup; while((list = ags_file_lookup_find_by_node(list, node->parent)) != NULL){ file_lookup = AGS_FILE_LOOKUP(list->data); if(g_signal_handler_find(list->data, G_SIGNAL_MATCH_FUNC, 0, 0, NULL, ags_file_read_machine_resolve_audio, NULL) != 0){ g_signal_connect_after(G_OBJECT(file_lookup), "resolve\0", G_CALLBACK(ags_matrix_read_resolve_audio), gobject); break; } list = list->next; } /* launch */ file_launch = (AgsFileLaunch *) g_object_new(AGS_TYPE_FILE_LAUNCH, "node\0", node, "file\0", file, NULL); g_signal_connect(G_OBJECT(file_launch), "start\0", G_CALLBACK(ags_matrix_launch_task), gobject); ags_file_add_launch(file, (GObject *) file_launch); } void ags_matrix_read_resolve_audio(AgsFileLookup *file_lookup, AgsMachine *machine) { AgsMatrix *matrix; matrix = AGS_MATRIX(machine); g_signal_connect_after(G_OBJECT(machine->audio), "set_audio_channels\0", G_CALLBACK(ags_matrix_set_audio_channels), matrix); g_signal_connect_after(G_OBJECT(machine->audio), "set_pads\0", G_CALLBACK(ags_matrix_set_pads), matrix); if((AGS_MACHINE_PREMAPPED_RECALL & (machine->flags)) == 0){ ags_matrix_output_map_recall(matrix, 0); ags_matrix_input_map_recall(matrix, 0); }else{ matrix->mapped_output_pad = machine->audio->output_pads; matrix->mapped_input_pad = machine->audio->input_pads; } } void ags_matrix_launch_task(AgsFileLaunch *file_launch, AgsMatrix *matrix) { xmlNode *node; guint64 length, index; node = file_launch->node; /* length */ length = (gdouble) g_ascii_strtod(xmlGetProp(node, "length\0"), NULL); gtk_spin_button_set_value(matrix->length_spin, length); /* loop */ if(!g_strcmp0(xmlGetProp(node, "loop\0"), AGS_FILE_TRUE)){ gtk_toggle_button_set_active((GtkToggleButton *) matrix->loop_button, TRUE); } /* index */ index = g_ascii_strtoull(xmlGetProp(node, "bank-index-0\0"), NULL, 10); if(index != 0){ gtk_toggle_button_set_active(matrix->index[0], FALSE); gtk_toggle_button_set_active(matrix->index[index], TRUE); matrix->selected = matrix->index[index]; } } xmlNode* ags_matrix_write(AgsFile *file, xmlNode *parent, AgsPlugin *plugin) { AgsMatrix *matrix; xmlNode *node; GList *list; gchar *id; guint i; gint history; matrix = AGS_MATRIX(plugin); id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-matrix\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", matrix, NULL)); xmlNewProp(node, "length\0", g_strdup_printf("%d\0", (gint) gtk_spin_button_get_value(matrix->length_spin))); for(i = 0; matrix->selected != matrix->index[i]; i++); xmlNewProp(node, "bank-index-0\0", g_strdup_printf("%d\0", i)); xmlNewProp(node, "loop\0", g_strdup_printf("%s\0", ((gtk_toggle_button_get_active((GtkToggleButton *) matrix->loop_button)) ? AGS_FILE_TRUE: AGS_FILE_FALSE))); xmlAddChild(parent, node); return(node); } /** * ags_matrix_new: * @devout: the assigned devout. * * Creates an #AgsMatrix * * Returns: a new #AgsMatrix * * Since: 0.3 */ AgsMatrix* ags_matrix_new(GObject *devout) { AgsMatrix *matrix; GValue value = {0,}; matrix = (AgsMatrix *) g_object_new(AGS_TYPE_MATRIX, NULL); if(devout != NULL){ g_value_init(&value, G_TYPE_OBJECT); g_value_set_object(&value, devout); g_object_set_property(G_OBJECT(AGS_MACHINE(matrix)->audio), "devout\0", &value); g_value_unset(&value); } return(matrix); } gsequencer-0.6.37/src/ags/X/machine/ags_drum_output_line_callbacks.h0000644000175000017500000000235512621463700022453 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_DRUM_OUTPUT_LINE_CALLBACKS_H__ #define __AGS_DRUM_OUTPUT_LINE_CALLBACKS_H__ #include #include int ags_drum_output_line_parent_set_callback(GtkWidget *widget, GtkObject *old_parent, gpointer data); void ags_drum_output_line_set_pads_callback(AgsAudio *audio, GType channel_type, guint pads_new, guint pads_old, AgsDrumOutputLine *output_line); #endif /*__AGS_DRUM_OUTPUT_LINE_CALLBACKS_H__*/ gsequencer-0.6.37/src/ags/X/machine/ags_drum.h0000644000175000017500000000447512626272146016041 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_DRUM_H__ #define __AGS_DRUM_H__ #include #include #include #include #include #include #include #define AGS_TYPE_DRUM (ags_drum_get_type()) #define AGS_DRUM(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_DRUM, AgsDrum)) #define AGS_DRUM_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_DRUM, AgsDrumClass)) #define AGS_IS_DRUM(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_DRUM)) #define AGS_IS_DRUM_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_DRUM)) #define AGS_DRUM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_DRUM, AgsDrumClass)) typedef struct _AgsDrum AgsDrum; typedef struct _AgsDrumClass AgsDrumClass; struct _AgsDrum { AgsMachine machine; guint flags; gchar *name; gchar *xml_type; GtkButton *open; GtkWidget *open_dialog; GtkCheckButton *loop_button; GtkSpinButton *length_spin; GtkToggleButton *run; GtkVBox *vbox; GtkHBox *input_pad; GtkVBox *output_pad; GtkToggleButton *selected_edit_button; AgsDrumInputPad *selected_pad; AgsLine *selected_line; GtkToggleButton *index0[4]; GtkToggleButton *selected0; GtkToggleButton *index1[12]; GtkToggleButton *selected1; AgsPatternBox *pattern_box; }; struct _AgsDrumClass { AgsMachineClass machine; }; GType ags_drum_get_type(void); AgsDrum* ags_drum_new(GObject *devout); #endif /*__AGS_DRUM_H__*/ gsequencer-0.6.37/src/ags/X/machine/ags_drum_input_pad.c0000644000175000017500000002613312626272146020072 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include void ags_drum_input_pad_class_init(AgsDrumInputPadClass *drum_input_pad); void ags_drum_input_pad_connectable_interface_init(AgsConnectableInterface *connectable); void ags_drum_input_pad_plugin_interface_init(AgsPluginInterface *plugin); void ags_drum_input_pad_init(AgsDrumInputPad *drum_input_pad); static void ags_drum_input_pad_finalize(GObject *gobject); void ags_drum_input_pad_connect(AgsConnectable *connectable); void ags_drum_input_pad_disconnect(AgsConnectable *connectable); gchar* ags_drum_input_pad_get_name(AgsPlugin *plugin); void ags_drum_input_pad_set_name(AgsPlugin *plugin, gchar *name); gchar* ags_drum_input_pad_get_xml_type(AgsPlugin *plugin); void ags_drum_input_pad_set_xml_type(AgsPlugin *plugin, gchar *xml_type); void ags_drum_input_pad_read(AgsFile *file, xmlNode *node, AgsPlugin *plugin); void ags_drum_input_pad_launch_task(AgsFileLaunch *file_launch, AgsDrumInputPad *drum_input_pad); xmlNode* ags_drum_input_pad_write(AgsFile *file, xmlNode *parent, AgsPlugin *plugin); void ags_drum_input_pad_set_channel(AgsPad *pad, AgsChannel *channel); void ags_drum_input_pad_resize_lines(AgsPad *pad, GType line_type, guint audio_channels, guint audio_channels_old); /** * SECTION:ags_drum_input_pad * @short_description: drum sequencer input pad * @title: AgsDrumInputPad * @section_id: * @include: ags/X/machine/ags_drum_input_pad.h * * The #AgsDrumInputPad is a composite widget to act as drum sequencer input pad. */ static gpointer ags_drum_input_pad_parent_class = NULL; static AgsConnectableInterface *ags_drum_input_pad_parent_connectable_interface; GType ags_drum_input_pad_get_type() { static GType ags_type_drum_input_pad = 0; if(!ags_type_drum_input_pad){ static const GTypeInfo ags_drum_input_pad_info = { sizeof(AgsDrumInputPadClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_drum_input_pad_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(AgsDrumInputPad), 0, /* n_preallocs */ (GInstanceInitFunc) ags_drum_input_pad_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_drum_input_pad_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_plugin_interface_info = { (GInterfaceInitFunc) ags_drum_input_pad_plugin_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_drum_input_pad = g_type_register_static(AGS_TYPE_PAD, "AgsDrumInputPad\0", &ags_drum_input_pad_info, 0); g_type_add_interface_static(ags_type_drum_input_pad, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_drum_input_pad, AGS_TYPE_PLUGIN, &ags_plugin_interface_info); } return(ags_type_drum_input_pad); } void ags_drum_input_pad_class_init(AgsDrumInputPadClass *drum_input_pad) { AgsPadClass *pad; GObjectClass *gobject; ags_drum_input_pad_parent_class = g_type_class_peek_parent(drum_input_pad); /* */ gobject = (GObjectClass *) drum_input_pad; gobject->finalize = ags_drum_input_pad_finalize; /* */ pad = (AgsPadClass *) drum_input_pad; pad->set_channel = ags_drum_input_pad_set_channel; pad->resize_lines = ags_drum_input_pad_resize_lines; } void ags_drum_input_pad_connectable_interface_init(AgsConnectableInterface *connectable) { ags_drum_input_pad_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_drum_input_pad_connect; connectable->disconnect = ags_drum_input_pad_disconnect; } void ags_drum_input_pad_plugin_interface_init(AgsPluginInterface *plugin) { plugin->get_name = ags_drum_input_pad_get_name; plugin->set_name = ags_drum_input_pad_set_name; plugin->get_xml_type = ags_drum_input_pad_get_xml_type; plugin->set_xml_type = ags_drum_input_pad_set_xml_type; plugin->read = ags_drum_input_pad_read; plugin->write = ags_drum_input_pad_write; } void ags_drum_input_pad_init(AgsDrumInputPad *drum_input_pad) { AgsPad *pad; GtkHBox *hbox; drum_input_pad->flags = 0; drum_input_pad->name = NULL; drum_input_pad->xml_type = "ags-drum-input-pad\0"; pad = (AgsPad *) drum_input_pad; hbox = (GtkHBox *) gtk_hbox_new(FALSE, 0); gtk_box_pack_start((GtkBox *) pad, (GtkWidget *) hbox, FALSE, TRUE, 0); gtk_box_reorder_child((GtkBox *) pad, (GtkWidget *) hbox, 0); drum_input_pad->open = (GtkButton *) gtk_button_new(); gtk_container_add((GtkContainer *) drum_input_pad->open, (GtkWidget *) gtk_image_new_from_stock(GTK_STOCK_OPEN, GTK_ICON_SIZE_BUTTON)); gtk_box_pack_start((GtkBox *) hbox, (GtkWidget *) drum_input_pad->open, TRUE, TRUE, 0); AGS_PAD(drum_input_pad)->play = drum_input_pad->play = (GtkToggleButton *) gtk_toggle_button_new(); gtk_container_add((GtkContainer *) drum_input_pad->play, (GtkWidget *) gtk_image_new_from_stock(GTK_STOCK_MEDIA_PLAY, GTK_ICON_SIZE_BUTTON)); gtk_box_pack_start((GtkBox *) hbox, (GtkWidget *) drum_input_pad->play, TRUE, TRUE, 0); drum_input_pad->edit = (GtkToggleButton *) gtk_toggle_button_new_with_label("edit\0"); gtk_box_pack_start((GtkBox *) pad, (GtkWidget *) drum_input_pad->edit, FALSE, FALSE, 0); drum_input_pad->pad_open_play_ref = 0; drum_input_pad->pad_open_recalls = NULL; drum_input_pad->file_chooser = NULL; drum_input_pad->pad_play_ref = 0; } static void ags_drum_input_pad_finalize(GObject *gobject) { AgsDrumInputPad *drum_input_pad; drum_input_pad = AGS_DRUM_INPUT_PAD(gobject); //FIXME:JK: won't be called //NOTE:JK: work-around in ags_drum.c if(drum_input_pad->file_chooser != NULL){ // gtk_widget_destroy(drum_input_pad->file_chooser); } G_OBJECT_CLASS(ags_drum_input_pad_parent_class)->finalize(gobject); } void ags_drum_input_pad_connect(AgsConnectable *connectable) { AgsDrumInputPad *drum_input_pad; drum_input_pad = AGS_DRUM_INPUT_PAD(connectable); if((AGS_PAD_CONNECTED & (AGS_PAD(drum_input_pad)->flags)) != 0){ return; } ags_drum_input_pad_parent_connectable_interface->connect(connectable); /* AgsDrumInputPad */ g_signal_connect(G_OBJECT(drum_input_pad->open), "clicked\0", G_CALLBACK(ags_drum_input_pad_open_callback), (gpointer) drum_input_pad); g_signal_connect_after(G_OBJECT(drum_input_pad->play), "toggled\0", G_CALLBACK(ags_drum_input_pad_play_callback), (gpointer) drum_input_pad); g_signal_connect(G_OBJECT(drum_input_pad->edit), "clicked\0", G_CALLBACK(ags_drum_input_pad_edit_callback), (gpointer) drum_input_pad); } void ags_drum_input_pad_disconnect(AgsConnectable *connectable) { ags_drum_input_pad_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_drum_input_pad_set_channel(AgsPad *pad, AgsChannel *channel) { AGS_PAD_CLASS(ags_drum_input_pad_parent_class)->set_channel(pad, channel); /* empty */ } void ags_drum_input_pad_resize_lines(AgsPad *pad, GType line_type, guint audio_channels, guint audio_channels_old) { AGS_PAD_CLASS(ags_drum_input_pad_parent_class)->resize_lines(pad, line_type, audio_channels, audio_channels_old); /* empty */ } gchar* ags_drum_input_pad_get_name(AgsPlugin *plugin) { return(AGS_DRUM_INPUT_PAD(plugin)->name); } void ags_drum_input_pad_set_name(AgsPlugin *plugin, gchar *name) { AGS_DRUM_INPUT_PAD(plugin)->name = name; } gchar* ags_drum_input_pad_get_xml_type(AgsPlugin *plugin) { return(AGS_DRUM_INPUT_PAD(plugin)->xml_type); } void ags_drum_input_pad_set_xml_type(AgsPlugin *plugin, gchar *xml_type) { AGS_DRUM_INPUT_PAD(plugin)->xml_type = xml_type; } void ags_drum_input_pad_read(AgsFile *file, xmlNode *node, AgsPlugin *plugin) { AgsDrumInputPad *gobject; AgsFileLaunch *file_launch; gobject = AGS_DRUM_INPUT_PAD(plugin); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", gobject, NULL)); /* */ file_launch = (AgsFileLaunch *) g_object_new(AGS_TYPE_FILE_LAUNCH, "node\0", node, "file\0", file, NULL); g_signal_connect(G_OBJECT(file_launch), "start\0", G_CALLBACK(ags_drum_input_pad_launch_task), gobject); ags_file_add_launch(file, (GObject *) file_launch); } void ags_drum_input_pad_launch_task(AgsFileLaunch *file_launch, AgsDrumInputPad *drum_input_pad) { xmlNode *node; node = file_launch->node; if(!xmlStrncmp(xmlGetProp(node, "edit\0"), AGS_FILE_TRUE, 5)){ gtk_button_clicked(drum_input_pad->edit); } } xmlNode* ags_drum_input_pad_write(AgsFile *file, xmlNode *parent, AgsPlugin *plugin) { AgsDrumInputPad *drum_input_pad; xmlNode *node; gchar *id; drum_input_pad = AGS_DRUM_INPUT_PAD(plugin); node = NULL; if(gtk_toggle_button_get_active(drum_input_pad->edit)){ id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-drum-input-pad\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", drum_input_pad, NULL)); xmlNewProp(node, "edit\0", g_strdup_printf("%s\0", AGS_FILE_TRUE)); xmlAddChild(parent, node); } return(node); } /** * ags_drum_input_pad_new: * @channel: the assigned channel * * Creates an #AgsDrumInputPad * * Returns: a new #AgsDrumInputPad * * Since: 0.4 */ AgsDrumInputPad* ags_drum_input_pad_new(AgsChannel *channel) { AgsDrumInputPad *drum_input_pad; drum_input_pad = (AgsDrumInputPad *) g_object_new(AGS_TYPE_DRUM_INPUT_PAD, "channel\0", channel, NULL); return(drum_input_pad); } gsequencer-0.6.37/src/ags/X/machine/ags_drum_output_line_callbacks.c0000644000175000017500000000546212621463700022450 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include int ags_drum_output_line_parent_set_callback(GtkWidget *widget, GtkObject *old_parent, gpointer data) { AgsDrumOutputLine *drum_output_line; if(old_parent != NULL) return(0); drum_output_line = AGS_DRUM_OUTPUT_LINE(widget); if(AGS_LINE(drum_output_line)->channel != NULL){ /* AgsDrum *drum; AgsChannel *channel; AgsAudioSignal *audio_signal; AgsDelaySharedAudio *delay_shared_audio; GList *recall_shared; guint stop; drum = (AgsDrum *) gtk_widget_get_ancestor(widget, AGS_TYPE_DRUM); channel = AGS_LINE(drum_output_line)->channel; recall_shared = ags_recall_shared_find_type(AGS_AUDIO(channel->audio)->recall_shared, AGS_TYPE_DELAY_SHARED_AUDIO); if(recall_shared != NULL){ delay_shared_audio = (AgsDelaySharedAudio *) recall_shared->data; stop = ((guint) drum->length_spin->adjustment->value) * (delay_shared_audio->delay + 1); }else{ stop = 1; } audio_signal = ags_audio_signal_get_template(channel->first_recycling->audio_signal); ags_audio_signal_stream_resize(audio_signal, stop); */ } return(0); } void ags_drum_output_line_set_pads_callback(AgsAudio *audio, GType channel_type, guint pads_new, guint pads_old, AgsDrumOutputLine *output_line) { if(channel_type == AGS_TYPE_INPUT){ if(pads_new > pads_old){ AgsChannel *input; input = ags_channel_pad_nth(audio->input, pads_old); while(input != NULL){ /* ags-buffer */ ags_recall_factory_create(audio, NULL, NULL, "ags-buffer\0", 0, audio->audio_channels, input->pad, input->pad + 1, (AGS_RECALL_FACTORY_INPUT | AGS_RECALL_FACTORY_RECALL | AGS_RECALL_FACTORY_ADD), 0); input = input->next_pad; } } } } gsequencer-0.6.37/src/ags/X/machine/ags_pattern_box.c0000644000175000017500000004240212626272146017402 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include static GType ags_accessible_pattern_box_get_type(void); void ags_pattern_box_class_init(AgsPatternBoxClass *pattern_box); void ags_accessible_pattern_box_class_init(AtkObject *object); void ags_accessible_pattern_box_action_interface_init(AtkActionIface *action); void ags_pattern_box_connectable_interface_init(AgsConnectableInterface *connectable); void ags_pattern_box_init(AgsPatternBox *pattern_box); void ags_pattern_box_finalize(GObject *gobject); void ags_pattern_box_connect(AgsConnectable *connectable); void ags_pattern_box_disconnect(AgsConnectable *connectable); AtkObject* ags_pattern_box_get_accessible(GtkWidget *widget); void ags_pattern_box_show(GtkWidget *widget); void ags_pattern_box_show_all(GtkWidget *widget); gboolean ags_accessible_pattern_box_do_action(AtkAction *action, gint i); gint ags_accessible_pattern_box_get_n_actions(AtkAction *action); const gchar* ags_accessible_pattern_box_get_description(AtkAction *action, gint i); const gchar* ags_accessible_pattern_box_get_name(AtkAction *action, gint i); const gchar* ags_accessible_pattern_box_get_keybinding(AtkAction *action, gint i); gboolean ags_accessible_pattern_box_set_description(AtkAction *action, gint i); gchar* ags_accessible_pattern_box_get_localized_name(AtkAction *action, gint i); /** * SECTION:ags_pattern_box * @short_description: pattern_box sequencer * @title: AgsPatternBox * @section_id: * @include: ags/X/machine/ags_pattern_box.h * * The #AgsPatternBox is a composite widget to act as pattern box sequencer. */ static gpointer ags_pattern_box_parent_class = NULL; static GQuark quark_accessible_object = 0; extern pthread_mutex_t ags_application_mutex; GtkStyle *pattern_box_style; GType ags_pattern_box_get_type(void) { static GType ags_type_pattern_box = 0; if(!ags_type_pattern_box){ static const GTypeInfo ags_pattern_box_info = { sizeof(AgsPatternBoxClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_pattern_box_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(AgsPatternBox), 0, /* n_preallocs */ (GInstanceInitFunc) ags_pattern_box_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_pattern_box_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_pattern_box = g_type_register_static(GTK_TYPE_TABLE, "AgsPatternBox\0", &ags_pattern_box_info, 0); g_type_add_interface_static(ags_type_pattern_box, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return(ags_type_pattern_box); } static GType ags_accessible_pattern_box_get_type(void) { static GType ags_type_accessible_pattern_box = 0; if(!ags_type_accessible_pattern_box){ const GTypeInfo ags_accesssible_pattern_box_info = { sizeof(GtkAccessibleClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_accessible_pattern_box_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(GtkAccessible), 0, /* n_preallocs */ NULL, NULL }; static const GInterfaceInfo atk_action_interface_info = { (GInterfaceInitFunc) ags_accessible_pattern_box_action_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_accessible_pattern_box = g_type_register_static(GTK_TYPE_ACCESSIBLE, "AgsAccessiblePatternBox\0", &ags_accesssible_pattern_box_info, 0); g_type_add_interface_static(ags_type_accessible_pattern_box, ATK_TYPE_ACTION, &atk_action_interface_info); } return(ags_type_accessible_pattern_box); } void ags_pattern_box_class_init(AgsPatternBoxClass *pattern_box) { GObjectClass *gobject; GtkWidgetClass *widget; ags_pattern_box_parent_class = g_type_class_peek_parent(pattern_box); quark_accessible_object = g_quark_from_static_string("ags-accessible-object\0"); /* GObjectClass */ gobject = (GObjectClass *) pattern_box; gobject->finalize = ags_pattern_box_finalize; /* GtkWidget */ widget = (GtkWidgetClass *) pattern_box; widget->show = ags_pattern_box_show; widget->show_all = ags_pattern_box_show_all; } void ags_accessible_pattern_box_class_init(AtkObject *object) { /* empty */ } void ags_accessible_pattern_box_action_interface_init(AtkActionIface *action) { action->do_action = ags_accessible_pattern_box_do_action; action->get_n_actions = ags_accessible_pattern_box_get_n_actions; action->get_description = ags_accessible_pattern_box_get_description; action->get_name = ags_accessible_pattern_box_get_name; action->get_keybinding = ags_accessible_pattern_box_get_keybinding; action->set_description = ags_accessible_pattern_box_set_description; action->get_localized_name = ags_accessible_pattern_box_get_localized_name; } void ags_pattern_box_connectable_interface_init(AgsConnectableInterface *connectable) { AgsConnectableInterface *ags_pattern_box_connectable_parent_interface; connectable->connect = ags_pattern_box_connect; connectable->disconnect = ags_pattern_box_disconnect; } void ags_pattern_box_init(AgsPatternBox *pattern_box) { AgsLed *led; GtkToggleButton *toggle_button; GtkRadioButton *radio_button; guint i; g_object_set(pattern_box, "can-focus\0", TRUE, "n-columns\0", 2, "n-rows", 2, "homogeneous\0", FALSE, NULL); gtk_widget_set_events((GtkWidget *) pattern_box, GDK_CONTROL_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK); pattern_box->flags = 0; pattern_box->key_mask = 0; pattern_box->n_controls = AGS_PATTERN_BOX_N_CONTROLS; pattern_box->n_indices = AGS_PATTERN_BOX_N_INDICES; /* led */ pattern_box->active_led = 0; pattern_box->led = (GtkHBox *) gtk_hbox_new(FALSE, 16); gtk_table_attach(pattern_box, (GtkWidget *) pattern_box->led, 0, 1, 0, 1, 0, 0, 0, 0); for(i = 0; i < pattern_box->n_controls; i++){ led = (GtkToggleButton *) ags_led_new(); gtk_widget_set_size_request((GtkWidget *) led, AGS_PATTERN_BOX_LED_DEFAULT_WIDTH, AGS_PATTERN_BOX_LED_DEFAULT_HEIGHT); gtk_box_pack_start((GtkBox *) pattern_box->led, (GtkWidget *) led, FALSE, FALSE, 0); } /* pattern */ pattern_box->pattern = (GtkHBox *) gtk_hbox_new(FALSE, 0); gtk_table_attach(pattern_box, (GtkWidget *) pattern_box->pattern, 0, 1, 1, 2, 0, 0, 0, 0); for(i = 0; i < pattern_box->n_controls; i++){ toggle_button = (GtkToggleButton *) gtk_toggle_button_new(); gtk_widget_set_size_request((GtkWidget *) toggle_button, AGS_PATTERN_BOX_DEFAULT_PAD_WIDTH, AGS_PATTERN_BOX_DEFAULT_PAD_HEIGHT); gtk_box_pack_start((GtkBox *) pattern_box->pattern, (GtkWidget *) toggle_button, FALSE, FALSE, 0); } /* page / offset */ pattern_box->offset = (GtkVBox*) gtk_vbox_new(FALSE, 0); gtk_table_attach_defaults(pattern_box, (GtkWidget *) pattern_box->offset, 1, 2, 0, 2); radio_button = NULL; for(i = 0; i < pattern_box->n_indices; i++){ if(radio_button == NULL){ radio_button = (GtkRadioButton *) gtk_radio_button_new_with_label(NULL, g_strdup_printf("%d-%d\0", i * pattern_box->n_controls + 1, (i + 1) * pattern_box->n_controls)); gtk_box_pack_start((GtkBox*) pattern_box->offset, (GtkWidget *) radio_button, FALSE, FALSE, 0); }else{ gtk_box_pack_start((GtkBox*) pattern_box->offset, (GtkWidget *) gtk_radio_button_new_with_label(radio_button->group, g_strdup_printf("%d-%d\0", i * pattern_box->n_controls + 1, (i + 1) * pattern_box->n_controls)), FALSE, FALSE, 0); } } } void ags_pattern_box_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_pattern_box_parent_class)->finalize(gobject); } void ags_pattern_box_connect(AgsConnectable *connectable) { AgsPatternBox *pattern_box; GList *list, *list_start; if((AGS_PATTERN_BOX_CONNECTED & (AGS_PATTERN_BOX(connectable)->flags)) != 0){ return; } /* AgsPatternBox */ pattern_box = AGS_PATTERN_BOX(connectable); pattern_box->flags |= AGS_PATTERN_BOX_CONNECTED; g_signal_connect_after(G_OBJECT(pattern_box), "focus_in_event\0", G_CALLBACK(ags_pattern_box_focus_in_callback), (gpointer) pattern_box); g_signal_connect_after(G_OBJECT(pattern_box), "focus_out_event\0", G_CALLBACK(ags_pattern_box_focus_out_callback), (gpointer) pattern_box); g_signal_connect(G_OBJECT(pattern_box), "key_press_event\0", G_CALLBACK(ags_pattern_box_key_press_event), (gpointer) pattern_box); g_signal_connect(G_OBJECT(pattern_box), "key_release_event\0", G_CALLBACK(ags_pattern_box_key_release_event), (gpointer) pattern_box); /* connect pattern */ list_start = list = gtk_container_get_children((GtkContainer *) pattern_box->pattern); while(list != NULL){ g_signal_connect(G_OBJECT(list->data), "clicked\0", G_CALLBACK(ags_pattern_box_pad_callback), (gpointer) pattern_box); list = list->next; } g_list_free(list_start); /* connect pattern offset range */ list_start = list = gtk_container_get_children((GtkContainer *) pattern_box->offset); while(list != NULL){ g_signal_connect_after(G_OBJECT(list->data), "clicked\0", G_CALLBACK(ags_pattern_box_offset_callback), (gpointer) pattern_box); list = list->next; } g_list_free(list_start); } void ags_pattern_box_disconnect(AgsConnectable *connectable) { AgsPatternBox *pattern_box; /* AgsPatternBox */ pattern_box = AGS_PATTERN_BOX(connectable); //TODO:JK: implement me } AtkObject* ags_pattern_box_get_accessible(GtkWidget *widget) { AtkObject* accessible; accessible = g_object_get_qdata(G_OBJECT(widget), quark_accessible_object); if(!accessible){ accessible = g_object_new(ags_accessible_pattern_box_get_type(), NULL); g_object_set_qdata(G_OBJECT(widget), quark_accessible_object, accessible); gtk_accessible_set_widget(accessible, widget); } return(accessible); } void ags_pattern_box_show(GtkWidget *widget) { GTK_WIDGET_CLASS(ags_pattern_box_parent_class)->show(widget); // ags_pattern_box_draw_matrix(AGS_PATTERN_BOX(widget)); } void ags_pattern_box_show_all(GtkWidget *widget) { GTK_WIDGET_CLASS(ags_pattern_box_parent_class)->show_all(widget); // ags_pattern_box_draw_matrix(AGS_PATTERN_BOX(widget)); } gboolean ags_accessible_pattern_box_do_action(AtkAction *action, gint i) { AgsPatternBox *pattern_box; GdkEventKey *key_press, *key_release; GdkEventKey *modifier_press, *modifier_release; if(!(i >= 0 && i < 6)){ return(FALSE); } pattern_box = gtk_accessible_get_widget(ATK_OBJECT(action)); key_press = gdk_event_new(GDK_KEY_PRESS); key_release = gdk_event_new(GDK_KEY_RELEASE); switch(i){ case AGS_PATTERN_BOX_MOVE_LEFT: { key_press->keyval = key_release->keyval = GDK_KEY_Left; /* send event */ gtk_widget_event(pattern_box, key_press); gtk_widget_event(pattern_box, key_release); } break; case AGS_PATTERN_BOX_MOVE_RIGHT: { key_press->keyval = key_release->keyval = GDK_KEY_Right; /* send event */ gtk_widget_event(pattern_box, key_press); gtk_widget_event(pattern_box, key_release); } break; case AGS_PATTERN_BOX_INDEX_DECREMENT: { key_press->keyval = key_release->keyval = GDK_KEY_Up; /* send event */ gtk_widget_event(pattern_box, key_press); gtk_widget_event(pattern_box, key_release); } break; case AGS_PATTERN_BOX_INDEX_INCREMENT: { key_press->keyval = key_release->keyval = GDK_KEY_Down; /* send event */ gtk_widget_event(pattern_box, key_press); gtk_widget_event(pattern_box, key_release); } break; case AGS_PATTERN_BOX_TOGGLE_PAD: { key_press->keyval = key_release->keyval = GDK_KEY_space; /* send event */ gtk_widget_event(pattern_box, key_press); gtk_widget_event(pattern_box, key_release); } break; case AGS_PATTERN_BOX_COPY_PATTERN: { key_press->keyval = key_release->keyval = GDK_KEY_c; /* create modifier */ modifier_press = gdk_event_new(GDK_KEY_PRESS); modifier_release = gdk_event_new(GDK_KEY_RELEASE); modifier_press->keyval = modifier_release->keyval = GDK_KEY_Control_R; /* send event */ gtk_widget_event(pattern_box, modifier_press); gtk_widget_event(pattern_box, key_press); gtk_widget_event(pattern_box, key_release); gtk_widget_event(pattern_box, modifier_release); } break; } return(TRUE); } gint ags_accessible_pattern_box_get_n_actions(AtkAction *action) { return(6); } const gchar* ags_accessible_pattern_box_get_description(AtkAction *action, gint i) { static const gchar **actions = { "move cursor left\0", "move cursor right\0", "decrement pattern index\0", "increment pattern index\0", "toggle audio pattern\0" "copy pattern to clipboard\0", }; if(i >= 0 && i < 6){ return(actions[i]); }else{ return(NULL); } } const gchar* ags_accessible_pattern_box_get_name(AtkAction *action, gint i) { static const gchar **actions = { "left\0", "right\0", "up\0", "down\0", "toggle\0", "copy\0", }; if(i >= 0 && i < 6){ return(actions[i]); }else{ return(NULL); } } const gchar* ags_accessible_pattern_box_get_keybinding(AtkAction *action, gint i) { static const gchar **actions = { "left\0", "right\0", "up\0", "down\0", "space", "Ctrl+c", }; if(i >= 0 && i < 6){ return(actions[i]); }else{ return(NULL); } } gboolean ags_accessible_pattern_box_set_description(AtkAction *action, gint i) { //TODO:JK: implement me return(FALSE); } gchar* ags_accessible_pattern_box_get_localized_name(AtkAction *action, gint i) { //TODO:JK: implement me return(NULL); } /** * ags_pattern_box_set_pattern: * @pattern_box: the #AgsPatternBox * * Resets the pattern on @pattern_box. * * since: 0.5.0 */ void ags_pattern_box_set_pattern(AgsPatternBox *pattern_box) { AgsMachine *machine; AgsLine *selected_line; GList *list, *list_start; GList *line, *line_start; guint index0, index1, offset; gboolean set_active; guint i; machine = gtk_widget_get_ancestor(pattern_box, AGS_TYPE_MACHINE); if(machine->selected_input_pad == NULL){ return; } index0 = machine->bank_0; index1 = machine->bank_1; /* read boundaries */ list = gtk_container_get_children((GtkContainer *) pattern_box->offset); for(i = 0; i < pattern_box->n_indices && !GTK_TOGGLE_BUTTON(list->data)->active; i++){ list = list->next; } offset = i * pattern_box->n_controls; /* get pads */ list_start = list = gtk_container_get_children((GtkContainer *) pattern_box->pattern); /* reset */ pattern_box->flags |= AGS_PATTERN_BOX_BLOCK_PATTERN; for(i = 0; i < pattern_box->n_controls; i++){ set_active = TRUE; line_start = line = gtk_container_get_children(GTK_CONTAINER(AGS_PAD(machine->selected_input_pad)->expander_set)); while((line = ags_line_find_next_grouped(line)) != NULL){ selected_line = AGS_LINE(line->data); if(!ags_pattern_get_bit((AgsPattern *) selected_line->channel->pattern->data, index0, index1, offset + i)){ set_active = FALSE; break; } line = line->next; } g_list_free(line_start); gtk_toggle_button_set_active((GtkToggleButton *) list->data, set_active); list = list->next; } pattern_box->flags &= (~AGS_PATTERN_BOX_BLOCK_PATTERN); g_list_free(list_start); } /** * ags_pattern_box_new: * * Creates an #AgsPatternBox * * Returns: a new #AgsPatternBox * * Since: 0.5 */ AgsPatternBox* ags_pattern_box_new() { AgsPatternBox *pattern_box; pattern_box = (AgsPatternBox *) g_object_new(AGS_TYPE_PATTERN_BOX, NULL); return(pattern_box); } gsequencer-0.6.37/src/ags/X/machine/ags_drum_input_line.c0000644000175000017500000004420612626272146020256 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void ags_drum_input_line_class_init(AgsDrumInputLineClass *drum_input_line); void ags_drum_input_line_connectable_interface_init(AgsConnectableInterface *connectable); void ags_drum_input_line_plugin_interface_init(AgsPluginInterface *plugin); void ags_drum_input_line_init(AgsDrumInputLine *drum_input_line); void ags_drum_input_line_destroy(GtkObject *object); void ags_drum_input_line_connect(AgsConnectable *connectable); void ags_drum_input_line_disconnect(AgsConnectable *connectable); gchar* ags_drum_input_line_get_name(AgsPlugin *plugin); void ags_drum_input_line_set_name(AgsPlugin *plugin, gchar *name); gchar* ags_drum_input_line_get_xml_type(AgsPlugin *plugin); void ags_drum_input_line_set_xml_type(AgsPlugin *plugin, gchar *xml_type); void ags_drum_input_line_read(AgsFile *file, xmlNode *node, AgsPlugin *plugin); xmlNode* ags_drum_input_line_write(AgsFile *file, xmlNode *parent, AgsPlugin *plugin); void ags_drum_input_line_set_channel(AgsLine *line, AgsChannel *channel); void ags_drum_input_line_group_changed(AgsLine *line); void ags_drum_input_line_map_recall(AgsLine *line, guint output_pad_start); extern AgsConfig *config; /** * SECTION:ags_drum_input_line * @short_description: drum sequencer input line * @title: AgsDrumInputLine * @section_id: * @include: ags/X/machine/ags_drum_input_line.h * * The #AgsDrumInputLine is a composite widget to act as drum sequencer input line. */ static gpointer ags_drum_input_line_parent_class = NULL; static AgsConnectableInterface *ags_drum_input_line_parent_connectable_interface; GType ags_drum_input_line_get_type() { static GType ags_type_drum_input_line = 0; if(!ags_type_drum_input_line){ static const GTypeInfo ags_drum_input_line_info = { sizeof(AgsDrumInputLineClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_drum_input_line_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(AgsDrumInputLine), 0, /* n_preallocs */ (GInstanceInitFunc) ags_drum_input_line_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_drum_input_line_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_plugin_interface_info = { (GInterfaceInitFunc) ags_drum_input_line_plugin_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_drum_input_line = g_type_register_static(AGS_TYPE_LINE, "AgsDrumInputLine\0", &ags_drum_input_line_info, 0); g_type_add_interface_static(ags_type_drum_input_line, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_drum_input_line, AGS_TYPE_PLUGIN, &ags_plugin_interface_info); } return(ags_type_drum_input_line); } void ags_drum_input_line_class_init(AgsDrumInputLineClass *drum_input_line) { AgsLineClass *line; ags_drum_input_line_parent_class = g_type_class_peek_parent(drum_input_line); /* AgsLineClass */ line = AGS_LINE_CLASS(drum_input_line); line->set_channel = ags_drum_input_line_set_channel; line->group_changed = ags_drum_input_line_group_changed; line->map_recall = ags_drum_input_line_map_recall; } void ags_drum_input_line_connectable_interface_init(AgsConnectableInterface *connectable) { ags_drum_input_line_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_drum_input_line_connect; connectable->disconnect = ags_drum_input_line_disconnect; } void ags_drum_input_line_plugin_interface_init(AgsPluginInterface *plugin) { plugin->get_name = ags_drum_input_line_get_name; plugin->set_name = ags_drum_input_line_set_name; plugin->get_xml_type = ags_drum_input_line_get_xml_type; plugin->set_xml_type = ags_drum_input_line_set_xml_type; plugin->read = ags_drum_input_line_read; plugin->write = ags_drum_input_line_write; } void ags_drum_input_line_init(AgsDrumInputLine *drum_input_line) { AgsLineMember *line_member; GtkWidget *widget; GtkAdjustment *adjustment; g_signal_connect_after((GObject *) drum_input_line, "parent_set\0", G_CALLBACK(ags_drum_input_line_parent_set_callback), (gpointer) drum_input_line); /* volume indicator */ line_member = (AgsLineMember *) g_object_new(AGS_TYPE_LINE_MEMBER, "widget-type\0", AGS_TYPE_VINDICATOR, "plugin-name\0", "ags-peak\0", "specifier\0", "./peak[0]\0", "control-port\0", "1/1\0", NULL); line_member->flags |= (AGS_LINE_MEMBER_PLAY_CALLBACK_WRITE | AGS_LINE_MEMBER_RECALL_CALLBACK_WRITE); ags_expander_add(AGS_LINE(drum_input_line)->expander, GTK_WIDGET(line_member), 0, 0, 1, 1); widget = gtk_bin_get_child(GTK_BIN(line_member)); adjustment = (GtkAdjustment *) gtk_adjustment_new(0.0, 0.0, 10.0, 1.0, 1.0, 10.0); g_object_set(widget, "adjustment\0", adjustment, NULL); gtk_widget_set_size_request(widget, 16, 100); gtk_widget_queue_draw(widget); //TODO:JK: fix me // g_object_set(G_OBJECT(line_member), // "port-data\0", (gpointer) &(adjustment->value), // NULL); /* volume control */ line_member = (AgsLineMember *) g_object_new(AGS_TYPE_LINE_MEMBER, "widget-type\0", GTK_TYPE_VSCALE, "plugin-name\0", "ags-volume\0", "specifier\0", "./volume[0]\0", "control-port\0", "1/1\0", NULL); ags_expander_add(AGS_LINE(drum_input_line)->expander, GTK_WIDGET(line_member), 1, 0, 1, 1); widget = gtk_bin_get_child(GTK_BIN(line_member)); gtk_scale_set_digits(GTK_SCALE(widget), 3); gtk_range_set_range(GTK_RANGE(widget), 0.0, 2.00); gtk_range_set_increments(GTK_RANGE(widget), 0.025, 0.1); gtk_range_set_value(GTK_RANGE(widget), 1.0); gtk_range_set_inverted(GTK_RANGE(widget), TRUE); gtk_widget_set_size_request(widget, -1, 100); // g_object_set(G_OBJECT(line_member), // "port-data\0", (gpointer) &(GTK_RANGE(widget)->adjustment->value), // NULL); } void ags_drum_input_line_destroy(GtkObject *object) { } void ags_drum_input_line_connect(AgsConnectable *connectable) { AgsDrum *drum; AgsDrumInputLine *drum_input_line; drum_input_line = AGS_DRUM_INPUT_LINE(connectable); if((AGS_LINE_CONNECTED & (AGS_LINE(drum_input_line)->flags)) != 0){ return; } ags_drum_input_line_parent_connectable_interface->connect(connectable); /* AgsDrum */ drum = AGS_DRUM(gtk_widget_get_ancestor((GtkWidget *) AGS_LINE(drum_input_line)->pad, AGS_TYPE_DRUM)); } void ags_drum_input_line_disconnect(AgsConnectable *connectable) { ags_drum_input_line_parent_connectable_interface->disconnect(connectable); /* empty */ } gchar* ags_drum_input_line_get_name(AgsPlugin *plugin) { return(AGS_DRUM_INPUT_LINE(plugin)->name); } void ags_drum_input_line_set_name(AgsPlugin *plugin, gchar *name) { AGS_DRUM_INPUT_LINE(plugin)->name = name; } gchar* ags_drum_input_line_get_xml_type(AgsPlugin *plugin) { return(AGS_DRUM_INPUT_LINE(plugin)->xml_type); } void ags_drum_input_line_set_xml_type(AgsPlugin *plugin, gchar *xml_type) { AGS_DRUM_INPUT_LINE(plugin)->xml_type = xml_type; } void ags_drum_input_line_set_channel(AgsLine *line, AgsChannel *channel) { AgsDrumInputLine *drum_input_line; AgsChannel *old_channel; guint old_flags; drum_input_line = AGS_DRUM_INPUT_LINE(line); #ifdef AGS_DEBUG g_message("ags_drum_input_line_set_channel - channel: %u\0", channel->line); #endif if(line->channel != NULL){ old_flags = line->flags; old_channel = line->channel; }else{ old_flags = 0; old_channel = NULL; } AGS_LINE_CLASS(ags_drum_input_line_parent_class)->set_channel(line, channel); if(channel != NULL){ if(channel->audio != NULL && AGS_AUDIO(channel->audio)->devout != NULL && ags_audio_signal_get_template(channel->first_recycling->audio_signal) == NULL){ AgsAudioSignal *audio_signal; audio_signal = ags_audio_signal_new(AGS_AUDIO(channel->audio)->devout, (GObject *) channel->first_recycling, NULL); audio_signal->flags |= AGS_AUDIO_SIGNAL_TEMPLATE; ags_recycling_add_audio_signal(channel->first_recycling, audio_signal); } if(channel->pattern == NULL){ channel->pattern = g_list_alloc(); channel->pattern->data = (gpointer) ags_pattern_new(); ags_pattern_set_dim((AgsPattern *) channel->pattern->data, 4, 12, 64); } /* reset edit button */ if(old_channel == NULL && line->channel->line == 0){ AgsDrum *drum; GtkToggleButton *selected_edit_button; GList *list; drum = (AgsDrum *) gtk_widget_get_ancestor(GTK_WIDGET(line), AGS_TYPE_DRUM); if(drum != NULL){ list = gtk_container_get_children((GtkContainer *) drum->input_pad); drum->selected_pad = AGS_DRUM_INPUT_PAD(list->data); drum->selected_edit_button = drum->selected_pad->edit; gtk_toggle_button_set_active((GtkToggleButton *) drum->selected_edit_button, TRUE); g_list_free(list); } } } } void ags_drum_input_line_group_changed(AgsLine *line) { AgsDrum *drum; drum = (AgsDrum *) gtk_widget_get_ancestor(GTK_WIDGET(line), AGS_TYPE_DRUM); ags_pattern_box_set_pattern(drum->pattern_box); } void ags_drum_input_line_map_recall(AgsLine *line, guint output_pad_start) { AgsLineMember *line_member; AgsAudio *audio; AgsChannel *source; AgsChannel *current; AgsPattern *pattern; AgsRecallHandler *recall_handler; AgsCopyPatternChannel *copy_pattern_channel; AgsPlayChannel *play_channel; AgsPlayChannelRun *play_channel_run; AgsPeakChannelRun *recall_peak_channel_run, *play_peak_channel_run; AgsBufferChannel *buffer_channel; AgsBufferChannelRun *buffer_channel_run; AgsStreamChannelRun *stream_channel_run; GList *list; guint i; if((AGS_LINE_MAPPED_RECALL & (line->flags)) != 0 || (AGS_LINE_PREMAPPED_RECALL & (line->flags)) != 0){ return; } audio = AGS_AUDIO(line->channel->audio); source = line->channel; /* ags-peak */ ags_recall_factory_create(audio, NULL, NULL, "ags-peak\0", source->audio_channel, source->audio_channel + 1, source->pad, source->pad + 1, (AGS_RECALL_FACTORY_INPUT | AGS_RECALL_FACTORY_PLAY | AGS_RECALL_FACTORY_RECALL | AGS_RECALL_FACTORY_ADD), 0); /* play - connect run_post */ list = ags_recall_template_find_type(source->play, AGS_TYPE_PEAK_CHANNEL_RUN); if(list != NULL){ play_peak_channel_run = AGS_PEAK_CHANNEL_RUN(list->data); recall_handler = (AgsRecallHandler *) malloc(sizeof(AgsRecallHandler)); recall_handler->signal_name = "run-post\0"; recall_handler->callback = G_CALLBACK(ags_line_peak_run_post_callback); recall_handler->data = (gpointer) line; ags_recall_add_handler(AGS_RECALL(play_peak_channel_run), recall_handler); } /* recall - connect run_post */ list = ags_recall_template_find_type(source->recall, AGS_TYPE_PEAK_CHANNEL_RUN); if(list != NULL){ recall_peak_channel_run = AGS_PEAK_CHANNEL_RUN(list->data); recall_handler = (AgsRecallHandler *) malloc(sizeof(AgsRecallHandler)); recall_handler->signal_name = "run-post\0"; recall_handler->callback = G_CALLBACK(ags_line_peak_run_post_callback); recall_handler->data = (gpointer) line; ags_recall_add_handler(AGS_RECALL(recall_peak_channel_run), recall_handler); } /* ags-copy-pattern */ ags_recall_factory_create(audio, NULL, NULL, "ags-copy-pattern\0", source->audio_channel, source->audio_channel + 1, source->pad, source->pad + 1, (AGS_RECALL_FACTORY_INPUT | AGS_RECALL_FACTORY_REMAP | AGS_RECALL_FACTORY_RECALL), 0); /* set pattern object on port */ list = ags_recall_template_find_type(source->recall, AGS_TYPE_COPY_PATTERN_CHANNEL); if(list != NULL){ copy_pattern_channel = AGS_COPY_PATTERN_CHANNEL(list->data); list = source->pattern; pattern = AGS_PATTERN(list->data); copy_pattern_channel->pattern->port_value.ags_port_object = (GObject *) pattern; ags_portlet_set_port(AGS_PORTLET(pattern), copy_pattern_channel->pattern); } /* ags-play */ ags_recall_factory_create(audio, NULL, NULL, "ags-play\0", source->audio_channel, source->audio_channel + 1, source->pad, source->pad + 1, (AGS_RECALL_FACTORY_INPUT | AGS_RECALL_FACTORY_PLAY | AGS_RECALL_FACTORY_ADD), 0); list = source->play; while((list = ags_recall_find_type(list, AGS_TYPE_PLAY_CHANNEL)) != NULL){ GValue audio_channel_value = {0,}; play_channel = AGS_PLAY_CHANNEL(list->data); g_value_init(&audio_channel_value, G_TYPE_UINT64); g_value_set_uint64(&audio_channel_value, source->audio_channel); ags_port_safe_write(play_channel->audio_channel, &audio_channel_value); list = list->next; } /* ags-volume */ ags_recall_factory_create(audio, NULL, NULL, "ags-volume\0", source->audio_channel, source->audio_channel + 1, source->pad, source->pad + 1, (AGS_RECALL_FACTORY_INPUT | AGS_RECALL_FACTORY_PLAY | AGS_RECALL_FACTORY_RECALL | AGS_RECALL_FACTORY_ADD), 0); /* ags-stream */ ags_recall_factory_create(audio, NULL, NULL, "ags-stream\0", source->audio_channel, source->audio_channel + 1, source->pad, source->pad + 1, (AGS_RECALL_FACTORY_INPUT | AGS_RECALL_FACTORY_PLAY | AGS_RECALL_FACTORY_RECALL | AGS_RECALL_FACTORY_ADD), 0); /* set up dependencies */ list = ags_recall_find_type(source->play, AGS_TYPE_PLAY_CHANNEL_RUN); play_channel_run = AGS_PLAY_CHANNEL_RUN(list->data); list = ags_recall_find_type(source->play, AGS_TYPE_STREAM_CHANNEL_RUN); stream_channel_run = AGS_STREAM_CHANNEL_RUN(list->data); g_object_set(G_OBJECT(play_channel_run), "stream-channel-run\0", stream_channel_run, NULL); AGS_LINE_CLASS(ags_drum_input_line_parent_class)->map_recall(line, output_pad_start); } void ags_drum_input_line_read(AgsFile *file, xmlNode *node, AgsPlugin *plugin) { AgsDrumInputLine *gobject; gobject = AGS_DRUM_INPUT_LINE(plugin); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", gobject, NULL)); } xmlNode* ags_drum_input_line_write(AgsFile *file, xmlNode *parent, AgsPlugin *plugin) { AgsDrumInputLine *drum_input_line; xmlNode *node; gchar *id; drum_input_line = AGS_DRUM_INPUT_LINE(plugin); id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-drum-input-line\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", drum_input_line, NULL)); return(node); } /** * ags_drum_input_line_new: * @channel: the assigned channel * * Creates an #AgsDrumInputLine * * Returns: a new #AgsDrumInputLine * * Since: 0.4 */ AgsDrumInputLine* ags_drum_input_line_new(AgsChannel *channel) { AgsDrumInputLine *drum_input_line; drum_input_line = (AgsDrumInputLine *) g_object_new(AGS_TYPE_DRUM_INPUT_LINE, "channel\0", channel, NULL); return(drum_input_line); } gsequencer-0.6.37/src/ags/X/machine/ags_panel_input_pad.c0000644000175000017500000001661012626272146020221 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include void ags_panel_input_pad_class_init(AgsPanelInputPadClass *panel_input_pad); void ags_panel_input_pad_connectable_interface_init(AgsConnectableInterface *connectable); void ags_panel_input_pad_plugin_interface_init(AgsPluginInterface *plugin); void ags_panel_input_pad_init(AgsPanelInputPad *panel_input_pad); void ags_panel_input_pad_connect(AgsConnectable *connectable); void ags_panel_input_pad_disconnect(AgsConnectable *connectable); void ags_panel_input_pad_finalize(GObject *gobject); gchar* ags_panel_input_pad_get_name(AgsPlugin *plugin); void ags_panel_input_pad_set_name(AgsPlugin *plugin, gchar *name); gchar* ags_panel_input_pad_get_xml_type(AgsPlugin *plugin); void ags_panel_input_pad_set_xml_type(AgsPlugin *plugin, gchar *xml_type); void ags_panel_input_pad_show(GtkWidget *pad); void ags_panel_input_pad_set_channel(AgsPad *pad, AgsChannel *channel); void ags_panel_input_pad_resize_lines(AgsPad *pad, GType line_type, guint audio_channels, guint audio_channels_old); /** * SECTION:ags_panel_input_pad * @short_description: panel input pad * @title: AgsPanelInputPad * @section_id: * @include: ags/X/machine/ags_panel_input_pad.h * * The #AgsPanelInputPad is a composite widget to act as panel input pad. */ static gpointer ags_panel_input_pad_parent_class = NULL; static AgsConnectableInterface *ags_panel_input_pad_parent_connectable_interface; GType ags_panel_input_pad_get_type() { static GType ags_type_panel_input_pad = 0; if(!ags_type_panel_input_pad){ static const GTypeInfo ags_panel_input_pad_info = { sizeof(AgsPanelInputPadClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_panel_input_pad_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(AgsPanelInputPad), 0, /* n_preallocs */ (GInstanceInitFunc) ags_panel_input_pad_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_panel_input_pad_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_plugin_interface_info = { (GInterfaceInitFunc) ags_panel_input_pad_plugin_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_panel_input_pad = g_type_register_static(AGS_TYPE_PAD, "AgsPanelInputPad\0", &ags_panel_input_pad_info, 0); g_type_add_interface_static(ags_type_panel_input_pad, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_panel_input_pad, AGS_TYPE_PLUGIN, &ags_plugin_interface_info); } return(ags_type_panel_input_pad); } void ags_panel_input_pad_class_init(AgsPanelInputPadClass *panel_input_pad) { GObjectClass *gobject; GtkWidgetClass *widget; AgsPadClass *pad; ags_panel_input_pad_parent_class = g_type_class_peek_parent(panel_input_pad); /* GObjectClass */ gobject = (GObjectClass *) panel_input_pad; gobject->finalize = ags_panel_input_pad_finalize; /* GtkWidgetClass */ widget = (GtkWidgetClass *) panel_input_pad; widget->show = ags_panel_input_pad_show; /* AgsPadClass */ pad = (AgsPadClass *) panel_input_pad; pad->set_channel = ags_panel_input_pad_set_channel; pad->resize_lines = ags_panel_input_pad_resize_lines; } void ags_panel_input_pad_connectable_interface_init(AgsConnectableInterface *connectable) { ags_panel_input_pad_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_panel_input_pad_connect; connectable->disconnect = ags_panel_input_pad_disconnect; } void ags_panel_input_pad_plugin_interface_init(AgsPluginInterface *plugin) { plugin->get_name = ags_panel_input_pad_get_name; plugin->set_name = ags_panel_input_pad_set_name; plugin->get_xml_type = ags_panel_input_pad_get_xml_type; plugin->set_xml_type = ags_panel_input_pad_set_xml_type; } void ags_panel_input_pad_init(AgsPanelInputPad *panel_input_pad) { AgsPad *pad; GtkVBox *vbox; pad = (AgsPad *) panel_input_pad; pad->cols = 1; vbox = (GtkVBox *) gtk_vbox_new(FALSE, 0); gtk_box_pack_start((GtkBox *) pad, (GtkWidget *) vbox, FALSE, TRUE, 0); gtk_box_reorder_child((GtkBox *) pad, (GtkWidget *) vbox, 0); } void ags_panel_input_pad_connect(AgsConnectable *connectable) { AgsPanelInputPad *panel_input_pad; panel_input_pad = AGS_PANEL_INPUT_PAD(connectable); if((AGS_PAD_CONNECTED & (AGS_PAD(panel_input_pad)->flags)) != 0){ return; } ags_panel_input_pad_parent_connectable_interface->connect(connectable); /* empty */ } void ags_panel_input_pad_disconnect(AgsConnectable *connectable) { ags_panel_input_pad_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_panel_input_pad_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_panel_input_pad_parent_class)->finalize(gobject); /* empty */ } gchar* ags_panel_input_pad_get_name(AgsPlugin *plugin) { return(AGS_PANEL_INPUT_PAD(plugin)->name); } void ags_panel_input_pad_set_name(AgsPlugin *plugin, gchar *name) { AGS_PANEL_INPUT_PAD(plugin)->name = name; } gchar* ags_panel_input_pad_get_xml_type(AgsPlugin *plugin) { return(AGS_PANEL_INPUT_PAD(plugin)->xml_type); } void ags_panel_input_pad_set_xml_type(AgsPlugin *plugin, gchar *xml_type) { AGS_PANEL_INPUT_PAD(plugin)->xml_type = xml_type; } void ags_panel_input_pad_show(GtkWidget *pad) { GTK_WIDGET_CLASS(ags_panel_input_pad_parent_class)->show(pad); gtk_widget_hide(GTK_WIDGET(AGS_PAD(pad)->group)); gtk_widget_hide(GTK_WIDGET(AGS_PAD(pad)->mute)); gtk_widget_hide(GTK_WIDGET(AGS_PAD(pad)->solo)); } void ags_panel_input_pad_set_channel(AgsPad *pad, AgsChannel *channel) { AGS_PAD_CLASS(ags_panel_input_pad_parent_class)->set_channel(pad, channel); /* empty */ } void ags_panel_input_pad_resize_lines(AgsPad *pad, GType line_type, guint audio_channels, guint audio_channels_old) { AGS_PAD_CLASS(ags_panel_input_pad_parent_class)->resize_lines(pad, line_type, audio_channels, audio_channels_old); /* empty */ } /** * ags_panel_input_pad_new: * @channel: the assigned channel * * Creates an #AgsPanelInputPad * * Returns: a new #AgsPanelInputPad * * Since: 0.4 */ AgsPanelInputPad* ags_panel_input_pad_new(AgsChannel *channel) { AgsPanelInputPad *panel_input_pad; panel_input_pad = (AgsPanelInputPad *) g_object_new(AGS_TYPE_PANEL_INPUT_PAD, "channel\0", channel, NULL); return(panel_input_pad); } gsequencer-0.6.37/src/ags/X/machine/ags_synth.h0000644000175000017500000000411212626272146016223 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_SYNTH_H__ #define __AGS_SYNTH_H__ #include #include #include #include #define AGS_TYPE_SYNTH (ags_synth_get_type()) #define AGS_SYNTH(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_SYNTH, AgsSynth)) #define AGS_SYNTH_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_SYNTH, AgsSynthClass)) #define AGS_IS_SYNTH(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_SYNTH)) #define AGS_IS_SYNTH_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_SYNTH)) #define AGS_SYNTH_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_SYNTH, AgsSynthClass)) typedef struct _AgsSynth AgsSynth; typedef struct _AgsSynthClass AgsSynthClass; typedef enum{ AGS_SYNTH_AUTO_UPDATE = 1, }AgsSynthFlags; struct _AgsSynth { AgsMachine machine; guint flags; gchar *name; gchar *xml_type; guint mapped_input_pad; guint mapped_output_pad; GtkVBox *input_pad; GtkSpinButton *lower; // how many channels until to lowest freq GtkSpinButton *loop_start; GtkSpinButton *loop_end; GtkCheckButton *auto_update; GtkButton *update; }; struct _AgsSynthClass { AgsMachineClass machine; }; GType ags_synth_get_type(void); AgsSynth* ags_synth_new(GObject *devout); #endif /*__AGS_SYNTH_H__*/ gsequencer-0.6.37/src/ags/X/machine/ags_panel.h0000644000175000017500000000342212621463700016151 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_PANEL_H__ #define __AGS_PANEL_H__ #include #include #include #include #define AGS_TYPE_PANEL (ags_panel_get_type()) #define AGS_PANEL(obj) ((AgsPanel*) G_TYPE_CHECK_INSTANCE_CAST(obj, AGS_TYPE_PANEL, AgsPanel)) #define AGS_PANEL_CLASS(class) ((AgsPanelClass*) G_TYPE_CHECK_CLASS_CAST(class, AGS_TYPE_PANEL, AgsPanelClass)) #define AGS_IS_PANEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE(obj, AGS_TYPE_PANEL)) #define AGS_IS_PANEL_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_PANEL)) #define AGS_PANEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_PANEL, AgsPanelClass)) typedef struct _AgsPanel AgsPanel; typedef struct _AgsPanelClass AgsPanelClass; struct _AgsPanel { AgsMachine machine; gchar *name; gchar *xml_type; GtkVBox *vbox; }; struct _AgsPanelClass { AgsMachineClass machine; }; GType ags_panel_get_type(void); AgsPanel* ags_panel_new(); #endif /*__AGS_PANEL_H__*/ gsequencer-0.6.37/src/ags/X/machine/ags_oscillator_callbacks.c0000644000175000017500000000506612621463700021225 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_oscillator_wave_callback(GtkComboBox *combo, AgsOscillator *oscillator) { AgsSynth *synth; synth = (AgsSynth *) gtk_widget_get_ancestor((GtkWidget *) oscillator, AGS_TYPE_SYNTH); if((AGS_SYNTH_AUTO_UPDATE & (synth->flags)) != 0){ ags_synth_update(synth); } } void ags_oscillator_attack_callback(GtkSpinButton *spin_button, AgsOscillator *oscillator) { AgsSynth *synth; synth = (AgsSynth *) gtk_widget_get_ancestor((GtkWidget *) oscillator, AGS_TYPE_SYNTH); if((AGS_SYNTH_AUTO_UPDATE & (synth->flags)) != 0){ ags_synth_update(synth); } } void ags_oscillator_frame_count_callback(GtkSpinButton *spin_button, AgsOscillator *oscillator) { AgsSynth *synth; synth = (AgsSynth *) gtk_widget_get_ancestor((GtkWidget *) oscillator, AGS_TYPE_SYNTH); if((AGS_SYNTH_AUTO_UPDATE & (synth->flags)) != 0){ ags_synth_update(synth); } } void ags_oscillator_frequency_callback(GtkSpinButton *spin_button, AgsOscillator *oscillator) { AgsSynth *synth; synth = (AgsSynth *) gtk_widget_get_ancestor((GtkWidget *) oscillator, AGS_TYPE_SYNTH); if((AGS_SYNTH_AUTO_UPDATE & (synth->flags)) != 0){ ags_synth_update(synth); } } void ags_oscillator_phase_callback(GtkSpinButton *spin_button, AgsOscillator *oscillator) { AgsSynth *synth; synth = (AgsSynth *) gtk_widget_get_ancestor((GtkWidget *) oscillator, AGS_TYPE_SYNTH); if((AGS_SYNTH_AUTO_UPDATE & (synth->flags)) != 0){ ags_synth_update(synth); } } void ags_oscillator_volume_callback(GtkSpinButton *spin_button, AgsOscillator *oscillator) { AgsSynth *synth; synth = (AgsSynth *) gtk_widget_get_ancestor((GtkWidget *) oscillator, AGS_TYPE_SYNTH); if((AGS_SYNTH_AUTO_UPDATE & (synth->flags)) != 0){ ags_synth_update(synth); } } gsequencer-0.6.37/src/ags/X/machine/ags_drum_input_line.h0000644000175000017500000000373712621463700020260 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_DRUM_INPUT_LINE_H__ #define __AGS_DRUM_INPUT_LINE_H__ #include #include #include #include #define AGS_TYPE_DRUM_INPUT_LINE (ags_drum_input_line_get_type()) #define AGS_DRUM_INPUT_LINE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_DRUM_INPUT_LINE, AgsDrumInputLine)) #define AGS_DRUM_INPUT_LINE_CLASS(class) (G_TYPE_CHECK_CLASS_CAST(class, AGS_TYPE_DRUM_INPUT_LINE, AgsDrumInputLineClass)) #define AGS_IS_DRUM_INPUT_LINE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_DRUM_INPUT_LINE)) #define AGS_IS_DRUM_INPUT_LINE_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_DRUM_INPUT_LINE)) #define AGS_DRUM_INPUT_LINE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS(obj, AGS_TYPE_DRUM_INPUT_LINE, AgsDrumInputLineClass)) typedef struct _AgsDrumInputLine AgsDrumInputLine; typedef struct _AgsDrumInputLineClass AgsDrumInputLineClass; struct _AgsDrumInputLine { AgsLine line; gchar *name; gchar *xml_type; }; struct _AgsDrumInputLineClass { AgsLineClass line; }; GType ags_drum_input_line_get_type(); AgsDrumInputLine* ags_drum_input_line_new(AgsChannel *channel); #endif /*__AGS_DRUM_INPUT_LINE_H__*/ gsequencer-0.6.37/src/ags/X/machine/ags_cell_pattern.h0000644000175000017500000000703712621245070017532 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_CELL_PATTERN_H__ #define __AGS_CELL_PATTERN_H__ #include #include #include #include #define AGS_TYPE_CELL_PATTERN (ags_cell_pattern_get_type()) #define AGS_CELL_PATTERN(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_CELL_PATTERN, AgsCellPattern)) #define AGS_CELL_PATTERN_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_CELL_PATTERN, AgsCellPatternClass)) #define AGS_IS_CELL_PATTERN(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_CELL_PATTERN)) #define AGS_IS_CELL_PATTERN_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_CELL_PATTERN)) #define AGS_CELL_PATTERN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_CELL_PATTERN, AgsCellPatternClass)) #define AGS_CELL_PATTERN_DEFAULT_CELL_WIDTH (12) #define AGS_CELL_PATTERN_DEFAULT_CELL_HEIGHT (10) #define AGS_CELL_PATTERN_MAX_CONTROLS_SHOWN_HORIZONTALLY (32) #define AGS_CELL_PATTERN_MAX_CONTROLS_SHOWN_VERTICALLY (10) #define AGS_CELL_PATTERN_DEFAULT_CONTROLS_HORIZONTALLY (32) #define AGS_CELL_PATTERN_DEFAULT_CONTROLS_VERTICALLY (78) typedef struct _AgsCellPattern AgsCellPattern; typedef struct _AgsCellPatternClass AgsCellPatternClass; typedef enum{ AGS_CELL_PATTERN_CONNECTED = 1, AGS_CELL_PATTERN_CURSOR_ON = 1 << 1, }AgsCellPatternFlags; typedef enum{ AGS_CELL_PATTERN_KEY_L_CONTROL = 1, AGS_CELL_PATTERN_KEY_R_CONTROL = 1 << 1, }AgsCellPatternKeyMask; typedef enum{ AGS_CELL_PATTERN_MOVE_LEFT, AGS_CELL_PATTERN_MOVE_RIGHT, AGS_CELL_PATTERN_MOVE_UP, AGS_CELL_PATTERN_MOVE_DOWN, AGS_CELL_PATTERN_TOGGLE_PAD, AGS_CELL_PATTERN_COPY_PATTERN, }AgsCellPatternAction; struct _AgsCellPattern { GtkTable table; guint flags; guint key_mask; guint cell_width; guint cell_height; guint n_cols; guint n_rows; guint cursor_x; guint cursor_y; GtkDrawingArea *drawing_area; GtkVScrollbar *vscrollbar; GtkHScrollbar *hscrollbar; guint active_led; GtkHBox *led; }; struct _AgsCellPatternClass { GtkTableClass table; }; GType ags_cell_pattern_get_type(void); void ags_cell_pattern_paint(AgsCellPattern *cell_pattern); void ags_cell_pattern_draw_gutter(AgsCellPattern *cell_pattern); void ags_cell_pattern_draw_matrix(AgsCellPattern *cell_pattern); void ags_cell_pattern_draw_cursor(AgsCellPattern *cell_pattern); void ags_cell_pattern_redraw_gutter_point(AgsCellPattern *cell_pattern, AgsChannel *channel, guint j, guint i); void ags_cell_pattern_highlight_gutter_point(AgsCellPattern *cell_pattern, guint j, guint i); void ags_cell_pattern_unpaint_gutter_point(AgsCellPattern *cell_pattern, guint j, guint i); void* ags_cell_pattern_blink_worker(void *data); AgsCellPattern* ags_cell_pattern_new(); #endif /*__AGS_CELL_PATTERN_H__*/ gsequencer-0.6.37/src/ags/X/machine/ags_mixer_input_pad.c0000644000175000017500000001203712626272146020245 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include void ags_mixer_input_pad_class_init(AgsMixerInputPadClass *mixer_input_pad); void ags_mixer_input_pad_connectable_interface_init(AgsConnectableInterface *connectable); void ags_mixer_input_pad_init(AgsMixerInputPad *mixer_input_pad); void ags_mixer_input_pad_destroy(GtkObject *object); void ags_mixer_input_pad_connect(AgsConnectable *connectable); void ags_mixer_input_pad_disconnect(AgsConnectable *connectable); void ags_mixer_input_pad_set_channel(AgsPad *pad, AgsChannel *channel); void ags_mixer_input_pad_resize_lines(AgsPad *pad, GType line_type, guint audio_channels, guint audio_channels_old); /** * SECTION:ags_mixer_input_pad * @short_description: mixer input pad * @title: AgsMixerInputPad * @section_id: * @include: ags/X/machine/ags_mixer_input_pad.h * * The #AgsMixerInputPad is a composite widget to act as mixer input pad. */ static gpointer ags_mixer_input_pad_parent_class = NULL; static AgsConnectableInterface *ags_mixer_input_pad_parent_connectable_interface; GType ags_mixer_input_pad_get_type() { static GType ags_type_mixer_input_pad = 0; if(!ags_type_mixer_input_pad){ static const GTypeInfo ags_mixer_input_pad_info = { sizeof(AgsMixerInputPadClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_mixer_input_pad_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(AgsMixerInputPad), 0, /* n_preallocs */ (GInstanceInitFunc) ags_mixer_input_pad_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_mixer_input_pad_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_mixer_input_pad = g_type_register_static(AGS_TYPE_PAD, "AgsMixerInputPad\0", &ags_mixer_input_pad_info, 0); g_type_add_interface_static(ags_type_mixer_input_pad, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return(ags_type_mixer_input_pad); } void ags_mixer_input_pad_class_init(AgsMixerInputPadClass *mixer_input_pad) { AgsPadClass *pad; ags_mixer_input_pad_parent_class = g_type_class_peek_parent(mixer_input_pad); pad = (AgsPadClass *) mixer_input_pad; pad->set_channel = ags_mixer_input_pad_set_channel; pad->resize_lines = ags_mixer_input_pad_resize_lines; } void ags_mixer_input_pad_connectable_interface_init(AgsConnectableInterface *connectable) { ags_mixer_input_pad_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_mixer_input_pad_connect; connectable->disconnect = ags_mixer_input_pad_disconnect; } void ags_mixer_input_pad_init(AgsMixerInputPad *mixer_input_pad) { } void ags_mixer_input_pad_connect(AgsConnectable *connectable) { AgsMixerInputPad *mixer_input_pad; /* AgsMixerInputPad */ mixer_input_pad = AGS_MIXER_INPUT_PAD(connectable); if((AGS_PAD_CONNECTED & (AGS_PAD(mixer_input_pad)->flags)) != 0){ return; } ags_mixer_input_pad_parent_connectable_interface->connect(connectable); } void ags_mixer_input_pad_disconnect(AgsConnectable *connectable) { ags_mixer_input_pad_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_mixer_input_pad_destroy(GtkObject *object) { /* empty */ } void ags_mixer_input_pad_set_channel(AgsPad *pad, AgsChannel *channel) { AGS_PAD_CLASS(ags_mixer_input_pad_parent_class)->set_channel(pad, channel); /* empty */ } void ags_mixer_input_pad_resize_lines(AgsPad *pad, GType line_type, guint audio_channels, guint audio_channels_old) { AGS_PAD_CLASS(ags_mixer_input_pad_parent_class)->resize_lines(pad, line_type, audio_channels, audio_channels_old); /* empty */ } /** * ags_mixer_input_pad_new: * @channel: the assigned channel * * Creates an #AgsMixerInputPad * * Returns: a new #AgsMixerInputPad * * Since: 0.4 */ AgsMixerInputPad* ags_mixer_input_pad_new(AgsChannel *channel) { AgsMixerInputPad *mixer_input_pad; mixer_input_pad = (AgsMixerInputPad *) g_object_new(AGS_TYPE_MIXER_INPUT_PAD, "channel\0", channel, NULL); return(mixer_input_pad); } gsequencer-0.6.37/src/ags/X/machine/ags_pattern_box_callbacks.h0000644000175000017500000000314012621245070021371 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_PATTERN_BOX_CALLBACKS_H__ #define __AGS_PATTERN_BOX_CALLBACKS_H__ #include #include #include #include /* controls */ gboolean ags_pattern_box_focus_in_callback(GtkWidget *widget, GdkEvent *event, AgsPatternBox *pattern_box); gboolean ags_pattern_box_focus_out_callback(GtkWidget *widget, GdkEvent *event, AgsPatternBox *pattern_box); gboolean ags_pattern_box_key_press_event(GtkWidget *widget, GdkEventKey *event, AgsPatternBox *pattern_box); gboolean ags_pattern_box_key_release_event(GtkWidget *widget, GdkEventKey *event, AgsPatternBox *pattern_box); void ags_pattern_box_pad_callback(GtkWidget *toggle_button, AgsPatternBox *pattern_box); void ags_pattern_box_offset_callback(GtkWidget *widget, AgsPatternBox *pattern_box); #endif /*__AGS_PATTERN_BOX_CALLBACKS_H__*/ gsequencer-0.6.37/src/ags/X/machine/ags_matrix.h0000644000175000017500000000434712626272146016374 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_MATRIX_H__ #define __AGS_MATRIX_H__ #include #include #include #include #include #define AGS_TYPE_MATRIX (ags_matrix_get_type()) #define AGS_MATRIX(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_MATRIX, AgsMatrix)) #define AGS_MATRIX_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_MATRIX, AgsMatrixClass)) #define AGS_IS_MATRIX(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_MATRIX)) #define AGS_IS_MATRIX_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_MATRIX)) #define AGS_MATRIX_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_MATRIX, AgsMatrixClass)) typedef struct _AgsMatrix AgsMatrix; typedef struct _AgsMatrixClass AgsMatrixClass; struct _AgsMatrix { AgsMachine machine; guint flags; gchar *name; gchar *xml_type; guint mapped_output_pad; guint mapped_input_pad; GtkTable *table; GtkToggleButton *run; GtkToggleButton *selected; GtkToggleButton *index[9]; AgsCellPattern *cell_pattern; GtkSpinButton *length_spin; GtkCheckButton *loop_button; }; struct _AgsMatrixClass { AgsMachineClass machine; }; GType ags_matrix_get_type(void); void ags_matrix_input_map_recall(AgsMatrix *matrix, guint input_pad_start); void ags_matrix_output_map_recall(AgsMatrix *matrix, guint output_pad_start); AgsMatrix* ags_matrix_new(GObject *devout); #endif /*__AGS_MATRIX_H__*/ gsequencer-0.6.37/src/ags/X/machine/ags_drum_input_line_callbacks.h0000644000175000017500000000271312621463700022250 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_DRUM_INPUT_LINE_CALLBACKS_H__ #define __AGS_DRUM_INPUT_LINE_CALLBACKS_H__ #include #include #include #include #include void ags_drum_input_line_parent_set_callback(GtkWidget *widget, GtkObject *old_parent, AgsDrumInputLine *drum_input_line); /* AgsChannel */ void ags_drum_input_line_channel_done_callback(AgsChannel *channel, AgsDrumInputLine *drum_input_line); /* AgsAudio */ void ags_drum_input_line_audio_set_pads_callback(AgsAudio *audio, GType type, guint pads, guint pads_old, AgsDrumInputLine *drum_input_line); #endif /*__AGS_DRUM_INPUT_LINE_CALLBACKS_H__*/ gsequencer-0.6.37/src/ags/X/machine/ags_drum_callbacks.h0000644000175000017500000000335612621463700020026 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_DRUM_CALLBACKS_H__ #define __AGS_DRUM_CALLBACKS_H__ #include #include #include #include #include void ags_drum_parent_set_callback(GtkWidget *widget, GtkObject *old_parent, AgsDrum *drum); void ags_drum_destroy_callback(GtkWidget *widget, AgsDrum *drum); /* controls */ void ags_drum_open_callback(GtkWidget *toggle_button, AgsDrum *drum); void ags_drum_loop_button_callback(GtkWidget *button, AgsDrum *drum); void ags_drum_length_spin_callback(GtkWidget *spin_button, AgsDrum *drum); void ags_drum_index0_callback(GtkWidget *toggle_button, AgsDrum *drum); void ags_drum_index1_callback(GtkWidget *toggle_button, AgsDrum *drum); /* audio */ void ags_drum_tact_callback(AgsAudio *audio, AgsRecallID *recall_id, AgsDrum *drum); void ags_drum_done_callback(AgsAudio *audio, AgsRecallID *recall_id, AgsDrum *drum); #endif /*__AGS_DRUM_CALLBACKS_H__*/ gsequencer-0.6.37/src/ags/X/machine/ags_pattern_box_callbacks.c0000644000175000017500000003070312626272146021402 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include void ags_pattern_box_init_channel_launch_callback(AgsTask *task, AgsPatternBox *pattern_box); void ags_pattern_box_refresh_gui_callback(AgsTogglePatternBit *toggle_pattern_bit, AgsPatternBox *pattern_box); extern pthread_mutex_t ags_application_mutex; gboolean ags_pattern_box_focus_in_callback(GtkWidget *widget, GdkEvent *event, AgsPatternBox *pattern_box) { GList *list; list = gtk_container_get_children(pattern_box->pattern); gtk_widget_set_state(g_list_nth_data(list, pattern_box->cursor_x), GTK_STATE_PRELIGHT); g_list_free(list); return(TRUE); } gboolean ags_pattern_box_focus_out_callback(GtkWidget *widget, GdkEvent *event, AgsPatternBox *pattern_box) { GList *list; list = gtk_container_get_children(pattern_box->pattern); if(!gtk_toggle_button_get_active(g_list_nth_data(list, pattern_box->cursor_x - 1))){ gtk_widget_set_state(g_list_nth_data(list, pattern_box->cursor_x), GTK_STATE_NORMAL); }else{ gtk_widget_set_state(g_list_nth_data(list, pattern_box->cursor_x), GTK_STATE_ACTIVE); } g_list_free(list); return(TRUE); } void ags_pattern_box_pad_callback(GtkWidget *toggle_button, AgsPatternBox *pattern_box) { AgsWindow *window; AgsMachine *machine; AgsLine *selected_line; AgsPattern *pattern; AgsTogglePatternBit *toggle_pattern_bit; AgsMutexManager *mutex_manager; AgsThread *audio_loop; AgsTaskThread *task_thread; AgsMain *ags_main; GList *list, *list_start; GList *line, *line_start; GList *tasks; guint i, index0, index1, offset; pthread_mutex_t *audio_mutex; machine = gtk_widget_get_ancestor(pattern_box, AGS_TYPE_MACHINE); if(machine->selected_input_pad == NULL){ return; } /* */ if((AGS_PATTERN_BOX_BLOCK_PATTERN & (pattern_box->flags)) != 0){ #ifdef AGS_DEBUG g_message("AgsPatternBox pattern is blocked\n\0"); #endif return; } window = gtk_widget_get_ancestor(machine, AGS_TYPE_WINDOW); ags_main = window->ags_main; /* get audio loop */ pthread_mutex_lock(&(ags_application_mutex)); audio_loop = ags_main->main_loop; pthread_mutex_unlock(&(ags_application_mutex)); /* find task thread */ task_thread = ags_thread_find_type(audio_loop, AGS_TYPE_TASK_THREAD); /* get audio mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) machine->audio); pthread_mutex_unlock(&(ags_application_mutex)); /* calculate offset */ pthread_mutex_lock(audio_mutex); list_start = list = gtk_container_get_children((GtkContainer *) pattern_box->pattern); for(i = 0; i < pattern_box->n_controls && toggle_button != list->data; i++){ list = list->next; } offset = i; g_list_free(list_start); /* retrieve indices */ index0 = machine->bank_0; index1 = machine->bank_1; /* calculate offset / page */ list_start = list = gtk_container_get_children((GtkContainer *) pattern_box->offset); for(i = 0; i < 4 && !GTK_TOGGLE_BUTTON(list->data)->active; i++){ list = list->next; } offset += (i * pattern_box->n_controls); g_list_free(list_start); /**/ line_start = line = gtk_container_get_children(GTK_CONTAINER(AGS_PAD(machine->selected_input_pad)->expander_set)); tasks = NULL; while((line = ags_line_find_next_grouped(line)) != NULL){ selected_line = AGS_LINE(line->data); toggle_pattern_bit = ags_toggle_pattern_bit_new(selected_line->channel->pattern->data, selected_line->channel->line, index0, index1, offset); tasks = g_list_prepend(tasks, toggle_pattern_bit); line = line->next; } g_list_free(line_start); /* append AgsTogglePatternBit */ ags_task_thread_append_tasks(task_thread, tasks); pthread_mutex_unlock(audio_mutex); } void ags_pattern_box_offset_callback(GtkWidget *widget, AgsPatternBox *pattern_box) { ags_pattern_box_set_pattern(pattern_box); } gboolean ags_pattern_box_key_press_event(GtkWidget *widget, GdkEventKey *event, AgsPatternBox *pattern_box) { if(event->keyval == GDK_KEY_Tab){ return(FALSE); } switch(event->keyval){ case GDK_KEY_Control_L: { pattern_box->key_mask |= AGS_PATTERN_BOX_KEY_L_CONTROL; } break; case GDK_KEY_Control_R: { pattern_box->key_mask |= AGS_PATTERN_BOX_KEY_R_CONTROL; } break; case GDK_KEY_c: { /* copy notes */ if((AGS_PATTERN_BOX_KEY_L_CONTROL & (pattern_box->key_mask)) != 0 || (AGS_PATTERN_BOX_KEY_R_CONTROL & (pattern_box->key_mask)) != 0){ AgsMachine *machine; machine = gtk_widget_get_ancestor(pattern_box, AGS_TYPE_MACHINE); ags_machine_copy_pattern(machine); } } break; } return(TRUE); } gboolean ags_pattern_box_key_release_event(GtkWidget *widget, GdkEventKey *event, AgsPatternBox *pattern_box) { AgsWindow *window; AgsMachine *machine; AgsThread *audio_loop; AgsTaskThread *task_thread; AgsMain *ags_main; if(event->keyval == GDK_KEY_Tab){ return(FALSE); } machine = gtk_widget_get_ancestor(pattern_box, AGS_TYPE_MACHINE); window = gtk_widget_get_ancestor(machine, AGS_TYPE_WINDOW); ags_main = window->ags_main; /* get audio loop */ pthread_mutex_lock(&(ags_application_mutex)); audio_loop = ags_main->main_loop; pthread_mutex_unlock(&(ags_application_mutex)); /* find task thread */ task_thread = ags_thread_find_type(audio_loop, AGS_TYPE_TASK_THREAD); switch(event->keyval){ case GDK_KEY_Control_L: { pattern_box->key_mask &= (~AGS_PATTERN_BOX_KEY_L_CONTROL); } break; case GDK_KEY_Control_R: { pattern_box->key_mask &= (~AGS_PATTERN_BOX_KEY_R_CONTROL); } break; case GDK_KEY_Left: case GDK_KEY_leftarrow: { if(pattern_box->cursor_x > 0){ GList *list; pattern_box->cursor_x -= 1; list = gtk_container_get_children(pattern_box->pattern); gtk_widget_set_state(g_list_nth_data(list, pattern_box->cursor_x), GTK_STATE_PRELIGHT); if(!gtk_toggle_button_get_active(g_list_nth_data(list, pattern_box->cursor_x + 1))){ gtk_widget_set_state(g_list_nth_data(list, pattern_box->cursor_x + 1), GTK_STATE_NORMAL); }else{ gtk_widget_set_state(g_list_nth_data(list, pattern_box->cursor_x + 1), GTK_STATE_ACTIVE); } if(gtk_toggle_button_get_active(g_list_nth_data(list, pattern_box->cursor_y * pattern_box->n_controls + pattern_box->cursor_x))){ /* give audible feedback */ ags_pad_play(machine->selected_input_pad); } g_list_free(list); } } break; case GDK_KEY_Right: case GDK_KEY_rightarrow: { if(pattern_box->cursor_x + 1 < pattern_box->n_controls){ GList *list; pattern_box->cursor_x += 1; list = gtk_container_get_children(pattern_box->pattern); gtk_widget_set_state(g_list_nth_data(list, pattern_box->cursor_x), GTK_STATE_PRELIGHT); if(!gtk_toggle_button_get_active(g_list_nth_data(list, pattern_box->cursor_x - 1))){ gtk_widget_set_state(g_list_nth_data(list, pattern_box->cursor_x - 1), GTK_STATE_NORMAL); }else{ gtk_widget_set_state(g_list_nth_data(list, pattern_box->cursor_x - 1), GTK_STATE_ACTIVE); } if(gtk_toggle_button_get_active(g_list_nth_data(list, pattern_box->cursor_y * pattern_box->n_controls + pattern_box->cursor_x))){ /* give audible feedback */ ags_pad_play(machine->selected_input_pad); } g_list_free(list); } } break; case GDK_KEY_Up: case GDK_KEY_uparrow: { if(pattern_box->cursor_y > 0){ GList *list, *pad; pattern_box->cursor_y -= 1; list = gtk_container_get_children(pattern_box->offset); gtk_button_clicked(g_list_nth_data(list, pattern_box->cursor_y)); g_list_free(list); /* give audible feedback */ pad = gtk_container_get_children(pattern_box->pattern); if(gtk_toggle_button_get_active(g_list_nth_data(pad, pattern_box->cursor_y * pattern_box->n_controls + pattern_box->cursor_x))){ ags_pad_play(machine->selected_input_pad); } } } break; case GDK_KEY_Down: case GDK_KEY_downarrow: { if(pattern_box->cursor_y + 1 < pattern_box->n_indices){ GList *list, *pad; list = gtk_container_get_children(pattern_box->offset); pattern_box->cursor_y += 1; gtk_button_clicked(g_list_nth_data(list, pattern_box->cursor_y)); g_list_free(list); /* give audible feedback */ pad = gtk_container_get_children(pattern_box->pattern); if(gtk_toggle_button_get_active(g_list_nth_data(pad, pattern_box->cursor_y * pattern_box->n_controls + pattern_box->cursor_x))){ ags_pad_play(machine->selected_input_pad); } } } break; case GDK_KEY_space: { AgsLine *selected_line; AgsTogglePatternBit *toggle_pattern_bit; AgsChannel *channel; GList *line, *line_start; GList *tasks; guint i, j; guint offset; guint index0, index1; i = pattern_box->cursor_y; j = pattern_box->cursor_x; offset = (i * pattern_box->n_controls) + j; index0 = machine->bank_0; index1 = machine->bank_1; channel = ags_channel_nth(machine->audio->input, machine->audio->input_lines - i - 1); line_start = line = gtk_container_get_children(GTK_CONTAINER(AGS_PAD(machine->selected_input_pad)->expander_set)); tasks = NULL; while((line = ags_line_find_next_grouped(line)) != NULL){ selected_line = AGS_LINE(line->data); /* create toggle pattern bit task */ toggle_pattern_bit = ags_toggle_pattern_bit_new(selected_line->channel->pattern->data, selected_line->channel->line, index0, index1, offset); g_signal_connect(G_OBJECT(toggle_pattern_bit), "refresh-gui\0", G_CALLBACK(ags_pattern_box_refresh_gui_callback), pattern_box); tasks = g_list_prepend(tasks, toggle_pattern_bit); line = line->next; } g_list_free(line_start); /* append tasks to task thread */ ags_task_thread_append_tasks(task_thread, tasks); /* give audible feedback */ ags_pad_play(machine->selected_input_pad); } break; } return(TRUE); } void ags_pattern_box_refresh_gui_callback(AgsTogglePatternBit *toggle_pattern_bit, AgsPatternBox *pattern_box) { AgsMachine *machine; AgsChannel *channel; GList *radio; machine = gtk_widget_get_ancestor(pattern_box, AGS_TYPE_MACHINE); channel = ags_channel_nth(machine->audio->input, toggle_pattern_bit->line); if(!gtk_toggle_button_get_active(AGS_LINE(channel->line_widget)->group)){ return; } radio = gtk_container_get_children(pattern_box->offset); if(gtk_toggle_button_get_active(g_list_nth_data(radio, toggle_pattern_bit->bit / pattern_box->n_controls))){ GList *list; /* apply pattern to GUI */ list = gtk_container_get_children(pattern_box->pattern); pattern_box->flags |= AGS_PATTERN_BOX_BLOCK_PATTERN; gtk_toggle_button_set_active(g_list_nth_data(list, toggle_pattern_bit->bit % pattern_box->n_controls), TRUE); pattern_box->flags &= (~AGS_PATTERN_BOX_BLOCK_PATTERN); g_list_free(list); /* give audible feedback */ ags_pad_play(AGS_PAD(machine->selected_input_pad)); } g_list_free(radio); } gsequencer-0.6.37/src/ags/X/machine/ags_cell_pattern_callbacks.h0000644000175000017500000000354312621245070021527 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_CELL_PATTERN_CALLBACKS_H__ #define __AGS_CELL_PATTERN_CALLBACKS_H__ #include #include #include #include /* controls */ gboolean ags_cell_pattern_focus_in_callback(GtkWidget *widget, GdkEvent *event, AgsCellPattern *cell_pattern); gboolean ags_cell_pattern_drawing_area_configure_callback(GtkWidget *widget, GdkEventConfigure *event, AgsCellPattern *cell_pattern); gboolean ags_cell_pattern_drawing_area_expose_callback(GtkWidget *widget, GdkEventExpose *event, AgsCellPattern *cell_pattern); gboolean ags_cell_pattern_drawing_area_button_press_callback(GtkWidget *widget, GdkEventButton *event, AgsCellPattern *cell_pattern); gboolean ags_cell_pattern_drawing_area_key_press_event(GtkWidget *widget, GdkEventKey *event, AgsCellPattern *cell_pattern); gboolean ags_cell_pattern_drawing_area_key_release_event(GtkWidget *widget, GdkEventKey *event, AgsCellPattern *cell_pattern); void ags_cell_pattern_adjustment_value_changed_callback(GtkWidget *widget, AgsCellPattern *cell_pattern); #endif /*__AGS_CELL_PATTERN_CALLBACKS_H__*/ gsequencer-0.6.37/src/ags/X/machine/ags_panel_callbacks.c0000644000175000017500000000237512621463700020151 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_panel_parent_set_callback(GtkWidget *widget, GtkObject *old_parent, AgsPanel *panel) { AgsWindow *window; if(old_parent != NULL) return; window = AGS_WINDOW(gtk_widget_get_toplevel(widget)); AGS_MACHINE(panel)->name = g_strdup_printf("Default %d\0", ags_window_find_machine_counter(window, AGS_TYPE_PANEL)->counter); ags_window_increment_machine_counter(window, AGS_TYPE_PANEL); } gsequencer-0.6.37/src/ags/X/machine/ags_synth_input_line.c0000644000175000017500000002414712626272146020456 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void ags_synth_input_line_class_init(AgsSynthInputLineClass *synth_input_line); void ags_synth_input_line_plugin_interface_init(AgsPluginInterface *plugin); void ags_synth_input_line_connectable_interface_init(AgsConnectableInterface *connectable); void ags_synth_input_line_init(AgsSynthInputLine *synth_input_line); void ags_synth_input_line_connect(AgsConnectable *connectable); void ags_synth_input_line_disconnect(AgsConnectable *connectable); gchar* ags_synth_input_line_get_name(AgsPlugin *plugin); void ags_synth_input_line_set_name(AgsPlugin *plugin, gchar *name); gchar* ags_synth_input_line_get_xml_type(AgsPlugin *plugin); void ags_synth_input_line_set_xml_type(AgsPlugin *plugin, gchar *xml_type); void ags_synth_input_line_read(AgsFile *file, xmlNode *node, AgsPlugin *plugin); void ags_synth_input_line_resolve_line(AgsFileLookup *file_lookup, AgsSynthInputLine *synth_input_line); xmlNode* ags_synth_input_line_write(AgsFile *file, xmlNode *parent, AgsPlugin *plugin); void ags_synth_input_line_set_channel(AgsLine *line, AgsChannel *channel); void ags_synth_input_line_map_recall(AgsLine *line, guint output_pad_start); /** * SECTION:ags_synth_input_line * @short_description: synth input line * @title: AgsSynthInputLine * @section_id: * @include: ags/X/machine/ags_synth_input_line.h * * The #AgsSynthInputLine is a composite widget to act as synth input line. */ static gpointer ags_synth_input_line_parent_class = NULL; static AgsConnectableInterface *ags_synth_input_line_parent_connectable_interface; GType ags_synth_input_line_get_type() { static GType ags_type_synth_input_line = 0; if(!ags_type_synth_input_line){ static const GTypeInfo ags_synth_input_line_info = { sizeof(AgsSynthInputLineClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_synth_input_line_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(AgsSynthInputLine), 0, /* n_preallocs */ (GInstanceInitFunc) ags_synth_input_line_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_synth_input_line_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_plugin_interface_info = { (GInterfaceInitFunc) ags_synth_input_line_plugin_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_synth_input_line = g_type_register_static(AGS_TYPE_LINE, "AgsSynthInputLine\0", &ags_synth_input_line_info, 0); g_type_add_interface_static(ags_type_synth_input_line, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_synth_input_line, AGS_TYPE_PLUGIN, &ags_plugin_interface_info); } return(ags_type_synth_input_line); } void ags_synth_input_line_class_init(AgsSynthInputLineClass *synth_input_line) { AgsLineClass *line; ags_synth_input_line_parent_class = g_type_class_peek_parent(synth_input_line); /* AgsLineClass */ line = AGS_LINE_CLASS(synth_input_line); line->set_channel = ags_synth_input_line_set_channel; line->map_recall = ags_synth_input_line_map_recall; } void ags_synth_input_line_connectable_interface_init(AgsConnectableInterface *connectable) { ags_synth_input_line_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_synth_input_line_connect; connectable->disconnect = ags_synth_input_line_disconnect; } void ags_synth_input_line_plugin_interface_init(AgsPluginInterface *plugin) { plugin->get_name = ags_synth_input_line_get_name; plugin->set_name = ags_synth_input_line_set_name; plugin->get_xml_type = ags_synth_input_line_get_xml_type; plugin->set_xml_type = ags_synth_input_line_set_xml_type; plugin->read = ags_synth_input_line_read; plugin->write = ags_synth_input_line_write; } void ags_synth_input_line_init(AgsSynthInputLine *synth_input_line) { AgsOscillator *oscillator; synth_input_line->name = NULL; synth_input_line->xml_type = "ags-synth-input-line\0"; /* oscillator */ oscillator = ags_oscillator_new(); synth_input_line->oscillator = oscillator; ags_expander_add(AGS_LINE(synth_input_line)->expander, GTK_WIDGET(oscillator), 0, 0, 1, 1); } void ags_synth_input_line_connect(AgsConnectable *connectable) { AgsSynthInputLine *synth_input_line; synth_input_line = AGS_SYNTH_INPUT_LINE(connectable); if((AGS_LINE_CONNECTED & (AGS_LINE(synth_input_line)->flags)) != 0){ return; } ags_synth_input_line_parent_connectable_interface->connect(connectable); } void ags_synth_input_line_disconnect(AgsConnectable *connectable) { ags_synth_input_line_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_synth_input_line_set_channel(AgsLine *line, AgsChannel *channel) { AgsSynthInputLine *synth_input_line; AGS_LINE_CLASS(ags_synth_input_line_parent_class)->set_channel(line, channel); synth_input_line = AGS_SYNTH_INPUT_LINE(line); /* empty */ } void ags_synth_input_line_map_recall(AgsLine *line, guint output_pad_start) { AgsSynth *synth; AgsSynthInputLine *synth_input_line; AgsAudio *audio; AgsChannel *source; guint i; if((AGS_LINE_MAPPED_RECALL & (line->flags)) != 0 || (AGS_LINE_PREMAPPED_RECALL & (line->flags)) != 0){ return; } synth_input_line = AGS_SYNTH_INPUT_LINE(line); audio = AGS_AUDIO(line->channel->audio); synth = AGS_SYNTH(audio->machine); source = line->channel; /* empty */ /* call parent */ AGS_LINE_CLASS(ags_synth_input_line_parent_class)->map_recall(line, output_pad_start); } gchar* ags_synth_input_line_get_name(AgsPlugin *plugin) { return(AGS_SYNTH_INPUT_LINE(plugin)->name); } void ags_synth_input_line_set_name(AgsPlugin *plugin, gchar *name) { AGS_SYNTH_INPUT_LINE(plugin)->name = name; } gchar* ags_synth_input_line_get_xml_type(AgsPlugin *plugin) { return(AGS_SYNTH_INPUT_LINE(plugin)->xml_type); } void ags_synth_input_line_set_xml_type(AgsPlugin *plugin, gchar *xml_type) { AGS_SYNTH_INPUT_LINE(plugin)->xml_type = xml_type; } void ags_synth_input_line_read(AgsFile *file, xmlNode *node, AgsPlugin *plugin) { AgsSynthInputLine *gobject; AgsFileLookup *file_lookup; xmlNode *child; gobject = AGS_SYNTH_INPUT_LINE(plugin); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", gobject, NULL)); gobject->oscillator = ags_oscillator_new(); file_lookup = (AgsFileLookup *) g_object_new(AGS_TYPE_FILE_LOOKUP, "file\0", file, "node\0", node, "reference\0", gobject, NULL); ags_file_add_lookup(file, (GObject *) file_lookup); g_signal_connect(G_OBJECT(file_lookup), "resolve\0", G_CALLBACK(ags_synth_input_line_resolve_line), gobject); /* child elements */ child = node->children; while(child != NULL){ if(XML_ELEMENT_NODE == child->type){ if(!xmlStrncmp(child->name, "ags-oscillator\0", 15)){ ags_file_read_oscillator(file, child, &(gobject->oscillator)); } } child = child->next; } } void ags_synth_input_line_resolve_line(AgsFileLookup *file_lookup, AgsSynthInputLine *synth_input_line) { ags_expander_add(AGS_LINE(synth_input_line)->expander, GTK_WIDGET(synth_input_line->oscillator), 0, 0, 1, 1); } xmlNode* ags_synth_input_line_write(AgsFile *file, xmlNode *parent, AgsPlugin *plugin) { AgsSynthInputLine *synth_input_line; xmlNode *node; gchar *id; synth_input_line = AGS_SYNTH_INPUT_LINE(plugin); id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-synth-input-line\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", synth_input_line, NULL)); ags_file_write_oscillator(file, node, synth_input_line->oscillator); xmlAddChild(parent, node); } /** * ags_synth_input_line_new: * @channel: the assigned channel * * Creates an #AgsSynthInputLine * * Returns: a new #AgsSynthInputLine * * Since: 0.4 */ AgsSynthInputLine* ags_synth_input_line_new(AgsChannel *channel) { AgsSynthInputLine *synth_input_line; synth_input_line = (AgsSynthInputLine *) g_object_new(AGS_TYPE_SYNTH_INPUT_LINE, "channel\0", channel, NULL); return(synth_input_line); } gsequencer-0.6.37/src/ags/X/machine/ags_synth.c0000644000175000017500000005006112626272146016222 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void ags_synth_class_init(AgsSynthClass *synth); void ags_synth_connectable_interface_init(AgsConnectableInterface *connectable); void ags_synth_plugin_interface_init(AgsPluginInterface *plugin); void ags_synth_init(AgsSynth *synth); void ags_synth_finalize(GObject *gobject); void ags_synth_connect(AgsConnectable *connectable); void ags_synth_disconnect(AgsConnectable *connectable); void ags_synth_show(GtkWidget *widget); void ags_synth_map_recall(AgsMachine *machine); gchar* ags_synth_get_name(AgsPlugin *plugin); void ags_synth_set_name(AgsPlugin *plugin, gchar *name); gchar* ags_synth_get_xml_type(AgsPlugin *plugin); void ags_synth_set_xml_type(AgsPlugin *plugin, gchar *xml_type); void ags_synth_read(AgsFile *file, xmlNode *node, AgsPlugin *plugin); void ags_synth_read_resolve_audio(AgsFileLookup *file_lookup, AgsMachine *machine); xmlNode* ags_synth_write(AgsFile *file, xmlNode *parent, AgsPlugin *plugin); void ags_synth_set_audio_channels(AgsAudio *audio, guint audio_channels, guint audio_channels_old, AgsSynth *synth); void ags_synth_set_pads(AgsAudio *audio, GType type, guint pads, guint pads_old, AgsSynth *synth); void ags_synth_update(AgsSynth *synth); /** * SECTION:ags_synth * @short_description: synth * @title: AgsSynth * @section_id: * @include: ags/X/machine/ags_synth.h * * The #AgsSynth is a composite widget to act as synth. */ static gpointer ags_synth_parent_class = NULL; static AgsConnectableInterface *ags_synth_parent_connectable_interface; extern pthread_mutex_t ags_application_mutex; GType ags_synth_get_type(void) { static GType ags_type_synth = 0; if(!ags_type_synth){ static const GTypeInfo ags_synth_info = { sizeof(AgsSynthClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_synth_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(AgsSynth), 0, /* n_preallocs */ (GInstanceInitFunc) ags_synth_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_synth_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_plugin_interface_info = { (GInterfaceInitFunc) ags_synth_plugin_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_synth = g_type_register_static(AGS_TYPE_MACHINE, "AgsSynth\0", &ags_synth_info, 0); g_type_add_interface_static(ags_type_synth, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_synth, AGS_TYPE_PLUGIN, &ags_plugin_interface_info); } return(ags_type_synth); } void ags_synth_class_init(AgsSynthClass *synth) { GObjectClass *gobject; GtkWidgetClass *widget; AgsMachineClass *machine; ags_synth_parent_class = g_type_class_peek_parent(synth); /* GObjectClass */ gobject = (GObjectClass *) synth; gobject->finalize = ags_synth_finalize; /* GtkWidgetClass */ widget = (GtkWidgetClass *) synth; /* AgsMachineClass */ machine = (AgsMachineClass *) synth; machine->map_recall = ags_synth_map_recall; } void ags_synth_connectable_interface_init(AgsConnectableInterface *connectable) { AgsConnectableInterface *ags_synth_connectable_parent_interface; ags_synth_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_synth_connect; connectable->disconnect = ags_synth_disconnect; } void ags_synth_plugin_interface_init(AgsPluginInterface *plugin) { plugin->get_name = ags_synth_get_name; plugin->set_name = ags_synth_set_name; plugin->get_xml_type = ags_synth_get_xml_type; plugin->set_xml_type = ags_synth_set_xml_type; plugin->read = ags_synth_read; plugin->write = ags_synth_write; } void ags_synth_init(AgsSynth *synth) { AgsAudio *audio; AgsRecallContainer *recall_container; AgsDelayAudio *delay_audio; AgsDelayAudioRun *play_delay_audio_run, *recall_delay_audio_run; AgsCountBeatsAudio *play_count_beats_audio, *recall_count_beats_audio; AgsCountBeatsAudioRun *play_count_beats_audio_run, *recall_count_beats_audio_run; AgsPlayNotationAudioRun *play_notation, *recall_notation; AgsRecallAudio *play_audio, *recall_audio; GtkMenu *menu; GtkHBox *hbox; GtkVBox *vbox; GtkTable *table; GtkLabel *label; GtkFrame *frame; g_signal_connect_after((GObject *) synth, "parent_set\0", G_CALLBACK(ags_synth_parent_set_callback), (gpointer) synth); audio = AGS_MACHINE(synth)->audio; audio->flags |= (AGS_AUDIO_ASYNC | AGS_AUDIO_OUTPUT_HAS_RECYCLING | AGS_AUDIO_INPUT_HAS_RECYCLING); AGS_MACHINE(synth)->input_pad_type = AGS_TYPE_SYNTH_INPUT_PAD; AGS_MACHINE(synth)->input_line_type = AGS_TYPE_SYNTH_INPUT_LINE; AGS_MACHINE(synth)->output_pad_type = G_TYPE_NONE; AGS_MACHINE(synth)->output_line_type = G_TYPE_NONE; g_signal_connect_after(G_OBJECT(AGS_MACHINE(synth)->audio), "set_audio_channels\0", G_CALLBACK(ags_synth_set_audio_channels), synth); g_signal_connect_after(G_OBJECT(AGS_MACHINE(synth)->audio), "set_pads\0", G_CALLBACK(ags_synth_set_pads), synth); // AGS_MACHINE(synth)->flags |= AGS_MACHINE_IS_SYNTHESIZER; AGS_MACHINE(synth)->mapping_flags |= AGS_MACHINE_MONO; /* create widgets */ synth->flags = 0; synth->name = NULL; synth->xml_type = "ags-synth\0"; synth->mapped_input_pad = 0; synth->mapped_output_pad = 0; hbox = (GtkHBox *) gtk_hbox_new(FALSE, 0); gtk_container_add((GtkContainer*) (gtk_bin_get_child((GtkBin *) synth)), (GtkWidget *) hbox); synth->input_pad = (GtkVBox *) gtk_vbox_new(FALSE, 0); AGS_MACHINE(synth)->input = (GtkContainer *) synth->input_pad; gtk_box_pack_start((GtkBox *) hbox, (GtkWidget *) AGS_MACHINE(synth)->input, FALSE, FALSE, 0); vbox = (GtkVBox *) gtk_vbox_new(FALSE, 0); gtk_box_pack_start((GtkBox *) hbox, (GtkWidget *) vbox, FALSE, FALSE, 0); synth->auto_update = (GtkCheckButton *) gtk_check_button_new_with_label(g_strdup("auto update\0")); gtk_box_pack_start((GtkBox *) vbox, (GtkWidget *) synth->auto_update, FALSE, FALSE, 0); synth->update = (GtkButton *) gtk_button_new_with_label(g_strdup("update\0")); gtk_box_pack_start((GtkBox *) vbox, (GtkWidget *) synth->update, FALSE, FALSE, 0); table = (GtkTable *) gtk_table_new(3, 2, FALSE); gtk_box_pack_start((GtkBox *) vbox, (GtkWidget *) table, FALSE, FALSE, 0); label = (GtkLabel *) g_object_new(GTK_TYPE_LABEL, "label\0", "lower\0", "xalign\0", 0.0, NULL); gtk_table_attach(table, GTK_WIDGET(label), 0, 1, 0, 1, GTK_FILL, GTK_FILL, 0, 0); synth->lower = (GtkSpinButton *) gtk_spin_button_new_with_range(0.0, 0.0, 1.0); gtk_table_attach(table, GTK_WIDGET(synth->lower), 1, 2, 0, 1, GTK_FILL, GTK_FILL, 0, 0); label = (GtkLabel *) g_object_new(GTK_TYPE_LABEL, "label\0", "loop start\0", "xalign\0", 0.0, NULL); gtk_table_attach(table, GTK_WIDGET(label), 0, 1, 1, 2, GTK_FILL, GTK_FILL, 0, 0); synth->loop_start = (GtkSpinButton *) gtk_spin_button_new_with_range(0.0, 0.0, 1.0); gtk_table_attach(table, GTK_WIDGET(synth->loop_start), 1, 2, 1, 2, GTK_FILL, GTK_FILL, 0, 0); label = (GtkLabel *) g_object_new(GTK_TYPE_LABEL, "label\0", "loop end\0", "xalign\0", 0.0, NULL); gtk_table_attach(table, GTK_WIDGET(label), 0, 1, 2, 3, GTK_FILL, GTK_FILL, 0, 0); synth->loop_end = (GtkSpinButton *) gtk_spin_button_new_with_range(0.0, 0.0, 1.0); gtk_table_attach(table, GTK_WIDGET(synth->loop_end), 1, 2, 2, 3, GTK_FILL, GTK_FILL, 0, 0); } void ags_synth_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_synth_parent_class)->finalize(gobject); } void ags_synth_connect(AgsConnectable *connectable) { AgsSynth *synth; if((AGS_MACHINE_CONNECTED & (AGS_MACHINE(connectable)->flags)) != 0){ return; } ags_synth_parent_connectable_interface->connect(connectable); /* AgsSynth */ synth = AGS_SYNTH(connectable); g_signal_connect((GObject *) synth->lower, "value-changed\0", G_CALLBACK(ags_synth_lower_callback), synth); g_signal_connect((GObject *) synth->auto_update, "toggled\0", G_CALLBACK(ags_synth_auto_update_callback), synth); g_signal_connect((GObject *) synth->update, "clicked\0", G_CALLBACK(ags_synth_update_callback), (gpointer) synth); } void ags_synth_disconnect(AgsConnectable *connectable) { AgsSynth *synth; ags_synth_parent_connectable_interface->disconnect(connectable); /* AgsSynth */ synth = AGS_SYNTH(connectable); } void ags_synth_map_recall(AgsMachine *machine) { AgsSynth *synth; AgsAudio *audio; if((AGS_MACHINE_MAPPED_RECALL & (machine->flags)) != 0 || (AGS_MACHINE_PREMAPPED_RECALL & (machine->flags)) != 0){ return; } audio = machine->audio; synth = AGS_SYNTH(machine); /* ags-delay * / ags_recall_factory_create(audio, NULL, NULL, "ags-stream\0", 0, audio->audio_channels, 0, audio->output_pads, (AGS_RECALL_FACTORY_OUTPUT | AGS_RECALL_FACTORY_ADD | AGS_RECALL_FACTORY_PLAY), 0); */ AGS_MACHINE_CLASS(ags_synth_parent_class)->map_recall(machine); } gchar* ags_synth_get_name(AgsPlugin *plugin) { return(AGS_SYNTH(plugin)->name); } void ags_synth_set_name(AgsPlugin *plugin, gchar *name) { AGS_SYNTH(plugin)->name = name; } gchar* ags_synth_get_xml_type(AgsPlugin *plugin) { return(AGS_SYNTH(plugin)->xml_type); } void ags_synth_set_xml_type(AgsPlugin *plugin, gchar *xml_type) { AGS_SYNTH(plugin)->xml_type = xml_type; } void ags_synth_read(AgsFile *file, xmlNode *node, AgsPlugin *plugin) { AgsSynth *gobject; AgsFileLookup *file_lookup; GList *list; gobject = AGS_SYNTH(plugin); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", gobject, NULL)); /* fix wrong flag */ AGS_MACHINE(gobject)->flags &= (~AGS_MACHINE_IS_SYNTHESIZER); list = file->lookup; while((list = ags_file_lookup_find_by_node(list, node->parent)) != NULL){ file_lookup = AGS_FILE_LOOKUP(list->data); if(g_signal_handler_find(list->data, G_SIGNAL_MATCH_FUNC, 0, 0, NULL, ags_file_read_machine_resolve_audio, NULL) != 0){ g_signal_connect_after(G_OBJECT(file_lookup), "resolve\0", G_CALLBACK(ags_synth_read_resolve_audio), gobject); break; } list = list->next; } /* */ gtk_spin_button_set_value(gobject->lower, g_ascii_strtod(xmlGetProp(node, "lower\0"), NULL)); gtk_spin_button_set_value(gobject->loop_start, g_ascii_strtod(xmlGetProp(node, "loop-begin\0"), NULL)); gtk_spin_button_set_value(gobject->loop_end, g_ascii_strtod(xmlGetProp(node, "loop-end\0"), NULL)); } void ags_synth_read_resolve_audio(AgsFileLookup *file_lookup, AgsMachine *machine) { AgsSynth *synth; synth = AGS_SYNTH(machine); g_signal_connect_after(G_OBJECT(machine->audio), "set_audio_channels\0", G_CALLBACK(ags_synth_set_audio_channels), synth); g_signal_connect_after(G_OBJECT(machine->audio), "set_pads\0", G_CALLBACK(ags_synth_set_pads), synth); if((AGS_MACHINE_PREMAPPED_RECALL & (machine->flags)) == 0){ synth->mapped_output_pad = machine->audio->output_pads; synth->mapped_input_pad = machine->audio->input_pads; }else{ synth->mapped_output_pad = machine->audio->output_pads; synth->mapped_input_pad = machine->audio->input_pads; } } xmlNode* ags_synth_write(AgsFile *file, xmlNode *parent, AgsPlugin *plugin) { AgsSynth *synth; xmlNode *node; gchar *id; synth = AGS_SYNTH(plugin); id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-synth\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", synth, NULL)); xmlNewProp(node, "lower\0", g_strdup_printf("%f\0", gtk_spin_button_get_value(synth->lower))); xmlNewProp(node, "loop-begin\0", g_strdup_printf("%f\0", gtk_spin_button_get_value(synth->loop_start))); xmlNewProp(node, "loop-end\0", g_strdup_printf("%f\0", gtk_spin_button_get_value(synth->loop_end))); xmlAddChild(parent, node); return(node); } void ags_synth_set_audio_channels(AgsAudio *audio, guint audio_channels, guint audio_channels_old, AgsSynth *synth) { /* empty */ } void ags_synth_set_pads(AgsAudio *audio, GType type, guint pads, guint pads_old, AgsSynth *synth) { /* empty */ } void ags_synth_update(AgsSynth *synth) { AgsWindow *window; AgsOscillator *oscillator; AgsDevout *devout; AgsAudio *audio; AgsChannel *channel; AgsApplySynth *apply_synth; AgsMutexManager *mutex_manager; AgsAudioLoop *audio_loop; AgsTaskThread *task_thread; AgsMain *ags_main; GList *input_pad, *input_pad_start; GList *input_line, *input_line_start; guint output_lines; guint wave; guint attack, frame_count; guint frequency, phase, start; guint loop_start, loop_end; gdouble volume; pthread_mutex_t *audio_mutex; pthread_mutex_t *channel_mutex; window = (AgsWindow *) gtk_widget_get_toplevel(synth); ags_main = window->ags_main; audio = AGS_MACHINE(synth)->audio; /* get audio loop */ pthread_mutex_lock(&(ags_application_mutex)); audio_loop = ags_main->main_loop; pthread_mutex_unlock(&(ags_application_mutex)); /* get task thread */ task_thread = (AgsTaskThread *) ags_thread_find_type(audio_loop, AGS_TYPE_TASK_THREAD); /* lookup audio mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); /* */ start = (guint) gtk_spin_button_get_value_as_int(synth->lower); loop_start = (guint) gtk_spin_button_get_value_as_int(synth->loop_start); loop_end = (guint) gtk_spin_button_get_value_as_int(synth->loop_end); /* write input */ input_pad_start = input_pad = gtk_container_get_children((GtkContainer *) synth->input_pad); /* get devout */ pthread_mutex_lock(audio_mutex); devout = (AgsDevout *) audio->devout; channel = audio->input; pthread_mutex_unlock(audio_mutex); while(input_pad != NULL){ /* lookup channel mutex */ pthread_mutex_lock(&(ags_application_mutex)); channel_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); /* do it so */ input_line = gtk_container_get_children((GtkContainer *) AGS_PAD(input_pad->data)->expander_set); oscillator = AGS_OSCILLATOR(gtk_container_get_children((GtkContainer *) AGS_LINE(input_line->data)->expander->table)->data); wave = (guint) gtk_combo_box_get_active(oscillator->wave) + 1; attack = (guint) gtk_spin_button_get_value_as_int(oscillator->attack); frame_count = (guint) gtk_spin_button_get_value_as_int(oscillator->frame_count); phase = (guint) gtk_spin_button_get_value_as_int(oscillator->phase); frequency = (guint) gtk_spin_button_get_value_as_int(oscillator->frequency); volume = (gdouble) gtk_spin_button_get_value_as_float(oscillator->volume); apply_synth = ags_apply_synth_new(channel, 1, wave, attack, frame_count, frequency, phase, start, volume, loop_start, loop_end); ags_task_thread_append_task(task_thread, AGS_TASK(apply_synth)); /* iterate */ pthread_mutex_lock(channel_mutex); channel = channel->next; pthread_mutex_unlock(channel_mutex); input_pad = input_pad->next; } g_list_free(input_pad_start); /* write output */ input_pad_start = input_pad = gtk_container_get_children((GtkContainer *) synth->input_pad); pthread_mutex_lock(audio_mutex); channel = audio->output; output_lines = audio->output_lines; pthread_mutex_unlock(audio_mutex); while(input_pad != NULL){ /* do it so */ input_line = gtk_container_get_children((GtkContainer *) AGS_PAD(input_pad->data)->expander_set); oscillator = AGS_OSCILLATOR(gtk_container_get_children((GtkContainer *) AGS_LINE(input_line->data)->expander->table)->data); wave = (guint) gtk_combo_box_get_active(oscillator->wave) + 1; attack = (guint) gtk_spin_button_get_value_as_int(oscillator->attack); frame_count = (guint) gtk_spin_button_get_value_as_int(oscillator->frame_count); phase = (guint) gtk_spin_button_get_value_as_int(oscillator->phase); frequency = (guint) gtk_spin_button_get_value_as_int(oscillator->frequency); volume = (gdouble) gtk_spin_button_get_value_as_float(oscillator->volume); apply_synth = ags_apply_synth_new(channel, output_lines, wave, attack, frame_count, frequency, phase, start, volume, loop_start, loop_end); ags_task_thread_append_task(task_thread, AGS_TASK(apply_synth)); input_pad = input_pad->next; } g_list_free(input_pad_start); } /** * ags_synth_new: * @devout: the assigned devout. * * Creates an #AgsSynth * * Returns: a new #AgsSynth * * Since: 0.3 */ AgsSynth* ags_synth_new(GObject *devout) { AgsSynth *synth; synth = (AgsSynth *) g_object_new(AGS_TYPE_SYNTH, NULL); g_object_set(G_OBJECT(AGS_MACHINE(synth)->audio), "devout\0", devout, NULL); return(synth); } gsequencer-0.6.37/src/ags/X/machine/ags_panel_callbacks.h0000644000175000017500000000206312621463700020150 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_PANEL_CALLBACKS_H__ #define __AGS_PANEL_CALLBACKS_H__ #include #include #include #include void ags_panel_parent_set_callback(GtkWidget *widget, GtkObject *old_parent, AgsPanel *panel); #endif /*__AGS_PANEL_CALLBACKS_H__*/ gsequencer-0.6.37/src/ags/X/machine/ags_mixer.h0000644000175000017500000000341112626272146016203 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_MIXER_H__ #define __AGS_MIXER_H__ #include #include #include #include #define AGS_TYPE_MIXER (ags_mixer_get_type()) #define AGS_MIXER(obj) (G_TYPE_CHECK_INSTANCE_CAST(obj, AGS_TYPE_MIXER, AgsMixer)) #define AGS_MIXER_CLASS(class) (G_TYPE_CHECK_CLASS_CAST(class, AGS_TYPE_MIXER, AgsMixerClass)) #define AGS_IS_MIXER(obj) (G_TYPE_CHECK_INSTANCE_TYPE(obj, AGS_TYPE_MIXER)) #define AGS_IS_MIXER_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_MIXER)) #define AGS_MIXER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_MIXER, AgsMixerClass)) typedef struct _AgsMixer AgsMixer; typedef struct _AgsMixerClass AgsMixerClass; struct _AgsMixer { AgsMachine machine; gchar *name; gchar *xml_type; GtkHBox *input_pad; }; struct _AgsMixerClass { AgsMachineClass machine; }; GType ags_mixer_get_type(void); AgsMixer* ags_mixer_new(GObject *devout); #endif /*__AGS_MIXER_H__*/ gsequencer-0.6.37/src/ags/X/machine/ags_mixer_input_line.c0000644000175000017500000002311212626272146020424 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include void ags_mixer_input_line_class_init(AgsMixerInputLineClass *mixer_input_line); void ags_mixer_input_line_connectable_interface_init(AgsConnectableInterface *connectable); void ags_mixer_input_line_init(AgsMixerInputLine *mixer_input_line); void ags_mixer_input_line_connect(AgsConnectable *connectable); void ags_mixer_input_line_disconnect(AgsConnectable *connectable); void ags_mixer_input_line_set_channel(AgsLine *line, AgsChannel *channel); void ags_mixer_input_line_map_recall(AgsLine *line, guint output_pad_start); /** * SECTION:ags_mixer_input_line * @short_description: mixer input line * @title: AgsMixerInputLine * @section_id: * @include: ags/X/machine/ags_mixer_input_line.h * * The #AgsMixerInputLine is a composite widget to act as mixer input line. */ static gpointer ags_mixer_input_line_parent_class = NULL; static AgsConnectableInterface *ags_mixer_input_line_parent_connectable_interface; GType ags_mixer_input_line_get_type() { static GType ags_type_mixer_input_line = 0; if(!ags_type_mixer_input_line){ static const GTypeInfo ags_mixer_input_line_info = { sizeof(AgsMixerInputLineClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_mixer_input_line_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(AgsMixerInputLine), 0, /* n_preallocs */ (GInstanceInitFunc) ags_mixer_input_line_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_mixer_input_line_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_mixer_input_line = g_type_register_static(AGS_TYPE_LINE, "AgsMixerInputLine\0", &ags_mixer_input_line_info, 0); g_type_add_interface_static(ags_type_mixer_input_line, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return(ags_type_mixer_input_line); } void ags_mixer_input_line_class_init(AgsMixerInputLineClass *mixer_input_line) { AgsLineClass *line; ags_mixer_input_line_parent_class = g_type_class_peek_parent(mixer_input_line); /* AgsLineClass */ line = AGS_LINE_CLASS(mixer_input_line); line->set_channel = ags_mixer_input_line_set_channel; line->map_recall = ags_mixer_input_line_map_recall; } void ags_mixer_input_line_connectable_interface_init(AgsConnectableInterface *connectable) { ags_mixer_input_line_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_mixer_input_line_connect; connectable->disconnect = ags_mixer_input_line_disconnect; } void ags_mixer_input_line_init(AgsMixerInputLine *mixer_input_line) { AgsLineMember *line_member; GtkWidget *widget; GtkAdjustment *adjustment; /* volume indicator */ line_member = (AgsLineMember *) g_object_new(AGS_TYPE_LINE_MEMBER, "widget-type\0", AGS_TYPE_VINDICATOR, "plugin-name\0", "ags-peak\0", "specifier\0", "./peak[0]\0", "control-port\0", "1/1\0", NULL); line_member->flags |= (AGS_LINE_MEMBER_PLAY_CALLBACK_WRITE | AGS_LINE_MEMBER_RECALL_CALLBACK_WRITE); ags_expander_add(AGS_LINE(mixer_input_line)->expander, GTK_WIDGET(line_member), 0, 0, 1, 1); widget = gtk_bin_get_child(GTK_BIN(line_member)); adjustment = (GtkAdjustment *) gtk_adjustment_new(0.0, 0.0, 10.0, 1.0, 1.0, 10.0); g_object_set(widget, "adjustment\0", adjustment, NULL); gtk_widget_set_size_request(widget, 16, 100); gtk_widget_queue_draw(widget); /* volume */ line_member = (AgsLineMember *) g_object_new(AGS_TYPE_LINE_MEMBER, "widget-type\0", GTK_TYPE_VSCALE, "plugin-name\0", "ags-volume\0", "specifier\0", "./volume[0]\0", "control-port\0", "1/1\0", NULL); ags_expander_add(AGS_LINE(mixer_input_line)->expander, GTK_WIDGET(line_member), 1, 0, 1, 1); widget = gtk_bin_get_child(GTK_BIN(line_member)); gtk_scale_set_digits(GTK_SCALE(widget), 3); gtk_range_set_range(GTK_RANGE(widget), 0.0, 2.00); gtk_range_set_increments(GTK_RANGE(widget), 0.025, 0.1); gtk_range_set_value(GTK_RANGE(widget), 1.0); gtk_range_set_inverted(GTK_RANGE(widget), TRUE); gtk_widget_set_size_request(widget, -1, 100); } void ags_mixer_input_line_connect(AgsConnectable *connectable) { AgsMixerInputLine *mixer_input_line; mixer_input_line = AGS_MIXER_INPUT_LINE(connectable); if((AGS_LINE_CONNECTED & (AGS_LINE(mixer_input_line)->flags)) != 0){ return; } ags_mixer_input_line_parent_connectable_interface->connect(connectable); } void ags_mixer_input_line_disconnect(AgsConnectable *connectable) { ags_mixer_input_line_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_mixer_input_line_set_channel(AgsLine *line, AgsChannel *channel) { AgsMixerInputLine *mixer_input_line; AGS_LINE_CLASS(ags_mixer_input_line_parent_class)->set_channel(line, channel); mixer_input_line = AGS_MIXER_INPUT_LINE(line); /* empty */ } void ags_mixer_input_line_map_recall(AgsLine *line, guint output_pad_start) { AgsMixer *mixer; AgsMixerInputLine *mixer_input_line; AgsAudio *audio; AgsChannel *source; AgsRecallHandler *recall_handler; AgsPeakChannelRun *recall_peak_channel_run, *play_peak_channel_run; GList *list; guint i; if((AGS_LINE_MAPPED_RECALL & (line->flags)) != 0 || (AGS_LINE_PREMAPPED_RECALL & (line->flags)) != 0){ return; } mixer_input_line = AGS_MIXER_INPUT_LINE(line); audio = AGS_AUDIO(line->channel->audio); mixer = AGS_MIXER(audio->machine); source = line->channel; /* ags-peak */ ags_recall_factory_create(audio, NULL, NULL, "ags-peak\0", source->audio_channel, source->audio_channel + 1, source->pad, source->pad + 1, (AGS_RECALL_FACTORY_INPUT | AGS_RECALL_FACTORY_PLAY | AGS_RECALL_FACTORY_RECALL | AGS_RECALL_FACTORY_ADD), 0); /* play - connect run_post */ list = ags_recall_template_find_type(source->play, AGS_TYPE_PEAK_CHANNEL_RUN); if(list != NULL){ play_peak_channel_run = AGS_PEAK_CHANNEL_RUN(list->data); recall_handler = (AgsRecallHandler *) malloc(sizeof(AgsRecallHandler)); recall_handler->signal_name = "run-post\0"; recall_handler->callback = G_CALLBACK(ags_line_peak_run_post_callback); recall_handler->data = (gpointer) line; ags_recall_add_handler(AGS_RECALL(play_peak_channel_run), recall_handler); } /* recall - connect run_post */ list = ags_recall_template_find_type(source->recall, AGS_TYPE_PEAK_CHANNEL_RUN); if(list != NULL){ recall_peak_channel_run = AGS_PEAK_CHANNEL_RUN(list->data); recall_handler = (AgsRecallHandler *) malloc(sizeof(AgsRecallHandler)); recall_handler->signal_name = "run-post\0"; recall_handler->callback = G_CALLBACK(ags_line_peak_run_post_callback); recall_handler->data = (gpointer) line; ags_recall_add_handler(AGS_RECALL(recall_peak_channel_run), recall_handler); } /* ags-mute */ ags_recall_factory_create(audio, NULL, NULL, "ags-mute\0", source->audio_channel, source->audio_channel + 1, source->pad, source->pad + 1, (AGS_RECALL_FACTORY_INPUT | AGS_RECALL_FACTORY_PLAY | AGS_RECALL_FACTORY_RECALL | AGS_RECALL_FACTORY_ADD), 0); /* ags-volume */ ags_recall_factory_create(audio, NULL, NULL, "ags-volume\0", source->audio_channel, source->audio_channel + 1, source->pad, source->pad + 1, (AGS_RECALL_FACTORY_INPUT | AGS_RECALL_FACTORY_PLAY | AGS_RECALL_FACTORY_RECALL | AGS_RECALL_FACTORY_ADD), 0); /* call parent */ AGS_LINE_CLASS(ags_mixer_input_line_parent_class)->map_recall(line, output_pad_start); } /** * ags_mixer_input_line_new: * @channel: the assigned channel * * Creates an #AgsMixerInputLine * * Returns: a new #AgsMixerInputLine * * Since: 0.4 */ AgsMixerInputLine* ags_mixer_input_line_new(AgsChannel *channel) { AgsMixerInputLine *mixer_input_line; mixer_input_line = (AgsMixerInputLine *) g_object_new(AGS_TYPE_MIXER_INPUT_LINE, "channel\0", channel, NULL); return(mixer_input_line); } gsequencer-0.6.37/src/ags/X/machine/ags_drum_input_pad_callbacks.h0000644000175000017500000000242512621463700022065 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_DRUM_INPUT_PAD_CALLBACKS_H__ #define __AGS_DRUM_INPUT_PAD_CALLBACKS_H__ #include #include #include #include void ags_drum_input_pad_open_callback(GtkWidget *button, AgsDrumInputPad *drum_input_pad); void ags_drum_input_pad_play_callback(GtkToggleButton *button, AgsDrumInputPad *drum_input_pad); void ags_drum_input_pad_edit_callback(GtkWidget *toggle_button, AgsDrumInputPad *drum_input_pad); #endif /*__AGS_DRUM_INPUT_PAD_CALLBACKS_H__*/ gsequencer-0.6.37/src/ags/X/machine/ags_oscillator.h0000644000175000017500000000451612621463700017232 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_OSCILLATOR_H__ #define __AGS_OSCILLATOR_H__ #include #include #include #include #include #define AGS_TYPE_OSCILLATOR (ags_oscillator_get_type()) #define AGS_OSCILLATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST(obj, AGS_TYPE_OSCILLATOR, AgsOscillator)) #define AGS_OSCILLATOR_CLASS(class) (G_TYPE_CHECK_CLASS_CAST(class, AGS_TYPE_OSCILLATOR, AgsOscillatorClass)) #define AGS_IS_OSCILLATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_OSCILLATOR)) #define AGS_IS_OSCILLATOR_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_OSCILLATOR)) #define AGS_OSCILLATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_OSCILLATOR, AgsOscillatorClass)) typedef struct _AgsOscillator AgsOscillator; typedef struct _AgsOscillatorClass AgsOscillatorClass; struct _AgsOscillator { GtkFrame frame; GtkComboBox *wave; gulong wave_handler; GtkSpinButton *attack; gulong attack_handler; GtkSpinButton *frame_count; gulong frame_count_handler; GtkSpinButton *frequency; gulong frequency_handler; GtkSpinButton *phase; gulong phase_handler; GtkSpinButton *volume; gulong volume_handler; }; struct _AgsOscillatorClass { GtkFrameClass frame; }; GType ags_oscillator_get_type(void); void ags_file_read_oscillator(AgsFile *file, xmlNode *node, AgsOscillator **oscillator); xmlNode* ags_file_write_oscillator(AgsFile *file, xmlNode *parent, AgsOscillator *oscillator); AgsOscillator* ags_oscillator_new(); #endif /*__AGS_OSCILLATOR_H__*/ gsequencer-0.6.37/src/ags/X/machine/ags_synth_input_line.h0000644000175000017500000000410412626272146020452 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_SYNTH_INPUT_LINE_H__ #define __AGS_SYNTH_INPUT_LINE_H__ #include #include #include #include #include #define AGS_TYPE_SYNTH_INPUT_LINE (ags_synth_input_line_get_type()) #define AGS_SYNTH_INPUT_LINE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_SYNTH_INPUT_LINE, AgsSynthInputLine)) #define AGS_SYNTH_INPUT_LINE_CLASS(class) (G_TYPE_CHECK_CLASS_CAST(class, AGS_TYPE_SYNTH_INPUT_LINE, AgsSynthInputLineClass)) #define AGS_IS_SYNTH_INPUT_LINE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_SYNTH_INPUT_LINE)) #define AGS_IS_SYNTH_INPUT_LINE_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_SYNTH_INPUT_LINE)) #define AGS_SYNTH_INPUT_LINE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS(obj, AGS_TYPE_SYNTH_INPUT_LINE, AgsSynthInputLineClass)) typedef struct _AgsSynthInputLine AgsSynthInputLine; typedef struct _AgsSynthInputLineClass AgsSynthInputLineClass; struct _AgsSynthInputLine { AgsLine line; gchar *name; gchar *xml_type; AgsOscillator *oscillator; }; struct _AgsSynthInputLineClass { AgsLineClass line; }; GType ags_synth_input_line_get_type(); AgsSynthInputLine* ags_synth_input_line_new(AgsChannel *channel); #endif /*__AGS_SYNTH_INPUT_LINE_H__*/ gsequencer-0.6.37/src/ags/X/machine/ags_mixer_input_pad.h0000644000175000017500000000366712621463700020254 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_MIXER_INPUT_PAD_H__ #define __AGS_MIXER_INPUT_PAD_H__ #include #include #include #include #define AGS_TYPE_MIXER_INPUT_PAD (ags_mixer_input_pad_get_type()) #define AGS_MIXER_INPUT_PAD(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_MIXER_INPUT_PAD, AgsMixerInputPad)) #define AGS_MIXER_INPUT_PAD_CLASS(class) (G_TYPE_CHECK_CLASS_CAST(class, AGS_TYPE_MIXER_INPUT_PAD, AgsMixerInputPadClass)) #define AGS_IS_MIXER_INPUT_PAD(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_MIXER_INPUT_PAD)) #define AGS_IS_MIXER_INPUT_PAD_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_MIXER_INPUT_PAD)) #define AGS_MIXER_INPUT_PAD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS(obj, AGS_TYPE_MIXER_INPUT_PAD, AgsMixerInputPadClass)) typedef struct _AgsMixerInputPad AgsMixerInputPad; typedef struct _AgsMixerInputPadClass AgsMixerInputPadClass; struct _AgsMixerInputPad { AgsPad pad; }; struct _AgsMixerInputPadClass { AgsPadClass pad; }; GType ags_mixer_input_pad_get_type(); AgsMixerInputPad* ags_mixer_input_pad_new(AgsChannel *channel); #endif /*__AGS_MIXER_INPUT_PAD_H__*/ gsequencer-0.6.37/src/ags/X/machine/ags_ffplayer.h0000644000175000017500000000441012626272146016667 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_FFPLAYER_H__ #define __AGS_FFPLAYER_H__ #include #include #include #include #include #include #define AGS_TYPE_FFPLAYER (ags_ffplayer_get_type()) #define AGS_FFPLAYER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_FFPLAYER, AgsFFPlayer)) #define AGS_FFPLAYER_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_FFPLAYER, AgsFFPlayerClass)) #define AGS_IS_FFPLAYER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_FFPLAYER)) #define AGS_IS_FFPLAYER_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_FFPLAYER)) #define AGS_FFPLAYER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS (obj, AGS_TYPE_FFPLAYER, AgsFFPlayerClass)) typedef struct _AgsFFPlayer AgsFFPlayer; typedef struct _AgsFFPlayerClass AgsFFPlayerClass; struct _AgsFFPlayer { AgsMachine machine; guint mapped_output_pad; guint mapped_input_pad; gchar *name; gchar *xml_type; GtkButton *open; GtkWidget *open_dialog; guint control_width; guint control_height; GtkDrawingArea *drawing_area; GtkAdjustment *hadjustment; AgsIpatch *ipatch; GtkComboBoxText *preset; GtkComboBoxText *instrument; }; struct _AgsFFPlayerClass { AgsMachineClass machine; }; GType ags_ffplayer_get_type(void); void ags_ffplayer_paint(AgsFFPlayer *ffplayer); // char* ags_ffplayer_sound_string(); AgsFFPlayer* ags_ffplayer_new(GObject *devout); #endif /*__AGS_FFPLAYER_H__*/ gsequencer-0.6.37/src/ags/X/machine/ags_drum_callbacks.c0000644000175000017500000003527312626272146020033 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define AGS_AUDIO_FILE_DEVOUT "AgsAudioFileDevout\0" #define AGS_DRUM_PLAY_RECALL "AgsDrumPlayRecall\0" extern const char *AGS_DRUM_INDEX; extern pthread_mutex_t ags_application_mutex; void ags_drum_open_response_callback(GtkDialog *dialog, gint response, AgsDrum *drum); void ags_drum_parent_set_callback(GtkWidget *widget, GtkObject *old_parent, AgsDrum *drum) { AgsWindow *window; if(old_parent != NULL) return; window = AGS_WINDOW(gtk_widget_get_ancestor((GtkWidget *) drum, AGS_TYPE_WINDOW)); AGS_MACHINE(drum)->name = g_strdup_printf("Default %d\0", ags_window_find_machine_counter(window, AGS_TYPE_DRUM)->counter); ags_window_increment_machine_counter(window, AGS_TYPE_DRUM); } void ags_drum_destroy_callback(GtkWidget *widget, AgsDrum *drum) { GList *list, *list_start; if(drum->open_dialog != NULL){ gtk_widget_destroy(drum->open_dialog); } list = list_start = gtk_container_get_children(AGS_MACHINE(drum)->input); while(list != NULL){ if(AGS_DRUM_INPUT_PAD(list->data)->file_chooser != NULL){ gtk_widget_destroy(GTK_WIDGET(AGS_DRUM_INPUT_PAD(list->data)->file_chooser)); } list = list->next; } } void ags_drum_open_callback(GtkWidget *toggle_button, AgsDrum *drum) { GtkFileChooserDialog *file_chooser; GtkCheckButton *check_button; drum->open_dialog = file_chooser = (GtkFileChooserDialog *) gtk_file_chooser_dialog_new(g_strdup("open audio files\0"), (GtkWindow *) gtk_widget_get_toplevel((GtkWidget *) drum), GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL); gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(file_chooser), TRUE); check_button = (GtkCheckButton *) gtk_check_button_new_with_label(g_strdup("open in new channel\0")); gtk_toggle_button_set_active((GtkToggleButton *) check_button, TRUE); gtk_box_pack_start((GtkBox *) GTK_DIALOG(file_chooser)->vbox, (GtkWidget *) check_button, FALSE, FALSE, 0); g_object_set_data(G_OBJECT(file_chooser), "create\0", (gpointer) check_button); check_button = (GtkCheckButton *) gtk_check_button_new_with_label(g_strdup("overwrite existing links\0")); gtk_toggle_button_set_active((GtkToggleButton *) check_button, TRUE); gtk_box_pack_start((GtkBox *) GTK_DIALOG(file_chooser)->vbox, (GtkWidget *) check_button, FALSE, FALSE, 0); g_object_set_data(G_OBJECT(file_chooser), "overwrite\0", (gpointer) check_button); gtk_widget_show_all(GTK_WIDGET(file_chooser)); g_signal_connect(G_OBJECT(file_chooser), "response\0", G_CALLBACK(ags_drum_open_response_callback), drum); g_signal_connect(G_OBJECT(file_chooser), "response\0", G_CALLBACK(ags_machine_open_response_callback), drum); } void ags_drum_open_response_callback(GtkDialog *dialog, gint response, AgsDrum *drum) { drum->open_dialog = NULL; } void ags_drum_loop_button_callback(GtkWidget *button, AgsDrum *drum) { AgsCountBeatsAudio *count_beats_audio; AgsMutexManager *mutex_manager; GList *list; gboolean loop; pthread_mutex_t *audio_mutex; pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) AGS_MACHINE(drum)->audio); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(audio_mutex); loop = (GTK_TOGGLE_BUTTON(button)->active) ? TRUE: FALSE; /* AgsCopyPatternAudio */ list = AGS_MACHINE(drum)->audio->play; while((list = ags_recall_find_type(list, AGS_TYPE_COUNT_BEATS_AUDIO)) != NULL){ count_beats_audio = AGS_COUNT_BEATS_AUDIO(list->data); count_beats_audio->sequencer_loop->port_value.ags_port_boolean = loop; list = list->next; } list = AGS_MACHINE(drum)->audio->recall; while((list = ags_recall_find_type(list, AGS_TYPE_COUNT_BEATS_AUDIO)) != NULL){ count_beats_audio = AGS_COUNT_BEATS_AUDIO(list->data); count_beats_audio->sequencer_loop->port_value.ags_port_boolean = loop; list = list->next; } pthread_mutex_unlock(audio_mutex); } void ags_drum_length_spin_callback(GtkWidget *spin_button, AgsDrum *drum) { AgsWindow *window; AgsApplySequencerLength *apply_sequencer_length; AgsMutexManager *mutex_manager; AgsThread *audio_loop; AgsThread *task_thread; AgsMain *ags_main; gdouble length; /* get window and ags_main */ window = (AgsWindow *) gtk_widget_get_toplevel(drum); ags_main = window->ags_main; /* get audio loop */ pthread_mutex_lock(&(ags_application_mutex)); audio_loop = ags_main->main_loop; pthread_mutex_unlock(&(ags_application_mutex)); /* get task thread */ task_thread = (AgsTaskThread *) ags_thread_find_type(audio_loop, AGS_TYPE_TASK_THREAD); /* */ length = GTK_SPIN_BUTTON(spin_button)->adjustment->value; apply_sequencer_length = ags_apply_sequencer_length_new(AGS_MACHINE(drum)->audio, length); ags_task_thread_append_task(task_thread, AGS_TASK(apply_sequencer_length)); } void ags_drum_index0_callback(GtkWidget *widget, AgsDrum *drum) { AgsMutexManager *mutex_manager; pthread_mutex_t *audio_mutex; pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) AGS_MACHINE(drum)->audio); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(audio_mutex); if(drum->selected0 != NULL){ GtkToggleButton *toggle_button; if(GTK_TOGGLE_BUTTON(widget) != drum->selected0){ AgsCopyPatternAudio *copy_pattern_audio; GList *list; guint64 index0; toggle_button = drum->selected0; drum->selected0 = NULL; gtk_toggle_button_set_active(toggle_button, FALSE); drum->selected0 = (GtkToggleButton*) widget; list = ags_recall_find_type(AGS_MACHINE(drum)->audio->play, AGS_TYPE_COPY_PATTERN_AUDIO); /* calculate index 0 */ AGS_MACHINE(drum)->bank_0 = index0 = ((guint) drum->selected0->button.label_text[0] - 'a'); if(list != NULL){ GValue value = {0,}; g_value_init(&value, G_TYPE_UINT64); g_value_set_uint64(&value, index0); copy_pattern_audio = AGS_COPY_PATTERN_AUDIO(list->data); ags_port_safe_write(copy_pattern_audio->bank_index_0, &value); g_value_unset(&value); } list = ags_recall_find_type(AGS_MACHINE(drum)->audio->recall, AGS_TYPE_COPY_PATTERN_AUDIO); if(list != NULL){ GValue value = {0,}; g_value_init(&value, G_TYPE_UINT64); g_value_set_uint64(&value, index0); copy_pattern_audio = AGS_COPY_PATTERN_AUDIO(list->data); ags_port_safe_write(copy_pattern_audio->bank_index_0, &value); g_value_unset(&value); } }else if(! gtk_toggle_button_get_active(drum->selected0)){ toggle_button = drum->selected0; drum->selected0 = NULL; gtk_toggle_button_set_active((GtkToggleButton *) widget, TRUE); drum->selected0 = (GtkToggleButton*) widget; } ags_pattern_box_set_pattern(drum->pattern_box); } pthread_mutex_unlock(audio_mutex); } void ags_drum_index1_callback(GtkWidget *widget, AgsDrum *drum) { AgsMutexManager *mutex_manager; pthread_mutex_t *audio_mutex; pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) AGS_MACHINE(drum)->audio); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(audio_mutex); if(drum->selected1 != NULL){ GtkToggleButton *toggle_button; if(GTK_TOGGLE_BUTTON(widget) != drum->selected1){ AgsCopyPatternAudio *copy_pattern_audio; GList *list; guint64 index1; toggle_button = drum->selected1; drum->selected1 = NULL; gtk_toggle_button_set_active(toggle_button, FALSE); drum->selected1 = (GtkToggleButton*) widget; list = ags_recall_find_type(AGS_MACHINE(drum)->audio->play, AGS_TYPE_COPY_PATTERN_AUDIO); /* calculate index 1 */ AGS_MACHINE(drum)->bank_1 = index1 = ((guint) g_ascii_strtoull(drum->selected1->button.label_text, NULL, 10)) - 1; if(list != NULL){ GValue value = {0,}; g_value_init(&value, G_TYPE_UINT64); g_value_set_uint64(&value, index1); copy_pattern_audio = AGS_COPY_PATTERN_AUDIO(list->data); ags_port_safe_write(copy_pattern_audio->bank_index_1, &value); g_value_unset(&value); } list = ags_recall_find_type(AGS_MACHINE(drum)->audio->recall, AGS_TYPE_COPY_PATTERN_AUDIO); if(list != NULL){ GValue value = {0,}; g_value_init(&value, G_TYPE_UINT64); g_value_set_uint64(&value, index1); copy_pattern_audio = AGS_COPY_PATTERN_AUDIO(list->data); ags_port_safe_write(copy_pattern_audio->bank_index_1, &value); g_value_unset(&value); } }else if(!gtk_toggle_button_get_active(drum->selected1)){ toggle_button = drum->selected1; drum->selected1 = NULL; gtk_toggle_button_set_active((GtkToggleButton *) widget, TRUE); drum->selected1 = (GtkToggleButton*) widget; } ags_pattern_box_set_pattern(drum->pattern_box); } pthread_mutex_unlock(audio_mutex); } void ags_drum_tact_callback(AgsAudio *audio, AgsRecallID *recall_id, AgsDrum *drum) { AgsWindow *window; AgsCountBeatsAudio *play_count_beats_audio; AgsCountBeatsAudioRun *play_count_beats_audio_run; AgsToggleLed *toggle_led; AgsMutexManager *mutex_manager; AgsThread *audio_loop; AgsThread *task_thread; AgsMain *ags_main; GList *list; guint counter, active_led; gdouble active_led_old, active_led_new; GValue value = {0,}; pthread_mutex_t *audio_mutex; if((AGS_RECALL_ID_SEQUENCER & (recall_id->flags)) == 0){ return; } pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) AGS_MACHINE(drum)->audio); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(audio_mutex); /* get window and ags_main */ window = AGS_WINDOW(gtk_widget_get_ancestor((GtkWidget *) drum, AGS_TYPE_WINDOW)); ags_main = window->ags_main; /* get audio loop */ pthread_mutex_lock(&(ags_application_mutex)); audio_loop = ags_main->main_loop; pthread_mutex_unlock(&(ags_application_mutex)); /* get task thread */ task_thread = (AgsTaskThread *) ags_thread_find_type(audio_loop, AGS_TYPE_TASK_THREAD); /* get some recalls */ list = ags_recall_find_type(audio->play, AGS_TYPE_COUNT_BEATS_AUDIO); if(list != NULL){ play_count_beats_audio = AGS_COUNT_BEATS_AUDIO(list->data); } list = ags_recall_find_type_with_recycling_container(audio->play, AGS_TYPE_COUNT_BEATS_AUDIO_RUN, (GObject *) recall_id->recycling_container); if(list != NULL){ play_count_beats_audio_run = AGS_COUNT_BEATS_AUDIO_RUN(list->data); } /* set optical feedback */ active_led_new = (guint) play_count_beats_audio_run->sequencer_counter % AGS_PATTERN_BOX_N_CONTROLS; drum->pattern_box->active_led = (guint) active_led_new; if(play_count_beats_audio_run->sequencer_counter == 0){ g_value_init(&value, G_TYPE_DOUBLE); ags_port_safe_read(play_count_beats_audio->sequencer_loop_end, &value); active_led_old = (guint) (g_value_get_double(&value) - 1.0) % AGS_PATTERN_BOX_N_CONTROLS; g_value_unset(&value); }else{ active_led_old = (guint) (drum->pattern_box->active_led - 1.0) % AGS_PATTERN_BOX_N_CONTROLS; } toggle_led = ags_toggle_led_new(gtk_container_get_children(GTK_CONTAINER(drum->pattern_box->led)), (guint) active_led_new, (guint) active_led_old); ags_task_thread_append_task(task_thread, AGS_TASK(toggle_led)); pthread_mutex_unlock(audio_mutex); } void ags_drum_done_callback(AgsAudio *audio, AgsRecallID *recall_id, AgsDrum *drum) { GList *devout_play; gboolean all_done; devout_play = AGS_DEVOUT_PLAY_DOMAIN(audio->devout_play_domain)->devout_play; /* check unset */ all_done = TRUE; while(devout_play != NULL){ if(AGS_DEVOUT_PLAY(devout_play->data)->recall_id[1] != NULL){ all_done = FALSE; break; } devout_play = devout_play->next; } if(all_done){ GList *list, *list_start; /* unset led */ list_start = list = gtk_container_get_children(GTK_CONTAINER(drum->pattern_box->led)); while(list != NULL){ ags_led_unset_active(AGS_LED(list->data)); list = list->next; } g_list_free(list_start); } } gsequencer-0.6.37/src/ags/X/machine/ags_drum.c0000644000175000017500000005710312626272146016030 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void ags_drum_class_init(AgsDrumClass *drum); void ags_drum_connectable_interface_init(AgsConnectableInterface *connectable); void ags_drum_plugin_interface_init(AgsPluginInterface *plugin); void ags_drum_init(AgsDrum *drum); void ags_drum_finalize(GObject *gobject); void ags_drum_connect(AgsConnectable *connectable); void ags_drum_disconnect(AgsConnectable *connectable); void ags_drum_show(GtkWidget *widget); void ags_drum_show_all(GtkWidget *widget); void ags_drum_map_recall(AgsMachine *machine); gchar* ags_drum_get_name(AgsPlugin *plugin); void ags_drum_set_name(AgsPlugin *plugin, gchar *name); gchar* ags_drum_get_xml_type(AgsPlugin *plugin); void ags_drum_set_xml_type(AgsPlugin *plugin, gchar *xml_type); void ags_drum_read(AgsFile *file, xmlNode *node, AgsPlugin *plugin); void ags_drum_launch_task(AgsFileLaunch *file_launch, AgsDrum *drum); xmlNode* ags_drum_write(AgsFile *file, xmlNode *parent, AgsPlugin *plugin); void ags_drum_read_resolve_audio(AgsFileLookup *file_lookup, AgsMachine *machine); void ags_drum_set_audio_channels(AgsAudio *audio, guint audio_channels, guint audio_channels_old, AgsDrum *drum); void ags_drum_set_pads(AgsAudio *audio, GType gtype, guint pads, guint pads_old, AgsDrum *drum); /** * SECTION:ags_drum * @short_description: drum sequencer * @title: AgsDrum * @section_id: * @include: ags/X/machine/ags_drum.h * * The #AgsDrum is a composite widget to act as drum sequencer. */ static gpointer ags_drum_parent_class = NULL; static AgsConnectableInterface *ags_drum_parent_connectable_interface; GType ags_drum_get_type(void) { static GType ags_type_drum = 0; if(!ags_type_drum){ static const GTypeInfo ags_drum_info = { sizeof(AgsDrumClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_drum_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(AgsDrum), 0, /* n_preallocs */ (GInstanceInitFunc) ags_drum_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_drum_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_plugin_interface_info = { (GInterfaceInitFunc) ags_drum_plugin_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_drum = g_type_register_static(AGS_TYPE_MACHINE, "AgsDrum\0", &ags_drum_info, 0); g_type_add_interface_static(ags_type_drum, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_drum, AGS_TYPE_PLUGIN, &ags_plugin_interface_info); } return(ags_type_drum); } void ags_drum_class_init(AgsDrumClass *drum) { GObjectClass *gobject; GtkWidgetClass *widget; AgsMachineClass *machine; ags_drum_parent_class = g_type_class_peek_parent(drum); /* GObjectClass */ gobject = (GObjectClass *) drum; gobject->finalize = ags_drum_finalize; /* GtkWidget */ widget = (GtkWidgetClass *) drum; widget->show = ags_drum_show; widget->show_all = ags_drum_show_all; /* */ machine = (AgsMachineClass *) drum; machine->map_recall = ags_drum_map_recall; } void ags_drum_connectable_interface_init(AgsConnectableInterface *connectable) { ags_drum_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_drum_connect; connectable->disconnect = ags_drum_disconnect; } void ags_drum_plugin_interface_init(AgsPluginInterface *plugin) { plugin->get_name = ags_drum_get_name; plugin->set_name = ags_drum_set_name; plugin->get_xml_type = ags_drum_get_xml_type; plugin->set_xml_type = ags_drum_set_xml_type; plugin->read = ags_drum_read; plugin->write = ags_drum_write; } void ags_drum_init(AgsDrum *drum) { GtkVBox *vbox; GtkHBox *hbox; GtkToggleButton *toggle_button; GtkFrame *frame; GtkTable *table0, *table1; GtkRadioButton *radio_button; AgsAudio *audio; GList *list; guint stream_length; int i, j; g_signal_connect_after((GObject *) drum, "parent_set\0", G_CALLBACK(ags_drum_parent_set_callback), (gpointer) drum); audio = AGS_MACHINE(drum)->audio; audio->flags |= (AGS_AUDIO_OUTPUT_HAS_RECYCLING | AGS_AUDIO_INPUT_HAS_RECYCLING | AGS_AUDIO_INPUT_TAKES_FILE | AGS_AUDIO_SYNC | AGS_AUDIO_ASYNC | AGS_AUDIO_HAS_NOTATION | AGS_AUDIO_NOTATION_DEFAULT | AGS_AUDIO_PATTERN_MODE); AGS_MACHINE(drum)->flags |= (AGS_MACHINE_IS_SEQUENCER | AGS_MACHINE_TAKES_FILE_INPUT); AGS_MACHINE(drum)->file_input_flags |= (AGS_MACHINE_ACCEPT_WAV); AGS_MACHINE(drum)->input_pad_type = AGS_TYPE_DRUM_INPUT_PAD; AGS_MACHINE(drum)->input_line_type = AGS_TYPE_DRUM_INPUT_LINE; AGS_MACHINE(drum)->output_pad_type = AGS_TYPE_DRUM_OUTPUT_PAD; AGS_MACHINE(drum)->output_line_type = AGS_TYPE_DRUM_OUTPUT_LINE; ags_machine_popup_add_edit_options(drum, (AGS_MACHINE_POPUP_COPY_PATTERN)); g_signal_connect_after(G_OBJECT(audio), "set-audio-channels\0", G_CALLBACK(ags_drum_set_audio_channels), drum); g_signal_connect_after(G_OBJECT(audio), "set-pads\0", G_CALLBACK(ags_drum_set_pads), drum); drum->flags = 0; drum->name = NULL; drum->xml_type = "ags-drum\0"; /* create widgets */ drum->vbox = (GtkVBox *) gtk_vbox_new(FALSE, 0); gtk_container_add((GtkContainer*) gtk_bin_get_child((GtkBin *) drum), (GtkWidget *) drum->vbox); hbox = (GtkHBox *) gtk_hbox_new(FALSE, 0); gtk_box_pack_start((GtkBox *) drum->vbox, (GtkWidget *) hbox, FALSE, FALSE, 0); drum->input_pad = (GtkHBox *) gtk_hbox_new(FALSE, 0); AGS_MACHINE(drum)->input = (GtkContainer *) drum->input_pad; gtk_box_pack_start((GtkBox *) hbox, (GtkWidget *) drum->input_pad, FALSE, FALSE, 0); drum->output_pad = (GtkVBox *) gtk_vbox_new(FALSE, 0); AGS_MACHINE(drum)->output = (GtkContainer *) drum->output_pad; gtk_box_pack_start((GtkBox *) hbox, (GtkWidget *) drum->output_pad, FALSE, FALSE, 0); drum->selected_pad = NULL; drum->selected_edit_button = NULL; hbox = (GtkHBox *) gtk_hbox_new(FALSE, 0); gtk_box_pack_start((GtkBox *) drum->vbox, (GtkWidget *) hbox, FALSE, FALSE, 0); frame = (GtkFrame *) gtk_frame_new("kit\0"); gtk_box_pack_start((GtkBox *) hbox, (GtkWidget *) frame, FALSE, FALSE, 0); vbox = (GtkVBox *) gtk_vbox_new(FALSE, 0); gtk_container_add((GtkContainer*) frame, (GtkWidget *) vbox); gtk_box_pack_start((GtkBox *) vbox, (GtkWidget *) gtk_label_new("default\0"), FALSE, FALSE, 0); gtk_box_pack_start((GtkBox *) vbox, (GtkWidget *) (drum->open = (GtkButton *) gtk_button_new_from_stock(GTK_STOCK_OPEN)), FALSE, FALSE, 0); drum->open_dialog = NULL; /* sequencer */ frame = (GtkFrame *) gtk_frame_new("Pattern\0"); gtk_box_pack_start((GtkBox *) hbox, (GtkWidget *) frame, FALSE, FALSE, 0); table0 = (GtkTable *) gtk_table_new(8, 4, FALSE); gtk_container_add((GtkContainer*) frame, (GtkWidget *) table0); drum->loop_button = (GtkCheckButton *) gtk_check_button_new_with_label("loop\0"); gtk_table_attach_defaults(table0, (GtkWidget *) drum->loop_button, 0, 1, 2, 3); AGS_MACHINE(drum)->play = drum->run = (GtkToggleButton *) gtk_toggle_button_new_with_label("run\0"); gtk_table_attach_defaults(table0, (GtkWidget *) drum->run, 1, 2, 0, 3); /* bank */ table1 = (GtkTable *) gtk_table_new(3, 5, TRUE); gtk_table_attach_defaults(table0, (GtkWidget *) table1, 2, 3, 0, 3); drum->selected1 = NULL; for(i = 0; i < 3; i++) for(j = 0; j < 4; j++){ drum->index1[4 * i + j] = (GtkToggleButton *) gtk_toggle_button_new_with_label(g_strdup_printf("%d\0", (4 * i) + (j + 1))); gtk_table_attach_defaults(table1, (GtkWidget *) (drum->index1[4 * i + j]), j, j + 1, i, i + 1); } drum->selected1 = drum->index1[0]; gtk_toggle_button_set_active(drum->index1[0], TRUE); drum->selected0 = NULL; for(j = 0; j < 4; j++){ drum->index0[j] = (GtkToggleButton *) gtk_toggle_button_new_with_label(g_strdup_printf("%c\0", 'a' + j)); gtk_table_attach_defaults(table1, (GtkWidget *) (drum->index0[j]), j, j + 1, 4, 5); } drum->selected0 = drum->index0[0]; gtk_toggle_button_set_active(drum->index0[0], TRUE); /* duration */ hbox = (GtkHBox *) gtk_hbox_new(FALSE, 0); gtk_table_attach(table0, (GtkWidget *) hbox, 6, 7, 0, 1, GTK_EXPAND, GTK_EXPAND, 0, 0); gtk_box_pack_start((GtkBox*) hbox, gtk_label_new("length\0"), FALSE, FALSE, 0); drum->length_spin = (GtkSpinButton *) gtk_spin_button_new_with_range(1.0, 64.0, 1.0); drum->length_spin->adjustment->value = 16.0; gtk_box_pack_start((GtkBox*) hbox, (GtkWidget *) drum->length_spin, FALSE, FALSE, 0); /* pattern box */ drum->pattern_box = ags_pattern_box_new(); gtk_table_attach(table0, (GtkWidget *) drum->pattern_box, 7, 8, 0, 3, GTK_EXPAND, GTK_EXPAND, 0, 0); } void ags_drum_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_drum_parent_class)->finalize(gobject); } void ags_drum_connect(AgsConnectable *connectable) { AgsWindow *window; AgsDrum *drum; AgsRecallHandler *recall_handler; AgsDelayAudioRun *play_delay_audio_run; GList *list, *list_start; int i; if((AGS_MACHINE_CONNECTED & (AGS_MACHINE(connectable)->flags)) != 0){ return; } ags_drum_parent_connectable_interface->connect(connectable); drum = AGS_DRUM(connectable); window = (AgsWindow *) gtk_widget_get_toplevel((GtkWidget *) drum); g_signal_connect((GObject *) drum, "destroy\0", G_CALLBACK(ags_drum_destroy_callback), (gpointer) drum); /* AgsDrum */ g_signal_connect((GObject *) drum->open, "clicked\0", G_CALLBACK(ags_drum_open_callback), (gpointer) drum); g_signal_connect((GObject *) drum->loop_button, "clicked\0", G_CALLBACK(ags_drum_loop_button_callback), (gpointer) drum); g_signal_connect_after((GObject *) drum->length_spin, "value-changed\0", G_CALLBACK(ags_drum_length_spin_callback), (gpointer) drum); for(i = 0; i < 12; i++){ g_signal_connect(G_OBJECT(drum->index1[i]), "clicked\0", G_CALLBACK(ags_drum_index1_callback), (gpointer) drum); } for(i = 0; i < 4; i++){ g_signal_connect(G_OBJECT(drum->index0[i]), "clicked\0", G_CALLBACK(ags_drum_index0_callback), (gpointer) drum); } ags_connectable_connect(drum->pattern_box); /* AgsAudio */ g_signal_connect_after(G_OBJECT(AGS_MACHINE(drum)->audio), "tact\0", G_CALLBACK(ags_drum_tact_callback), drum); g_signal_connect_after(G_OBJECT(AGS_MACHINE(drum)->audio), "done\0", G_CALLBACK(ags_drum_done_callback), drum); } void ags_drum_disconnect(AgsConnectable *connectable) { AgsWindow *window; AgsDrum *drum; ags_drum_parent_connectable_interface->disconnect(connectable); drum = AGS_DRUM(connectable); window = AGS_WINDOW(gtk_widget_get_ancestor((GtkWidget *) drum, AGS_TYPE_WINDOW)); //TODO:JK: implement me } void ags_drum_show(GtkWidget *widget) { GTK_WIDGET_CLASS(ags_drum_parent_class)->show(widget); ags_pattern_box_set_pattern(AGS_DRUM(widget)->pattern_box); } void ags_drum_show_all(GtkWidget *widget) { GTK_WIDGET_CLASS(ags_drum_parent_class)->show_all(widget); ags_pattern_box_set_pattern(AGS_DRUM(widget)->pattern_box); } void ags_drum_map_recall(AgsMachine *machine) { AgsWindow *window; AgsAudio *audio; AgsDelayAudio *play_delay_audio; AgsDelayAudioRun *play_delay_audio_run; AgsCountBeatsAudio *play_count_beats_audio; AgsCountBeatsAudioRun *play_count_beats_audio_run; AgsCopyPatternAudio *recall_copy_pattern_audio; AgsCopyPatternAudioRun *recall_copy_pattern_audio_run; AgsPlayNotationAudio *recall_notation_audio; AgsPlayNotationAudioRun *recall_notation_audio_run; GList *list; if((AGS_MACHINE_MAPPED_RECALL & (machine->flags)) != 0 || (AGS_MACHINE_PREMAPPED_RECALL & (machine->flags)) != 0){ return; } window = gtk_widget_get_ancestor(machine, AGS_TYPE_WINDOW); audio = machine->audio; /* ags-delay */ ags_recall_factory_create(audio, NULL, NULL, "ags-delay\0", 0, 0, 0, 0, (AGS_RECALL_FACTORY_OUTPUT | AGS_RECALL_FACTORY_ADD | AGS_RECALL_FACTORY_PLAY), 0); list = ags_recall_find_type(audio->play, AGS_TYPE_DELAY_AUDIO_RUN); if(list != NULL){ play_delay_audio_run = AGS_DELAY_AUDIO_RUN(list->data); // AGS_RECALL(play_delay_audio_run)->flags |= AGS_RECALL_PERSISTENT; } /* ags-count-beats */ ags_recall_factory_create(audio, NULL, NULL, "ags-count-beats\0", 0, 0, 0, 0, (AGS_RECALL_FACTORY_OUTPUT | AGS_RECALL_FACTORY_ADD | AGS_RECALL_FACTORY_PLAY), 0); list = ags_recall_find_type(audio->play, AGS_TYPE_COUNT_BEATS_AUDIO_RUN); if(list != NULL){ play_count_beats_audio_run = AGS_COUNT_BEATS_AUDIO_RUN(list->data); /* set dependency */ g_object_set(G_OBJECT(play_count_beats_audio_run), "delay-audio-run\0", play_delay_audio_run, NULL); ags_seekable_seek(AGS_SEEKABLE(play_count_beats_audio_run), window->navigation->position_tact->adjustment->value * AGS_DEVOUT(audio->devout)->delay[AGS_DEVOUT(audio->devout)->tic_counter], TRUE); } /* ags-copy-pattern */ ags_recall_factory_create(audio, NULL, NULL, "ags-copy-pattern\0", 0, 0, 0, 0, (AGS_RECALL_FACTORY_INPUT | AGS_RECALL_FACTORY_ADD | AGS_RECALL_FACTORY_RECALL), 0); list = ags_recall_find_type(audio->recall, AGS_TYPE_COPY_PATTERN_AUDIO_RUN); if(list != NULL){ recall_copy_pattern_audio_run = AGS_COPY_PATTERN_AUDIO_RUN(list->data); /* set dependency */ g_object_set(G_OBJECT(recall_copy_pattern_audio_run), "delay-audio-run\0", play_delay_audio_run, "count-beats-audio-run\0", play_count_beats_audio_run, NULL); } /* ags-play-notation */ ags_recall_factory_create(audio, NULL, NULL, "ags-play-notation\0", 0, 0, 0, 0, (AGS_RECALL_FACTORY_INPUT | AGS_RECALL_FACTORY_ADD | AGS_RECALL_FACTORY_RECALL), 0); list = ags_recall_find_type(audio->recall, AGS_TYPE_PLAY_NOTATION_AUDIO_RUN); if(list != NULL){ recall_notation_audio_run = AGS_PLAY_NOTATION_AUDIO_RUN(list->data); /* set dependency */ g_object_set(G_OBJECT(recall_notation_audio_run), "delay-audio-run\0", play_delay_audio_run, NULL); /* set dependency */ g_object_set(G_OBJECT(recall_notation_audio_run), "count-beats-audio-run\0", play_count_beats_audio_run, NULL); } AGS_MACHINE_CLASS(ags_drum_parent_class)->map_recall(machine); } gchar* ags_drum_get_name(AgsPlugin *plugin) { return(AGS_DRUM(plugin)->name); } void ags_drum_set_name(AgsPlugin *plugin, gchar *name) { AGS_DRUM(plugin)->name = name; } gchar* ags_drum_get_xml_type(AgsPlugin *plugin) { return(AGS_DRUM(plugin)->xml_type); } void ags_drum_set_xml_type(AgsPlugin *plugin, gchar *xml_type) { AGS_DRUM(plugin)->xml_type = xml_type; } void ags_drum_read(AgsFile *file, xmlNode *node, AgsPlugin *plugin) { AgsDrum *gobject; AgsFileLookup *file_lookup; AgsFileLaunch *file_launch; GList *list; gobject = AGS_DRUM(plugin); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", gobject, NULL)); list = file->lookup; while((list = ags_file_lookup_find_by_node(list, node->parent)) != NULL){ file_lookup = AGS_FILE_LOOKUP(list->data); if(g_signal_handler_find(list->data, G_SIGNAL_MATCH_FUNC, 0, 0, NULL, ags_file_read_machine_resolve_audio, NULL) != 0){ g_signal_connect_after(G_OBJECT(file_lookup), "resolve\0", G_CALLBACK(ags_drum_read_resolve_audio), gobject); break; } list = list->next; } /* */ file_launch = (AgsFileLaunch *) g_object_new(AGS_TYPE_FILE_LAUNCH, "node\0", node, "file\0", file, NULL); g_signal_connect(G_OBJECT(file_launch), "start\0", G_CALLBACK(ags_drum_launch_task), gobject); ags_file_add_launch(file, (GObject *) file_launch); } void ags_drum_read_resolve_audio(AgsFileLookup *file_lookup, AgsMachine *machine) { AgsDrum *drum; GList *pad, *pad_start, *line, *line_start; drum = AGS_DRUM(machine); g_signal_connect_after(G_OBJECT(machine->audio), "set_audio_channels\0", G_CALLBACK(ags_drum_set_audio_channels), drum); g_signal_connect_after(G_OBJECT(machine->audio), "set_pads\0", G_CALLBACK(ags_drum_set_pads), drum); pad_start = pad = gtk_container_get_children((GtkContainer *) machine->input); while(pad != NULL){ line_start = line = gtk_container_get_children((GtkContainer *) AGS_PAD(pad->data)->expander_set); while(line != NULL){ /* AgsAudio */ g_signal_connect_after(G_OBJECT(machine->audio), "set_pads\0", G_CALLBACK(ags_drum_input_line_audio_set_pads_callback), AGS_DRUM_INPUT_LINE(line->data)); line = line->next; } g_list_free(line_start); pad = pad->next; } } void ags_drum_launch_task(AgsFileLaunch *file_launch, AgsDrum *drum) { xmlNode *node; guint64 length, index; node = file_launch->node; /* length */ length = (gdouble) g_ascii_strtod(xmlGetProp(node, "length\0"), NULL); gtk_spin_button_set_value(drum->length_spin, length); /* loop */ if(!g_strcmp0(xmlGetProp(node, "loop\0"), AGS_FILE_TRUE)){ gtk_button_clicked(drum->loop_button); } /* index */ index = g_ascii_strtoull(xmlGetProp(node, "bank-index-0\0"), NULL, 10); if(index != 0){ gtk_button_clicked(drum->index0[index]); } index = g_ascii_strtoull(xmlGetProp(node, "bank-index-1\0"), NULL, 10); if(index != 0){ gtk_button_clicked(drum->index1[index]); } } xmlNode* ags_drum_write(AgsFile *file, xmlNode *parent, AgsPlugin *plugin) { AgsDrum *drum; xmlNode *node; GList *list; gchar *id; guint i; drum = AGS_DRUM(plugin); id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-drum\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", drum, NULL)); xmlNewProp(node, "length\0", g_strdup_printf("%d\0", (gint) gtk_spin_button_get_value(drum->length_spin))); for(i = 0; drum->selected0 != drum->index0[i]; i++); xmlNewProp(node, "bank-index-0\0", g_strdup_printf("%d\0", i)); for(i = 0; drum->selected1 != drum->index1[i]; i++); xmlNewProp(node, "bank-index-1\0", g_strdup_printf("%d\0", i)); xmlNewProp(node, "loop\0", g_strdup_printf("%s\0", ((gtk_toggle_button_get_active((GtkToggleButton *) drum->loop_button)) ? AGS_FILE_TRUE: AGS_FILE_FALSE))); xmlAddChild(parent, node); return(node); } void ags_drum_set_audio_channels(AgsAudio *audio, guint audio_channels, guint audio_channels_old, AgsDrum *drum) { /* empty */ } void ags_drum_set_pads(AgsAudio *audio, GType gtype, guint pads, guint pads_old, AgsDrum *drum) { if(gtype == AGS_TYPE_INPUT){ AgsDrumInputPad *drum_input_pad; if(pads_old < pads){ /* reset edit button */ if(pads_old == 0){ GtkToggleButton *selected_edit_button; AGS_MACHINE(drum)->selected_input_pad = drum->selected_pad = AGS_DRUM_INPUT_PAD(gtk_container_get_children((GtkContainer *) drum->input_pad)->data); drum->selected_edit_button = drum->selected_pad->edit; gtk_toggle_button_set_active((GtkToggleButton *) drum->selected_edit_button, TRUE); } }else{ /* destroy AgsPad's */ if(pads == 0){ drum->selected_pad = NULL; drum->selected_edit_button = NULL; }else{ drum_input_pad = AGS_DRUM_INPUT_PAD(gtk_widget_get_ancestor(GTK_WIDGET(drum->selected_edit_button), AGS_TYPE_PAD)); if(drum_input_pad->pad.channel->pad > pads){ AGS_MACHINE(drum)->selected_input_pad = drum->selected_pad = AGS_DRUM_INPUT_PAD(gtk_container_get_children((GtkContainer *) drum->input_pad)->data); drum->selected_edit_button = drum->selected_pad->edit; gtk_toggle_button_set_active((GtkToggleButton *) drum->selected_edit_button, TRUE); } } } } } /** * ags_drum_new: * @devout: the assigned devout. * * Creates an #AgsDrum * * Returns: a new #AgsDrum * * Since: 0.3 */ AgsDrum* ags_drum_new(GObject *devout) { AgsDrum *drum; GValue value = {0,}; drum = (AgsDrum *) g_object_new(AGS_TYPE_DRUM, NULL); if(devout != NULL){ g_value_init(&value, G_TYPE_OBJECT); g_value_set_object(&value, devout); g_object_set_property(G_OBJECT(drum->machine.audio), "devout\0", &value); g_value_unset(&value); } return(drum); } gsequencer-0.6.37/src/ags/X/machine/ags_cell_pattern_callbacks.c0000644000175000017500000003304612626272146021534 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void ags_cell_pattern_refresh_gui_callback(AgsTogglePatternBit *toggle_pattern_bit, AgsCellPattern *cell_pattern); void ags_cell_pattern_init_channel_launch_callback(AgsTask *task, gpointer data); extern pthread_mutex_t ags_application_mutex; gboolean ags_cell_pattern_focus_in_callback(GtkWidget *widget, GdkEvent *event, AgsCellPattern *cell_pattern) { pthread_t thread; pthread_create(&thread, NULL, ags_cell_pattern_blink_worker, cell_pattern); return(TRUE); } gboolean ags_cell_pattern_drawing_area_configure_callback(GtkWidget *widget, GdkEventConfigure *event, AgsCellPattern *cell_pattern) { ags_cell_pattern_paint(cell_pattern); return(FALSE); } gboolean ags_cell_pattern_drawing_area_expose_callback(GtkWidget *widget, GdkEventExpose *event, AgsCellPattern *cell_pattern) { ags_cell_pattern_paint(cell_pattern); return(FALSE); } gboolean ags_cell_pattern_drawing_area_button_press_callback(GtkWidget *widget, GdkEventButton *event, AgsCellPattern *cell_pattern) { if(event->button == 1){ AgsWindow *window; AgsMachine *machine; AgsTogglePatternBit *toggle_pattern_bit; AgsChannel *channel; AgsThread *audio_loop; AgsTaskThread *task_thread; AgsMain *ags_main; guint i, j; guint index1; machine = gtk_widget_get_ancestor(cell_pattern, AGS_TYPE_MACHINE); window = gtk_widget_get_ancestor(machine, AGS_TYPE_WINDOW); ags_main = window->ags_main; /* get audio loop */ pthread_mutex_lock(&(ags_application_mutex)); audio_loop = ags_main->main_loop; pthread_mutex_unlock(&(ags_application_mutex)); task_thread = ags_thread_find_type(audio_loop, AGS_TYPE_TASK_THREAD); i = (guint) floor((double) event->y / (double) cell_pattern->cell_height); j = (guint) floor((double) event->x / (double) cell_pattern->cell_width); index1 = machine->bank_1; channel = ags_channel_nth(machine->audio->input, machine->audio->input_lines - ((guint) GTK_RANGE(cell_pattern->vscrollbar)->adjustment->value + i) - 1); toggle_pattern_bit = ags_toggle_pattern_bit_new(channel->pattern->data, channel->line, 0, index1, j); g_signal_connect(G_OBJECT(toggle_pattern_bit), "refresh-gui\0", G_CALLBACK(ags_cell_pattern_refresh_gui_callback), cell_pattern); ags_task_thread_append_task(task_thread, AGS_TASK(toggle_pattern_bit)); }else if (event->button == 3){ } return(FALSE); } gboolean ags_cell_pattern_drawing_area_key_press_event(GtkWidget *widget, GdkEventKey *event, AgsCellPattern *cell_pattern) { if(event->keyval == GDK_KEY_Tab){ return(FALSE); } switch(event->keyval){ case GDK_KEY_Control_L: { cell_pattern->key_mask |= AGS_CELL_PATTERN_KEY_L_CONTROL; } break; case GDK_KEY_Control_R: { cell_pattern->key_mask |= AGS_CELL_PATTERN_KEY_R_CONTROL; } break; case GDK_KEY_c: { /* copy notes */ if((AGS_CELL_PATTERN_KEY_L_CONTROL & (cell_pattern->key_mask)) != 0 || (AGS_CELL_PATTERN_KEY_R_CONTROL & (cell_pattern->key_mask)) != 0){ AgsMachine *machine; machine = gtk_widget_get_ancestor(cell_pattern, AGS_TYPE_MACHINE); ags_machine_copy_pattern(machine); } } break; } return(TRUE); } gboolean ags_cell_pattern_drawing_area_key_release_event(GtkWidget *widget, GdkEventKey *event, AgsCellPattern *cell_pattern) { AgsWindow *window; AgsMachine *machine; AgsChannel *channel; AgsAudioLoop *audio_loop; AgsTaskThread *task_thread; auto void ags_cell_pattern_drawing_area_key_release_event_play_channel(AgsChannel *channel); void ags_cell_pattern_drawing_area_key_release_event_play_channel(AgsChannel *channel){ AgsDevout *devout; AgsStartDevout *start_devout; AgsInitChannel *init_channel; AgsAppendChannel *append_channel; AgsAudioLoop *audio_loop; AgsTaskThread *task_thread; AgsDevoutThread *devout_thread; AgsMutexManager *mutex_manager; GList *tasks; pthread_mutex_t *audio_mutex; pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel->audio); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(audio_mutex); devout = AGS_DEVOUT(AGS_AUDIO(channel->audio)->devout); audio_loop = AGS_AUDIO_LOOP(AGS_MAIN(devout->ags_main)->main_loop); task_thread = ags_thread_find_type(audio_loop, AGS_TYPE_TASK_THREAD); devout_thread = ags_thread_find_type(audio_loop, AGS_TYPE_DEVOUT_THREAD); tasks = NULL; /* init channel for playback */ init_channel = ags_init_channel_new(channel, FALSE, TRUE, FALSE, FALSE); g_signal_connect_after(G_OBJECT(init_channel), "launch\0", G_CALLBACK(ags_cell_pattern_init_channel_launch_callback), NULL); tasks = g_list_prepend(tasks, init_channel); /* append channel for playback */ append_channel = ags_append_channel_new(G_OBJECT(audio_loop), G_OBJECT(channel)); tasks = g_list_prepend(tasks, append_channel); /* create start task */ start_devout = ags_start_devout_new(devout); tasks = g_list_prepend(tasks, start_devout); /* perform playback */ tasks = g_list_reverse(tasks); ags_task_thread_append_tasks(task_thread, tasks); pthread_mutex_unlock(audio_mutex); } if(event->keyval == GDK_KEY_Tab){ return(FALSE); } machine = gtk_widget_get_ancestor(cell_pattern, AGS_TYPE_MACHINE); window = gtk_widget_get_ancestor(cell_pattern, AGS_TYPE_WINDOW); audio_loop = AGS_AUDIO_LOOP(AGS_MAIN(window->ags_main)->main_loop); task_thread = ags_thread_find_type(audio_loop, AGS_TYPE_TASK_THREAD); switch(event->keyval){ case GDK_KEY_Control_L: { cell_pattern->key_mask &= (~AGS_CELL_PATTERN_KEY_L_CONTROL); } break; case GDK_KEY_Control_R: { cell_pattern->key_mask &= (~AGS_CELL_PATTERN_KEY_R_CONTROL); } break; case GDK_KEY_Left: case GDK_KEY_leftarrow: { if(cell_pattern->cursor_x > 0){ cell_pattern->cursor_x -= 1; /* audible feedback */ channel = ags_channel_nth(machine->audio->input, machine->audio->input_lines - cell_pattern->cursor_y - 1); if(ags_pattern_get_bit(channel->pattern->data, 0, machine->bank_1, cell_pattern->cursor_x)){ ags_cell_pattern_drawing_area_key_release_event_play_channel(channel); } } } break; case GDK_KEY_Right: case GDK_KEY_rightarrow: { if(cell_pattern->cursor_x < cell_pattern->n_cols){ cell_pattern->cursor_x += 1; /* audible feedback */ channel = ags_channel_nth(machine->audio->input, machine->audio->input_lines - cell_pattern->cursor_y - 1); if(ags_pattern_get_bit(channel->pattern->data, 0, machine->bank_1, cell_pattern->cursor_x)){ ags_cell_pattern_drawing_area_key_release_event_play_channel(channel); } } } break; case GDK_KEY_Up: case GDK_KEY_uparrow: { if(cell_pattern->cursor_y > 0){ cell_pattern->cursor_y -= 1; /* audible feedback */ channel = ags_channel_nth(machine->audio->input, machine->audio->input_lines - cell_pattern->cursor_y - 1); if(ags_pattern_get_bit(channel->pattern->data, 0, machine->bank_1, cell_pattern->cursor_x)){ ags_cell_pattern_drawing_area_key_release_event_play_channel(channel); } } if(cell_pattern->cursor_y < GTK_RANGE(cell_pattern->vscrollbar)->adjustment->value){ gtk_range_set_value(GTK_RANGE(cell_pattern->vscrollbar), GTK_RANGE(cell_pattern->vscrollbar)->adjustment->value - 1.0); } } break; case GDK_KEY_Down: case GDK_KEY_downarrow: { if(cell_pattern->cursor_y < cell_pattern->n_rows){ cell_pattern->cursor_y += 1; /* audible feedback */ channel = ags_channel_nth(machine->audio->input, machine->audio->input_lines - cell_pattern->cursor_y - 1); if(ags_pattern_get_bit(channel->pattern->data, 0, machine->bank_1, cell_pattern->cursor_x)){ ags_cell_pattern_drawing_area_key_release_event_play_channel(channel); } } if(cell_pattern->cursor_y >= GTK_RANGE(cell_pattern->vscrollbar)->adjustment->value + AGS_CELL_PATTERN_MAX_CONTROLS_SHOWN_VERTICALLY){ gtk_range_set_value(GTK_RANGE(cell_pattern->vscrollbar), GTK_RANGE(cell_pattern->vscrollbar)->adjustment->value + 1.0); } } break; case GDK_KEY_space: { AgsTogglePatternBit *toggle_pattern_bit; guint i, j; guint index1; i = cell_pattern->cursor_y; j = cell_pattern->cursor_x; index1 = machine->bank_1; channel = ags_channel_nth(machine->audio->input, machine->audio->input_lines - i - 1); toggle_pattern_bit = ags_toggle_pattern_bit_new(channel->pattern->data, channel->line, 0, index1, j); g_signal_connect(G_OBJECT(toggle_pattern_bit), "refresh-gui\0", G_CALLBACK(ags_cell_pattern_refresh_gui_callback), cell_pattern); if(!ags_pattern_get_bit(channel->pattern->data, 0, index1, j)){ ags_cell_pattern_drawing_area_key_release_event_play_channel(channel); } ags_task_thread_append_task(task_thread, AGS_TASK(toggle_pattern_bit)); } break; } return(TRUE); } void ags_cell_pattern_adjustment_value_changed_callback(GtkWidget *widget, AgsCellPattern *cell_pattern) { ags_cell_pattern_draw_matrix(cell_pattern); } void ags_cell_pattern_refresh_gui_callback(AgsTogglePatternBit *toggle_pattern_bit, AgsCellPattern *cell_pattern) { AgsMachine *machine; AgsChannel *channel; guint line; machine = gtk_widget_get_ancestor(cell_pattern, AGS_TYPE_MACHINE); channel = ags_channel_nth(machine->audio->input, toggle_pattern_bit->line); line = machine->audio->input_pads - toggle_pattern_bit->line - (guint) GTK_RANGE(cell_pattern->vscrollbar)->adjustment->value - 1; ags_cell_pattern_redraw_gutter_point(cell_pattern, channel, toggle_pattern_bit->bit, line); } void ags_cell_pattern_init_channel_launch_callback(AgsTask *task, gpointer data) { AgsDevout *devout; AgsChannel *channel; AgsRecycling *recycling; AgsAddAudioSignal *add_audio_signal; AgsAudioLoop *audio_loop; AgsTaskThread *task_thread; AgsMutexManager *mutex_manager; GList *recall, *tmp; pthread_mutex_t *audio_mutex; channel = AGS_INIT_CHANNEL(task)->channel; pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel->audio); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(audio_mutex); devout = AGS_DEVOUT(AGS_AUDIO(channel->audio)->devout); audio_loop = AGS_AUDIO_LOOP(AGS_MAIN(devout->ags_main)->main_loop); task_thread = ags_thread_find_type(audio_loop, AGS_TYPE_TASK_THREAD); g_message("launch\0"); if(AGS_DEVOUT_PLAY(channel->devout_play) == NULL || AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[0] == NULL){ return; } /* connect done */ recall = ags_recall_find_provider_with_recycling_container(channel->play, G_OBJECT(channel), G_OBJECT(AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[0]->recycling_container)); tmp = recall; recall = ags_recall_find_type(recall, AGS_TYPE_PLAY_CHANNEL_RUN); //TODO:JK: fix me // g_list_free(tmp); if(recall != NULL){ AgsAudioSignal *audio_signal; /* add audio signal */ recycling = channel->first_recycling; while(recycling != channel->last_recycling->next){ audio_signal = ags_audio_signal_new((GObject *) devout, (GObject *) recycling, (GObject *) AGS_RECALL(recall->data)->recall_id); /* add audio signal */ ags_recycling_create_audio_signal_with_defaults(recycling, audio_signal, 0.0, 0); audio_signal->stream_current = audio_signal->stream_beginning; ags_audio_signal_connect(audio_signal); /* * emit add_audio_signal on AgsRecycling */ ags_recycling_add_audio_signal(recycling, audio_signal); recycling = recycling->next; } } pthread_mutex_unlock(audio_mutex); } gsequencer-0.6.37/src/ags/X/machine/ags_drum_input_pad_callbacks.c0000644000175000017500000003502112626272146022065 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void ags_drum_input_pad_open_play_callback(GtkToggleButton *toggle_button, AgsDrumInputPad *pad); void ags_drum_input_pad_open_play_done(AgsRecall *recall, AgsDrumInputPad *drum_input_pad); void ags_drum_input_pad_open_response_callback(GtkWidget *widget, gint response, AgsDrumInputPad *pad); void ags_drum_input_pad_init_channel_launch_callback(AgsTask *task, AgsDrumInputPad *drum_input_pad); #define AGS_DRUM_INPUT_PAD_OPEN_AUDIO_FILE_NAME "AgsDrumInputPadOpenAudioFileName\0" #define AGS_DRUM_INPUT_PAD_OPEN_SPIN_BUTTON "AgsDrumInputPadOpenSpinButton\0" extern pthread_mutex_t ags_application_mutex; void ags_drum_input_pad_open_callback(GtkWidget *widget, AgsDrumInputPad *drum_input_pad) { GtkFileChooserDialog *file_chooser; GtkHBox *hbox; GtkLabel *label; GtkSpinButton *spin_button; GtkToggleButton *play; if(drum_input_pad->file_chooser != NULL) return; drum_input_pad->file_chooser = file_chooser = (GtkFileChooserDialog *) gtk_file_chooser_dialog_new (g_strdup("Open File\0"), (GtkWindow *) gtk_widget_get_toplevel((GtkWidget *) drum_input_pad), GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(file_chooser), FALSE); g_object_set_data((GObject *) file_chooser, (char *) g_type_name(AGS_TYPE_AUDIO_FILE), NULL); g_object_set_data((GObject *) file_chooser, AGS_DRUM_INPUT_PAD_OPEN_AUDIO_FILE_NAME, NULL); hbox = (GtkHBox *) gtk_hbox_new(FALSE, 0); gtk_file_chooser_set_extra_widget((GtkFileChooser *) file_chooser, (GtkWidget *) hbox); label = (GtkLabel *) gtk_label_new(g_strdup("channel: \0")); gtk_box_pack_start((GtkBox *) hbox, (GtkWidget *) label, FALSE, FALSE, 0); spin_button = (GtkSpinButton *) gtk_spin_button_new_with_range(0.0, AGS_AUDIO(AGS_PAD(drum_input_pad)->channel->audio)->audio_channels - 1, 1.0); g_object_set_data((GObject *) file_chooser, AGS_DRUM_INPUT_PAD_OPEN_SPIN_BUTTON, spin_button); gtk_box_pack_start((GtkBox *) hbox, (GtkWidget *) spin_button, FALSE, FALSE, 0); if(drum_input_pad->pad.group->active) gtk_widget_set_sensitive((GtkWidget *) spin_button, FALSE); // play = (GtkToggleButton *) g_object_new(GTK_TYPE_TOGGLE_BUTTON, // "label\0", GTK_STOCK_MEDIA_PLAY, // "use-stock\0", TRUE, // "use-underline\0", TRUE, // NULL); gtk_box_pack_start((GtkBox *) GTK_DIALOG(file_chooser)->action_area, (GtkWidget *) play, FALSE, FALSE, 0); gtk_box_reorder_child((GtkBox *) GTK_DIALOG(file_chooser)->action_area, (GtkWidget *) play, 0); gtk_widget_show_all((GtkWidget *) file_chooser); g_signal_connect((GObject *) file_chooser, "response\0", G_CALLBACK(ags_drum_input_pad_open_response_callback), (gpointer) drum_input_pad); // g_signal_connect((GObject *) play, "toggled\0", // G_CALLBACK(ags_drum_input_pad_open_play_callback), (gpointer) drum_input_pad); } void ags_drum_input_pad_open_play_callback(GtkToggleButton *toggle_button, AgsDrumInputPad *drum_input_pad) { AgsWindow *window; GtkFileChooserDialog *file_chooser; AgsDevout *devout; AgsThread *main_loop; AgsThread *task_thread; AgsMain *ags_main; GList *list, *tasks; gchar *name0, *name1; window = gtk_widget_get_ancestor(drum_input_pad, AGS_TYPE_WINDOW); file_chooser = drum_input_pad->file_chooser; name0 = (gchar *) gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(file_chooser)); name1 = g_object_get_data((GObject *) file_chooser, AGS_DRUM_INPUT_PAD_OPEN_AUDIO_FILE_NAME); devout = AGS_DEVOUT(AGS_AUDIO(AGS_PAD(drum_input_pad)->channel->audio)->devout); ags_main = window->ags_main; /* get main loop */ pthread_mutex_lock(&(ags_application_mutex)); main_loop = ags_main->main_loop; pthread_mutex_unlock(&(ags_application_mutex)); /* find task thread */ task_thread = ags_thread_find_type(main_loop, AGS_TYPE_TASK_THREAD); if(toggle_button->active){ AgsDevoutPlay *devout_play; AgsPlayAudioSignal *play_audio_signal; AgsStreamAudioSignal *stream_audio_signal; AgsStartDevout *start_devout; AgsAppendRecall *append_recall; AgsAudioFile *audio_file; GList *audio_signal; guint i; drum_input_pad->flags &= (~AGS_DRUM_INPUT_PAD_OPEN_PLAY_DONE); /* AgsAudioFile */ if(!g_strcmp0(name0, name1)){ audio_file = (AgsAudioFile *) g_object_get_data((GObject *) file_chooser, g_type_name(AGS_TYPE_AUDIO_FILE)); }else{ if(name1 != NULL){ audio_file = g_object_get_data((GObject *) file_chooser, (char *) g_type_name(AGS_TYPE_AUDIO_FILE)); g_object_unref(G_OBJECT(audio_file)); } audio_file = ags_audio_file_new(name0, devout, 0, devout->pcm_channels); g_object_set_data((GObject *) file_chooser, (char *) g_type_name(AGS_TYPE_AUDIO_FILE), audio_file); ags_audio_file_open(audio_file); ags_audio_file_read_audio_signal(audio_file); g_message("ags_drum_input_pad_open_play:\0"); } /* task */ audio_signal = audio_file->audio_signal; tasks = NULL; i = 0; while(audio_signal != NULL){ /* AgsPlayAudioSignal recall */ play_audio_signal = ags_play_audio_signal_new(AGS_AUDIO_SIGNAL(audio_signal->data), devout, i); g_object_ref(play_audio_signal); AGS_AUDIO_SIGNAL(audio_signal->data)->flags &= (~AGS_AUDIO_SIGNAL_TEMPLATE); AGS_AUDIO_SIGNAL(audio_signal->data)->stream_current = AGS_AUDIO_SIGNAL(audio_signal->data)->stream_beginning; drum_input_pad->pad_open_play_ref++; drum_input_pad->pad_open_recalls = g_list_prepend(drum_input_pad->pad_open_recalls, play_audio_signal); g_signal_connect(G_OBJECT(play_audio_signal), "done\0", G_CALLBACK(ags_drum_input_pad_open_play_done), drum_input_pad); /* AgsAppendRecall */ devout_play = ags_devout_play_alloc(); devout_play->flags = AGS_DEVOUT_PLAY_PLAYBACK; devout_play->source = G_OBJECT(play_audio_signal); append_recall = ags_append_recall_new(G_OBJECT(AGS_MAIN(devout->ags_main)->main_loop), devout_play); tasks = g_list_prepend(tasks, append_recall); /* AgsStreamAudioSignal recall */ stream_audio_signal = ags_stream_audio_signal_new(AGS_AUDIO_SIGNAL(audio_signal->data)); g_object_ref(stream_audio_signal); drum_input_pad->pad_open_play_ref++; drum_input_pad->pad_open_recalls = g_list_prepend(drum_input_pad->pad_open_recalls, stream_audio_signal); g_signal_connect_after(G_OBJECT(stream_audio_signal), "done\0", G_CALLBACK(ags_drum_input_pad_open_play_done), drum_input_pad); /* AgsAppendRecall */ devout_play = ags_devout_play_alloc(); devout_play->flags = AGS_DEVOUT_PLAY_PLAYBACK; devout_play->source = G_OBJECT(stream_audio_signal); append_recall = ags_append_recall_new(G_OBJECT(AGS_MAIN(devout->ags_main)->main_loop), devout_play); tasks = g_list_prepend(tasks, append_recall); /* next */ audio_signal = audio_signal->next; i++; } /* */ tasks = g_list_reverse(tasks); /* create start task */ start_devout = ags_start_devout_new(devout); tasks = g_list_prepend(tasks, start_devout); ags_task_thread_append_tasks(task_thread, tasks); }else{ if((AGS_DRUM_INPUT_PAD_OPEN_PLAY_DONE & (drum_input_pad->flags)) == 0){ GList *list; list = drum_input_pad->pad_open_recalls; while(list != NULL){ ags_recall_cancel(AGS_RECALL(list->data)); list = list->next; } }else{ drum_input_pad->flags &= (~AGS_DRUM_INPUT_PAD_OPEN_PLAY_DONE); } } } void ags_drum_input_pad_open_play_done(AgsRecall *recall, AgsDrumInputPad *drum_input_pad) { drum_input_pad->pad_open_play_ref--; // ags_recycling_remove_audio_signal(AGS_RECALL_AUDIO_SIGNAL(recall)->source->recycling, // AGS_RECALL_AUDIO_SIGNAL(recall)->source); if(drum_input_pad->pad_open_play_ref == 0){ GtkToggleButton *toggle_button; // AgsCancelRecall *cancel_recall; GList *list; list = drum_input_pad->pad_open_recalls; while(list != NULL){ AGS_RECALL(list->data)->flags |= AGS_RECALL_REMOVE; list = list->next; } g_list_free(drum_input_pad->pad_open_recalls); drum_input_pad->pad_open_recalls = NULL; list = gtk_container_get_children((GtkContainer *) GTK_DIALOG(drum_input_pad->file_chooser)->action_area); toggle_button = (GtkToggleButton *) list->data; drum_input_pad->flags |= AGS_DRUM_INPUT_PAD_OPEN_PLAY_DONE; gtk_toggle_button_set_active(toggle_button, FALSE); g_list_free(list); } } void ags_drum_input_pad_open_response_callback(GtkWidget *widget, gint response, AgsDrumInputPad *drum_input_pad) { AgsWindow *window; AgsDrum *drum; GtkFileChooserDialog *file_chooser; GtkSpinButton *spin_button; AgsAudioFile *audio_file; AgsOpenSingleFile *open_single_file; AgsThread *main_loop; AgsThread *task_thread; AgsMain *ags_main; char *name0, *name1; drum = (AgsDrum *) gtk_widget_get_ancestor(GTK_WIDGET(drum_input_pad), AGS_TYPE_DRUM); window = gtk_widget_get_ancestor(drum_input_pad, AGS_TYPE_WINDOW); file_chooser = drum_input_pad->file_chooser; ags_main = window->ags_main; /* get main loop */ pthread_mutex_lock(&(ags_application_mutex)); main_loop = ags_main->main_loop; pthread_mutex_unlock(&(ags_application_mutex)); /* find task thread */ task_thread = ags_thread_find_type(main_loop, AGS_TYPE_TASK_THREAD); if(response == GTK_RESPONSE_ACCEPT){ name0 = gtk_file_chooser_get_filename((GtkFileChooser *) file_chooser); name1 = (char *) g_object_get_data((GObject *) file_chooser, AGS_DRUM_INPUT_PAD_OPEN_AUDIO_FILE_NAME); spin_button = (GtkSpinButton *) g_object_get_data((GObject *) file_chooser, AGS_DRUM_INPUT_PAD_OPEN_SPIN_BUTTON); /* open audio file and read audio signal */ if(!g_strcmp0(name0, name1)){ audio_file = (AgsAudioFile *) g_object_get_data((GObject *) file_chooser, g_type_name(AGS_TYPE_AUDIO_FILE)); }else{ if(name1 != NULL){ audio_file = (AgsAudioFile *) g_object_get_data((GObject *) file_chooser, g_type_name(AGS_TYPE_AUDIO_FILE)); g_object_unref(G_OBJECT(audio_file)); } } /* task */ if(AGS_PAD(drum_input_pad)->group->active){ open_single_file = ags_open_single_file_new(AGS_PAD(drum_input_pad)->channel, AGS_DEVOUT(AGS_AUDIO(AGS_MACHINE(drum)->audio)->devout), name0, 0, AGS_AUDIO(AGS_MACHINE(drum)->audio)->audio_channels); }else{ AgsLine *line; GList *list; list = gtk_container_get_children(GTK_CONTAINER(AGS_PAD(drum_input_pad)->expander_set)); line = AGS_LINE(ags_line_find_next_grouped(list)->data); open_single_file = ags_open_single_file_new(line->channel, AGS_DEVOUT(AGS_AUDIO(AGS_MACHINE(drum)->audio)->devout), name0, (guint) spin_button->adjustment->value, 1); g_list_free(list); } ags_task_thread_append_task(task_thread, AGS_TASK(open_single_file)); gtk_widget_destroy((GtkWidget *) file_chooser); }else if(response == GTK_RESPONSE_CANCEL){ audio_file = (AgsAudioFile *) g_object_get_data((GObject *) file_chooser, g_type_name(AGS_TYPE_AUDIO_FILE)); if(audio_file != NULL){ g_object_unref(G_OBJECT(audio_file)); } gtk_widget_destroy((GtkWidget *) file_chooser); } drum_input_pad->file_chooser = NULL; } void ags_drum_input_pad_play_callback(GtkToggleButton *toggle_button, AgsDrumInputPad *drum_input_pad) { ags_pad_play(AGS_PAD(drum_input_pad)); } void ags_drum_input_pad_edit_callback(GtkWidget *toggle_button, AgsDrumInputPad *drum_input_pad) { GtkToggleButton *toggle; AgsDrum *drum; drum = (AgsDrum *) gtk_widget_get_ancestor((GtkWidget *) drum_input_pad, AGS_TYPE_DRUM); if(drum->selected_edit_button != NULL){ if(GTK_TOGGLE_BUTTON(toggle_button) != drum->selected_edit_button){ /* unset old */ toggle = drum->selected_edit_button; drum->selected_edit_button = NULL; gtk_toggle_button_set_active((GtkToggleButton *) toggle, FALSE); /* apply new */ drum->selected_edit_button = (GtkToggleButton *) toggle_button; drum->selected_pad = (AgsDrumInputPad *) gtk_widget_get_ancestor((GtkWidget *) toggle_button, AGS_TYPE_DRUM_INPUT_PAD); AGS_MACHINE(drum)->selected_input_pad = drum->selected_pad; ags_pattern_box_set_pattern(drum->pattern_box); }else{ /* chain up */ toggle = drum->selected_edit_button; drum->selected_edit_button = NULL; gtk_toggle_button_set_active((GtkToggleButton *) toggle, TRUE); /* reset */ drum->selected_edit_button = toggle; } } } gsequencer-0.6.37/src/ags/X/machine/ags_drum_output_pad_callbacks.c0000644000175000017500000000265412626272146022274 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_drum_output_pad_play_done(AgsRecall *recall, AgsRecallID *recall_id, AgsDrumOutputPad *drum_output_pad) { AgsDrum *drum; drum = (AgsDrum *) gtk_widget_get_ancestor((GtkWidget *) drum_output_pad, AGS_TYPE_DRUM); /* drum->play_ref++; if(drum->play_ref == drum->machine.audio->output_lines){ drum->play_ref = 0; drum->machine.audio->devout_play->flags |= AGS_DEVOUT_PLAY_DONE; gtk_toggle_button_set_active(drum->run, FALSE); } */ } void ags_drum_output_pad_play_cancel(AgsRecall *recall, AgsRecallID *recall_id, AgsDrumOutputPad *drum_output_pad) { } gsequencer-0.6.37/src/ags/X/machine/ags_ffplayer_callbacks.h0000644000175000017500000000370512632713164020671 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_FFPLAYER_CALLBACKS_H__ #define __AGS_FFPLAYER_CALLBACKS_H__ #include #include #include #include void ags_ffplayer_parent_set_callback(GtkWidget *widget, GtkObject *old_parent, AgsFFPlayer *ffplayer); void ags_ffplayer_destroy_callback(GtkWidget *widget, AgsFFPlayer *ffplayer); void ags_ffplayer_open_clicked_callback(GtkWidget *widget, AgsFFPlayer *ffplayer); void ags_ffplayer_open_dialog_response_callback(GtkWidget *widget, gint response, AgsMachine *machine); void ags_ffplayer_preset_changed_callback(GtkComboBox *preset, AgsFFPlayer *ffplayer); void ags_ffplayer_instrument_changed_callback(GtkComboBox *instrument, AgsFFPlayer *ffplayer); gboolean ags_ffplayer_drawing_area_expose_callback(GtkWidget *widget, GdkEventExpose *event, AgsFFPlayer *ffplayer); gboolean ags_ffplayer_drawing_area_configure_callback(GtkWidget *widget, GdkEventConfigure *event, AgsFFPlayer *ffplayer); gboolean ags_ffplayer_drawing_area_button_press_callback(GtkWidget *widget, AgsFFPlayer *ffplayer); void ags_ffplayer_hscrollbar_value_changed(GtkAdjustment *adjustment, AgsFFPlayer *ffplayer); #endif /*__AGS_FFPLAYER_CALLBACKS_H__ */ gsequencer-0.6.37/src/ags/X/machine/ags_mixer_callbacks.h0000644000175000017500000000206612621463700020200 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_MIXER_CALLBACKS_H__ #define __AGS_MIXER_CALLBACKS_H__ #include #include #include #include void ags_mixer_parent_set_callback(GtkWidget *widget, GtkObject *old_parent, AgsMixer *mixer); #endif /*__AGS_MIXER_CALLBACKS_H__ */ gsequencer-0.6.37/src/ags/X/machine/ags_mixer_callbacks.c0000644000175000017500000000237712621463700020200 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_mixer_parent_set_callback(GtkWidget *widget, GtkObject *old_parent, AgsMixer *mixer) { AgsWindow *window; if(old_parent != NULL) return; window = (AgsWindow *) gtk_widget_get_toplevel(widget); AGS_MACHINE(mixer)->name = g_strdup_printf("Default %d\0", ags_window_find_machine_counter(window, AGS_TYPE_MIXER)->counter); ags_window_increment_machine_counter(window, AGS_TYPE_MIXER); } gsequencer-0.6.37/src/ags/X/machine/ags_cell_pattern.c0000644000175000017500000005270712626272146017542 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include static GType ags_accessible_cell_pattern_get_type(void); void ags_cell_pattern_class_init(AgsCellPatternClass *cell_pattern); void ags_accessible_cell_pattern_class_init(AtkObject *object); void ags_accessible_cell_pattern_action_interface_init(AtkActionIface *action); void ags_cell_pattern_connectable_interface_init(AgsConnectableInterface *connectable); void ags_cell_pattern_init(AgsCellPattern *cell_pattern); void ags_cell_pattern_finalize(GObject *gobject); void ags_cell_pattern_connect(AgsConnectable *connectable); void ags_cell_pattern_disconnect(AgsConnectable *connectable); AtkObject* ags_cell_pattern_get_accessible(GtkWidget *widget); void ags_cell_pattern_show(GtkWidget *widget); void ags_cell_pattern_show_all(GtkWidget *widget); gboolean ags_accessible_cell_pattern_do_action(AtkAction *action, gint i); gint ags_accessible_cell_pattern_get_n_actions(AtkAction *action); const gchar* ags_accessible_cell_pattern_get_description(AtkAction *action, gint i); const gchar* ags_accessible_cell_pattern_get_name(AtkAction *action, gint i); const gchar* ags_accessible_cell_pattern_get_keybinding(AtkAction *action, gint i); gboolean ags_accessible_cell_pattern_set_description(AtkAction *action, gint i); gchar* ags_accessible_cell_pattern_get_localized_name(AtkAction *action, gint i); /** * SECTION:ags_cell_pattern * @short_description: cell_pattern sequencer * @title: AgsCellPattern * @section_id: * @include: ags/X/machine/ags_cell_pattern.h * * The #AgsCellPattern is a composite widget to act as cell_pattern sequencer. */ static gpointer ags_cell_pattern_parent_class = NULL; static GQuark quark_accessible_object = 0; extern pthread_mutex_t ags_application_mutex; GtkStyle *cell_pattern_style; GType ags_cell_pattern_get_type(void) { static GType ags_type_cell_pattern = 0; if(!ags_type_cell_pattern){ static const GTypeInfo ags_cell_pattern_info = { sizeof(AgsCellPatternClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_cell_pattern_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(AgsCellPattern), 0, /* n_preallocs */ (GInstanceInitFunc) ags_cell_pattern_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_cell_pattern_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_cell_pattern = g_type_register_static(GTK_TYPE_TABLE, "AgsCellPattern\0", &ags_cell_pattern_info, 0); g_type_add_interface_static(ags_type_cell_pattern, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return(ags_type_cell_pattern); } static GType ags_accessible_cell_pattern_get_type(void) { static GType ags_type_accessible_cell_pattern = 0; if(!ags_type_accessible_cell_pattern){ const GTypeInfo ags_accesssible_cell_pattern_info = { sizeof(GtkAccessibleClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_accessible_cell_pattern_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(GtkAccessible), 0, /* n_preallocs */ NULL, NULL }; static const GInterfaceInfo atk_action_interface_info = { (GInterfaceInitFunc) ags_accessible_cell_pattern_action_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_accessible_cell_pattern = g_type_register_static(GTK_TYPE_ACCESSIBLE, "AgsAccessibleCellPattern\0", &ags_accesssible_cell_pattern_info, 0); g_type_add_interface_static(ags_type_accessible_cell_pattern, ATK_TYPE_ACTION, &atk_action_interface_info); } return(ags_type_accessible_cell_pattern); } void ags_cell_pattern_class_init(AgsCellPatternClass *cell_pattern) { GObjectClass *gobject; GtkWidgetClass *widget; ags_cell_pattern_parent_class = g_type_class_peek_parent(cell_pattern); quark_accessible_object = g_quark_from_static_string("ags-accessible-object\0"); /* GObjectClass */ gobject = (GObjectClass *) cell_pattern; gobject->finalize = ags_cell_pattern_finalize; /* GtkWidget */ widget = (GtkWidgetClass *) cell_pattern; widget->show = ags_cell_pattern_show; widget->show_all = ags_cell_pattern_show_all; } void ags_accessible_cell_pattern_class_init(AtkObject *object) { /* empty */ } void ags_accessible_cell_pattern_action_interface_init(AtkActionIface *action) { action->do_action = ags_accessible_cell_pattern_do_action; action->get_n_actions = ags_accessible_cell_pattern_get_n_actions; action->get_description = ags_accessible_cell_pattern_get_description; action->get_name = ags_accessible_cell_pattern_get_name; action->get_keybinding = ags_accessible_cell_pattern_get_keybinding; action->set_description = ags_accessible_cell_pattern_set_description; action->get_localized_name = ags_accessible_cell_pattern_get_localized_name; } void ags_cell_pattern_connectable_interface_init(AgsConnectableInterface *connectable) { AgsConnectableInterface *ags_cell_pattern_connectable_parent_interface; connectable->connect = ags_cell_pattern_connect; connectable->disconnect = ags_cell_pattern_disconnect; } void ags_cell_pattern_init(AgsCellPattern *cell_pattern) { GtkAdjustment *adjustment; AgsLed *led; guint i; g_object_set(cell_pattern, "can-focus\0", TRUE, "n-columns\0", 2, "n-rows", 2, "homogeneous\0", FALSE, NULL); cell_pattern->flags = 0; cell_pattern->key_mask = 0; cell_pattern->cell_width = AGS_CELL_PATTERN_DEFAULT_CELL_WIDTH; cell_pattern->cell_height = AGS_CELL_PATTERN_DEFAULT_CELL_HEIGHT; cell_pattern->n_cols = AGS_CELL_PATTERN_DEFAULT_CONTROLS_HORIZONTALLY; cell_pattern->n_rows = AGS_CELL_PATTERN_DEFAULT_CONTROLS_VERTICALLY; cell_pattern->cursor_x = 0; cell_pattern->cursor_y = 0; cell_pattern->drawing_area = (GtkDrawingArea *) gtk_drawing_area_new(); gtk_widget_set_size_request((GtkWidget *) cell_pattern->drawing_area, AGS_CELL_PATTERN_MAX_CONTROLS_SHOWN_HORIZONTALLY * cell_pattern->cell_width + 1, AGS_CELL_PATTERN_MAX_CONTROLS_SHOWN_VERTICALLY * cell_pattern->cell_height + 1); gtk_widget_set_style((GtkWidget *) cell_pattern->drawing_area, cell_pattern_style); gtk_table_attach(cell_pattern, (GtkWidget *) cell_pattern->drawing_area, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 0, 0); gtk_widget_set_events((GtkWidget *) cell_pattern->drawing_area, GDK_EXPOSURE_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_BUTTON_PRESS_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_CONTROL_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK); adjustment = (GtkAdjustment *) gtk_adjustment_new(0.0, 0.0, (double) AGS_CELL_PATTERN_DEFAULT_CONTROLS_VERTICALLY - 1.0, 1.0, 1.0, (gdouble) AGS_CELL_PATTERN_MAX_CONTROLS_SHOWN_VERTICALLY); cell_pattern->vscrollbar = (GtkVScrollbar *) gtk_vscrollbar_new(adjustment); gtk_widget_set_style((GtkWidget *) cell_pattern->vscrollbar, cell_pattern_style); gtk_table_attach(cell_pattern, (GtkWidget *) cell_pattern->vscrollbar, 1, 2, 0, 1, GTK_FILL, GTK_FILL, 0, 0); cell_pattern->hscrollbar = NULL; /* led */ cell_pattern->active_led = 0; cell_pattern->led = (GtkHBox *) gtk_hbox_new(FALSE, 0); gtk_table_attach(cell_pattern, (GtkWidget *) cell_pattern->led, 0, 1, 2, 3, GTK_FILL, GTK_FILL, 0, 0); for(i = 0; i < 32; i++){ led = ags_led_new(); gtk_widget_set_size_request((GtkWidget *) led, cell_pattern->cell_width, cell_pattern->cell_height); gtk_box_pack_start((GtkBox *) cell_pattern->led, (GtkWidget *) led, FALSE, FALSE, 0); } } void ags_cell_pattern_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_cell_pattern_parent_class)->finalize(gobject); } void ags_cell_pattern_connect(AgsConnectable *connectable) { AgsCellPattern *cell_pattern; if((AGS_CELL_PATTERN_CONNECTED & (AGS_CELL_PATTERN(connectable)->flags)) != 0){ return; } /* AgsCellPattern */ cell_pattern = AGS_CELL_PATTERN(connectable); cell_pattern->flags |= AGS_CELL_PATTERN_CONNECTED; g_signal_connect_after(G_OBJECT(cell_pattern), "focus_in_event\0", G_CALLBACK(ags_cell_pattern_focus_in_callback), (gpointer) cell_pattern); g_signal_connect(G_OBJECT(cell_pattern), "key_press_event\0", G_CALLBACK(ags_cell_pattern_drawing_area_key_press_event), (gpointer) cell_pattern); g_signal_connect(G_OBJECT(cell_pattern), "key_release_event\0", G_CALLBACK(ags_cell_pattern_drawing_area_key_release_event), (gpointer) cell_pattern); g_signal_connect_after(G_OBJECT(cell_pattern->drawing_area), "configure_event\0", G_CALLBACK(ags_cell_pattern_drawing_area_configure_callback), (gpointer) cell_pattern); g_signal_connect_after(G_OBJECT(cell_pattern->drawing_area), "expose_event\0", G_CALLBACK(ags_cell_pattern_drawing_area_expose_callback), (gpointer) cell_pattern); g_signal_connect(G_OBJECT(cell_pattern->drawing_area), "button_press_event\0", G_CALLBACK(ags_cell_pattern_drawing_area_button_press_callback), (gpointer) cell_pattern); g_signal_connect(G_OBJECT(GTK_RANGE(cell_pattern->vscrollbar)->adjustment), "value_changed\0", G_CALLBACK(ags_cell_pattern_adjustment_value_changed_callback), (gpointer) cell_pattern); } void ags_cell_pattern_disconnect(AgsConnectable *connectable) { AgsCellPattern *cell_pattern; /* AgsCellPattern */ cell_pattern = AGS_CELL_PATTERN(connectable); //TODO:JK: implement me } AtkObject* ags_cell_pattern_get_accessible(GtkWidget *widget) { AtkObject* accessible; accessible = g_object_get_qdata(G_OBJECT(widget), quark_accessible_object); if(!accessible){ accessible = g_object_new(ags_accessible_cell_pattern_get_type(), NULL); g_object_set_qdata(G_OBJECT(widget), quark_accessible_object, accessible); gtk_accessible_set_widget(accessible, widget); } return(accessible); } void ags_cell_pattern_show(GtkWidget *widget) { GTK_WIDGET_CLASS(ags_cell_pattern_parent_class)->show(widget); // ags_cell_pattern_draw_matrix(AGS_CELL_PATTERN(widget)); } void ags_cell_pattern_show_all(GtkWidget *widget) { GTK_WIDGET_CLASS(ags_cell_pattern_parent_class)->show_all(widget); // ags_cell_pattern_draw_matrix(AGS_CELL_PATTERN(widget)); } gboolean ags_accessible_cell_pattern_do_action(AtkAction *action, gint i) { AgsCellPattern *cell_pattern; GdkEventKey *key_press, *key_release; GdkEventKey *modifier_press, *modifier_release; if(!(i >= 0 && i < 6)){ return(FALSE); } cell_pattern = gtk_accessible_get_widget(ATK_OBJECT(action)); key_press = gdk_event_new(GDK_KEY_PRESS); key_release = gdk_event_new(GDK_KEY_RELEASE); switch(i){ case AGS_CELL_PATTERN_MOVE_LEFT: { key_press->keyval = key_release->keyval = GDK_KEY_Left; /* send event */ gtk_widget_event(cell_pattern, key_press); gtk_widget_event(cell_pattern, key_release); } break; case AGS_CELL_PATTERN_MOVE_RIGHT: { key_press->keyval = key_release->keyval = GDK_KEY_Right; /* send event */ gtk_widget_event(cell_pattern, key_press); gtk_widget_event(cell_pattern, key_release); } break; case AGS_CELL_PATTERN_MOVE_UP: { key_press->keyval = key_release->keyval = GDK_KEY_Up; /* send event */ gtk_widget_event(cell_pattern, key_press); gtk_widget_event(cell_pattern, key_release); } break; case AGS_CELL_PATTERN_MOVE_DOWN: { key_press->keyval = key_release->keyval = GDK_KEY_Down; /* send event */ gtk_widget_event(cell_pattern, key_press); gtk_widget_event(cell_pattern, key_release); } break; case AGS_CELL_PATTERN_TOGGLE_PAD: { key_press->keyval = key_release->keyval = GDK_KEY_space; /* send event */ gtk_widget_event(cell_pattern, key_press); gtk_widget_event(cell_pattern, key_release); } break; case AGS_CELL_PATTERN_COPY_PATTERN: { key_press->keyval = key_release->keyval = GDK_KEY_c; /* create modifier */ modifier_press = gdk_event_new(GDK_KEY_PRESS); modifier_release = gdk_event_new(GDK_KEY_RELEASE); modifier_press->keyval = modifier_release->keyval = GDK_KEY_Control_R; /* send event */ gtk_widget_event(cell_pattern, modifier_press); gtk_widget_event(cell_pattern, key_press); gtk_widget_event(cell_pattern, key_release); gtk_widget_event(cell_pattern, modifier_release); } break; } return(TRUE); } gint ags_accessible_cell_pattern_get_n_actions(AtkAction *action) { return(6); } const gchar* ags_accessible_cell_pattern_get_description(AtkAction *action, gint i) { static const gchar **actions = { "move cursor left\0", "move cursor right\0", "move cursor up\0", "move cursor down\0", "toggle audio pattern\0" "copy pattern to clipboard\0", }; if(i >= 0 && i < 6){ return(actions[i]); }else{ return(NULL); } } const gchar* ags_accessible_cell_pattern_get_name(AtkAction *action, gint i) { static const gchar **actions = { "left\0", "right\0", "up\0", "down\0", "toggle\0", "copy\0", }; if(i >= 0 && i < 6){ return(actions[i]); }else{ return(NULL); } } const gchar* ags_accessible_cell_pattern_get_keybinding(AtkAction *action, gint i) { static const gchar **actions = { "left\0", "right\0", "up\0", "down\0", "space", "Ctrl+c", }; if(i >= 0 && i < 6){ return(actions[i]); }else{ return(NULL); } } gboolean ags_accessible_cell_pattern_set_description(AtkAction *action, gint i) { //TODO:JK: implement me return(FALSE); } gchar* ags_accessible_cell_pattern_get_localized_name(AtkAction *action, gint i) { //TODO:JK: implement me return(NULL); } void ags_cell_pattern_paint(AgsCellPattern *cell_pattern) { ags_cell_pattern_draw_gutter(cell_pattern); ags_cell_pattern_draw_matrix(cell_pattern); ags_cell_pattern_draw_cursor(cell_pattern); } void ags_cell_pattern_draw_gutter(AgsCellPattern *cell_pattern) { AgsMachine *machine; AgsChannel *channel; AgsMutexManager *mutex_manager; guint gutter; int i, j; pthread_mutex_t *audio_mutex; machine = gtk_widget_get_ancestor(cell_pattern, AGS_TYPE_MACHINE); pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) machine->audio); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(audio_mutex); gdk_draw_rectangle(GTK_WIDGET(cell_pattern->drawing_area)->window, GTK_WIDGET(cell_pattern->drawing_area)->style->bg_gc[0], TRUE, 0, 0, 288, 80); channel = ags_channel_nth(machine->audio->input, machine->audio->input_lines - ((guint) GTK_RANGE(cell_pattern->vscrollbar)->adjustment->value + AGS_CELL_PATTERN_MAX_CONTROLS_SHOWN_VERTICALLY) - 1); if(machine->audio->input_pads > AGS_CELL_PATTERN_MAX_CONTROLS_SHOWN_VERTICALLY){ gutter = AGS_CELL_PATTERN_MAX_CONTROLS_SHOWN_VERTICALLY; }else{ gutter = machine->audio->input_pads; } for (i = 0; i < gutter; i++){ for (j = 0; j < 32; j++){ gdk_draw_rectangle(GTK_WIDGET(cell_pattern->drawing_area)->window, GTK_WIDGET(cell_pattern->drawing_area)->style->fg_gc[0], FALSE, j * 12, i * 10, 12, 10); ags_cell_pattern_redraw_gutter_point (cell_pattern, channel, j, i); } channel = channel->prev; } pthread_mutex_unlock(audio_mutex); } void ags_cell_pattern_draw_matrix(AgsCellPattern *cell_pattern) { AgsMachine *machine; AgsChannel *channel; AgsMutexManager *mutex_manager; guint gutter; int i, j; pthread_mutex_t *audio_mutex; machine = gtk_widget_get_ancestor(cell_pattern, AGS_TYPE_MACHINE); pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) machine->audio); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(audio_mutex); if(machine->audio->input_pads > AGS_CELL_PATTERN_MAX_CONTROLS_SHOWN_VERTICALLY){ gutter = AGS_CELL_PATTERN_MAX_CONTROLS_SHOWN_VERTICALLY; }else{ gutter = machine->audio->input_pads; } channel = ags_channel_nth(machine->audio->input, machine->audio->input_pads - (guint) GTK_RANGE(cell_pattern->vscrollbar)->adjustment->value - 1); if(channel == NULL){ pthread_mutex_unlock(audio_mutex); return; } for (i = 0; i < gutter; i++){ for (j = 0; j < 32; j++) ags_cell_pattern_redraw_gutter_point(cell_pattern, channel, j, i); channel = channel->prev; } pthread_mutex_unlock(audio_mutex); } void ags_cell_pattern_draw_cursor(AgsCellPattern *cell_pattern) { guint i, j; if(cell_pattern->cursor_y >= GTK_RANGE(cell_pattern->vscrollbar)->adjustment->value && cell_pattern->cursor_y < GTK_RANGE(cell_pattern->vscrollbar)->adjustment->value + cell_pattern->n_rows){ i = cell_pattern->cursor_y - GTK_RANGE(cell_pattern->vscrollbar)->adjustment->value; j = cell_pattern->cursor_x; if((AGS_CELL_PATTERN_CURSOR_ON & (cell_pattern->flags)) != 0){ ags_cell_pattern_highlight_gutter_point(cell_pattern, j, i); }else{ ags_cell_pattern_unpaint_gutter_point(cell_pattern, j, i); } } } void ags_cell_pattern_redraw_gutter_point(AgsCellPattern *cell_pattern, AgsChannel *channel, guint j, guint i) { AgsMachine *machine; if(channel->pattern == NULL) return; machine = gtk_widget_get_ancestor(cell_pattern, AGS_TYPE_MACHINE); if(ags_pattern_get_bit((AgsPattern *) channel->pattern->data, machine->bank_0, machine->bank_1, j)){ ags_cell_pattern_highlight_gutter_point(cell_pattern, j, i); }else{ ags_cell_pattern_unpaint_gutter_point(cell_pattern, j, i); } } void ags_cell_pattern_highlight_gutter_point(AgsCellPattern *cell_pattern, guint j, guint i) { gdk_draw_rectangle(GTK_WIDGET(cell_pattern->drawing_area)->window, GTK_WIDGET(cell_pattern->drawing_area)->style->fg_gc[0], TRUE, j * cell_pattern->cell_width + 1, i * cell_pattern->cell_height + 1, 11, 9); } void ags_cell_pattern_unpaint_gutter_point(AgsCellPattern *cell_pattern, guint j, guint i) { gdk_draw_rectangle(GTK_WIDGET(cell_pattern->drawing_area)->window, GTK_WIDGET(cell_pattern->drawing_area)->style->bg_gc[0], TRUE, j * cell_pattern->cell_width + 1, i * cell_pattern->cell_height +1, 11, 9); } void* ags_cell_pattern_blink_worker(void *data) { AgsWindow *window; AgsCellPattern *cell_pattern; AgsBlinkCellPatternCursor *blink_cell_pattern_cursor; AgsThread *audio_loop; AgsTaskThread *task_thread; AgsMain *ags_main; static const guint blink_delay = 1000000; // blink every second cell_pattern = AGS_CELL_PATTERN(data); window = gtk_widget_get_ancestor(cell_pattern, AGS_TYPE_WINDOW); ags_main = window->ags_main; /* get audio loop */ pthread_mutex_lock(&(ags_application_mutex)); audio_loop = ags_main->main_loop; pthread_mutex_unlock(&(ags_application_mutex)); /* find task thread */ task_thread = ags_thread_find_type(audio_loop, AGS_TYPE_TASK_THREAD); while(gtk_widget_has_focus(cell_pattern)){ /* blink cursor */ blink_cell_pattern_cursor = ags_blink_cell_pattern_cursor_new(cell_pattern, !(AGS_CELL_PATTERN_CURSOR_ON & (cell_pattern->flags))); ags_task_thread_append_task(task_thread, blink_cell_pattern_cursor); /* delay */ usleep(blink_delay); } /* unset cursor */ blink_cell_pattern_cursor = ags_blink_cell_pattern_cursor_new(cell_pattern, FALSE); ags_task_thread_append_task(task_thread, blink_cell_pattern_cursor); return(NULL); } /** * ags_cell_pattern_new: * * Creates an #AgsCellPattern * * Returns: a new #AgsCellPattern * * Since: 0.5 */ AgsCellPattern* ags_cell_pattern_new() { AgsCellPattern *cell_pattern; cell_pattern = (AgsCellPattern *) g_object_new(AGS_TYPE_CELL_PATTERN, NULL); return(cell_pattern); } gsequencer-0.6.37/src/ags/X/machine/ags_panel_input_pad.h0000644000175000017500000000373212621463700020220 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_PANEL_INPUT_PAD_H__ #define __AGS_PANEL_INPUT_PAD_H__ #include #include #include #include #define AGS_TYPE_PANEL_INPUT_PAD (ags_panel_input_pad_get_type()) #define AGS_PANEL_INPUT_PAD(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_PANEL_INPUT_PAD, AgsPanelInputPad)) #define AGS_PANEL_INPUT_PAD_CLASS(class) (G_TYPE_CHECK_CLASS_CAST(class, AGS_TYPE_PANEL_INPUT_PAD, AgsPanelInputPadClass)) #define AGS_IS_PANEL_INPUT_PAD(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_PANEL_INPUT_PAD)) #define AGS_IS_PANEL_INPUT_PAD_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_PANEL_INPUT_PAD)) #define AGS_PANEL_INPUT_PAD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS(obj, AGS_TYPE_PANEL_INPUT_PAD, AgsPanelInputPadClass)) typedef struct _AgsPanelInputPad AgsPanelInputPad; typedef struct _AgsPanelInputPadClass AgsPanelInputPadClass; struct _AgsPanelInputPad { AgsPad pad; gchar *name; gchar *xml_type; }; struct _AgsPanelInputPadClass { AgsPadClass pad; }; GType ags_panel_input_pad_get_type(); AgsPanelInputPad* ags_panel_input_pad_new(AgsChannel *channel); #endif /*__AGS_PANEL_INPUT_PAD_H__*/ gsequencer-0.6.37/src/ags/X/machine/ags_synth_callbacks.h0000644000175000017500000000242712621463700020222 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_SYNTH_CALLBACKS_H__ #define __AGS_SYNTH_CALLBACKS_H__ #include #include #include #include void ags_synth_parent_set_callback(GtkWidget *widget, GtkObject *old_parent, AgsSynth *synth); void ags_synth_lower_callback(GtkSpinButton *spin_button, AgsSynth *synth); void ags_synth_auto_update_callback(GtkToggleButton *toggle, AgsSynth *synth); void ags_synth_update_callback(GtkButton *button, AgsSynth *synth); #endif /*__AGS_SYNTH_CALLBACKS_H__ */ gsequencer-0.6.37/src/ags/X/machine/ags_panel_input_line.c0000644000175000017500000002300112626272146020374 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void ags_panel_input_line_class_init(AgsPanelInputLineClass *panel_input_line); void ags_panel_input_line_connectable_interface_init(AgsConnectableInterface *connectable); void ags_panel_input_line_plugin_interface_init(AgsPluginInterface *plugin); void ags_panel_input_line_init(AgsPanelInputLine *panel_input_line); void ags_panel_input_line_connect(AgsConnectable *connectable); void ags_panel_input_line_disconnect(AgsConnectable *connectable); void ags_panel_input_line_finalize(GObject *gobject); gchar* ags_panel_input_line_get_name(AgsPlugin *plugin); void ags_panel_input_line_set_name(AgsPlugin *plugin, gchar *name); gchar* ags_panel_input_line_get_xml_type(AgsPlugin *plugin); void ags_panel_input_line_set_xml_type(AgsPlugin *plugin, gchar *xml_type); void ags_panel_input_line_show(GtkWidget *line); void ags_panel_input_line_set_channel(AgsLine *line, AgsChannel *channel); void ags_panel_input_line_group_changed(AgsLine *line); void ags_panel_input_line_map_recall(AgsLine *line, guint output_pad_start); /** * SECTION:ags_panel_input_line * @short_description: panel input line * @title: AgsPanelInputLine * @section_id: * @include: ags/X/machine/ags_panel_input_line.h * * The #AgsPanelInputLine is a composite widget to act as panel input line. */ static gpointer ags_panel_input_line_parent_class = NULL; static AgsConnectableInterface *ags_panel_input_line_parent_connectable_interface; GType ags_panel_input_line_get_type() { static GType ags_type_panel_input_line = 0; if(!ags_type_panel_input_line){ static const GTypeInfo ags_panel_input_line_info = { sizeof(AgsPanelInputLineClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_panel_input_line_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(AgsPanelInputLine), 0, /* n_preallocs */ (GInstanceInitFunc) ags_panel_input_line_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_panel_input_line_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_plugin_interface_info = { (GInterfaceInitFunc) ags_panel_input_line_plugin_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_panel_input_line = g_type_register_static(AGS_TYPE_LINE, "AgsPanelInputLine\0", &ags_panel_input_line_info, 0); g_type_add_interface_static(ags_type_panel_input_line, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_panel_input_line, AGS_TYPE_PLUGIN, &ags_plugin_interface_info); } return(ags_type_panel_input_line); } void ags_panel_input_line_class_init(AgsPanelInputLineClass *panel_input_line) { GObjectClass *gobject; GtkWidgetClass *widget; AgsLineClass *line; ags_panel_input_line_parent_class = g_type_class_peek_parent(panel_input_line); /* GObjectClass */ gobject = (GObjectClass *) panel_input_line; gobject->finalize = ags_panel_input_line_finalize; /* GtkWidgetClass */ widget = (GtkWidgetClass *) panel_input_line; widget->show = ags_panel_input_line_show; /* AgsLineClass */ line = AGS_LINE_CLASS(panel_input_line); line->set_channel = ags_panel_input_line_set_channel; line->map_recall = ags_panel_input_line_map_recall; } void ags_panel_input_line_connectable_interface_init(AgsConnectableInterface *connectable) { ags_panel_input_line_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_panel_input_line_connect; connectable->disconnect = ags_panel_input_line_disconnect; } void ags_panel_input_line_plugin_interface_init(AgsPluginInterface *plugin) { plugin->get_name = ags_panel_input_line_get_name; plugin->set_name = ags_panel_input_line_set_name; plugin->get_xml_type = ags_panel_input_line_get_xml_type; plugin->set_xml_type = ags_panel_input_line_set_xml_type; } void ags_panel_input_line_init(AgsPanelInputLine *panel_input_line) { AgsLineMember *line_member; line_member = (AgsLineMember *) g_object_new(AGS_TYPE_LINE_MEMBER, "widget-type\0", GTK_TYPE_CHECK_BUTTON, "widget-label\0", "mute\0", "plugin-name\0", "ags-play\0", "specifier\0", "./muted[0]\0", "control-port\0", "2/2\0", NULL); ags_expander_add(AGS_LINE(panel_input_line)->expander, GTK_WIDGET(line_member), 0, 0, 1, 1); } void ags_panel_input_line_connect(AgsConnectable *connectable) { AgsPanelInputLine *panel_input_line; panel_input_line = AGS_PANEL_INPUT_LINE(connectable); if((AGS_LINE_CONNECTED & (AGS_LINE(panel_input_line)->flags)) != 0){ return; } ags_panel_input_line_parent_connectable_interface->connect(connectable); //TODO:JK: implement me } void ags_panel_input_line_disconnect(AgsConnectable *connectable) { ags_panel_input_line_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_panel_input_line_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_panel_input_line_parent_class)->finalize(gobject); /* empty */ } gchar* ags_panel_input_line_get_name(AgsPlugin *plugin) { return(AGS_PANEL_INPUT_LINE(plugin)->name); } void ags_panel_input_line_set_name(AgsPlugin *plugin, gchar *name) { AGS_PANEL_INPUT_LINE(plugin)->name = name; } gchar* ags_panel_input_line_get_xml_type(AgsPlugin *plugin) { return(AGS_PANEL_INPUT_LINE(plugin)->xml_type); } void ags_panel_input_line_set_xml_type(AgsPlugin *plugin, gchar *xml_type) { AGS_PANEL_INPUT_LINE(plugin)->xml_type = xml_type; } void ags_panel_input_line_show(GtkWidget *line) { GTK_WIDGET_CLASS(ags_panel_input_line_parent_class)->show(line); gtk_widget_hide(GTK_WIDGET(AGS_LINE(line)->group)); } void ags_panel_input_line_set_channel(AgsLine *line, AgsChannel *channel) { AgsPanelInputLine *panel_input_line; AGS_LINE_CLASS(ags_panel_input_line_parent_class)->set_channel(line, channel); panel_input_line = AGS_PANEL_INPUT_LINE(line); #ifdef AGS_DEBUG g_message("ags_panel_input_line_set_channel - channel: %u\0", channel->line); #endif /* empty */ } void ags_panel_input_line_map_recall(AgsLine *line, guint output_pad_start) { AgsPanel *panel; AgsPanelInputLine *panel_input_line; AgsAudio *audio; AgsChannel *source; AgsChannel *current; AgsPlayChannel *play_channel; AgsPlayChannelRunMaster *play_channel_run; GList *list; if((AGS_LINE_MAPPED_RECALL & (line->flags)) != 0 || (AGS_LINE_PREMAPPED_RECALL & (line->flags)) != 0){ return; } panel_input_line = AGS_PANEL_INPUT_LINE(line); audio = AGS_AUDIO(line->channel->audio); panel = AGS_PANEL(audio->machine); source = line->channel; /* ags-play */ ags_recall_factory_create(audio, NULL, NULL, "ags-play-master\0", source->audio_channel, source->audio_channel + 1, source->pad, source->pad + 1, (AGS_RECALL_FACTORY_INPUT, AGS_RECALL_FACTORY_PLAY | AGS_RECALL_FACTORY_ADD), 0); /* set audio channel */ list = source->play; while((list = ags_recall_template_find_type(list, AGS_TYPE_PLAY_CHANNEL)) != NULL){ GValue audio_channel_value = {0,}; play_channel = AGS_PLAY_CHANNEL(list->data); g_value_init(&audio_channel_value, G_TYPE_UINT64); g_value_set_uint64(&audio_channel_value, source->audio_channel); ags_port_safe_write(play_channel->audio_channel, &audio_channel_value); list = list->next; } /* call parent */ AGS_LINE_CLASS(ags_panel_input_line_parent_class)->map_recall(line, output_pad_start); } /** * ags_panel_input_line_new: * @channel: the assigned channel * * Creates an #AgsPanelInputLine * * Returns: a new #AgsPanelInputLine * * Since: 0.4 */ AgsPanelInputLine* ags_panel_input_line_new(AgsChannel *channel) { AgsPanelInputLine *panel_input_line; panel_input_line = (AgsPanelInputLine *) g_object_new(AGS_TYPE_PANEL_INPUT_LINE, "channel\0", channel, NULL); return(panel_input_line); } gsequencer-0.6.37/src/ags/X/machine/ags_synth_input_pad.c0000644000175000017500000002017512626272146020270 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include void ags_synth_input_pad_class_init(AgsSynthInputPadClass *synth_input_pad); void ags_synth_input_pad_connectable_interface_init(AgsConnectableInterface *connectable); void ags_synth_input_pad_plugin_interface_init(AgsPluginInterface *plugin); void ags_synth_input_pad_init(AgsSynthInputPad *synth_input_pad); void ags_synth_input_pad_destroy(GtkObject *object); void ags_synth_input_pad_connect(AgsConnectable *connectable); void ags_synth_input_pad_disconnect(AgsConnectable *connectable); gchar* ags_synth_input_pad_get_name(AgsPlugin *plugin); void ags_synth_input_pad_set_name(AgsPlugin *plugin, gchar *name); gchar* ags_synth_input_pad_get_xml_type(AgsPlugin *plugin); void ags_synth_input_pad_set_xml_type(AgsPlugin *plugin, gchar *xml_type); void ags_synth_input_pad_read(AgsFile *file, xmlNode *node, AgsPlugin *plugin); xmlNode* ags_synth_input_pad_write(AgsFile *file, xmlNode *parent, AgsPlugin *plugin); void ags_synth_input_pad_set_channel(AgsPad *pad, AgsChannel *channel); void ags_synth_input_pad_resize_lines(AgsPad *pad, GType line_type, guint audio_channels, guint audio_channels_old); /** * SECTION:ags_synth_input_pad * @short_description: synth input pad * @title: AgsSynthInputPad * @section_id: * @include: ags/X/machine/ags_synth_input_pad.h * * The #AgsSynthInputPad is a composite widget to act as synth input pad. */ static gpointer ags_synth_input_pad_parent_class = NULL; static AgsConnectableInterface *ags_synth_input_pad_parent_connectable_interface; GType ags_synth_input_pad_get_type() { static GType ags_type_synth_input_pad = 0; if(!ags_type_synth_input_pad){ static const GTypeInfo ags_synth_input_pad_info = { sizeof(AgsSynthInputPadClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_synth_input_pad_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(AgsSynthInputPad), 0, /* n_preallocs */ (GInstanceInitFunc) ags_synth_input_pad_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_synth_input_pad_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_plugin_interface_info = { (GInterfaceInitFunc) ags_synth_input_pad_plugin_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_synth_input_pad = g_type_register_static(AGS_TYPE_PAD, "AgsSynthInputPad\0", &ags_synth_input_pad_info, 0); g_type_add_interface_static(ags_type_synth_input_pad, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_synth_input_pad, AGS_TYPE_PLUGIN, &ags_plugin_interface_info); } return(ags_type_synth_input_pad); } void ags_synth_input_pad_class_init(AgsSynthInputPadClass *synth_input_pad) { AgsPadClass *pad; ags_synth_input_pad_parent_class = g_type_class_peek_parent(synth_input_pad); pad = (AgsPadClass *) synth_input_pad; pad->set_channel = ags_synth_input_pad_set_channel; pad->resize_lines = ags_synth_input_pad_resize_lines; } void ags_synth_input_pad_connectable_interface_init(AgsConnectableInterface *connectable) { ags_synth_input_pad_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_synth_input_pad_connect; connectable->disconnect = ags_synth_input_pad_disconnect; } void ags_synth_input_pad_plugin_interface_init(AgsPluginInterface *plugin) { plugin->get_name = ags_synth_input_pad_get_name; plugin->set_name = ags_synth_input_pad_set_name; plugin->get_xml_type = ags_synth_input_pad_get_xml_type; plugin->set_xml_type = ags_synth_input_pad_set_xml_type; plugin->read = ags_synth_input_pad_read; plugin->write = ags_synth_input_pad_write; } void ags_synth_input_pad_init(AgsSynthInputPad *synth_input_pad) { synth_input_pad->name = NULL; synth_input_pad->xml_type = "ags-synth-input-pad\0"; } void ags_synth_input_pad_connect(AgsConnectable *connectable) { AgsSynthInputPad *synth_input_pad; /* AgsSynthInputPad */ synth_input_pad = AGS_SYNTH_INPUT_PAD(connectable); if((AGS_PAD_CONNECTED & (AGS_PAD(synth_input_pad)->flags)) != 0){ return; } ags_synth_input_pad_parent_connectable_interface->connect(connectable); } void ags_synth_input_pad_disconnect(AgsConnectable *connectable) { ags_synth_input_pad_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_synth_input_pad_destroy(GtkObject *object) { /* empty */ } gchar* ags_synth_input_pad_get_name(AgsPlugin *plugin) { return(AGS_SYNTH_INPUT_PAD(plugin)->name); } void ags_synth_input_pad_set_name(AgsPlugin *plugin, gchar *name) { AGS_SYNTH_INPUT_PAD(plugin)->name = name; } gchar* ags_synth_input_pad_get_xml_type(AgsPlugin *plugin) { return(AGS_SYNTH_INPUT_PAD(plugin)->xml_type); } void ags_synth_input_pad_set_xml_type(AgsPlugin *plugin, gchar *xml_type) { AGS_SYNTH_INPUT_PAD(plugin)->xml_type = xml_type; } void ags_synth_input_pad_read(AgsFile *file, xmlNode *node, AgsPlugin *plugin) { AgsSynthInputPad *gobject; AgsFileLookup *file_lookup; gobject = AGS_SYNTH_INPUT_PAD(plugin); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", gobject, NULL)); } xmlNode* ags_synth_input_pad_write(AgsFile *file, xmlNode *parent, AgsPlugin *plugin) { AgsSynthInputPad *synth_input_pad; xmlNode *node; gchar *id; synth_input_pad = AGS_SYNTH_INPUT_PAD(plugin); node = NULL; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-synth-input-pad\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", synth_input_pad, NULL)); xmlAddChild(parent, node); return(node); } void ags_synth_input_pad_set_channel(AgsPad *pad, AgsChannel *channel) { AGS_PAD_CLASS(ags_synth_input_pad_parent_class)->set_channel(pad, channel); /* empty */ } void ags_synth_input_pad_resize_lines(AgsPad *pad, GType line_type, guint audio_channels, guint audio_channels_old) { AGS_PAD_CLASS(ags_synth_input_pad_parent_class)->resize_lines(pad, line_type, audio_channels, audio_channels_old); /* empty */ } /** * ags_synth_input_pad_new: * @channel: the assigned channel * * Creates an #AgsSynthInputPad * * Returns: a new #AgsSynthInputPad * * Since: 0.4 */ AgsSynthInputPad* ags_synth_input_pad_new(AgsChannel *channel) { AgsSynthInputPad *synth_input_pad; synth_input_pad = (AgsSynthInputPad *) g_object_new(AGS_TYPE_SYNTH_INPUT_PAD, "channel\0", channel, NULL); return(synth_input_pad); } gsequencer-0.6.37/src/ags/X/machine/ags_panel.c0000644000175000017500000002575212626272146016165 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void ags_panel_class_init(AgsPanelClass *panel); void ags_panel_connectable_interface_init(AgsConnectableInterface *connectable); void ags_panel_plugin_interface_init(AgsPluginInterface *plugin); void ags_panel_init(AgsPanel *panel); static void ags_panel_finalize(GObject *gobject); void ags_panel_connect(AgsConnectable *connectable); void ags_panel_disconnect(AgsConnectable *connectable); void ags_panel_show(GtkWidget *widget); void ags_panel_map_recall(AgsMachine *machine); gchar* ags_panel_get_name(AgsPlugin *plugin); void ags_panel_set_name(AgsPlugin *plugin, gchar *name); gchar* ags_panel_get_xml_type(AgsPlugin *plugin); void ags_panel_set_xml_type(AgsPlugin *plugin, gchar *xml_type); void ags_panel_read(AgsFile *file, xmlNode *node, AgsPlugin *plugin); xmlNode* ags_panel_write(AgsFile *file, xmlNode *parent, AgsPlugin *plugin); void ags_panel_read_resolve_audio(AgsFileLookup *file_lookup, AgsMachine *machine); void ags_file_read_panel(AgsFile *file, xmlNode *node, AgsMachine *panel); xmlNode* ags_file_write_panel(AgsFile *file, xmlNode *parent, AgsMachine *panel); void ags_panel_set_audio_channels(AgsAudio *audio, guint audio_channels, guint audio_channels_old, gpointer data); void ags_panel_set_pads(AgsAudio *audio, GType type, guint pads, guint pads_old, gpointer data); /** * SECTION:ags_panel * @short_description: panel * @title: AgsPanel * @section_id: * @include: ags/X/machine/ags_panel.h * * The #AgsPanel is a composite widget to act as panel. */ static gpointer ags_panel_parent_class = NULL; static AgsConnectableInterface *ags_panel_parent_connectable_interface; extern const char *AGS_COPY_INPUT_TO_OUTPUT; GType ags_panel_get_type(void) { static GType ags_type_panel = 0; if(!ags_type_panel){ static const GTypeInfo ags_panel_info = { sizeof(AgsPanelClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_panel_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(AgsPanel), 0, /* n_preallocs */ (GInstanceInitFunc) ags_panel_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_panel_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_plugin_interface_info = { (GInterfaceInitFunc) ags_panel_plugin_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_panel = g_type_register_static(AGS_TYPE_MACHINE, "AgsPanel\0", &ags_panel_info, 0); g_type_add_interface_static(ags_type_panel, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_panel, AGS_TYPE_PLUGIN, &ags_plugin_interface_info); } return(ags_type_panel); } void ags_panel_class_init(AgsPanelClass *panel) { GObjectClass *gobject; GtkWidgetClass *widget; AgsMachineClass *machine; ags_panel_parent_class = g_type_class_peek_parent(panel); /* GtkObjectClass */ gobject = (GObjectClass *) panel; gobject->finalize = ags_panel_finalize; /* GtkWidgetClass */ widget = (GtkWidgetClass *) panel; widget->show = ags_panel_show; /* AgsMachine */ machine = (AgsMachineClass *) panel; machine->map_recall = ags_panel_map_recall; } void ags_panel_connectable_interface_init(AgsConnectableInterface *connectable) { AgsConnectableInterface *ags_panel_connectable_parent_interface; ags_panel_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_panel_connect; connectable->disconnect = ags_panel_disconnect; } void ags_panel_plugin_interface_init(AgsPluginInterface *plugin) { plugin->get_name = ags_panel_get_name; plugin->set_name = ags_panel_set_name; plugin->get_xml_type = ags_panel_get_xml_type; plugin->set_xml_type = ags_panel_set_xml_type; plugin->read = ags_panel_read; plugin->write = ags_panel_write; } void ags_panel_init(AgsPanel *panel) { g_signal_connect_after((GObject *) panel, "parent_set\0", G_CALLBACK(ags_panel_parent_set_callback), (gpointer) panel); AGS_MACHINE(panel)->audio->flags |= (AGS_AUDIO_SYNC); AGS_MACHINE(panel)->input_pad_type = AGS_TYPE_PANEL_INPUT_PAD; AGS_MACHINE(panel)->input_pad_type = AGS_TYPE_PANEL_INPUT_PAD; AGS_MACHINE(panel)->input_line_type = AGS_TYPE_PANEL_INPUT_LINE; AGS_MACHINE(panel)->output_pad_type = G_TYPE_NONE; AGS_MACHINE(panel)->output_line_type = G_TYPE_NONE; g_signal_connect_after(G_OBJECT(panel->machine.audio), "set_audio_channels\0", G_CALLBACK(ags_panel_set_audio_channels), NULL); g_signal_connect_after(G_OBJECT(panel->machine.audio), "set_pads\0", G_CALLBACK(ags_panel_set_pads), NULL); /* */ panel->name = NULL; panel->xml_type = "ags-panel\0"; panel->vbox = (GtkVBox *) gtk_vbox_new(FALSE, 0); gtk_container_add((GtkContainer*) (gtk_bin_get_child((GtkBin *) panel)), (GtkWidget *) panel->vbox); // AGS_MACHINE(panel)->output = (GtkContainer *) gtk_hbox_new(FALSE, 0); // gtk_box_pack_start((GtkBox *) panel->vbox, (GtkWidget *) AGS_MACHINE(panel)->output, FALSE, FALSE, 0); AGS_MACHINE(panel)->input = (GtkContainer *) gtk_hbox_new(FALSE, 0); gtk_box_pack_start((GtkBox *) panel->vbox, (GtkWidget *) AGS_MACHINE(panel)->input, FALSE, FALSE, 0); } static void ags_panel_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_panel_parent_class)->finalize(gobject); } void ags_panel_connect(AgsConnectable *connectable) { AgsPanel *panel; if((AGS_MACHINE_CONNECTED & (AGS_MACHINE(connectable)->flags)) != 0){ return; } ags_panel_parent_connectable_interface->connect(connectable); /* AgsPanel */ panel = AGS_PANEL(connectable); /* AgsAudio */ } void ags_panel_disconnect(AgsConnectable *connectable) { AgsPanel *panel; ags_panel_parent_connectable_interface->disconnect(connectable); /* AgsPanel */ panel = AGS_PANEL(connectable); //TODO:JK: implement me } void ags_panel_show(GtkWidget *widget) { GTK_WIDGET_CLASS(ags_panel_parent_class)->show(widget); } void ags_panel_map_recall(AgsMachine *machine) { AGS_MACHINE_CLASS(ags_panel_parent_class)->map_recall(machine); /* empty */ } gchar* ags_panel_get_name(AgsPlugin *plugin) { return(AGS_PANEL(plugin)->name); } void ags_panel_set_name(AgsPlugin *plugin, gchar *name) { AGS_PANEL(plugin)->name = name; } gchar* ags_panel_get_xml_type(AgsPlugin *plugin) { return(AGS_PANEL(plugin)->xml_type); } void ags_panel_set_xml_type(AgsPlugin *plugin, gchar *xml_type) { AGS_PANEL(plugin)->xml_type = xml_type; } void ags_panel_read(AgsFile *file, xmlNode *node, AgsPlugin *plugin) { AgsPanel *gobject; AgsFileLookup *file_lookup; GList *list; guint64 length, index; gobject = AGS_PANEL(plugin); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", gobject, NULL)); list = file->lookup; while((list = ags_file_lookup_find_by_node(list, node->parent)) != NULL){ file_lookup = AGS_FILE_LOOKUP(list->data); if(g_signal_handler_find(list->data, G_SIGNAL_MATCH_FUNC, 0, 0, NULL, ags_file_read_machine_resolve_audio, NULL) != 0){ g_signal_connect_after(G_OBJECT(file_lookup), "resolve\0", G_CALLBACK(ags_panel_read_resolve_audio), gobject); break; } list = list->next; } } void ags_panel_read_resolve_audio(AgsFileLookup *file_lookup, AgsMachine *machine) { AgsPanel *panel; GList *pad, *pad_start, *line, *line_start; panel = AGS_PANEL(machine); g_signal_connect_after(G_OBJECT(machine->audio), "set_audio_channels\0", G_CALLBACK(ags_panel_set_audio_channels), panel); g_signal_connect_after(G_OBJECT(machine->audio), "set_pads\0", G_CALLBACK(ags_panel_set_pads), panel); } xmlNode* ags_panel_write(AgsFile *file, xmlNode *parent, AgsPlugin *plugin) { AgsPanel *panel; AgsFileLookup *file_lookup; xmlNode *node; GList *list; gchar *id; guint i; panel = AGS_PANEL(plugin); id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-panel\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", panel, NULL)); xmlAddChild(parent, node); return(node); } void ags_panel_set_audio_channels(AgsAudio *audio, guint audio_channels, guint audio_channels_old, gpointer data) { /* empty */ } void ags_panel_set_pads(AgsAudio *audio, GType type, guint pads, guint pads_old, gpointer data) { /* empty */ } /** * ags_panel_new: * @devout: the assigned devout. * * Creates an #AgsPanel * * Returns: a new #AgsPanel * * Since: 0.3 */ AgsPanel* ags_panel_new(GObject *devout) { AgsPanel *panel; GValue value = {0,}; panel = (AgsPanel *) g_object_new(AGS_TYPE_PANEL, NULL); if(devout != NULL){ g_value_init(&value, G_TYPE_OBJECT); g_value_set_object(&value, devout); g_object_set_property(G_OBJECT(AGS_MACHINE(panel)->audio), "devout\0", &value); g_value_unset(&value); } return(panel); } gsequencer-0.6.37/src/ags/X/machine/ags_drum_output_pad.c0000644000175000017500000001525212626272146020273 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include void ags_drum_output_pad_class_init(AgsDrumOutputPadClass *drum_output_pad); void ags_drum_output_pad_connectable_interface_init(AgsConnectableInterface *connectable); void ags_drum_output_pad_plugin_interface_init(AgsPluginInterface *plugin); void ags_drum_output_pad_init(AgsDrumOutputPad *drum_output_pad); void ags_drum_output_pad_destroy(GtkObject *object); void ags_drum_output_pad_connect(AgsConnectable *connectable); void ags_drum_output_pad_disconnect(AgsConnectable *connectable); gchar* ags_drum_output_pad_get_name(AgsPlugin *plugin); void ags_drum_output_pad_set_name(AgsPlugin *plugin, gchar *name); gchar* ags_drum_output_pad_get_xml_type(AgsPlugin *plugin); void ags_drum_output_pad_set_xml_type(AgsPlugin *plugin, gchar *xml_type); void ags_drum_output_pad_set_channel(AgsPad *pad, AgsChannel *channel); void ags_drum_output_pad_resize_lines(AgsPad *pad, GType line_type, guint audio_channels, guint audio_channels_old); /** * SECTION:ags_drum_output_pad * @short_description: drum sequencer output pad * @title: AgsDrumOutputPad * @section_id: * @include: ags/X/machine/ags_drum_output_pad.h * * The #AgsDrumOutputPad is a composite widget to act as drum sequencer output pad. */ static gpointer ags_drum_output_pad_parent_class = NULL; static AgsConnectableInterface *ags_drum_output_pad_parent_connectable_interface; GType ags_drum_output_pad_get_type() { static GType ags_type_drum_output_pad = 0; if(!ags_type_drum_output_pad){ static const GTypeInfo ags_drum_output_pad_info = { sizeof(AgsDrumOutputPadClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_drum_output_pad_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(AgsDrumOutputPad), 0, /* n_preallocs */ (GInstanceInitFunc) ags_drum_output_pad_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_drum_output_pad_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_plugin_interface_info = { (GInterfaceInitFunc) ags_drum_output_pad_plugin_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_drum_output_pad = g_type_register_static(AGS_TYPE_PAD, "AgsDrumOutputPad\0", &ags_drum_output_pad_info, 0); g_type_add_interface_static(ags_type_drum_output_pad, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_drum_output_pad, AGS_TYPE_PLUGIN, &ags_plugin_interface_info); } return(ags_type_drum_output_pad); } void ags_drum_output_pad_class_init(AgsDrumOutputPadClass *drum_output_pad) { GObjectClass *gobject; AgsPadClass *pad; ags_drum_output_pad_parent_class = g_type_class_peek_parent(drum_output_pad); /* AgsPadClass */ pad = (AgsPadClass *) drum_output_pad; pad->set_channel = ags_drum_output_pad_set_channel; pad->resize_lines = ags_drum_output_pad_resize_lines; } void ags_drum_output_pad_connectable_interface_init(AgsConnectableInterface *connectable) { ags_drum_output_pad_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_drum_output_pad_connect; connectable->disconnect = ags_drum_output_pad_disconnect; } void ags_drum_output_pad_plugin_interface_init(AgsPluginInterface *plugin) { plugin->get_name = ags_drum_output_pad_get_name; plugin->set_name = ags_drum_output_pad_set_name; plugin->get_xml_type = ags_drum_output_pad_get_xml_type; plugin->set_xml_type = ags_drum_output_pad_set_xml_type; } void ags_drum_output_pad_init(AgsDrumOutputPad *drum_output_pad) { drum_output_pad->flags = 0; drum_output_pad->xml_type = "ags-drum-output-pad\0"; } void ags_drum_output_pad_connect(AgsConnectable *connectable) { AgsDrumOutputPad *drum_output_pad; drum_output_pad = AGS_DRUM_OUTPUT_PAD(connectable); if((AGS_PAD_CONNECTED & (AGS_PAD(drum_output_pad)->flags)) != 0){ return; } ags_drum_output_pad_parent_connectable_interface->connect(connectable); /* empty */ } void ags_drum_output_pad_disconnect(AgsConnectable *connectable) { ags_drum_output_pad_parent_connectable_interface->disconnect(connectable); /* empty */ } gchar* ags_drum_output_pad_get_name(AgsPlugin *plugin) { return(AGS_DRUM_OUTPUT_PAD(plugin)->name); } void ags_drum_output_pad_set_name(AgsPlugin *plugin, gchar *name) { AGS_DRUM_OUTPUT_PAD(plugin)->name = name; } gchar* ags_drum_output_pad_get_xml_type(AgsPlugin *plugin) { return(AGS_DRUM_OUTPUT_PAD(plugin)->xml_type); } void ags_drum_output_pad_set_xml_type(AgsPlugin *plugin, gchar *xml_type) { AGS_DRUM_OUTPUT_PAD(plugin)->xml_type = xml_type; } void ags_drum_output_pad_destroy(GtkObject *object) { /* empty */ } void ags_drum_output_pad_set_channel(AgsPad *pad, AgsChannel *channel) { AGS_PAD_CLASS(ags_drum_output_pad_parent_class)->set_channel(pad, channel); /* empty */ } void ags_drum_output_pad_resize_lines(AgsPad *pad, GType line_type, guint audio_channels, guint audio_channels_old) { AGS_PAD_CLASS(ags_drum_output_pad_parent_class)->resize_lines(pad, line_type, audio_channels, audio_channels_old); /* empty */ } /** * ags_drum_output_pad_new: * @channel: the assigned channel * * Creates an #AgsDrumOutputPad * * Returns: a new #AgsDrumOutputPad * * Since: 0.4 */ AgsDrumOutputPad* ags_drum_output_pad_new(AgsChannel *channel) { AgsDrumOutputPad *drum_output_pad; drum_output_pad = (AgsDrumOutputPad *) g_object_new(AGS_TYPE_DRUM_OUTPUT_PAD, "channel\0", channel, NULL); return(drum_output_pad); } gsequencer-0.6.37/src/ags/X/machine/ags_drum_output_pad_callbacks.h0000644000175000017500000000234212621463700022264 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_DRUM_OUTPUT_PAD_CALLBACKS_H__ #define __AGS_DRUM_OUTPUT_PAD_CALLBACKS_H__ #include #include #include #include void ags_drum_output_pad_play_done(AgsRecall *recall, AgsRecallID *recall_id, AgsDrumOutputPad *drum_output_pad); void ags_drum_output_pad_play_cancel(AgsRecall *recall, AgsRecallID *recall_id, AgsDrumOutputPad *drum_output_pad); #endif /*__AGS_DRUM_OUTPUT_PAD_CALLBACKS_H__*/ gsequencer-0.6.37/src/ags/X/machine/ags_drum_input_pad.h0000644000175000017500000000433312621463700020066 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_DRUM_INPUT_PAD_H__ #define __AGS_DRUM_INPUT_PAD_H__ #include #include #include #include #define AGS_TYPE_DRUM_INPUT_PAD (ags_drum_input_pad_get_type()) #define AGS_DRUM_INPUT_PAD(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_DRUM_INPUT_PAD, AgsDrumInputPad)) #define AGS_DRUM_INPUT_PAD_CLASS(class) (G_TYPE_CHECK_CLASS_CAST(class, AGS_TYPE_DRUM_INPUT_PAD, AgsDrumInputPadClass)) #define AGS_IS_DRUM_INPUT_PAD(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_DRUM_INPUT_PAD)) #define AGS_IS_DRUM_INPUT_PAD_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_DRUM_INPUT_PAD)) #define AGS_DRUM_INPUT_PAD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS(obj, AGS_TYPE_DRUM_INPUT_PAD, AgsDrumInputPadClass)) typedef struct _AgsDrumInputPad AgsDrumInputPad; typedef struct _AgsDrumInputPadClass AgsDrumInputPadClass; typedef enum{ AGS_DRUM_INPUT_PAD_OPEN_PLAY_DONE = 1, }AgsDrumInputPadFlags; struct _AgsDrumInputPad { AgsPad pad; guint flags; gchar *name; gchar *xml_type; GtkButton *open; GtkToggleButton *play; GtkToggleButton *edit; GList *pad_open_recalls; guint pad_open_play_ref; GtkFileChooserDialog *file_chooser; guint pad_play_ref; }; struct _AgsDrumInputPadClass { AgsPadClass pad; }; GType ags_drum_input_pad_get_type(); AgsDrumInputPad* ags_drum_input_pad_new(AgsChannel *channel); #endif /*__AGS_DRUM_INPUT_PAD_H__*/ gsequencer-0.6.37/src/ags/X/machine/ags_mixer.c0000644000175000017500000002432512626272146016205 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void ags_mixer_class_init(AgsMixerClass *mixer); void ags_mixer_connectable_interface_init(AgsConnectableInterface *connectable); void ags_mixer_plugin_interface_init(AgsPluginInterface *plugin); void ags_mixer_init(AgsMixer *mixer); void ags_mixer_finalize(GObject *gobject); void ags_mixer_connect(AgsConnectable *connectable); void ags_mixer_disconnect(AgsConnectable *connectable); void ags_mixer_show(GtkWidget *widget); void ags_mixer_map_recall(AgsMachine *machine); gchar* ags_mixer_get_name(AgsPlugin *plugin); void ags_mixer_set_name(AgsPlugin *plugin, gchar *name); gchar* ags_mixer_get_xml_type(AgsPlugin *plugin); void ags_mixer_set_xml_type(AgsPlugin *plugin, gchar *xml_type); void ags_mixer_read(AgsFile *file, xmlNode *node, AgsPlugin *plugin); xmlNode* ags_mixer_write(AgsFile *file, xmlNode *parent, AgsPlugin *plugin); void ags_mixer_read_resolve_audio(AgsFileLookup *file_lookup, AgsMachine *machine); void ags_mixer_set_audio_channels(AgsAudio *audio, guint audio_channels, guint audio_channels_old, gpointer data); void ags_mixer_set_pads(AgsAudio *audio, GType type, guint pads, guint pads_old, gpointer data); /** * SECTION:ags_mixer * @short_description: mixer * @title: AgsMixer * @section_id: * @include: ags/X/machine/ags_mixer.h * * The #AgsMixer is a composite widget to act as mixer. */ static gpointer ags_mixer_parent_class = NULL; static AgsConnectableInterface *ags_mixer_parent_connectable_interface; extern const char *AGS_MIX_VOLUME; GType ags_mixer_get_type(void) { static GType ags_type_mixer = 0; if(!ags_type_mixer){ static const GTypeInfo ags_mixer_info = { sizeof(AgsMixerClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_mixer_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(AgsMixer), 0, /* n_preallocs */ (GInstanceInitFunc) ags_mixer_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_mixer_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_plugin_interface_info = { (GInterfaceInitFunc) ags_mixer_plugin_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_mixer = g_type_register_static(AGS_TYPE_MACHINE, "AgsMixer\0", &ags_mixer_info, 0); g_type_add_interface_static(ags_type_mixer, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_mixer, AGS_TYPE_PLUGIN, &ags_plugin_interface_info); } return(ags_type_mixer); } void ags_mixer_class_init(AgsMixerClass *mixer) { GObjectClass *gobject; GtkWidgetClass *widget; AgsMachineClass *machine; ags_mixer_parent_class = g_type_class_peek_parent(mixer); /* GObjectClass */ gobject = (GObjectClass *) mixer; gobject->finalize = ags_mixer_finalize; /* GtkWidget */ widget = (GtkWidgetClass *) mixer; // widget->show = ags_mixer_show; /* AgsMachine */ machine = (AgsMachineClass *) mixer; machine->map_recall = ags_mixer_map_recall; } void ags_mixer_connectable_interface_init(AgsConnectableInterface *connectable) { AgsConnectableInterface *ags_mixer_connectable_parent_interface; ags_mixer_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_mixer_connect; connectable->disconnect = ags_mixer_disconnect; } void ags_mixer_plugin_interface_init(AgsPluginInterface *plugin) { plugin->get_name = ags_mixer_get_name; plugin->set_name = ags_mixer_set_name; plugin->get_xml_type = ags_mixer_get_xml_type; plugin->set_xml_type = ags_mixer_set_xml_type; plugin->read = ags_mixer_read; plugin->write = ags_mixer_write; } void ags_mixer_init(AgsMixer *mixer) { g_signal_connect_after((GObject *) mixer, "parent_set\0", G_CALLBACK(ags_mixer_parent_set_callback), (gpointer) mixer); AGS_MACHINE(mixer)->audio->flags |= (AGS_AUDIO_ASYNC); AGS_MACHINE(mixer)->input_pad_type = AGS_TYPE_MIXER_INPUT_PAD; AGS_MACHINE(mixer)->input_line_type = AGS_TYPE_MIXER_INPUT_LINE; AGS_MACHINE(mixer)->output_pad_type = G_TYPE_NONE; AGS_MACHINE(mixer)->output_line_type = G_TYPE_NONE; /* AgsAudio */ g_signal_connect_after(G_OBJECT(mixer->machine.audio), "set_audio_channels\0", G_CALLBACK(ags_mixer_set_audio_channels), NULL); g_signal_connect_after(G_OBJECT(mixer->machine.audio), "set_pads\0", G_CALLBACK(ags_mixer_set_pads), NULL); /* */ mixer->name = NULL; mixer->xml_type = "ags-mixer\0"; mixer->input_pad = (GtkHBox *) gtk_hbox_new(FALSE, 0); AGS_MACHINE(mixer)->input = (GtkContainer *) mixer->input_pad; gtk_container_add((GtkContainer*) (gtk_container_get_children((GtkContainer *) mixer))->data, (GtkWidget *) mixer->input_pad); } void ags_mixer_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_mixer_parent_class)->finalize(gobject); } void ags_mixer_connect(AgsConnectable *connectable) { AgsMixer *mixer; if((AGS_MACHINE_CONNECTED & (AGS_MACHINE(connectable)->flags)) != 0){ return; } ags_mixer_parent_connectable_interface->connect(connectable); /* AgsMixer */ mixer = AGS_MIXER(connectable); // g_signal_connect((GObject *) mixer, "destroy\0", // G_CALLBACK(ags_mixer_destroy_callback), (gpointer) mixer); } void ags_mixer_disconnect(AgsConnectable *connectable) { AgsMixer *mixer; ags_mixer_parent_connectable_interface->disconnect(connectable); /* AgsMixer */ mixer = AGS_MIXER(connectable); //TODO:JK: implement me } void ags_mixer_show(GtkWidget *widget) { } void ags_mixer_map_recall(AgsMachine *machine) { AGS_MACHINE_CLASS(ags_mixer_parent_class)->map_recall(machine); /* empty */ } gchar* ags_mixer_get_name(AgsPlugin *plugin) { return(AGS_MIXER(plugin)->name); } void ags_mixer_set_name(AgsPlugin *plugin, gchar *name) { AGS_MIXER(plugin)->name = name; } gchar* ags_mixer_get_xml_type(AgsPlugin *plugin) { return(AGS_MIXER(plugin)->xml_type); } void ags_mixer_set_xml_type(AgsPlugin *plugin, gchar *xml_type) { AGS_MIXER(plugin)->xml_type = xml_type; } void ags_mixer_read(AgsFile *file, xmlNode *node, AgsPlugin *plugin) { AgsMixer *gobject; AgsFileLookup *file_lookup; GList *list; guint64 index; gobject = AGS_MIXER(plugin); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", gobject, NULL)); list = file->lookup; while((list = ags_file_lookup_find_by_node(list, node->parent)) != NULL){ file_lookup = AGS_FILE_LOOKUP(list->data); if(g_signal_handler_find(list->data, G_SIGNAL_MATCH_FUNC, 0, 0, NULL, ags_file_read_machine_resolve_audio, NULL) != 0){ g_signal_connect_after(G_OBJECT(file_lookup), "resolve\0", G_CALLBACK(ags_mixer_read_resolve_audio), gobject); break; } list = list->next; } } void ags_mixer_read_resolve_audio(AgsFileLookup *file_lookup, AgsMachine *machine) { AgsMixer *mixer; GList *pad, *pad_start, *line, *line_start; mixer = AGS_MIXER(machine); g_signal_connect_after(G_OBJECT(machine->audio), "set_audio_channels\0", G_CALLBACK(ags_mixer_set_audio_channels), mixer); g_signal_connect_after(G_OBJECT(machine->audio), "set_pads\0", G_CALLBACK(ags_mixer_set_pads), mixer); } xmlNode* ags_mixer_write(AgsFile *file, xmlNode *parent, AgsPlugin *plugin) { AgsMixer *mixer; xmlNode *node; gchar *id; guint i; mixer = AGS_MIXER(plugin); id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-mixer\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", mixer, NULL)); xmlAddChild(parent, node); return(node); } void ags_mixer_set_audio_channels(AgsAudio *audio, guint audio_channels, guint audio_channels_old, gpointer data) { /* empty */ } void ags_mixer_set_pads(AgsAudio *audio, GType type, guint pads, guint pads_old, gpointer data) { /* empty */ } /** * ags_mixer_new: * @devout: the assigned devout. * * Creates an #AgsMixer * * Returns: a new #AgsMixer * * Since: 0.3 */ AgsMixer* ags_mixer_new(GObject *devout) { AgsMixer *mixer; mixer = (AgsMixer *) g_object_new(AGS_TYPE_MIXER, NULL); g_object_set(G_OBJECT(AGS_MACHINE(mixer)->audio), "devout\0", devout, NULL); return(mixer); } gsequencer-0.6.37/src/ags/X/machine/ags_drum_output_pad.h0000644000175000017500000000407112621463700020266 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_DRUM_OUTPUT_PAD_H__ #define __AGS_DRUM_OUTPUT_PAD_H__ #include #include #include #include #define AGS_TYPE_DRUM_OUTPUT_PAD (ags_drum_output_pad_get_type()) #define AGS_DRUM_OUTPUT_PAD(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_DRUM_OUTPUT_PAD, AgsDrumOutputPad)) #define AGS_DRUM_OUTPUT_PAD_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_DRUM_OUTPUT_PAD, AgsDrumOutputPadClass)) #define AGS_IS_DRUM_OUTPUT_PAD(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_DRUM_OUTPUT_PAD)) #define AGS_IS_DRUM_OUTPUT_PAD_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_DRUM_OUTPUT_PAD)) #define AGS_DRUM_OUTPUT_PAD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS(obj, AGS_TYPE_DRUM_OUTPUT_PAD, AgsDrumOutputPadClass)) typedef struct _AgsDrumOutputPad AgsDrumOutputPad; typedef struct _AgsDrumOutputPadClass AgsDrumOutputPadClass; typedef enum{ AGS_DRUM_OUTPUT_PAD_PLAY_DONE = 1, }AgsDrumOutputPadFlags; struct _AgsDrumOutputPad { AgsPad pad; guint flags; gchar *name; gchar *xml_type; }; struct _AgsDrumOutputPadClass { AgsPadClass pad; }; GType ags_drum_output_pad_get_type(); AgsDrumOutputPad* ags_drum_output_pad_new(AgsChannel *channel); #endif /*__AGS_DRUM_OUTPUT_PAD_H__*/ gsequencer-0.6.37/src/ags/X/machine/ags_oscillator_callbacks.h0000644000175000017500000000302012621463700021216 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_OSCILLATOR_CALLBACKS_H__ #define __AGS_OSCILLATOR_CALLBACKS_H__ #include #include #include #include void ags_oscillator_wave_callback(GtkComboBox *combo, AgsOscillator *oscillator); void ags_oscillator_attack_callback(GtkSpinButton *spin_button, AgsOscillator *oscillator); void ags_oscillator_frame_count_callback(GtkSpinButton *spin_button, AgsOscillator *oscillator); void ags_oscillator_frequency_callback(GtkSpinButton *spin_button, AgsOscillator *oscillator); void ags_oscillator_phase_callback(GtkSpinButton *spin_button, AgsOscillator *oscillator); void ags_oscillator_volume_callback(GtkSpinButton *spin_button, AgsOscillator *oscillator); #endif /*__AGS_OSCILLATOR_CALLBACKS_H__ */ gsequencer-0.6.37/src/ags/X/machine/ags_matrix_callbacks.h0000644000175000017500000000410312621463700020352 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_MATRIX_CALLBACKS_H__ #define __AGS_MATRIX_CALLBACKS_H__ #include #include #include #include #include void ags_matrix_parent_set_callback(GtkWidget *widget, GtkObject *old_parent, AgsMatrix *matrix); /* controls */ void ags_matrix_index_callback(GtkWidget *widget, AgsMatrix *matrix); gboolean ags_matrix_drawing_area_configure_callback(GtkWidget *widget, GdkEventConfigure *event, AgsMatrix *matrix); gboolean ags_matrix_drawing_area_expose_callback(GtkWidget *widget, GdkEventExpose *event, AgsMatrix *matrix); gboolean ags_matrix_drawing_area_button_press_callback(GtkWidget *widget, GdkEventButton *event, AgsMatrix *matrix); void ags_matrix_adjustment_value_changed_callback(GtkWidget *widget, AgsMatrix *matrix); void ags_matrix_bpm_callback(GtkWidget *spin_button, AgsMatrix *matrix); void ags_matrix_length_spin_callback(GtkWidget *spin_button, AgsMatrix *matrix); void ags_matrix_loop_button_callback(GtkWidget *button, AgsMatrix *matrix); /* audio */ void ags_matrix_tact_callback(AgsAudio *audio, AgsRecallID *recall_id, AgsMatrix *matrix); void ags_matrix_done_callback(AgsAudio *audio, AgsRecallID *recall_id, AgsMatrix *matrix); #endif /*__AGS_MATRIX_CALLBACKS_H__*/ gsequencer-0.6.37/src/ags/X/machine/ags_drum_output_line.c0000644000175000017500000002735412626272146020464 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void ags_drum_output_line_class_init(AgsDrumOutputLineClass *drum_output_line); void ags_drum_output_line_connectable_interface_init(AgsConnectableInterface *connectable); void ags_drum_output_line_plugin_interface_init(AgsPluginInterface *plugin); void ags_drum_output_line_init(AgsDrumOutputLine *drum_output_line); void ags_drum_output_line_destroy(GtkObject *object); void ags_drum_output_line_connect(AgsConnectable *connectable); void ags_drum_output_line_disconnect(AgsConnectable *connectable); gchar* ags_drum_output_line_get_name(AgsPlugin *plugin); void ags_drum_output_line_set_name(AgsPlugin *plugin, gchar *name); gchar* ags_drum_output_line_get_xml_type(AgsPlugin *plugin); void ags_drum_output_line_set_xml_type(AgsPlugin *plugin, gchar *xml_type); void ags_drum_output_line_read(AgsFile *file, xmlNode *node, AgsPlugin *plugin); xmlNode* ags_drum_output_line_write(AgsFile *file, xmlNode *parent, AgsPlugin *plugin); void ags_drum_output_line_set_channel(AgsLine *line, AgsChannel *channel); void ags_drum_output_line_map_recall(AgsLine *line, guint output_pad_start); /** * SECTION:ags_drum_output_line * @short_description: drum sequencer output line * @title: AgsDrumOutputLine * @section_id: * @include: ags/X/machine/ags_drum_output_line.h * * The #AgsDrumOutputLine is a composite widget to act as drum sequencer output line. */ static gpointer ags_drum_output_line_parent_class = NULL; static AgsConnectableInterface *ags_drum_output_line_parent_connectable_interface; extern pthread_mutex_t ags_application_mutex; GType ags_drum_output_line_get_type() { static GType ags_type_drum_output_line = 0; if(!ags_type_drum_output_line){ static const GTypeInfo ags_drum_output_line_info = { sizeof(AgsDrumOutputLineClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_drum_output_line_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(AgsDrumOutputLine), 0, /* n_preallocs */ (GInstanceInitFunc) ags_drum_output_line_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_drum_output_line_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_plugin_interface_info = { (GInterfaceInitFunc) ags_drum_output_line_plugin_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_drum_output_line = g_type_register_static(AGS_TYPE_LINE, "AgsDrumOutputLine\0", &ags_drum_output_line_info, 0); g_type_add_interface_static(ags_type_drum_output_line, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_drum_output_line, AGS_TYPE_PLUGIN, &ags_plugin_interface_info); } return(ags_type_drum_output_line); } void ags_drum_output_line_class_init(AgsDrumOutputLineClass *drum_output_line) { AgsLineClass *line; ags_drum_output_line_parent_class = g_type_class_peek_parent(drum_output_line); /* AgsLineClass */ line = AGS_LINE_CLASS(drum_output_line); line->set_channel = ags_drum_output_line_set_channel; line->map_recall = ags_drum_output_line_map_recall; } void ags_drum_output_line_connectable_interface_init(AgsConnectableInterface *connectable) { ags_drum_output_line_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_drum_output_line_connect; connectable->disconnect = ags_drum_output_line_disconnect; } void ags_drum_output_line_plugin_interface_init(AgsPluginInterface *plugin) { plugin->get_name = ags_drum_output_line_get_name; plugin->set_name = ags_drum_output_line_set_name; plugin->get_xml_type = ags_drum_output_line_get_xml_type; plugin->set_xml_type = ags_drum_output_line_set_xml_type; plugin->read = ags_drum_output_line_read; plugin->write = ags_drum_output_line_write; } void ags_drum_output_line_init(AgsDrumOutputLine *drum_output_line) { g_signal_connect_after((GObject *) drum_output_line, "parent_set\0", G_CALLBACK(ags_drum_output_line_parent_set_callback), NULL); drum_output_line->xml_type = "ags-drum-output-line\0"; } void ags_drum_output_line_destroy(GtkObject *object) { } void ags_drum_output_line_connect(AgsConnectable *connectable) { AgsDrumOutputLine *drum_output_line; drum_output_line = AGS_DRUM_OUTPUT_LINE(connectable); if((AGS_LINE_CONNECTED & (AGS_LINE(drum_output_line)->flags)) != 0){ return; } ags_drum_output_line_parent_connectable_interface->connect(connectable); g_signal_connect_after((GObject *) AGS_LINE(drum_output_line)->channel->audio, "set-pads\0", G_CALLBACK(ags_drum_output_line_set_pads_callback), NULL); /* empty */ } void ags_drum_output_line_disconnect(AgsConnectable *connectable) { ags_drum_output_line_parent_connectable_interface->disconnect(connectable); /* empty */ } gchar* ags_drum_output_line_get_name(AgsPlugin *plugin) { return(AGS_DRUM_OUTPUT_LINE(plugin)->name); } void ags_drum_output_line_set_name(AgsPlugin *plugin, gchar *name) { AGS_DRUM_OUTPUT_LINE(plugin)->name = name; } gchar* ags_drum_output_line_get_xml_type(AgsPlugin *plugin) { return(AGS_DRUM_OUTPUT_LINE(plugin)->xml_type); } void ags_drum_output_line_set_xml_type(AgsPlugin *plugin, gchar *xml_type) { AGS_DRUM_OUTPUT_LINE(plugin)->xml_type = xml_type; } void ags_drum_output_line_set_channel(AgsLine *line, AgsChannel *channel) { AgsDrumOutputLine *drum_output_line; AgsDevout *devout; AgsAudio *audio; AgsMutexManager *mutex_manager; pthread_mutex_t *audio_mutex; pthread_mutex_t *channel_mutex; AGS_LINE_CLASS(ags_drum_output_line_parent_class)->set_channel(line, channel); drum_output_line = AGS_DRUM_OUTPUT_LINE(line); audio = channel->audio; /* lookup audio mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); /* get devout */ pthread_mutex_lock(audio_mutex); devout = audio->devout; pthread_mutex_unlock(audio_mutex); if(channel != NULL){ AgsRecycling *recycling; AgsAudioSignal *audio_signal; /* lookup channel mutex */ pthread_mutex_lock(&(ags_application_mutex)); channel_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); /* get recycling */ pthread_mutex_lock(channel_mutex); recycling = channel->first_recycling; pthread_mutex_unlock(channel_mutex); /* instantiate template audio signal */ audio_signal = ags_audio_signal_new((GObject *) devout, (GObject *) recycling, NULL); audio_signal->flags |= AGS_AUDIO_SIGNAL_TEMPLATE; ags_recycling_add_audio_signal(channel->first_recycling, audio_signal); } } void ags_drum_output_line_map_recall(AgsLine *line, guint output_pad_start) { AgsAudio *audio; AgsChannel *output, *input; AgsDelayAudio *recall_delay_audio; AgsCountBeatsAudioRun *recall_count_beats_audio_run; GList *list; if((AGS_LINE_MAPPED_RECALL & (line->flags)) != 0 || (AGS_LINE_PREMAPPED_RECALL & (line->flags)) != 0){ return; } output = line->channel; audio = AGS_AUDIO(output->audio); /* remap for input */ input = audio->input; while(input != NULL){ /* ags-buffer */ ags_recall_factory_create(audio, NULL, NULL, "ags-buffer\0", 0, audio->audio_channels, input->pad, input->pad + 1, (AGS_RECALL_FACTORY_INPUT | AGS_RECALL_FACTORY_RECALL | AGS_RECALL_FACTORY_ADD), 0); input = input->next_pad; } /* get some recalls */ list = ags_recall_find_type(audio->play, AGS_TYPE_DELAY_AUDIO); if(list != NULL){ recall_delay_audio = AGS_DELAY_AUDIO(list->data); }else{ recall_delay_audio = NULL; } list = ags_recall_find_type(audio->play, AGS_TYPE_COUNT_BEATS_AUDIO_RUN); if(list != NULL){ recall_count_beats_audio_run = AGS_COUNT_BEATS_AUDIO_RUN(list->data); }else{ recall_count_beats_audio_run = NULL; } /* ags-stream */ ags_recall_factory_create(audio, NULL, NULL, "ags-stream\0", output->audio_channel, output->audio_channel + 1, output->pad, output->pad + 1, (AGS_RECALL_FACTORY_OUTPUT | AGS_RECALL_FACTORY_PLAY | AGS_RECALL_FACTORY_RECALL | AGS_RECALL_FACTORY_ADD), 0); AGS_LINE_CLASS(ags_drum_output_line_parent_class)->map_recall(line, output_pad_start); } void ags_drum_output_line_read(AgsFile *file, xmlNode *node, AgsPlugin *plugin) { AgsDrumOutputLine *gobject; gobject = AGS_DRUM_OUTPUT_LINE(plugin); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", gobject, NULL)); } xmlNode* ags_drum_output_line_write(AgsFile *file, xmlNode *parent, AgsPlugin *plugin) { AgsDrumOutputLine *drum_output_line; xmlNode *node; gchar *id; drum_output_line = AGS_DRUM_OUTPUT_LINE(plugin); id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-drum-output-line\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", drum_output_line, NULL)); return(node); } /** * ags_drum_output_line_new: * @channel: the assigned channel * * Creates an #AgsDrumOutputLine * * Returns: a new #AgsDrumOutputLine * * Since: 0.4 */ AgsDrumOutputLine* ags_drum_output_line_new(AgsChannel *channel) { AgsDrumOutputLine *drum_output_line; drum_output_line = (AgsDrumOutputLine *) g_object_new(AGS_TYPE_DRUM_OUTPUT_LINE, "channel\0", channel, NULL); return(drum_output_line); } gsequencer-0.6.37/src/ags/X/machine/ags_mixer_input_line.h0000644000175000017500000000373012621463700020426 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_MIXER_INPUT_LINE_H__ #define __AGS_MIXER_INPUT_LINE_H__ #include #include #include #include #define AGS_TYPE_MIXER_INPUT_LINE (ags_mixer_input_line_get_type()) #define AGS_MIXER_INPUT_LINE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_MIXER_INPUT_LINE, AgsMixerInputLine)) #define AGS_MIXER_INPUT_LINE_CLASS(class) (G_TYPE_CHECK_CLASS_CAST(class, AGS_TYPE_MIXER_INPUT_LINE, AgsMixerInputLineClass)) #define AGS_IS_MIXER_INPUT_LINE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_MIXER_INPUT_LINE)) #define AGS_IS_MIXER_INPUT_LINE_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_MIXER_INPUT_LINE)) #define AGS_MIXER_INPUT_LINE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS(obj, AGS_TYPE_MIXER_INPUT_LINE, AgsMixerInputLineClass)) typedef struct _AgsMixerInputLine AgsMixerInputLine; typedef struct _AgsMixerInputLineClass AgsMixerInputLineClass; struct _AgsMixerInputLine { AgsLine line; }; struct _AgsMixerInputLineClass { AgsLineClass line; }; GType ags_mixer_input_line_get_type(); AgsMixerInputLine* ags_mixer_input_line_new(AgsChannel *channel); #endif /*__AGS_MIXER_INPUT_LINE_H__*/ gsequencer-0.6.37/src/ags/X/machine/ags_oscillator.c0000644000175000017500000002711512626272146017234 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include void ags_oscillator_class_init(AgsOscillatorClass *oscillator); void ags_oscillator_connectable_interface_init(AgsConnectableInterface *connectable); void ags_oscillator_init(AgsOscillator *oscillator); void ags_oscillator_connect(AgsConnectable *connectable); void ags_oscillator_disconnect(AgsConnectable *connectable); void ags_oscillator_destroy(GtkObject *object); void ags_oscillator_show(GtkWidget *widget); /** * SECTION:ags_oscillator * @short_description: oscillator * @title: AgsOscillator * @section_id: * @include: ags/X/machine/ags_oscillator.h * * The #AgsOscillator is a composite widget to act as oscillator. */ static AgsConnectableInterface *ags_oscillator_parent_connectable_interface; GType ags_oscillator_get_type(void) { static GType ags_type_oscillator = 0; if(!ags_type_oscillator){ static const GTypeInfo ags_oscillator_info = { sizeof(AgsOscillatorClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_oscillator_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(AgsOscillator), 0, /* n_preallocs */ (GInstanceInitFunc) ags_oscillator_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_oscillator_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_oscillator = g_type_register_static(GTK_TYPE_FRAME, "AgsOscillator\0", &ags_oscillator_info, 0); g_type_add_interface_static(ags_type_oscillator, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return(ags_type_oscillator); } void ags_oscillator_class_init(AgsOscillatorClass *oscillator) { } void ags_oscillator_connectable_interface_init(AgsConnectableInterface *connectable) { AgsConnectableInterface *ags_oscillator_connectable_parent_interface; ags_oscillator_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->is_ready = NULL; connectable->is_connected = NULL; connectable->connect = ags_oscillator_connect; connectable->disconnect = ags_oscillator_disconnect; } void ags_oscillator_init(AgsOscillator *oscillator) { GtkTable *table; GtkCellRenderer *cell_renderer; GtkListStore *model; GtkTreeIter iter; table = (GtkTable *) gtk_table_new(8, 2, FALSE); gtk_container_add((GtkContainer *) oscillator, (GtkWidget *) table); gtk_table_attach_defaults(table, (GtkWidget *) gtk_label_new("wave\0"), 0, 1, 0, 1); /* wave */ oscillator->wave = (GtkComboBox *) gtk_combo_box_text_new(); gtk_table_attach_defaults(table, (GtkWidget *) oscillator->wave, 1, 2, 0, 1); cell_renderer = gtk_cell_renderer_text_new(); gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(oscillator->wave), cell_renderer, FALSE); gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(oscillator->wave), cell_renderer, "text\0", 0, NULL); model = gtk_list_store_new(1, G_TYPE_STRING); gtk_list_store_append(model, &iter); gtk_list_store_set(model, &iter, 0, "sin\0", -1); /* gtk_list_store_append(model, &iter); gtk_list_store_set(model, &iter, 0, "cos\0", -1); */ gtk_list_store_append(model, &iter); gtk_list_store_set(model, &iter, 0, "sawtooth\0", -1); gtk_list_store_append(model, &iter); gtk_list_store_set(model, &iter, 0, "square\0", -1); gtk_list_store_append(model, &iter); gtk_list_store_set(model, &iter, 0, "triangle\0", -1); gtk_combo_box_set_model(oscillator->wave, GTK_TREE_MODEL(model)); gtk_combo_box_set_active(oscillator->wave, 0); /* other controls */ gtk_table_attach_defaults(table, (GtkWidget *) gtk_label_new("attack\0"), 2, 3, 0, 1); oscillator->attack = (GtkSpinButton *) gtk_spin_button_new_with_range(0.0, 100000.0, 1.0); oscillator->attack->adjustment->value = 0.0; gtk_table_attach_defaults(table, (GtkWidget *) oscillator->attack, 3, 4, 0, 1); gtk_table_attach_defaults(table, (GtkWidget *) gtk_label_new("length\0"), 4, 5, 0, 1); oscillator->frame_count = (GtkSpinButton *) gtk_spin_button_new_with_range(44100.0 / 27.5, 100000.0, 1.0); oscillator->frame_count->adjustment->value = 3200; gtk_table_attach_defaults(table, (GtkWidget *) oscillator->frame_count, 5, 6, 0, 1); gtk_table_attach_defaults(table, (GtkWidget *) gtk_label_new("phase\0"), 0, 1, 1, 2); oscillator->phase = (GtkSpinButton *) gtk_spin_button_new_with_range(0.0, 100000.0, 1.0); oscillator->phase->adjustment->value = 0.0; gtk_table_attach_defaults(table, (GtkWidget *) oscillator->phase, 1, 2, 1, 2); gtk_table_attach_defaults(table, (GtkWidget *) gtk_label_new("frequency\0"), 2, 3, 1, 2); oscillator->frequency = (GtkSpinButton *) gtk_spin_button_new_with_range(0.0, 100000.0, 1.0); gtk_spin_button_set_digits(oscillator->frequency, 3); oscillator->frequency->adjustment->value = 27.5; gtk_table_attach_defaults(table, (GtkWidget *) oscillator->frequency, 3, 4, 1, 2); gtk_table_attach_defaults(table, (GtkWidget *) gtk_label_new("volume\0"), 4, 5, 1, 2); oscillator->volume = (GtkSpinButton *) gtk_spin_button_new_with_range(0.0, 1.0, 0.1); gtk_spin_button_set_digits(oscillator->volume, 3); oscillator->volume->adjustment->value = 0.2; gtk_table_attach_defaults(table, (GtkWidget *) oscillator->volume, 5, 6, 1, 2); } void ags_oscillator_connect(AgsConnectable *connectable) { AgsOscillator *oscillator; oscillator = AGS_OSCILLATOR(connectable); oscillator->wave_handler = g_signal_connect(G_OBJECT(oscillator->wave), "changed\0", G_CALLBACK(ags_oscillator_wave_callback), oscillator); oscillator->attack_handler = g_signal_connect(G_OBJECT(oscillator->attack), "value-changed\0", G_CALLBACK(ags_oscillator_attack_callback), oscillator); oscillator->frame_count_handler = g_signal_connect(G_OBJECT(oscillator->frame_count), "value-changed\0", G_CALLBACK(ags_oscillator_frame_count_callback), oscillator); oscillator->frequency_handler = g_signal_connect(G_OBJECT(oscillator->frequency), "value-changed\0", G_CALLBACK(ags_oscillator_frequency_callback), oscillator); oscillator->phase_handler = g_signal_connect(G_OBJECT(oscillator->phase), "value-changed\0", G_CALLBACK(ags_oscillator_phase_callback), oscillator); oscillator->volume_handler = g_signal_connect(G_OBJECT(oscillator->volume), "value-changed\0", G_CALLBACK(ags_oscillator_volume_callback), oscillator); } void ags_oscillator_disconnect(AgsConnectable *connectable) { AgsOscillator *oscillator; oscillator = AGS_OSCILLATOR(connectable); g_signal_handler_disconnect(G_OBJECT(oscillator->wave), oscillator->wave_handler); g_signal_handler_disconnect(G_OBJECT(oscillator->attack), oscillator->attack_handler); g_signal_handler_disconnect(G_OBJECT(oscillator->frame_count), oscillator->frame_count_handler); g_signal_handler_disconnect(G_OBJECT(oscillator->frequency), oscillator->frequency_handler); g_signal_handler_disconnect(G_OBJECT(oscillator->phase), oscillator->phase_handler); g_signal_handler_disconnect(G_OBJECT(oscillator->volume), oscillator->volume_handler); } void ags_oscillator_destroy(GtkObject *object) { } void ags_oscillator_show(GtkWidget *widget) { } void ags_file_read_oscillator(AgsFile *file, xmlNode *node, AgsOscillator **oscillator) { AgsOscillator *gobject; xmlChar *wave; if(*oscillator == NULL){ gobject = (AgsOscillator *) g_object_new(AGS_TYPE_OSCILLATOR, NULL); *oscillator = gobject; }else{ gobject = *oscillator; } ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", gobject, NULL)); wave = (xmlChar *) xmlGetProp(node, "wave\0"); if(!xmlStrncmp(wave, "sin\0", 4)){ gtk_combo_box_set_active(gobject->wave, 0); }else if(!xmlStrncmp(wave, "sawtooth\0", 9)){ gtk_combo_box_set_active(gobject->wave, 1); }else if(!xmlStrncmp(wave, "square\0", 7)){ gtk_combo_box_set_active(gobject->wave, 2); }else if(!xmlStrncmp(wave, "triangle\0", 9)){ gtk_combo_box_set_active(gobject->wave, 3); } gtk_spin_button_set_value(gobject->attack, g_ascii_strtod(xmlGetProp(node, "attack\0"), NULL)); gtk_spin_button_set_value(gobject->frame_count, g_ascii_strtod(xmlGetProp(node, "frame-count\0"), NULL)); gtk_spin_button_set_value(gobject->frequency, g_ascii_strtod(xmlGetProp(node, "frequency\0"), NULL)); gtk_spin_button_set_value(gobject->phase, g_ascii_strtod(xmlGetProp(node, "phase\0"), NULL)); gtk_spin_button_set_value(gobject->volume, g_ascii_strtod(xmlGetProp(node, "volume\0"), NULL)); } xmlNode* ags_file_write_oscillator(AgsFile *file, xmlNode *parent, AgsOscillator *oscillator) { xmlNode *node; gchar *id; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-oscillator\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", oscillator, NULL)); xmlNewProp(node, "wave\0", gtk_combo_box_text_get_active_text((GtkComboBoxText *) oscillator->wave)); xmlNewProp(node, "attack\0", g_strdup_printf("%f\0", oscillator->attack->adjustment->value)); xmlNewProp(node, "frame-count\0", g_strdup_printf("%f\0", oscillator->frame_count->adjustment->value)); xmlNewProp(node, "frequency\0", g_strdup_printf("%f\0", oscillator->frequency->adjustment->value)); xmlNewProp(node, "phase\0", g_strdup_printf("%f\0", oscillator->phase->adjustment->value)); xmlNewProp(node, "volume\0", g_strdup_printf("%f\0", oscillator->volume->adjustment->value)); xmlAddChild(parent, node); } /** * ags_oscillator_new: * * Creates an #AgsOscillator * * Returns: a new #AgsOscillator * * Since: 0.3 */ AgsOscillator* ags_oscillator_new() { AgsOscillator *oscillator; oscillator = (AgsOscillator *) g_object_new(AGS_TYPE_OSCILLATOR, NULL); return(oscillator); } gsequencer-0.6.37/src/ags/X/machine/ags_synth_callbacks.c0000644000175000017500000000340112626272146020215 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include void ags_synth_parent_set_callback(GtkWidget *widget, GtkObject *old_parent, AgsSynth *synth) { AgsWindow *window; if(old_parent != NULL) return; window = (AgsWindow *) gtk_widget_get_toplevel(widget); AGS_MACHINE(synth)->name = g_strdup_printf("Default %d\0", ags_window_find_machine_counter(window, AGS_TYPE_SYNTH)->counter); ags_window_increment_machine_counter(window, AGS_TYPE_SYNTH); } void ags_synth_lower_callback(GtkSpinButton *spin_button, AgsSynth *synth) { } void ags_synth_auto_update_callback(GtkToggleButton *toggle, AgsSynth *synth) { if(gtk_toggle_button_get_active(toggle)){ synth->flags |= AGS_SYNTH_AUTO_UPDATE; }else{ synth->flags &= (~AGS_SYNTH_AUTO_UPDATE); } } void ags_synth_update_callback(GtkButton *button, AgsSynth *synth) { ags_synth_update(synth); } gsequencer-0.6.37/src/ags/X/machine/ags_drum_output_line.h0000644000175000017500000000377212621463700020460 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_DRUM_OUTPUT_LINE_H__ #define __AGS_DRUM_OUTPUT_LINE_H__ #include #include #include #include #define AGS_TYPE_DRUM_OUTPUT_LINE (ags_drum_output_line_get_type()) #define AGS_DRUM_OUTPUT_LINE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_DRUM_OUTPUT_LINE, AgsDrumOutputLine)) #define AGS_DRUM_OUTPUT_LINE_CLASS(class) (G_TYPE_CHECK_CLASS_CAST(class, AGS_TYPE_DRUM_OUTPUT_LINE, AgsDrumOutputLineClass)) #define AGS_IS_DRUM_OUTPUT_LINE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_DRUM_OUTPUT_LINE)) #define AGS_IS_DRUM_OUTPUT_LINE_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_DRUM_OUTPUT_LINE)) #define AGS_DRUM_OUTPUT_LINE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS(obj, AGS_TYPE_DRUM_OUTPUT_LINE, AgsDrumOutputLineClass)) typedef struct _AgsDrumOutputLine AgsDrumOutputLine; typedef struct _AgsDrumOutputLineClass AgsDrumOutputLineClass; struct _AgsDrumOutputLine { AgsLine line; gchar *name; gchar *xml_type; }; struct _AgsDrumOutputLineClass { AgsLineClass line; }; GType ags_drum_output_line_get_type(); AgsDrumOutputLine* ags_drum_output_line_new(AgsChannel *channel); #endif /*__AGS_DRUM_OUTPUT_LINE_H__*/ gsequencer-0.6.37/src/ags/X/ags_line_member_editor.c0000644000175000017500000002123512626272146017276 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include void ags_line_member_editor_class_init(AgsLineMemberEditorClass *line_member_editor); void ags_line_member_editor_connectable_interface_init(AgsConnectableInterface *connectable); void ags_line_member_editor_applicable_interface_init(AgsApplicableInterface *applicable); void ags_line_member_editor_init(AgsLineMemberEditor *line_member_editor); void ags_line_member_editor_connect(AgsConnectable *connectable); void ags_line_member_editor_disconnect(AgsConnectable *connectable); void ags_line_member_editor_set_update(AgsApplicable *applicable, gboolean update); void ags_line_member_editor_apply(AgsApplicable *applicable); void ags_line_member_editor_reset(AgsApplicable *applicable); void ags_line_member_editor_finalize(GObject *gobject); /** * SECTION:ags_line_member_editor * @short_description: Edit line member's aspects. * @title: AgsLineMemberEditor * @section_id: * @include: ags/X/ags_line_member_editor.h * * #AgsLineMemberEditor is a composite widget to modify line member. A line member * editor should be packed by a #AgsLineEditor. You may add/remove plugins with this * editor. */ extern pthread_mutex_t ags_application_mutex; GType ags_line_member_editor_get_type(void) { static GType ags_type_line_member_editor = 0; if(!ags_type_line_member_editor){ static const GTypeInfo ags_line_member_editor_info = { sizeof (AgsLineMemberEditorClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_line_member_editor_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsLineMemberEditor), 0, /* n_preallocs */ (GInstanceInitFunc) ags_line_member_editor_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_line_member_editor_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_applicable_interface_info = { (GInterfaceInitFunc) ags_line_member_editor_applicable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_line_member_editor = g_type_register_static(GTK_TYPE_VBOX, "AgsLineMemberEditor\0", &ags_line_member_editor_info, 0); g_type_add_interface_static(ags_type_line_member_editor, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_line_member_editor, AGS_TYPE_APPLICABLE, &ags_applicable_interface_info); } return(ags_type_line_member_editor); } void ags_line_member_editor_class_init(AgsLineMemberEditorClass *line_member_editor) { /* empty */ } void ags_line_member_editor_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->connect = ags_line_member_editor_connect; connectable->disconnect = ags_line_member_editor_disconnect; } void ags_line_member_editor_applicable_interface_init(AgsApplicableInterface *applicable) { applicable->set_update = ags_line_member_editor_set_update; applicable->apply = ags_line_member_editor_apply; applicable->reset = ags_line_member_editor_reset; } void ags_line_member_editor_init(AgsLineMemberEditor *line_member_editor) { GtkHBox *hbox; line_member_editor->line_member = (GtkVBox *) gtk_vbox_new(FALSE, 2); gtk_box_pack_start((GtkBox *) line_member_editor, (GtkWidget *) line_member_editor->line_member, FALSE, FALSE, 0); hbox = (GtkHBox *) gtk_hbox_new(FALSE, 2); gtk_box_pack_start((GtkBox *) line_member_editor, (GtkWidget *) hbox, FALSE, FALSE, 0); line_member_editor->add = (GtkButton *) gtk_button_new_from_stock(GTK_STOCK_ADD); gtk_box_pack_start((GtkBox *) hbox, (GtkWidget *) line_member_editor->add, FALSE, FALSE, 0); line_member_editor->remove = (GtkButton *) gtk_button_new_from_stock(GTK_STOCK_REMOVE); gtk_box_pack_start((GtkBox *) hbox, (GtkWidget *) line_member_editor->remove, FALSE, FALSE, 0); line_member_editor->ladspa_browser = (GtkWidget *) ags_ladspa_browser_new(line_member_editor); } void ags_line_member_editor_connect(AgsConnectable *connectable) { AgsLineMemberEditor *line_member_editor; line_member_editor = AGS_LINE_MEMBER_EDITOR(connectable); g_signal_connect(G_OBJECT(line_member_editor->add), "clicked\0", G_CALLBACK(ags_line_member_editor_add_callback), line_member_editor); g_signal_connect(G_OBJECT(line_member_editor->remove), "clicked\0", G_CALLBACK(ags_line_member_editor_remove_callback), line_member_editor); ags_connectable_connect(AGS_CONNECTABLE(line_member_editor->ladspa_browser)); g_signal_connect(G_OBJECT(line_member_editor->ladspa_browser), "response\0", G_CALLBACK(ags_line_member_editor_ladspa_browser_response_callback), line_member_editor); } void ags_line_member_editor_disconnect(AgsConnectable *connectable) { /* empty */ } void ags_line_member_editor_set_update(AgsApplicable *applicable, gboolean update) { AgsLineMemberEditor *line_member_editor; line_member_editor = AGS_LINE_MEMBER_EDITOR(applicable); /* empty */ } void ags_line_member_editor_apply(AgsApplicable *applicable) { AgsLineMemberEditor *line_member_editor; line_member_editor = AGS_LINE_MEMBER_EDITOR(applicable); /* empty */ } void ags_line_member_editor_reset(AgsApplicable *applicable) { AgsMachineEditor *machine_editor; AgsLineEditor *line_editor; AgsLineMemberEditor *line_member_editor; GtkHBox *hbox; GtkCheckButton *check_button; GtkLabel *label; AgsMutexManager *mutex_manager; GList *recall_ladspa; gchar *filename, *effect; pthread_mutex_t *channel_mutex; line_member_editor = AGS_LINE_MEMBER_EDITOR(applicable); machine_editor = (AgsMachineEditor *) gtk_widget_get_ancestor((GtkWidget *) line_member_editor, AGS_TYPE_MACHINE_EDITOR); line_editor = (AgsLineEditor *) gtk_widget_get_ancestor((GtkWidget *) line_member_editor, AGS_TYPE_LINE_EDITOR); /* lookup channel mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); channel_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) line_editor->channel); pthread_mutex_unlock(&(ags_application_mutex)); /* reset */ pthread_mutex_lock(channel_mutex); recall_ladspa = line_editor->channel->recall; while((recall_ladspa = ags_recall_template_find_type(recall_ladspa, AGS_TYPE_RECALL_LADSPA)) != NULL){ g_object_get(G_OBJECT(recall_ladspa->data), "filename\0", &filename, "effect\0", &effect, NULL); hbox = (GtkHBox *) gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(line_member_editor->line_member), GTK_WIDGET(hbox), FALSE, FALSE, 0); check_button = (GtkCheckButton *) gtk_check_button_new(); gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(check_button), FALSE, FALSE, 0); label = (GtkLabel *) gtk_label_new(g_strdup_printf("%s - %s\0", filename, effect)); gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(label), FALSE, FALSE, 0); gtk_widget_show_all((GtkWidget *) hbox); recall_ladspa = recall_ladspa->next; } pthread_mutex_unlock(channel_mutex); } /** * ags_line_member_editor_new: * * Creates an #AgsLineMemberEditor * * Returns: a new #AgsLineMemberEditor * * Since: 0.4 */ AgsLineMemberEditor* ags_line_member_editor_new() { AgsLineMemberEditor *line_member_editor; line_member_editor = (AgsLineMemberEditor *) g_object_new(AGS_TYPE_LINE_MEMBER_EDITOR, NULL); return(line_member_editor); } gsequencer-0.6.37/src/ags/X/ags_property_collection_editor_callbacks.h0000644000175000017500000000244112621463700023112 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_PROPERTY_COLLECTION_EDITOR_CALLBACKS__ #define __AGS_PROPERTY_COLLECTION_EDITOR_CALLBACKS__ #include #include #include #include void ags_property_collection_editor_add_collection_callback(GtkButton *button, AgsPropertyCollectionEditor *property_collection_editor); void ags_property_collection_editor_remove_collection_callback(GtkButton *button, GtkTable *table); #endif /*__AGS_PROPERTY_COLLECTION_EDITOR_CALLBACKS__*/ gsequencer-0.6.37/src/ags/X/ags_performance_preferences.c0000644000175000017500000002034212626272146020332 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include void ags_performance_preferences_class_init(AgsPerformancePreferencesClass *performance_preferences); void ags_performance_preferences_connectable_interface_init(AgsConnectableInterface *connectable); void ags_performance_preferences_applicable_interface_init(AgsApplicableInterface *applicable); void ags_performance_preferences_init(AgsPerformancePreferences *performance_preferences); void ags_performance_preferences_connect(AgsConnectable *connectable); void ags_performance_preferences_disconnect(AgsConnectable *connectable); void ags_performance_preferences_set_update(AgsApplicable *applicable, gboolean update); void ags_performance_preferences_apply(AgsApplicable *applicable); void ags_performance_preferences_reset(AgsApplicable *applicable); static void ags_performance_preferences_finalize(GObject *gobject); void ags_performance_preferences_show(GtkWidget *widget); /** * SECTION:ags_performance_preferences * @short_description: A composite widget to do performance related preferences * @title: AgsPerformancePreferences * @section_id: * @include: ags/X/ags_performance_preferences.h * * #AgsPerformancePreferences enables you to make performance related preferences. */ static gpointer ags_performance_preferences_parent_class = NULL; GType ags_performance_preferences_get_type(void) { static GType ags_type_performance_preferences = 0; if(!ags_type_performance_preferences){ static const GTypeInfo ags_performance_preferences_info = { sizeof (AgsPerformancePreferencesClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_performance_preferences_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsPerformancePreferences), 0, /* n_preallocs */ (GInstanceInitFunc) ags_performance_preferences_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_performance_preferences_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_applicable_interface_info = { (GInterfaceInitFunc) ags_performance_preferences_applicable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_performance_preferences = g_type_register_static(GTK_TYPE_VBOX, "AgsPerformancePreferences\0", &ags_performance_preferences_info, 0); g_type_add_interface_static(ags_type_performance_preferences, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_performance_preferences, AGS_TYPE_APPLICABLE, &ags_applicable_interface_info); } return(ags_type_performance_preferences); } void ags_performance_preferences_class_init(AgsPerformancePreferencesClass *performance_preferences) { GObjectClass *gobject; GtkWidgetClass *widget; ags_performance_preferences_parent_class = g_type_class_peek_parent(performance_preferences); /* GtkObjectClass */ gobject = (GObjectClass *) performance_preferences; gobject->finalize = ags_performance_preferences_finalize; /* GtkWidgetClass */ widget = (GtkWidgetClass *) performance_preferences; widget->show = ags_performance_preferences_show; } void ags_performance_preferences_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->is_ready = NULL; connectable->is_connected = NULL; connectable->connect = ags_performance_preferences_connect; connectable->disconnect = ags_performance_preferences_disconnect; } void ags_performance_preferences_applicable_interface_init(AgsApplicableInterface *applicable) { applicable->set_update = ags_performance_preferences_set_update; applicable->apply = ags_performance_preferences_apply; applicable->reset = ags_performance_preferences_reset; } void ags_performance_preferences_init(AgsPerformancePreferences *performance_preferences) { performance_preferences->stream_auto_sense = (GtkCheckButton *) gtk_check_button_new_with_label("Auto-sense on stream\0"); gtk_box_pack_start(GTK_BOX(performance_preferences), GTK_WIDGET(performance_preferences->stream_auto_sense), FALSE, FALSE, 0); performance_preferences->super_threaded = (GtkCheckButton *) gtk_check_button_new_with_label("Super threaded\0"); gtk_box_pack_start(GTK_BOX(performance_preferences), GTK_WIDGET(performance_preferences->super_threaded), FALSE, FALSE, 0); gtk_widget_set_sensitive((GtkWidget *) performance_preferences->super_threaded, FALSE); } void ags_performance_preferences_connect(AgsConnectable *connectable) { AgsPerformancePreferences *performance_preferences; performance_preferences = AGS_PERFORMANCE_PREFERENCES(connectable); } void ags_performance_preferences_disconnect(AgsConnectable *connectable) { /* empty */ } void ags_performance_preferences_set_update(AgsApplicable *applicable, gboolean update) { //TODO:JK: implement me } void ags_performance_preferences_apply(AgsApplicable *applicable) { AgsPreferences *preferences; AgsPerformancePreferences *performance_preferences; AgsConfig *config; gchar *str; performance_preferences = AGS_PERFORMANCE_PREFERENCES(applicable); preferences = (AgsPreferences *) gtk_widget_get_ancestor(GTK_WIDGET(performance_preferences), AGS_TYPE_PREFERENCES); config = AGS_CONFIG(AGS_MAIN(AGS_WINDOW(preferences->window)->ags_main)->config); /* auto-sense */ str = g_strdup(((gtk_toggle_button_get_active((GtkToggleButton *) performance_preferences->stream_auto_sense)) ? "true\0": "false\0")); ags_config_set(config, AGS_CONFIG_RECALL, "auto-sense\0", str); g_free(str); //TODO:JK: implement me } void ags_performance_preferences_reset(AgsApplicable *applicable) { AgsWindow *window; AgsPreferences *preferences; AgsPerformancePreferences *performance_preferences; AgsConfig *config; gchar *str; performance_preferences = AGS_PERFORMANCE_PREFERENCES(applicable); /* */ preferences = (AgsPreferences *) gtk_widget_get_ancestor(GTK_WIDGET(performance_preferences), AGS_TYPE_PREFERENCES); window = AGS_WINDOW(preferences->window); config = AGS_CONFIG(AGS_MAIN(window->ags_main)->config); str = ags_config_get(config, AGS_CONFIG_RECALL, "auto-sense\0"); gtk_toggle_button_set_active((GtkToggleButton *) performance_preferences->stream_auto_sense, !g_strcmp0("true\0", str)); //TODO:JK: implement me } static void ags_performance_preferences_finalize(GObject *gobject) { } void ags_performance_preferences_show(GtkWidget *widget) { AgsPerformancePreferences *performance_preferences; pthread_t thread; performance_preferences = AGS_PERFORMANCE_PREFERENCES(widget); GTK_WIDGET_CLASS(ags_performance_preferences_parent_class)->show(widget); } /** * ags_performance_preferences_new: * * Creates an #AgsPerformancePreferences * * Returns: a new #AgsPerformancePreferences * * Since: 0.4 */ AgsPerformancePreferences* ags_performance_preferences_new() { AgsPerformancePreferences *performance_preferences; performance_preferences = (AgsPerformancePreferences *) g_object_new(AGS_TYPE_PERFORMANCE_PREFERENCES, NULL); return(performance_preferences); } gsequencer-0.6.37/src/ags/X/ags_editor_callbacks.h0000644000175000017500000000251012626272146016737 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_EDITOR_CALLBACKS_H__ #define __AGS_EDITOR_CALLBACKS_H__ #include #include #include #include #include #include void ags_editor_parent_set_callback(GtkWidget *widget, GtkObject *old_parent, AgsEditor *editor); void ags_editor_tic_callback(AgsDevout *devout, AgsEditor *editor); void ags_editor_machine_changed_callback(AgsMachineSelector *machine_selector, AgsMachine *machine, AgsEditor *editor); #endif /*__AGS_EDITOR_CALLBACKS_H__*/ gsequencer-0.6.37/src/ags/X/ags_server_preferences_callbacks.c0000644000175000017500000000146712621463700021336 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include gsequencer-0.6.37/src/ags/X/ags_line_editor_callbacks.c0000644000175000017500000000271012621463700017734 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include int ags_line_editor_parent_set_callback(GtkWidget *widget, GtkObject *old_parent, AgsLineEditor *line_editor) { if(old_parent != NULL) return(0); gtk_box_pack_start((GtkBox *) line_editor, (GtkWidget *) line_editor->link_editor, FALSE, FALSE, 0); return(0); } int ags_line_editor_destroy_callback(GtkObject *object, AgsLineEditor *line_editor) { ags_line_editor_destroy(object); return(0); } int ags_line_editor_show_callback(GtkWidget *widget, AgsLineEditor *line_editor) { ags_line_editor_show(widget); return(0); } gsequencer-0.6.37/src/ags/X/ags_line_editor.h0000644000175000017500000000441412621463700015745 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_LINE_EDITOR_H__ #define __AGS_LINE_EDITOR_H__ #include #include #include #include #include #include #define AGS_TYPE_LINE_EDITOR (ags_line_editor_get_type()) #define AGS_LINE_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_LINE_EDITOR, AgsLineEditor)) #define AGS_LINE_EDITOR_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_LINE_EDITOR, AgsLineEditorClass)) #define AGS_IS_LINE_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_LINE_EDITOR)) #define AGS_IS_LINE_EDITOR_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_LINE_EDITOR)) #define AGS_LINE_EDITOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_LINE_EDITOR, AgsLineEditorClass)) #define AGS_LINE_EDITOR_DEFAULT_VERSION "0.4.2\0" #define AGS_LINE_EDITOR_DEFAULT_BUILD_ID "CEST 02-10-2014 19:36\0" typedef struct _AgsLineEditor AgsLineEditor; typedef struct _AgsLineEditorClass AgsLineEditorClass; struct _AgsLineEditor { GtkVBox vbox; gchar *version; gchar *build_id; AgsChannel *channel; AgsLinkEditor *link_editor; AgsLineMemberEditor *member_editor; }; struct _AgsLineEditorClass { GtkVBoxClass vbox; }; GType ags_line_editor_get_type(void); void ags_line_editor_set_channel(AgsLineEditor *line_editor, AgsChannel *channel); AgsLineEditor* ags_line_editor_new(AgsChannel *channel); #endif /*__AGS_LINE_EDITOR_H__*/ gsequencer-0.6.37/src/ags/X/ags_line_member_editor_callbacks.c0000644000175000017500000004542212626302155021273 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include extern pthread_mutex_t ags_application_mutex; void ags_line_member_editor_add_callback(GtkWidget *button, AgsLineMemberEditor *line_member_editor) { gtk_widget_show_all((GtkWidget *) line_member_editor->ladspa_browser); } void ags_line_member_editor_ladspa_browser_response_callback(GtkDialog *dialog, gint response, AgsLineMemberEditor *line_member_editor) { switch(response){ case GTK_RESPONSE_ACCEPT: { AgsWindow *window; AgsLine *line; AgsLineMember *line_member; AgsMachineEditor *machine_editor; AgsLineEditor *line_editor; GtkHBox *hbox; GtkCheckButton *check_button; GtkLabel *label; GtkTable *table; AgsAddRecallContainer *add_recall_container; AgsAddRecall *add_recall; AgsAddLineMember *add_line_member; AgsRecallContainer *recall_container; AgsRecallChannelRunDummy *recall_channel_run_dummy; AgsRecallLadspa *recall_ladspa; GtkAdjustment *adjustment; AgsLadspaPlugin *ladspa_plugin; AgsMutexManager *mutex_manager; AgsAudioLoop *audio_loop; AgsTaskThread *task_thread; AgsMain *ags_main; GList *plugin; GList *task; GList *port; GList *pad, *pad_start; GList *list, *list_start; gchar *filename, *effect; gdouble step; long index; guint x, y; void *plugin_so; LADSPA_Descriptor_Function ladspa_descriptor; LADSPA_Descriptor *plugin_descriptor; LADSPA_PortDescriptor *port_descriptor; LADSPA_Data lower_bound, upper_bound; long i; pthread_mutex_t *audio_loop_mutex; machine_editor = (AgsMachineEditor *) gtk_widget_get_ancestor((GtkWidget *) line_member_editor, AGS_TYPE_MACHINE_EDITOR); line_editor = (AgsLineEditor *) gtk_widget_get_ancestor((GtkWidget *) line_member_editor, AGS_TYPE_LINE_EDITOR); line = NULL; if(AGS_IS_OUTPUT(line_editor->channel)){ pad_start = pad = gtk_container_get_children(machine_editor->machine->output); }else{ pad_start = pad = gtk_container_get_children(machine_editor->machine->input); } pad = g_list_nth(pad, line_editor->channel->pad); if(pad != NULL){ list_start = list = gtk_container_get_children((GtkContainer *) AGS_PAD(pad->data)->expander_set); while(list != NULL){ if(AGS_LINE(list->data)->channel == line_editor->channel){ break; } list = list->next; } if(list != NULL){ line = AGS_LINE(list->data); g_list_free(list_start); } } g_list_free(pad_start); if(line == NULL){ return; } /* get window and ags_main */ window = (AgsWindow *) gtk_widget_get_toplevel(machine_editor->machine); ags_main = window->ags_main; /* get audio loop */ pthread_mutex_lock(&(ags_application_mutex)); audio_loop = ags_main->main_loop; pthread_mutex_unlock(&(ags_application_mutex)); /* get task thread */ task_thread = (AgsTaskThread *) ags_thread_find_type(audio_loop, AGS_TYPE_TASK_THREAD); /* retrieve plugin */ filename = ags_ladspa_browser_get_plugin_filename(line_member_editor->ladspa_browser); effect = ags_ladspa_browser_get_plugin_effect(line_member_editor->ladspa_browser); if(ags_recall_ladpsa_find(line->channel->recall, filename, effect) != NULL){ /* return if duplicated */ return; } plugin = gtk_container_get_children(GTK_CONTAINER(line_member_editor->ladspa_browser->plugin)); index = gtk_combo_box_get_active(GTK_COMBO_BOX(plugin->next->next->next->data)); g_list_free(plugin); /* load plugin */ ags_ladspa_manager_load_file(filename); ladspa_plugin = ags_ladspa_manager_find_ladspa_plugin(filename); plugin_so = ladspa_plugin->plugin_so; /* create entry */ hbox = (GtkHBox *) gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(line_member_editor->line_member), GTK_WIDGET(hbox), FALSE, FALSE, 0); check_button = (GtkCheckButton *) gtk_check_button_new(); gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(check_button), FALSE, FALSE, 0); label = (GtkLabel *) gtk_label_new(g_strdup_printf("%s - %s\0", filename, effect)); gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(label), FALSE, FALSE, 0); gtk_widget_show_all((GtkWidget *) hbox); if(line != NULL){ x = 0; y = 0; i = 0; list = line->expander->children; while(list != NULL){ if(y <= AGS_EXPANDER_CHILD(list->data)->y){ y = AGS_EXPANDER_CHILD(list->data)->y + 1; } list = list->next; } } /* tasks */ task = NULL; /* ladspa play */ recall_container = ags_recall_container_new(); add_recall_container = ags_add_recall_container_new(line_editor->channel->audio, recall_container); task = g_list_prepend(task, add_recall_container); recall_ladspa = ags_recall_ladspa_new(line_editor->channel, filename, effect, index); g_object_set(G_OBJECT(recall_ladspa), "devout\0", AGS_AUDIO(line_editor->channel->audio)->devout, "recall-container\0", recall_container, NULL); AGS_RECALL(recall_ladspa)->flags |= AGS_RECALL_TEMPLATE; ags_recall_ladspa_load(recall_ladspa); ags_recall_ladspa_load_ports(recall_ladspa); add_recall = ags_add_recall_new((GObject *) line_editor->channel, (AgsRecall *) recall_ladspa, TRUE); task = g_list_prepend(task, add_recall); /* dummy */ recall_channel_run_dummy = ags_recall_channel_run_dummy_new(line_editor->channel, AGS_TYPE_RECALL_RECYCLING_DUMMY, AGS_TYPE_RECALL_LADSPA_RUN); AGS_RECALL(recall_channel_run_dummy)->flags |= AGS_RECALL_TEMPLATE; g_object_set(G_OBJECT(recall_channel_run_dummy), "devout\0", AGS_AUDIO(line_editor->channel->audio)->devout, "recall-container\0", recall_container, "recall-channel\0", recall_ladspa, NULL); add_recall = ags_add_recall_new((GObject *) line_editor->channel, (AgsRecall *) recall_channel_run_dummy, TRUE); task = g_list_prepend(task, add_recall); /* ladspa recall */ recall_container = ags_recall_container_new(); add_recall_container = ags_add_recall_container_new(line_editor->channel->audio, recall_container); task = g_list_prepend(task, add_recall_container); recall_ladspa = ags_recall_ladspa_new(line_editor->channel, filename, effect, index); g_object_set(G_OBJECT(recall_ladspa), "devout\0", AGS_AUDIO(line_editor->channel->audio)->devout, "recall-container\0", recall_container, NULL); AGS_RECALL(recall_ladspa)->flags |= AGS_RECALL_TEMPLATE; ags_recall_ladspa_load(recall_ladspa); port = ags_recall_ladspa_load_ports(recall_ladspa); add_recall = ags_add_recall_new((GObject *) line_editor->channel, (AgsRecall *) recall_ladspa, FALSE); task = g_list_prepend(task, add_recall); /* dummy */ recall_channel_run_dummy = ags_recall_channel_run_dummy_new(line_editor->channel, AGS_TYPE_RECALL_RECYCLING_DUMMY, AGS_TYPE_RECALL_LADSPA_RUN); AGS_RECALL(recall_channel_run_dummy)->flags |= AGS_RECALL_TEMPLATE; g_object_set(G_OBJECT(recall_channel_run_dummy), "devout\0", AGS_AUDIO(line_editor->channel->audio)->devout, "recall-container\0", recall_container, "recall-channel\0", recall_ladspa, NULL); add_recall = ags_add_recall_new(line_editor->channel, recall_channel_run_dummy, FALSE); task = g_list_prepend(task, add_recall); /* add controls of ports and apply range */ list_start = gtk_container_get_children(GTK_CONTAINER(line_member_editor->ladspa_browser->description)); table = g_list_nth(list_start, 4)->data; g_list_free(list_start); list_start = list = g_list_reverse(gtk_container_get_children(table)); if(line != NULL){ if(index != -1 && plugin_so){ ladspa_descriptor = (LADSPA_Descriptor_Function) dlsym(plugin_so, "ladspa_descriptor\0"); if(dlerror() == NULL && ladspa_descriptor){ plugin_descriptor = ladspa_descriptor(index); port_descriptor = plugin_descriptor->PortDescriptors; while(port != NULL){ if((LADSPA_IS_PORT_CONTROL(port_descriptor[i]) && (LADSPA_IS_PORT_INPUT(port_descriptor[i]) || LADSPA_IS_PORT_OUTPUT(port_descriptor[i])))){ GtkWidget *child_widget; GType child_type; GtkAdjustment *adjustment; gchar *str; if(x == 2){ x = 0; y++; } list = list->next; str = gtk_combo_box_text_get_active_text(list->data); if(!g_ascii_strcasecmp(str, "toggle button\0")){ child_type = GTK_TYPE_TOGGLE_BUTTON; }else if(!g_ascii_strcasecmp(str, "check button\0")){ child_type = GTK_TYPE_CHECK_BUTTON; }else if(!g_ascii_strcasecmp(str, "spin button\0")){ child_type = GTK_TYPE_SPIN_BUTTON; }else if(!g_ascii_strcasecmp(str, "dial\0")){ child_type = AGS_TYPE_DIAL; }else if(!g_ascii_strcasecmp(str, "vertical scale\0")){ child_type = GTK_TYPE_VSCALE; } line_member = (AgsLineMember *) g_object_new(AGS_TYPE_LINE_MEMBER, "widget-type\0", child_type, "widget-label\0", plugin_descriptor->PortNames[i], "plugin-name\0", AGS_PORT(port->data)->plugin_name, "specifier\0", AGS_PORT(port->data)->specifier, "control-port\0", AGS_PORT(port->data)->control_port, NULL); child_widget = ags_line_member_get_widget(line_member); if(LADSPA_IS_HINT_TOGGLED(plugin_descriptor->PortRangeHints[i].HintDescriptor) || plugin_descriptor->PortRangeHints[i].LowerBound == plugin_descriptor->PortRangeHints[i].UpperBound){ //nothing }else{ lower_bound = plugin_descriptor->PortRangeHints[i].LowerBound; upper_bound = plugin_descriptor->PortRangeHints[i].UpperBound; adjustment = (GtkAdjustment *) gtk_adjustment_new(0.0, 0.0, 1.0, 0.1, 0.1, 0.0); if(GTK_IS_SPIN_BUTTON(child_widget)){ g_object_set(child_widget, "digits\0", 4, "adjustment", adjustment, NULL); step = 0.0001; }else if(AGS_IS_DIAL(child_widget)){ AgsDial *dial; dial = (AgsDial *) child_widget; gtk_widget_set_size_request((GtkWidget *) dial, 2 * dial->radius + 2 * (dial->outline_strength + dial->button_width + 4), 2 * dial->radius + 2 * (dial->outline_strength + 1)); g_object_set(dial, "adjustment", adjustment, NULL); if(upper_bound >= 0.0 && lower_bound >= 0.0){ step = (upper_bound - lower_bound) / AGS_DIAL_DEFAULT_PRECISION; }else if(upper_bound < 0.0 && lower_bound < 0.0){ step = -1.0 * (lower_bound - upper_bound) / AGS_DIAL_DEFAULT_PRECISION; }else{ step = (upper_bound - lower_bound) / AGS_DIAL_DEFAULT_PRECISION; } }else if(GTK_IS_VSCALE(child_widget)){ g_object_set(child_widget, "adjustment", adjustment, NULL); step = 0.1; } } gtk_adjustment_set_step_increment(adjustment, step); gtk_adjustment_set_lower(adjustment, lower_bound); gtk_adjustment_set_upper(adjustment, upper_bound); gtk_adjustment_set_value(adjustment, lower_bound); add_line_member = ags_add_line_member_new(line, line_member, x, y, 1, 1); task = g_list_prepend(task, add_line_member); x++; port = port->next; list = list->next; } i++; } } } } g_list_free(list_start); task = g_list_reverse(task); /* launch tasks */ ags_task_thread_append_tasks(task_thread, task); } break; } } void ags_line_member_editor_remove_callback(GtkWidget *button, AgsLineMemberEditor *line_member_editor) { AgsWindow *window; AgsLine *line; AgsMachineEditor *machine_editor; AgsLineEditor *line_editor; AgsRemoveRecall *remove_recall; AgsRemoveRecallContainer *remove_recall_container; AgsAudioLoop *audio_loop; AgsTaskThread *task_thread; AgsMain *ags_main; GList *control; GList *line_member; GList *children; GList *play_ladspa, *play_ladspa_start, *recall_ladspa, *recall_ladspa_start; GList *port; GList *task; GList *list, *list_start, *pad, *pad_start; guint index; if(button == NULL || line_member_editor == NULL){ return; } machine_editor = (AgsMachineEditor *) gtk_widget_get_ancestor((GtkWidget *) line_member_editor, AGS_TYPE_MACHINE_EDITOR); line_editor = (AgsLineEditor *) gtk_widget_get_ancestor((GtkWidget *) line_member_editor, AGS_TYPE_LINE_EDITOR); window = gtk_widget_get_ancestor(machine_editor->machine, AGS_TYPE_WINDOW); ags_main = window->ags_main; /* get audio loop */ pthread_mutex_lock(&(ags_application_mutex)); audio_loop = (AgsAudioLoop *) ags_main->main_loop; pthread_mutex_unlock(&(ags_application_mutex)); /* get task thread */ task_thread = (AgsTaskThread *) ags_thread_find_type(audio_loop, AGS_TYPE_TASK_THREAD); line_member = gtk_container_get_children(GTK_CONTAINER(line_member_editor->line_member)); task = NULL; line = NULL; if(AGS_IS_OUTPUT(line_editor->channel)){ pad_start = pad = gtk_container_get_children(machine_editor->machine->output); }else{ pad_start = pad = gtk_container_get_children(machine_editor->machine->input); } pad = g_list_nth(pad, line_editor->channel->pad); if(pad != NULL){ list_start = list = gtk_container_get_children((GtkContainer *) AGS_PAD(pad->data)->expander_set); while(list != NULL){ if(AGS_LINE(list->data)->channel == line_editor->channel){ break; } list = list->next; } if(list != NULL){ line = AGS_LINE(list->data); g_list_free(list_start); } } g_list_free(pad_start); play_ladspa = play_ladspa_start = ags_recall_template_find_type(line_editor->channel->play, AGS_TYPE_RECALL_LADSPA); recall_ladspa = recall_ladspa_start = ags_recall_template_find_type(line_editor->channel->recall, AGS_TYPE_RECALL_LADSPA); for(index = 0; line_member != NULL; index++){ children = gtk_container_get_children(GTK_CONTAINER(line_member->data)); if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(children->data))){ task = NULL; /* play context */ remove_recall = ags_remove_recall_new((GObject *) line_editor->channel, g_list_nth(play_ladspa, index)->data, TRUE, TRUE); task = g_list_prepend(task, remove_recall); remove_recall = ags_remove_recall_new((GObject *) line_editor->channel, ags_recall_find_template(AGS_RECALL_CONTAINER(AGS_RECALL(g_list_nth(play_ladspa, index)->data)->container)->recall_channel_run)->data, TRUE, TRUE); task = g_list_prepend(task, remove_recall); remove_recall_container = ags_remove_recall_container_new(line_editor->channel->audio, (AgsRecallContainer *) AGS_RECALL(g_list_nth(play_ladspa, index)->data)->container); task = g_list_prepend(task, remove_recall_container); /* recall context */ remove_recall = ags_remove_recall_new((GObject *) line_editor->channel, g_list_nth(recall_ladspa, index)->data, FALSE, TRUE); task = g_list_prepend(task, remove_recall); remove_recall = ags_remove_recall_new((GObject *) line_editor->channel, ags_recall_find_template(AGS_RECALL_CONTAINER(AGS_RECALL(g_list_nth(recall_ladspa, index)->data)->container)->recall_channel_run)->data, FALSE, TRUE); task = g_list_prepend(task, remove_recall); remove_recall_container = ags_remove_recall_container_new(line_editor->channel->audio, (AgsRecallContainer *) AGS_RECALL(g_list_nth(recall_ladspa, index)->data)->container); task = g_list_prepend(task, remove_recall_container); /* destroy line member editor entry */ gtk_widget_destroy(GTK_WIDGET(line_member->data)); /* destroy controls */ if(line != NULL){ port = AGS_RECALL(g_list_nth(play_ladspa, index)->data)->port; while(port != NULL){ control = gtk_container_get_children((GtkContainer *) line->expander->table); while(control != NULL){ if(AGS_IS_LINE_MEMBER(control->data) && AGS_LINE_MEMBER(control->data)->port == port->data){ ags_expander_remove(line->expander, control->data); break; } control = control->next; } port = port->next; } } } line_member = line_member->next; } ags_task_thread_append_tasks(task_thread, task); } gsequencer-0.6.37/src/ags/X/ags_audio_preferences_callbacks.h0000644000175000017500000000310612621463700021126 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_AUDIO_PREFERENCES_CALLBACKS_H__ #define __AGS_AUDIO_PREFERENCES_CALLBACKS_H__ #include #include int ags_audio_preferences_parent_set_callback(GtkWidget *widget, GtkObject *old_parent, AgsAudioPreferences *audio_preferences); void ags_audio_preferences_card_changed_callback(GtkComboBox *combo, AgsAudioPreferences *audio_preferences); void ags_audio_preferences_audio_channels_changed(GtkSpinButton *spin_button, AgsAudioPreferences *audio_preferences); void ags_audio_preferences_samplerate_changed(GtkSpinButton *spin_button, AgsAudioPreferences *audio_preferences); void ags_audio_preferences_buffer_size_changed(GtkSpinButton *spin_button, AgsAudioPreferences *audio_preferences); #endif /*__AGS_AUDIO_PREFERENCES_CALLBACKS_H__*/ gsequencer-0.6.37/src/ags/X/ags_preferences.h0000644000175000017500000000447112621463700015754 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_PREFERENCES_H__ #define __AGS_PREFERENCES_H__ #include #include #include #include #include #define AGS_TYPE_PREFERENCES (ags_preferences_get_type()) #define AGS_PREFERENCES(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_PREFERENCES, AgsPreferences)) #define AGS_PREFERENCES_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_PREFERENCES, AgsPreferencesClass)) #define AGS_IS_PREFERENCES(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_PREFERENCES)) #define AGS_IS_PREFERENCES_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_PREFERENCES)) #define AGS_PREFERENCES_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_PREFERENCES, AgsPreferencesClass)) #define AGS_PREFERENCES_DEFAULT_FILENAME "ags_current.xml\0" typedef struct _AgsPreferences AgsPreferences; typedef struct _AgsPreferencesClass AgsPreferencesClass; typedef enum{ AGS_PREFERENCES_SHUTDOWN = 1, }AgsPreferencesFlags; struct _AgsPreferences { GtkDialog dialog; guint flags; GtkWindow *window; AgsGenericPreferences *generic_preferences; AgsAudioPreferences *audio_preferences; AgsPerformancePreferences *performance_preferences; AgsServerPreferences *server_preferences; }; struct _AgsPreferencesClass { GtkDialogClass dialog; }; GType ags_preferences_get_type(void); AgsPreferences* ags_preferences_new(); #endif /*__AGS_PREFERENCES_H__*/ gsequencer-0.6.37/src/ags/X/ags_link_editor_callbacks.c0000644000175000017500000003023412626272146017753 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include int ags_link_editor_file_chooser_response_callback(GtkWidget *widget, guint response, AgsLinkEditor *link_editor); int ags_link_editor_file_chooser_play_callback(GtkToggleButton *toggle_button, AgsLinkEditor *link_editor); void ags_link_editor_file_chooser_play_done(AgsRecall *recall, AgsLinkEditor *link_editor); void ags_link_editor_file_chooser_play_cancel(AgsRecall *recall, AgsLinkEditor *link_editor); #define AGS_LINK_EDITOR_OPEN_SPIN_BUTTON "AgsLinkEditorOpenSpinButton\0" int ags_link_editor_parent_set_callback(GtkWidget *widget, GtkObject *old_parent, AgsLinkEditor *link_editor) { AgsMachine *machine; AgsLineEditor *line_editor; AgsChannel *channel; GtkTreeModel *model; if(old_parent != NULL) return(0); line_editor = (AgsLineEditor *) gtk_widget_get_ancestor(widget, AGS_TYPE_LINE_EDITOR); channel = line_editor->channel; machine = AGS_MACHINE(AGS_AUDIO(channel->audio)->machine); model = GTK_TREE_MODEL(ags_machine_get_possible_links(machine)); if(line_editor != NULL && channel != NULL && AGS_IS_INPUT(channel) && channel->audio != NULL && AGS_AUDIO(channel->audio)->machine != NULL){ GtkTreeIter iter; if((AGS_MACHINE_TAKES_FILE_INPUT & (machine->flags)) != 0 && ((AGS_MACHINE_ACCEPT_WAV & (machine->file_input_flags)) != 0 || ((AGS_MACHINE_ACCEPT_OGG & (machine->file_input_flags)) != 0))){ gtk_list_store_append(model, &iter); if(AGS_INPUT(channel)->file_link != NULL){ gtk_list_store_set(model, &iter, 0, g_strdup_printf("file://%s\0", AGS_FILE_LINK(AGS_INPUT(channel)->file_link)->filename), 1, NULL, -1); gtk_combo_box_set_active_iter(link_editor->combo, &iter); }else{ gtk_list_store_set(model, &iter, 0, "file://\0", 1, NULL, -1); } } } gtk_combo_box_set_model(link_editor->combo, model); return(0); } int ags_link_editor_destroy_callback(GtkObject *object, AgsLinkEditor *link_editor) { ags_link_editor_destroy(object); return(0); } int ags_link_editor_show_callback(GtkWidget *widget, AgsLinkEditor *link_editor) { ags_link_editor_show(widget); return(0); } void ags_link_editor_combo_callback(GtkComboBox *combo, AgsLinkEditor *link_editor) { GtkTreeIter iter; if(gtk_combo_box_get_active_iter(link_editor->combo, &iter)){ AgsMachine *machine, *link_machine; AgsLineEditor *line_editor; GtkTreeModel *model; AgsChannel *channel; line_editor = AGS_LINE_EDITOR(gtk_widget_get_ancestor(GTK_WIDGET(link_editor), AGS_TYPE_LINE_EDITOR)); channel = line_editor->channel; machine = AGS_AUDIO(channel->audio)->machine; model = gtk_combo_box_get_model(link_editor->combo); if(!((AGS_MACHINE_TAKES_FILE_INPUT & (machine->flags)) != 0 && ((AGS_MACHINE_ACCEPT_WAV & (machine->file_input_flags)) != 0 || ((AGS_MACHINE_ACCEPT_OGG & (machine->file_input_flags)) != 0)) && AGS_IS_INPUT(channel) && gtk_combo_box_get_active(link_editor->combo) + 1 == gtk_tree_model_iter_n_children(model, NULL))){ gtk_widget_set_sensitive((GtkWidget *) link_editor->spin_button, TRUE); /* set machine link */ gtk_tree_model_get(model, &iter, 1, &link_machine, -1); if(link_machine == NULL){ gtk_spin_button_set_value(link_editor->spin_button, 0.0); }else{ if(AGS_IS_INPUT(channel)){ gtk_spin_button_set_range(link_editor->spin_button, 0.0, (gdouble) (link_machine->audio->output_lines - 1)); }else{ gtk_spin_button_set_range(link_editor->spin_button, 0.0, (gdouble) (link_machine->audio->input_lines - 1)); } } }else{ GtkHBox *hbox; GtkLabel *label; GtkSpinButton *spin_button; gchar *str, *tmp; /* set file link */ if(link_editor->file_chooser != NULL || (AGS_LINK_EDITOR_BLOCK_FILE_CHOOSER & (link_editor->flags)) != 0){ return; } gtk_widget_set_sensitive((GtkWidget *) link_editor->spin_button, FALSE); link_editor->file_chooser = (GtkFileChooserDialog *) gtk_file_chooser_dialog_new(g_strdup("select audio file\0"), (GtkWindow *) gtk_widget_get_toplevel((GtkWidget *) link_editor), GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(link_editor->file_chooser), FALSE); /* extra widget */ hbox = (GtkHBox *) gtk_hbox_new(FALSE, 0); gtk_file_chooser_set_extra_widget((GtkFileChooser *) link_editor->file_chooser, (GtkWidget *) hbox); label = (GtkLabel *) gtk_label_new(g_strdup("audio channel: \0")); gtk_box_pack_start((GtkBox *) hbox, (GtkWidget *) label, FALSE, FALSE, 0); spin_button = gtk_spin_button_new_with_range(0.0, 256.0, 1.0); g_object_set_data((GObject *) link_editor->file_chooser, AGS_LINK_EDITOR_OPEN_SPIN_BUTTON, spin_button); gtk_box_pack_start((GtkBox *) hbox, (GtkWidget *) spin_button, FALSE, FALSE, 0); /* */ gtk_tree_model_get(model, &iter, 0, &str, -1); tmp = g_strdup(str + 7); if(g_strcmp0(tmp, "\0")){ char *tmp0, *name, *dir; tmp0 = g_strrstr(tmp, "/\0"); name = g_strdup(tmp0 + 1); dir = g_strndup(tmp, tmp0 - tmp); gtk_file_chooser_set_current_folder((GtkFileChooser *) link_editor->file_chooser, dir); gtk_file_chooser_set_current_name((GtkFileChooser *) link_editor->file_chooser, name); } g_signal_connect((GObject *) link_editor->file_chooser, "response\0", G_CALLBACK(ags_link_editor_file_chooser_response_callback), (gpointer) link_editor); gtk_widget_show_all((GtkWidget *) link_editor->file_chooser); } } } int ags_link_editor_option_changed_callback(GtkWidget *widget, AgsLinkEditor *link_editor) { /* AgsLineEditor *line_editor; AgsMachine *machine; machine = (AgsMachine *) g_object_get_data((GObject *) link_editor->option->menu_item, g_type_name(AGS_TYPE_MACHINE)); if(machine == NULL) return; line_editor = (AgsLineEditor *) gtk_widget_get_ancestor((GtkWidget *) link_editor, AGS_TYPE_LINE_EDITOR); link_editor->spin_button->adjustment->upper = (gdouble) (AGS_IS_OUTPUT(line_editor->channel) ? machine->audio->input_lines - 1: machine->audio->output_lines - 1); */ } int ags_link_editor_file_chooser_response_callback(GtkWidget *widget, guint response, AgsLinkEditor *link_editor) { GtkFileChooserDialog *file_chooser; char *name; file_chooser = link_editor->file_chooser; if(response == GTK_RESPONSE_ACCEPT){ AgsLineEditor *line_editor; GtkSpinButton *spin_button; GtkTreeModel *model; GtkTreeIter iter; AgsChannel *channel; line_editor = AGS_LINE_EDITOR(gtk_widget_get_ancestor(GTK_WIDGET(link_editor), AGS_TYPE_LINE_EDITOR)); channel = line_editor->channel; /* set filename in combo box */ model = gtk_combo_box_get_model(link_editor->combo); name = gtk_file_chooser_get_filename((GtkFileChooser *) file_chooser); gtk_tree_model_iter_nth_child(model, &iter, NULL, gtk_tree_model_iter_n_children(model, NULL) - 1); gtk_list_store_set(model, &iter, 0, g_strdup_printf("file://%s\0", name), -1); /* set audio channel */ spin_button = (GtkSpinButton *) g_object_get_data((GObject *) file_chooser, AGS_LINK_EDITOR_OPEN_SPIN_BUTTON); gtk_spin_button_set_value(link_editor->spin_button, gtk_spin_button_get_value(spin_button)); } link_editor->file_chooser = NULL; gtk_widget_destroy((GtkWidget *) file_chooser); } int ags_link_editor_file_chooser_play_callback(GtkToggleButton *toggle_button, AgsLinkEditor *link_editor) { /* GtkFileChooserDialog *file_chooser; AgsDevout *devout; AgsPlayAudioFile *play_audio_file; AgsAudioFile *audio_file; char *name; static GStaticMutex mutex = G_STATIC_MUTEX_INIT; file_chooser = link_editor->file_chooser; audio_file = link_editor->audio_file; devout = AGS_DEVOUT(AGS_AUDIO(AGS_LINE_EDITOR(gtk_widget_get_ancestor((GtkWidget *) link_editor, AGS_TYPE_LINE_EDITOR))->channel->audio)->devout); if(toggle_button->active){ /* AgsPlayAudioFile * / play_audio_file = ags_play_audio_file_new(); play_audio_file->devout = devout; ags_play_audio_file_connect(play_audio_file); g_object_set_data((GObject *) file_chooser, (char *) g_type_name(AGS_TYPE_PLAY_AUDIO_FILE), play_audio_file); g_signal_connect((GObject *) play_audio_file, "done\0", G_CALLBACK(ags_link_editor_file_chooser_play_done), link_editor); g_signal_connect((GObject *) play_audio_file, "cancel\0", G_CALLBACK(ags_link_editor_file_chooser_play_cancel), link_editor); /* AgsAudioFile * / name = gtk_file_chooser_get_filename((GtkFileChooser *) file_chooser); if(audio_file != NULL){ if(g_strcmp0(audio_file->name, name)){ g_object_unref(G_OBJECT(audio_file)); goto ags_link_editor_file_chooser_play_callback0; } }else{ ags_link_editor_file_chooser_play_callback0: audio_file = ags_audio_file_new(); g_object_set_data((GObject *) link_editor->option->menu_item, (char *) g_type_name(AGS_TYPE_AUDIO_FILE), audio_file); audio_file->flags |= AGS_AUDIO_FILE_ALL_CHANNELS; audio_file->name = (gchar *) name; ags_audio_file_set_devout(audio_file, devout); ags_audio_file_open(audio_file); AGS_AUDIO_FILE_GET_CLASS(audio_file)->read_buffer(audio_file); } play_audio_file->audio_file = audio_file; /* AgsDevout * / g_static_mutex_lock(&mutex); devout->play_recall = g_list_append(devout->play_recall, play_audio_file); devout->flags |= AGS_DEVOUT_PLAY_RECALL; devout->play_recall_ref++; AGS_DEVOUT_GET_CLASS(devout)->run((void *) devout); g_static_mutex_unlock(&mutex); }else{ if((AGS_LINK_EDITOR_FILE_CHOOSER_PLAY_DONE & (link_editor->flags)) == 0){ play_audio_file = (AgsPlayAudioFile *) g_object_get_data((GObject *) file_chooser, (char *) g_type_name(AGS_TYPE_PLAY_AUDIO_FILE)); play_audio_file->recall.flags |= AGS_RECALL_CANCEL; }else link_editor->flags &= (~AGS_LINK_EDITOR_FILE_CHOOSER_PLAY_DONE); } */ return(0); } void ags_link_editor_file_chooser_play_done(AgsRecall *recall, AgsLinkEditor *link_editor) { GtkToggleButton *toggle_button; GList *list; recall->flags |= AGS_RECALL_REMOVE; list = gtk_container_get_children((GtkContainer *) GTK_DIALOG(link_editor->file_chooser)->action_area); toggle_button = (GtkToggleButton *) list->data; link_editor->flags |= AGS_LINK_EDITOR_FILE_CHOOSER_PLAY_DONE; gtk_toggle_button_set_active(toggle_button, FALSE); g_list_free(list); } void ags_link_editor_file_chooser_play_remove(AgsRecall *recall, AgsLinkEditor *link_editor) { AgsPlayAudioFile *play_audio_file; play_audio_file = AGS_PLAY_AUDIO_FILE(recall); g_object_unref((GObject *) play_audio_file); } void ags_link_editor_file_chooser_play_cancel(AgsRecall *recall, AgsLinkEditor *link_editor) { AgsPlayAudioFile *play_audio_file; play_audio_file = AGS_PLAY_AUDIO_FILE(recall); g_object_unref((GObject *) play_audio_file); } gsequencer-0.6.37/src/ags/X/ags_menu_bar.c0000644000175000017500000004244112626423177015246 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include void ags_menu_bar_class_init(AgsMenuBarClass *menu_bar); void ags_menu_bar_connectable_interface_init(AgsConnectableInterface *connectable); void ags_menu_bar_init(AgsMenuBar *menu_bar); void ags_menu_bar_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_menu_bar_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_menu_bar_connect(AgsConnectable *connectable); void ags_menu_bar_disconnect(AgsConnectable *connectable); void ags_menu_bar_destroy(GtkObject *object); void ags_menu_bar_show(GtkWidget *widget); /** * SECTION:ags_menu_bar * @short_description: the menu bar. * @title: AgsMenuBar * @section_id: * @include: ags/X/ags_menu_bar.h * * #AgsMenuBar is a composite widget to be used as application's menu bar. */ GType ags_menu_bar_get_type(void) { static GType ags_type_menu_bar = 0; if(!ags_type_menu_bar){ static const GTypeInfo ags_menu_bar_info = { sizeof (AgsMenuBarClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_menu_bar_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsMenuBar), 0, /* n_preallocs */ (GInstanceInitFunc) ags_menu_bar_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_menu_bar_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_menu_bar = g_type_register_static(GTK_TYPE_MENU_BAR, "AgsMenuBar\0", &ags_menu_bar_info, 0); g_type_add_interface_static(ags_type_menu_bar, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return(ags_type_menu_bar); } void ags_menu_bar_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->is_ready = NULL; connectable->is_connected = NULL; connectable->connect = ags_menu_bar_connect; connectable->disconnect = ags_menu_bar_disconnect; } void ags_menu_bar_class_init(AgsMenuBarClass *menu_bar) { } void ags_menu_bar_init(AgsMenuBar *menu_bar) { GtkImageMenuItem *item; /* File */ item = (GtkImageMenuItem *) gtk_menu_item_new_with_mnemonic("_File\0"); gtk_menu_shell_append((GtkMenuShell*) menu_bar, (GtkWidget*) item); menu_bar->file = (GtkMenu *) gtk_menu_new(); gtk_menu_item_set_submenu((GtkMenuItem*) item, (GtkWidget*) menu_bar->file); item = (GtkImageMenuItem *) gtk_image_menu_item_new_from_stock(GTK_STOCK_OPEN, NULL); gtk_menu_shell_append((GtkMenuShell*) menu_bar->file, (GtkWidget*) item); item = (GtkImageMenuItem *) gtk_image_menu_item_new_from_stock(GTK_STOCK_SAVE, NULL); gtk_menu_shell_append((GtkMenuShell*) menu_bar->file, (GtkWidget*) item); item = (GtkImageMenuItem *) gtk_image_menu_item_new_from_stock(GTK_STOCK_SAVE_AS, NULL); gtk_menu_shell_append((GtkMenuShell*) menu_bar->file, (GtkWidget*) item); gtk_menu_shell_append((GtkMenuShell*) menu_bar->file, (GtkWidget*) gtk_separator_menu_item_new()); item = (GtkImageMenuItem *) gtk_image_menu_item_new_with_label(g_strdup("export\0")); gtk_menu_shell_append((GtkMenuShell*) menu_bar->file, (GtkWidget*) item); gtk_menu_shell_append((GtkMenuShell*) menu_bar->file, (GtkWidget*) gtk_separator_menu_item_new()); item = (GtkImageMenuItem *) gtk_image_menu_item_new_from_stock(GTK_STOCK_QUIT, NULL); gtk_menu_shell_append((GtkMenuShell*) menu_bar->file, (GtkWidget*) item); item = (GtkImageMenuItem *) gtk_image_menu_item_new_from_stock(GTK_STOCK_EDIT, NULL); gtk_menu_shell_append((GtkMenuShell*) menu_bar, (GtkWidget*) item); /* Edit */ menu_bar->edit = (GtkMenu *) gtk_menu_new(); gtk_menu_item_set_submenu((GtkMenuItem*) item, (GtkWidget*) menu_bar->edit); // item = (GtkImageMenuItem *) gtk_image_menu_item_new_from_stock(GTK_STOCK_UNDO, NULL); // gtk_menu_shell_append((GtkMenuShell*) menu, (GtkWidget*) item); // item = (GtkImageMenuItem *) gtk_image_menu_item_new_from_stock(GTK_STOCK_REDO, NULL); // gtk_menu_shell_append((GtkMenuShell*) menu, (GtkWidget*) item); item = (GtkImageMenuItem *) gtk_image_menu_item_new_from_stock(GTK_STOCK_ADD, NULL); gtk_menu_shell_append((GtkMenuShell*) menu_bar->edit, (GtkWidget*) item); menu_bar->add = (GtkMenu *) gtk_menu_new(); gtk_menu_item_set_submenu((GtkMenuItem*) item, (GtkWidget*) menu_bar->add); item = (GtkImageMenuItem *) gtk_image_menu_item_new_with_label(g_strdup("Panel\0")); gtk_menu_shell_append((GtkMenuShell*) menu_bar->add, (GtkWidget*) item); item = (GtkImageMenuItem *) gtk_image_menu_item_new_with_label(g_strdup("Mixer\0")); gtk_menu_shell_append((GtkMenuShell*) menu_bar->add, (GtkWidget*) item); item = (GtkImageMenuItem *) gtk_image_menu_item_new_with_label(g_strdup("Drum\0")); gtk_menu_shell_append((GtkMenuShell*) menu_bar->add, (GtkWidget*) item); item = (GtkImageMenuItem *) gtk_image_menu_item_new_with_label(g_strdup("Matrix\0")); gtk_menu_shell_append((GtkMenuShell*) menu_bar->add, (GtkWidget*) item); item = (GtkImageMenuItem *) gtk_image_menu_item_new_with_label(g_strdup("Synth\0")); gtk_menu_shell_append((GtkMenuShell*) menu_bar->add, (GtkWidget*) item); item = (GtkImageMenuItem *) gtk_image_menu_item_new_with_label(g_strdup("FPlayer\0")); gtk_menu_shell_append((GtkMenuShell*) menu_bar->add, (GtkWidget*) item); item = (GtkImageMenuItem *) gtk_image_menu_item_new_from_stock(GTK_STOCK_REMOVE, NULL); gtk_menu_shell_append((GtkMenuShell*) menu_bar->edit, (GtkWidget*) item); gtk_menu_shell_append((GtkMenuShell*) menu_bar->edit, (GtkWidget*) gtk_separator_menu_item_new()); item = (GtkImageMenuItem *) gtk_image_menu_item_new_from_stock(GTK_STOCK_PREFERENCES, NULL); gtk_menu_shell_append((GtkMenuShell*) menu_bar->edit, (GtkWidget*) item); /* Help */ item = (GtkImageMenuItem *) gtk_image_menu_item_new_from_stock(GTK_STOCK_HELP, NULL); gtk_menu_shell_append((GtkMenuShell*) menu_bar, (GtkWidget*) item); menu_bar->help = (GtkMenu *) gtk_menu_new(); gtk_menu_item_set_submenu((GtkMenuItem*) item, (GtkWidget*) menu_bar->help); item = (GtkImageMenuItem *) gtk_image_menu_item_new_from_stock(GTK_STOCK_ABOUT, NULL); gtk_menu_shell_append((GtkMenuShell*) menu_bar->help, (GtkWidget*) item); } void ags_menu_bar_connect(AgsConnectable *connectable) { AgsMenuBar *menu_bar; GList *list0, *list1, *list2; GList *list1_start, *list2_start; menu_bar = AGS_MENU_BAR(connectable); /* File */ g_signal_connect((GObject *) menu_bar, "destroy\0", G_CALLBACK(ags_menu_bar_destroy_callback), (gpointer) menu_bar); g_signal_connect((GObject *) menu_bar, "show\0", G_CALLBACK(ags_menu_bar_show_callback), (gpointer) menu_bar); list0 = GTK_MENU_SHELL(menu_bar)->children; list1_start = list1 = gtk_container_get_children ((GtkContainer *) gtk_menu_item_get_submenu((GtkMenuItem *) list0->data)); g_signal_connect (G_OBJECT (list1->data), "activate\0", G_CALLBACK (ags_menu_bar_open_callback), (gpointer) menu_bar); list1 = list1->next; g_signal_connect (G_OBJECT (list1->data), "activate\0", G_CALLBACK (ags_menu_bar_save_callback), (gpointer) menu_bar); list1 = list1->next; g_signal_connect (G_OBJECT (list1->data), "activate\0", G_CALLBACK (ags_menu_bar_save_as_callback), menu_bar); list1 = list1->next->next; g_signal_connect (G_OBJECT (list1->data), "activate\0", G_CALLBACK (ags_menu_bar_export_callback), menu_bar); list1 = list1->next->next; g_signal_connect (G_OBJECT (list1->data), "activate\0", G_CALLBACK (ags_menu_bar_quit_callback), (gpointer) menu_bar); g_list_free(list1_start); /* Edit */ list0 = list0->next; list1_start = list1 = gtk_container_get_children((GtkContainer *) gtk_menu_item_get_submenu((GtkMenuItem *) list0->data)); g_signal_connect (G_OBJECT (list1->data), "activate\0", G_CALLBACK (ags_menu_bar_add_callback), (gpointer) menu_bar); list2_start = list2 = gtk_container_get_children((GtkContainer *) gtk_menu_item_get_submenu((GtkMenuItem *) list1->data)); list1 = list1->next; g_signal_connect (G_OBJECT (list2->data), "activate\0", G_CALLBACK (ags_menu_bar_add_panel_callback), (gpointer) menu_bar); list2 = list2->next; g_signal_connect (G_OBJECT (list2->data), "activate\0", G_CALLBACK (ags_menu_bar_add_mixer_callback), (gpointer) menu_bar); list2 = list2->next; g_signal_connect (G_OBJECT (list2->data), "activate\0", G_CALLBACK (ags_menu_bar_add_drum_callback), (gpointer) menu_bar); list2 = list2->next; g_signal_connect (G_OBJECT (list2->data), "activate\0", G_CALLBACK (ags_menu_bar_add_matrix_callback), (gpointer) menu_bar); list2 = list2->next; g_signal_connect (G_OBJECT (list2->data), "activate\0", G_CALLBACK (ags_menu_bar_add_synth_callback), (gpointer) menu_bar); list2 = list2->next; g_signal_connect (G_OBJECT (list2->data), "activate\0", G_CALLBACK (ags_menu_bar_add_ffplayer_callback), (gpointer) menu_bar); g_list_free(list2_start); g_signal_connect (G_OBJECT (list1->data), "activate\0", G_CALLBACK (ags_menu_bar_remove_callback), (gpointer) menu_bar); list1 = list1->next; list1 = list1->next; g_signal_connect (G_OBJECT (list1->data), "activate\0", G_CALLBACK (ags_menu_bar_preferences_callback), (gpointer) menu_bar); g_list_free(list1_start); /* Help */ list0 = list0->next; list1_start = list1 = gtk_container_get_children((GtkContainer *) gtk_menu_item_get_submenu((GtkMenuItem *) list0->data)); g_signal_connect (G_OBJECT (list1->data), "activate\0", G_CALLBACK (ags_menu_bar_about_callback), (gpointer) menu_bar); g_list_free(list1_start); } void ags_menu_bar_disconnect(AgsConnectable *connectable) { /* empty */ } void ags_menu_bar_destroy(GtkObject *object) { /* empty */ } void ags_menu_bar_show(GtkWidget *widget) { gtk_widget_show_all(widget); } /** * ags_menu_bar_new: * * Creates an #AgsMenuBar * * Returns: a new #AgsMenuBar * * Since: 0.3 */ AgsMenuBar* ags_menu_bar_new() { AgsMenuBar *menu_bar; menu_bar = (AgsMenuBar *) g_object_new(AGS_TYPE_MENU_BAR, NULL); return(menu_bar); } GtkMenu* ags_zoom_menu_new() { GtkMenu *menu; GtkMenuItem *item; GtkLabel *label; menu = (GtkMenu *) gtk_menu_new(); item = (GtkMenuItem *) gtk_menu_item_new(); label = (GtkLabel *) gtk_label_new(g_strdup("16:1\0")); gtk_container_add((GtkContainer *) item, (GtkWidget *) label); gtk_menu_shell_append((GtkMenuShell *) menu, (GtkWidget *) item); item = (GtkMenuItem *) gtk_menu_item_new(); label = (GtkLabel *) gtk_label_new(g_strdup("8:1\0")); gtk_container_add((GtkContainer *) item, (GtkWidget *) label); gtk_menu_shell_append((GtkMenuShell *) menu, (GtkWidget *) item); item = (GtkMenuItem *) gtk_menu_item_new(); label = (GtkLabel *) gtk_label_new(g_strdup("4:1\0")); gtk_container_add((GtkContainer *) item, (GtkWidget *) label); gtk_menu_shell_append((GtkMenuShell *) menu, (GtkWidget *) item); item = (GtkMenuItem *) gtk_menu_item_new(); label = (GtkLabel *) gtk_label_new(g_strdup("2:1\0")); gtk_container_add((GtkContainer *) item, (GtkWidget *) label); gtk_menu_shell_append((GtkMenuShell *) menu, (GtkWidget *) item); item = (GtkMenuItem *) gtk_menu_item_new(); label = (GtkLabel *) gtk_label_new(g_strdup("1:1\0")); gtk_container_add((GtkContainer *) item, (GtkWidget *) label); gtk_menu_shell_append((GtkMenuShell *) menu, (GtkWidget *) item); item = (GtkMenuItem *) gtk_menu_item_new(); label = (GtkLabel *) gtk_label_new(g_strdup("1:2\0")); gtk_container_add((GtkContainer *) item, (GtkWidget *) label); gtk_menu_shell_append((GtkMenuShell *) menu, (GtkWidget *) item); item = (GtkMenuItem *) gtk_menu_item_new(); label = (GtkLabel *) gtk_label_new(g_strdup("1:4\0")); gtk_container_add((GtkContainer *) item, (GtkWidget *) label); gtk_menu_shell_append((GtkMenuShell *) menu, (GtkWidget *) item); item = (GtkMenuItem *) gtk_menu_item_new(); label = (GtkLabel *) gtk_label_new(g_strdup("1:8\0")); gtk_container_add((GtkContainer *) item, (GtkWidget *) label); gtk_menu_shell_append((GtkMenuShell *) menu, (GtkWidget *) item); item = (GtkMenuItem *) gtk_menu_item_new(); label = (GtkLabel *) gtk_label_new(g_strdup("1:16\0")); gtk_container_add((GtkContainer *) item, (GtkWidget *) label); gtk_menu_shell_append((GtkMenuShell *) menu, (GtkWidget *) item); return(menu); } GtkMenu* ags_tact_menu_new() { GtkMenu *menu; GtkMenuItem *item; GtkLabel *label; menu = (GtkMenu *) gtk_menu_new(); //TODO:JK: uncomment me if tact implemented /* item = (GtkMenuItem *) gtk_menu_item_new(); label = (GtkLabel *) gtk_label_new(g_strdup("16/1\0")); gtk_container_add((GtkContainer *) item, (GtkWidget *) label); gtk_menu_shell_append((GtkMenuShell *) menu, (GtkWidget *) item); item = (GtkMenuItem *) gtk_menu_item_new(); label = (GtkLabel *) gtk_label_new(g_strdup("8/1\0")); gtk_container_add((GtkContainer *) item, (GtkWidget *) label); gtk_menu_shell_append((GtkMenuShell *) menu, (GtkWidget *) item); item = (GtkMenuItem *) gtk_menu_item_new(); label = (GtkLabel *) gtk_label_new(g_strdup("4/1\0")); gtk_container_add((GtkContainer *) item, (GtkWidget *) label); gtk_menu_shell_append((GtkMenuShell *) menu, (GtkWidget *) item); item = (GtkMenuItem *) gtk_menu_item_new(); label = (GtkLabel *) gtk_label_new(g_strdup("2/1\0")); gtk_container_add((GtkContainer *) item, (GtkWidget *) label); gtk_menu_shell_append((GtkMenuShell *) menu, (GtkWidget *) item); item = (GtkMenuItem *) gtk_menu_item_new(); label = (GtkLabel *) gtk_label_new(g_strdup("1:1\0")); gtk_container_add((GtkContainer *) item, (GtkWidget *) label); gtk_menu_shell_append((GtkMenuShell *) menu, (GtkWidget *) item); item = (GtkMenuItem *) gtk_menu_item_new(); label = (GtkLabel *) gtk_label_new(g_strdup("1/2\0")); gtk_container_add((GtkContainer *) item, (GtkWidget *) label); gtk_menu_shell_append((GtkMenuShell *) menu, (GtkWidget *) item); item = (GtkMenuItem *) gtk_menu_item_new(); label = (GtkLabel *) gtk_label_new(g_strdup("1/4\0")); gtk_container_add((GtkContainer *) item, (GtkWidget *) label); gtk_menu_shell_append((GtkMenuShell *) menu, (GtkWidget *) item); item = (GtkMenuItem *) gtk_menu_item_new(); label = (GtkLabel *) gtk_label_new(g_strdup("1/8\0")); gtk_container_add((GtkContainer *) item, (GtkWidget *) label); gtk_menu_shell_append((GtkMenuShell *) menu, (GtkWidget *) item); item = (GtkMenuItem *) gtk_menu_item_new(); label = (GtkLabel *) gtk_label_new(g_strdup("1/16\0")); gtk_container_add((GtkContainer *) item, (GtkWidget *) label); gtk_menu_shell_append((GtkMenuShell *) menu, (GtkWidget *) item); */ return(menu); } /** * ags_zoom_combo_box_new: * * Creates an #GtkComboBox to select zoom. * * Returns: a new #GtkComboBox * * Since: 0.4 */ GtkComboBox* ags_zoom_combo_box_new() { GtkComboBoxText *combo_box; combo_box = (GtkComboBoxText *) gtk_combo_box_text_new(); // gtk_combo_box_text_append_text(combo_box, // "16:1\0"); // gtk_combo_box_text_append_text(combo_box, // "8:1\0"); gtk_combo_box_text_append_text(combo_box, "4:1\0"); gtk_combo_box_text_append_text(combo_box, "2:1\0"); gtk_combo_box_text_append_text(combo_box, "1:1\0"); gtk_combo_box_text_append_text(combo_box, "1:2\0"); gtk_combo_box_text_append_text(combo_box, "1:4\0"); gtk_combo_box_text_append_text(combo_box, "1:8\0"); gtk_combo_box_text_append_text(combo_box, "1:16\0"); return((GtkComboBox *) combo_box); } /** * ags_zoom_combo_box_new: * * Creates an #GtkComboBox to select tact * * Returns: a new #GtkComboBox * * Since: 0.4 */ GtkComboBox* ags_tact_combo_box_new() { GtkComboBoxText *combo_box; combo_box = (GtkComboBoxText *) gtk_combo_box_text_new(); gtk_combo_box_text_append_text(combo_box, "16/1\0"); gtk_combo_box_text_append_text(combo_box, "8/1\0"); gtk_combo_box_text_append_text(combo_box, "4/1\0"); gtk_combo_box_text_append_text(combo_box, "2/1\0"); gtk_combo_box_text_append_text(combo_box, "1/1\0"); gtk_combo_box_text_append_text(combo_box, "1/2\0"); gtk_combo_box_text_append_text(combo_box, "1/4\0"); gtk_combo_box_text_append_text(combo_box, "1/8\0"); gtk_combo_box_text_append_text(combo_box, "1/16\0"); return((GtkComboBox *) combo_box); } gsequencer-0.6.37/src/ags/X/ags_line.h0000644000175000017500000000524312626272146014407 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_LINE_H__ #define __AGS_LINE_H__ #include #include #include #include #include #define AGS_TYPE_LINE (ags_line_get_type()) #define AGS_LINE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_LINE, AgsLine)) #define AGS_LINE_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_LINE, AgsLineClass)) #define AGS_IS_LINE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_LINE)) #define AGS_IS_LINE_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_LINE)) #define AGS_LINE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_LINE, AgsLineClass)) #define AGS_LINE_DEFAULT_VERSION "0.4.2\0" #define AGS_LINE_DEFAULT_BUILD_ID "CEST 02-10-2014 19:36\0" typedef struct _AgsLine AgsLine; typedef struct _AgsLineClass AgsLineClass; typedef enum{ AGS_LINE_CONNECTED = 1, AGS_LINE_GROUPED = 1 << 1, AGS_LINE_MAPPED_RECALL = 1 << 2, AGS_LINE_PREMAPPED_RECALL = 1 << 3, }AgsLineFlags; struct _AgsLine { GtkVBox vbox; guint flags; gchar *version; gchar *build_id; gchar *name; AgsChannel *channel; GtkWidget *pad; GtkLabel *label; GtkToggleButton *group; AgsExpander *expander; }; struct _AgsLineClass { GtkVBoxClass vbox; void (*set_channel)(AgsLine *line, AgsChannel *channel); void (*group_changed)(AgsLine *line); void (*map_recall)(AgsLine *line, guint output_pad_start); GList* (*find_port)(AgsLine *line); }; GType ags_line_get_type(void); void ags_line_set_channel(AgsLine *line, AgsChannel *channel); void ags_line_group_changed(AgsLine *line); GList* ags_line_find_next_grouped(GList *line); void ags_line_map_recall(AgsLine *line, guint output_pad_start); GList* ags_line_find_port(AgsLine *line); AgsLine* ags_line_new(GtkWidget *pad, AgsChannel *channel); #endif /*__AGS_LINE_H__*/ gsequencer-0.6.37/src/ags/X/ags_navigation_callbacks.c0000644000175000017500000003177012627073000017602 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include extern pthread_mutex_t ags_application_mutex; void ags_navigation_parent_set_callback(GtkWidget *widget, GtkObject *old_parent, gpointer data) { AgsWindow *window; AgsNavigation *navigation; if(old_parent != NULL) return; window = AGS_WINDOW(gtk_widget_get_ancestor(widget, AGS_TYPE_WINDOW)); navigation = AGS_NAVIGATION(widget); navigation->devout = window->devout; } gboolean ags_navigation_destroy_callback(GtkObject *object, gpointer data) { ags_navigation_destroy(object); return(FALSE); } void ags_navigation_show_callback(GtkWidget *widget, gpointer data) { ags_navigation_show(widget); } void ags_navigation_expander_callback(GtkWidget *widget, AgsNavigation *navigation) { GtkArrow *arrow; GList *list; list = gtk_container_get_children((GtkContainer *) widget); arrow = (GtkArrow *) list->data; g_list_free(list); list = gtk_container_get_children((GtkContainer *) navigation); widget = (GtkWidget *) list->next->data; g_list_free(list); if(arrow->arrow_type == GTK_ARROW_DOWN){ gtk_widget_hide_all(widget); arrow->arrow_type = GTK_ARROW_RIGHT; }else{ gtk_widget_show_all(widget); arrow->arrow_type = GTK_ARROW_DOWN; } } void ags_navigation_bpm_callback(GtkWidget *widget, AgsNavigation *navigation) { AgsWindow *window; AgsApplyBpm *apply_bpm; AgsAudioLoop *audio_loop; AgsTaskThread *task_thread; AgsMain *ags_main; window = AGS_WINDOW(gtk_widget_get_ancestor(widget, AGS_TYPE_WINDOW)); ags_main = window->ags_main; /* get audio loop */ pthread_mutex_lock(&(ags_application_mutex)); audio_loop = ags_main->main_loop; pthread_mutex_unlock(&(ags_application_mutex)); /* get task thread */ task_thread = (AgsTaskThread *) ags_thread_find_type(audio_loop, AGS_TYPE_TASK_THREAD); apply_bpm = ags_apply_bpm_new(G_OBJECT(window->devout), navigation->bpm->adjustment->value); ags_task_thread_append_task(task_thread, AGS_TASK(apply_bpm)); } void ags_navigation_rewind_callback(GtkWidget *widget, AgsNavigation *navigation) { AgsWindow *window; gdouble tact; window = AGS_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(navigation))); tact = window->devout->tact_counter - navigation->start_tact; gtk_spin_button_set_value(navigation->position_tact, tact + (-1.0 * AGS_NAVIGATION_REWIND_STEPS)); } void ags_navigation_prev_callback(GtkWidget *widget, AgsNavigation *navigation) { AgsWindow *window; gdouble tact; window = AGS_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(navigation))); tact = window->devout->tact_counter - navigation->start_tact; gtk_spin_button_set_value(navigation->position_tact, tact + (-1.0 * AGS_NAVIGATION_SEEK_STEPS)); } void ags_navigation_play_callback(GtkWidget *widget, AgsNavigation *navigation) { AgsWindow *window; AgsMachine *machine; GList *machines, *machines_start; gboolean initialized_time; if((AGS_NAVIGATION_BLOCK_PLAY & (navigation->flags)) != 0){ return; } window = AGS_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(navigation))); machines_start = machines = gtk_container_get_children(GTK_CONTAINER(window->machines)); initialized_time = FALSE; while(machines != NULL){ machine = AGS_MACHINE(machines->data); if(((AGS_MACHINE_IS_SEQUENCER & (machine->flags)) != 0) || (AGS_MACHINE_IS_SYNTHESIZER & (machine->flags)) != 0){ #ifdef AGS_DEBUG printf("found machine to play!\n\0"); #endif if(!initialized_time){ initialized_time = TRUE; navigation->start_tact = window->devout->tact_counter; } ags_machine_set_run_extended(machine, TRUE, !gtk_toggle_button_get_active(navigation->exclude_sequencer), TRUE); } machines = machines->next; } g_list_free(machines_start); } void ags_navigation_stop_callback(GtkWidget *widget, AgsNavigation *navigation) { AgsWindow *window; AgsMachine *machine; GList *machines,*machines_start; gchar *timestr; window = AGS_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(navigation))); machines_start = machines = gtk_container_get_children(GTK_CONTAINER(window->machines)); while(machines != NULL){ machine = AGS_MACHINE(machines->data); if((AGS_MACHINE_IS_SEQUENCER & (machine->flags)) != 0 || (AGS_MACHINE_IS_SYNTHESIZER & (machine->flags)) != 0){ printf("found machine to stop!\n\0"); ags_machine_set_run_extended(machine, FALSE, !gtk_toggle_button_get_active(navigation->exclude_sequencer), TRUE); } machines = machines->next; } g_list_free(machines_start); /* toggle play button */ navigation->flags |= AGS_NAVIGATION_BLOCK_PLAY; gtk_toggle_button_set_active(navigation->play, FALSE); navigation->flags &= (~AGS_NAVIGATION_BLOCK_PLAY); navigation->start_tact = 0.0; timestr = ags_navigation_tact_to_time_string(0.0, navigation->bpm->adjustment->value, window->devout->delay_factor); gtk_label_set_text(navigation->duration_time, timestr); g_free(timestr); /* reset editor */ window->editor->current_tact = 0.0; } void ags_navigation_next_callback(GtkWidget *widget, AgsNavigation *navigation) { AgsWindow *window; gdouble tact; window = AGS_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(navigation))); tact = window->devout->tact_counter - navigation->start_tact; gtk_spin_button_set_value(navigation->position_tact, tact + AGS_NAVIGATION_REWIND_STEPS); } void ags_navigation_forward_callback(GtkWidget *widget, AgsNavigation *navigation) { AgsWindow *window; gdouble tact; window = AGS_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(navigation))); tact = window->devout->tact_counter - navigation->start_tact; gtk_spin_button_set_value(navigation->position_tact, tact + AGS_NAVIGATION_DEFAULT_TACT_STEP); } void ags_navigation_loop_callback(GtkWidget *widget, AgsNavigation *navigation) { AgsWindow *window; AgsMachine *machine; AgsAudio *audio; AgsRecall *recall; GList *machines, *machines_start; GList *list, *list_start; GValue value = {0,}; window = AGS_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(navigation))); machines_start = machines = gtk_container_get_children(GTK_CONTAINER(window->machines)); g_value_init(&value, G_TYPE_BOOLEAN); g_value_set_boolean(&value, gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))); while(machines != NULL){ machine = AGS_MACHINE(machines->data); if((AGS_MACHINE_IS_SEQUENCER & (machine->flags)) !=0 || (AGS_MACHINE_IS_SYNTHESIZER & (machine->flags)) != 0){ g_message("found machine to loop!\n\0"); audio = machine->audio; list = audio->play; while((list = ags_recall_find_type(list, AGS_TYPE_COUNT_BEATS_AUDIO)) != NULL){ recall = AGS_RECALL(list->data); ags_port_safe_write(AGS_COUNT_BEATS_AUDIO(recall)->notation_loop, &value); list = list->next; } } machines = machines->next; } g_list_free(machines_start); /* enable fader */ list = window->editor->editor_child; if(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))){ while(list != NULL){ GtkWidget *edit_widget; edit_widget = AGS_EDITOR_CHILD(list->data)->edit_widget; if(AGS_IS_PATTERN_EDIT(edit_widget)){ AGS_PATTERN_EDIT(edit_widget)->flags |= AGS_PATTERN_EDIT_DRAW_FADER; }else if(AGS_IS_NOTE_EDIT(edit_widget)){ AGS_NOTE_EDIT(edit_widget)->flags |= AGS_NOTE_EDIT_DRAW_FADER; } list = list->next; } }else{ while(list != NULL){ GtkWidget *edit_widget; edit_widget = AGS_EDITOR_CHILD(list->data)->edit_widget; if(AGS_IS_PATTERN_EDIT(edit_widget)){ AGS_PATTERN_EDIT(edit_widget)->flags &= (~AGS_PATTERN_EDIT_DRAW_FADER); }else if(AGS_IS_NOTE_EDIT(edit_widget)){ AGS_NOTE_EDIT(edit_widget)->flags &= (~AGS_NOTE_EDIT_DRAW_FADER); } list = list->next; } } } void ags_navigation_position_tact_callback(GtkWidget *widget, AgsNavigation *navigation) { ags_navigation_change_position(navigation, gtk_spin_button_get_value((GtkSpinButton *) widget)); } void ags_navigation_duration_tact_callback(GtkWidget *widget, AgsNavigation *navigation) { /* empty */ } void ags_navigation_loop_left_tact_callback(GtkWidget *widget, AgsNavigation *navigation) { AgsWindow *window; AgsMachine *machine; AgsAudio *audio; AgsRecall *recall; GList *machines, *machines_start; GList *list; // find AgsPlayNotationAudio and AgsCopyPatternAudio GValue value = {0,}; window = AGS_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(navigation))); machines_start = machines = gtk_container_get_children(GTK_CONTAINER(window->machines)); g_value_init(&value, G_TYPE_DOUBLE); g_value_set_boolean(&value, gtk_spin_button_get_value(GTK_SPIN_BUTTON(widget))); while(machines != NULL){ machine = AGS_MACHINE(machines->data); if((AGS_MACHINE_IS_SEQUENCER & (machine->flags)) !=0 || (AGS_MACHINE_IS_SYNTHESIZER & (machine->flags)) != 0){ g_message("found machine to loop!\n\0"); audio = machine->audio; list = audio->play; while((list = ags_recall_find_type(list, AGS_TYPE_COUNT_BEATS_AUDIO)) != NULL){ recall = AGS_RECALL(list->data); ags_port_safe_write(AGS_COUNT_BEATS_AUDIO(recall)->notation_loop_start, &value); list = list->next; } } machines = machines->next; } g_list_free(machines_start); } void ags_navigation_loop_right_tact_callback(GtkWidget *widget, AgsNavigation *navigation) { AgsWindow *window; AgsMachine *machine; AgsAudio *audio; AgsRecall *recall; GList *machines, *machines_start; GList *list; // find AgsPlayNotationAudio and AgsCopyPatternAudio GValue value = {0,}; window = AGS_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(navigation))); machines_start = machines = gtk_container_get_children(GTK_CONTAINER(window->machines)); g_value_init(&value, G_TYPE_DOUBLE); g_value_set_boolean(&value, gtk_spin_button_get_value(GTK_SPIN_BUTTON(widget))); while(machines != NULL){ machine = AGS_MACHINE(machines->data); if((AGS_MACHINE_IS_SEQUENCER & (machine->flags)) !=0 || (AGS_MACHINE_IS_SYNTHESIZER & (machine->flags)) != 0){ g_message("found machine to loop!\n\0"); audio = machine->audio; list = audio->play; while((list = ags_recall_find_type(list, AGS_TYPE_COUNT_BEATS_AUDIO)) != NULL){ recall = AGS_RECALL(list->data); ags_port_safe_write(AGS_COUNT_BEATS_AUDIO(recall)->notation_loop_end, &value); list = list->next; } } machines = machines->next; } g_list_free(machines_start); } void ags_navigation_tic_callback(AgsDevout *devout, AgsNavigation *navigation) { AgsWindow *window; AgsChangeTact *change_tact; AgsDisplayTact *display_tact; AgsAudioLoop *audio_loop; AgsTaskThread *task_thread; AgsMain *ags_main; if((AGS_NAVIGATION_BLOCK_TIC & (navigation->flags)) != 0){ navigation->flags &= (~AGS_NAVIGATION_BLOCK_TIC); return; } window = AGS_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(navigation))); if(window->devout->delay_counter == 0.0){ ags_main = window->ags_main; /* get audio loop */ pthread_mutex_lock(&(ags_application_mutex)); audio_loop = ags_main->main_loop; pthread_mutex_unlock(&(ags_application_mutex)); /* get task thread */ task_thread = (AgsTaskThread *) ags_thread_find_type(audio_loop, AGS_TYPE_TASK_THREAD); display_tact = ags_display_tact_new((GtkWidget *) navigation); ags_task_thread_append_task(task_thread, display_tact); } } void ags_navigation_devout_stop_callback(AgsDevout *devout, AgsNavigation *navigation) { navigation->flags |= AGS_NAVIGATION_BLOCK_TIC; } gsequencer-0.6.37/src/ags/X/ags_property_editor_callbacks.h0000644000175000017500000000214012621463700020673 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_PROPERTY_EDITOR_CALLBACKS_H__ #define __AGS_PROPERTY_EDITOR_CALLBACKS_H__ #include #include #include #include void ags_property_editor_enable_callback(GtkToggleButton *toggle, AgsPropertyEditor *property_editor); #endif /*__AGS_PROPERTY_EDITOR_CALLBACKS_H__*/ gsequencer-0.6.37/src/ags/X/ags_property_listing_editor.c0000644000175000017500000001037412626272146020437 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_property_listing_editor_class_init(AgsPropertyListingEditorClass *property_listing_editor); void ags_property_listing_editor_connectable_interface_init(AgsConnectableInterface *connectable); void ags_property_listing_editor_init(AgsPropertyListingEditor *property_listing_editor); void ags_property_listing_editor_connect(AgsConnectable *connectable); void ags_property_listing_editor_disconnect(AgsConnectable *connectable); void ags_property_listing_editor_destroy(GtkObject *object); void ags_property_listing_editor_show(GtkWidget *widget); static AgsConnectableInterface* ags_property_listing_editor_parent_connectable_interface; GType ags_property_listing_editor_get_type(void) { static GType ags_type_property_listing_editor = 0; if(!ags_type_property_listing_editor){ static const GTypeInfo ags_property_listing_editor_info = { sizeof (AgsPropertyListingEditorClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_property_listing_editor_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsPropertyListingEditor), 0, /* n_preallocs */ (GInstanceInitFunc) ags_property_listing_editor_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_property_listing_editor_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_property_listing_editor = g_type_register_static(AGS_TYPE_PROPERTY_EDITOR, "AgsPropertyListingEditor\0", &ags_property_listing_editor_info, 0); g_type_add_interface_static(ags_type_property_listing_editor, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return(ags_type_property_listing_editor); } void ags_property_listing_editor_class_init(AgsPropertyListingEditorClass *property_listing_editor) { } void ags_property_listing_editor_connectable_interface_init(AgsConnectableInterface *connectable) { ags_property_listing_editor_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->is_ready = NULL; connectable->is_connected = NULL; connectable->connect = ags_property_listing_editor_connect; connectable->disconnect = ags_property_listing_editor_disconnect; } void ags_property_listing_editor_init(AgsPropertyListingEditor *property_listing_editor) { } void ags_property_listing_editor_connect(AgsConnectable *connectable) { AgsPropertyListingEditor *property_listing_editor; GList *pad_list; ags_property_listing_editor_parent_connectable_interface->connect(connectable); /* AgsPropertyListingEditor */ property_listing_editor = AGS_PROPERTY_LISTING_EDITOR(connectable); } void ags_property_listing_editor_disconnect(AgsConnectable *connectable) { /* empty */ } void ags_property_listing_editor_destroy(GtkObject *object) { AgsPropertyListingEditor *property_listing_editor; property_listing_editor = (AgsPropertyListingEditor *) object; } void ags_property_listing_editor_show(GtkWidget *widget) { AgsPropertyListingEditor *property_listing_editor = (AgsPropertyListingEditor *) widget; } AgsPropertyListingEditor* ags_property_listing_editor_new() { AgsPropertyListingEditor *property_listing_editor; property_listing_editor = (AgsPropertyListingEditor *) g_object_new(AGS_TYPE_PROPERTY_LISTING_EDITOR, NULL); return(property_listing_editor); } gsequencer-0.6.37/src/ags/X/ags_machine_editor_callbacks.h0000644000175000017500000000262012621463700020416 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_MACHINE_EDITOR_CALLBACKS_H__ #define __AGS_MACHINE_EDITOR_CALLBACKS_H__ #include #include #include #include int ags_machine_editor_switch_page_callback(GtkNotebook *notebook, GtkNotebookPage *page, guint page_num, AgsMachineEditor *machine_editor); int ags_machine_editor_apply_callback(GtkWidget *widget, AgsMachineEditor *machine_editor); int ags_machine_editor_ok_callback(GtkWidget *widget, AgsMachineEditor *machine_editor); int ags_machine_editor_cancel_callback(GtkWidget *widget, AgsMachineEditor *machine_editor); #endif /*__AGS_MACHINE_EDITOR_CALLBACKS_H__*/ gsequencer-0.6.37/src/ags/X/ags_machine_editor.c0000644000175000017500000004032412626272146016424 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include void ags_machine_editor_class_init(AgsMachineEditorClass *machine_editor); void ags_machine_editor_connectable_interface_init(AgsConnectableInterface *connectable); void ags_machine_editor_applicable_interface_init(AgsApplicableInterface *applicable); void ags_machine_editor_init(AgsMachineEditor *machine_editor); void ags_machine_editor_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_machine_editor_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_machine_editor_connect(AgsConnectable *connectable); void ags_machine_editor_disconnect(AgsConnectable *connectable); void ags_machine_editor_set_update(AgsApplicable *applicable, gboolean update); void ags_machine_editor_apply(AgsApplicable *applicable); void ags_machine_editor_reset(AgsApplicable *applicable); void ags_machine_editor_real_set_machine(AgsMachineEditor *machine_editor, AgsMachine *machine); /** * SECTION:ags_machine_editor * @short_description: pack pad editors. * @title: AgsMachineEditor * @section_id: * @include: ags/X/ags_machine_editor.h * * #AgsMachineEditor is a composite widget to edit all aspects of #AgsAudio. * It consists of multiple child editors. */ enum{ SET_MACHINE, LAST_SIGNAL, }; enum{ PROP_0, PROP_MACHINE, }; static guint machine_editor_signals[LAST_SIGNAL]; GType ags_machine_editor_get_type(void) { static GType ags_type_machine_editor = 0; if(!ags_type_machine_editor){ static const GTypeInfo ags_machine_editor_info = { sizeof (AgsMachineEditorClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_machine_editor_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsMachineEditor), 0, /* n_preallocs */ (GInstanceInitFunc) ags_machine_editor_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_machine_editor_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_applicable_interface_info = { (GInterfaceInitFunc) ags_machine_editor_applicable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_machine_editor = g_type_register_static(GTK_TYPE_DIALOG, "AgsMachineEditor\0", &ags_machine_editor_info, 0); g_type_add_interface_static(ags_type_machine_editor, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_machine_editor, AGS_TYPE_APPLICABLE, &ags_applicable_interface_info); } return(ags_type_machine_editor); } void ags_machine_editor_class_init(AgsMachineEditorClass *machine_editor) { GObjectClass *gobject; GParamSpec *param_spec; /* GObjectClass */ gobject = (GObjectClass *) machine_editor; gobject->set_property = ags_machine_editor_set_property; gobject->get_property = ags_machine_editor_get_property; /* properties */ /** * AgsMachine:machine: * * The #AgsMachine to edit. * * Since: 0.3 */ param_spec = g_param_spec_object("machine\0", "assigned machine\0", "The machine which this machine editor is assigned with\0", AGS_TYPE_MACHINE, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_MACHINE, param_spec); /* AgsMachineEditorClass */ machine_editor->set_machine = ags_machine_editor_real_set_machine; /* signals */ /** * AgsMachine::add-default-recalls: * @machine_editor: the #AgsMachineEditor * @machine: the #AgsMachine to set * * The ::set-machine notify about modified machine. */ machine_editor_signals[SET_MACHINE] = g_signal_new("set_machine\0", G_TYPE_FROM_CLASS (machine_editor), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AgsMachineEditorClass, set_machine), NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, G_TYPE_OBJECT); } void ags_machine_editor_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->is_ready = NULL; connectable->is_connected = NULL; connectable->connect = ags_machine_editor_connect; connectable->disconnect = ags_machine_editor_disconnect; } void ags_machine_editor_applicable_interface_init(AgsApplicableInterface *applicable) { applicable->set_update = ags_machine_editor_set_update; applicable->apply = ags_machine_editor_apply; applicable->reset = ags_machine_editor_reset; } void ags_machine_editor_init(AgsMachineEditor *machine_editor) { GtkNotebook *notebook; GtkScrolledWindow *scrolled_window; gtk_window_set_title((GtkWindow *) machine_editor, g_strdup("properties\0")); machine_editor->flags = 0; machine_editor->version = AGS_MACHINE_EDITOR_DEFAULT_VERSION; machine_editor->build_id = AGS_MACHINE_EDITOR_DEFAULT_BUILD_ID; machine_editor->machine = NULL; machine_editor->notebook = notebook = (GtkNotebook *) gtk_notebook_new(); gtk_box_pack_start((GtkBox *) machine_editor->dialog.vbox, (GtkWidget*) notebook, TRUE, TRUE, 0); /* AgsOutput */ machine_editor->output_scrolled_window = scrolled_window = (GtkScrolledWindow *) gtk_scrolled_window_new(NULL, NULL); gtk_notebook_append_page(notebook, (GtkWidget *) scrolled_window, (GtkWidget *) gtk_label_new(g_strdup("output\0"))); /* AgsInput */ machine_editor->input_scrolled_window = scrolled_window = (GtkScrolledWindow *) gtk_scrolled_window_new(NULL, NULL); gtk_notebook_append_page(notebook, (GtkWidget *) scrolled_window, (GtkWidget *) gtk_label_new(g_strdup("input\0"))); /* AgsOutput link editor */ machine_editor->output_link_editor_scrolled_window = scrolled_window = (GtkScrolledWindow *) gtk_scrolled_window_new(NULL, NULL); gtk_notebook_append_page(notebook, (GtkWidget *) scrolled_window, (GtkWidget *) gtk_label_new(g_strdup("link output\0"))); /* AgsInput link editor */ machine_editor->input_link_editor_scrolled_window = scrolled_window = (GtkScrolledWindow *) gtk_scrolled_window_new(NULL, NULL); gtk_notebook_append_page(notebook, (GtkWidget *) scrolled_window, (GtkWidget *) gtk_label_new(g_strdup("link input\0"))); /* resize editor */ machine_editor->resize_editor_scrolled_window = scrolled_window = (GtkScrolledWindow *) gtk_scrolled_window_new(NULL, NULL); gtk_notebook_append_page(notebook, (GtkWidget *) scrolled_window, (GtkWidget *) gtk_label_new(g_strdup("resize channels\0"))); /* GtkButton's in GtkDialog->action_area */ machine_editor->apply = (GtkButton *) gtk_button_new_from_stock(GTK_STOCK_APPLY); gtk_box_pack_start((GtkBox *) machine_editor->dialog.action_area, (GtkWidget *) machine_editor->apply, FALSE, FALSE, 0); machine_editor->ok = (GtkButton *) gtk_button_new_from_stock(GTK_STOCK_OK); gtk_box_pack_start((GtkBox *) machine_editor->dialog.action_area, (GtkWidget *) machine_editor->ok, FALSE, FALSE, 0); machine_editor->cancel = (GtkButton *) gtk_button_new_from_stock(GTK_STOCK_CANCEL); gtk_box_pack_start((GtkBox *) machine_editor->dialog.action_area, (GtkWidget *) machine_editor->cancel, FALSE, FALSE, 0); } void ags_machine_editor_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsMachineEditor *machine_editor; machine_editor = AGS_MACHINE_EDITOR(gobject); switch(prop_id){ case PROP_MACHINE: { AgsMachine *machine; machine = (AgsMachine *) g_value_get_object(value); ags_machine_editor_set_machine(machine_editor, machine); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_machine_editor_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsMachineEditor *machine_editor; machine_editor = AGS_MACHINE_EDITOR(gobject); switch(prop_id){ case PROP_MACHINE: g_value_set_object(value, machine_editor->machine); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_machine_editor_connect(AgsConnectable *connectable) { AgsMachineEditor *machine_editor; machine_editor = AGS_MACHINE_EDITOR(connectable); /* GtkNotebook */ g_signal_connect((GtkNotebook *) machine_editor->notebook, "switch-page\0", G_CALLBACK(ags_machine_editor_switch_page_callback), (gpointer) machine_editor); /* AgsMachineEditor tabs */ ags_connectable_connect(AGS_CONNECTABLE(machine_editor->output_editor)); ags_connectable_connect(AGS_CONNECTABLE(machine_editor->input_editor)); ags_connectable_connect(AGS_CONNECTABLE(machine_editor->output_link_editor)); ags_connectable_connect(AGS_CONNECTABLE(machine_editor->input_link_editor)); ags_connectable_connect(AGS_CONNECTABLE(machine_editor->resize_editor)); /* AgsMachineEditor buttons */ g_signal_connect((GObject *) machine_editor->apply, "clicked\0", G_CALLBACK(ags_machine_editor_apply_callback), (gpointer) machine_editor); g_signal_connect((GObject *) machine_editor->ok, "clicked\0", G_CALLBACK(ags_machine_editor_ok_callback), (gpointer) machine_editor); g_signal_connect((GObject *) machine_editor->cancel, "clicked\0", G_CALLBACK(ags_machine_editor_cancel_callback), (gpointer) machine_editor); } void ags_machine_editor_disconnect(AgsConnectable *connectable) { AgsMachineEditor *machine_editor; machine_editor = AGS_MACHINE_EDITOR(connectable); /* AgsMachineEditor tabs */ ags_connectable_disconnect(AGS_CONNECTABLE(machine_editor->output_editor)); ags_connectable_disconnect(AGS_CONNECTABLE(machine_editor->input_editor)); ags_connectable_disconnect(AGS_CONNECTABLE(machine_editor->output_link_editor)); ags_connectable_disconnect(AGS_CONNECTABLE(machine_editor->input_link_editor)); ags_connectable_disconnect(AGS_CONNECTABLE(machine_editor->resize_editor)); } void ags_machine_editor_set_update(AgsApplicable *applicable, gboolean update) { AgsMachineEditor *machine_editor; machine_editor = AGS_MACHINE_EDITOR(applicable); ags_applicable_set_update(AGS_APPLICABLE(machine_editor->output_editor), update); ags_applicable_set_update(AGS_APPLICABLE(machine_editor->input_editor), update); ags_applicable_set_update(AGS_APPLICABLE(machine_editor->output_link_editor), update); ags_applicable_set_update(AGS_APPLICABLE(machine_editor->input_link_editor), update); ags_applicable_set_update(AGS_APPLICABLE(machine_editor->resize_editor), update); } void ags_machine_editor_apply(AgsApplicable *applicable) { AgsMachineEditor *machine_editor; machine_editor = AGS_MACHINE_EDITOR(applicable); ags_applicable_apply(AGS_APPLICABLE(machine_editor->output_editor)); ags_applicable_apply(AGS_APPLICABLE(machine_editor->input_editor)); ags_applicable_apply(AGS_APPLICABLE(machine_editor->output_link_editor)); ags_applicable_apply(AGS_APPLICABLE(machine_editor->input_link_editor)); ags_applicable_apply(AGS_APPLICABLE(machine_editor->resize_editor)); } void ags_machine_editor_reset(AgsApplicable *applicable) { AgsMachineEditor *machine_editor; machine_editor = AGS_MACHINE_EDITOR(applicable); ags_applicable_reset(AGS_APPLICABLE(machine_editor->output_editor)); ags_applicable_reset(AGS_APPLICABLE(machine_editor->input_editor)); ags_applicable_reset(AGS_APPLICABLE(machine_editor->output_link_editor)); ags_applicable_reset(AGS_APPLICABLE(machine_editor->input_link_editor)); ags_applicable_reset(AGS_APPLICABLE(machine_editor->resize_editor)); } /** * ags_machine_editor_add_children: * * Add all child editors. * * Since: 0.3 */ void ags_machine_editor_add_children(AgsMachineEditor *machine_editor) { GParameter *output_link_editor_child_parameter; GParameter *input_link_editor_child_parameter; /* output */ output_link_editor_child_parameter = g_new0(GParameter, 1); output_link_editor_child_parameter[0].name = "channel_type"; g_value_init(&(output_link_editor_child_parameter[0].value), G_TYPE_GTYPE); g_value_set_gtype(&(output_link_editor_child_parameter[0].value), AGS_TYPE_OUTPUT); /* input */ input_link_editor_child_parameter = g_new0(GParameter, 1); input_link_editor_child_parameter[0].name = "channel_type"; g_value_init(&(input_link_editor_child_parameter[0].value), G_TYPE_GTYPE); g_value_set_gtype(&(input_link_editor_child_parameter[0].value), AGS_TYPE_INPUT); /* AgsOutput */ machine_editor->output_editor = ags_listing_editor_new(AGS_TYPE_OUTPUT); gtk_scrolled_window_add_with_viewport(machine_editor->output_scrolled_window, (GtkWidget *) machine_editor->output_editor); /* AgsInput */ machine_editor->input_editor = ags_listing_editor_new(AGS_TYPE_INPUT); gtk_scrolled_window_add_with_viewport(machine_editor->input_scrolled_window, (GtkWidget *) machine_editor->input_editor); /* AgsOutput link editor */ machine_editor->output_link_editor = ags_property_collection_editor_new(AGS_TYPE_LINK_COLLECTION_EDITOR, 1, output_link_editor_child_parameter); gtk_scrolled_window_add_with_viewport(machine_editor->output_link_editor_scrolled_window, (GtkWidget *) machine_editor->output_link_editor); /* AgsInput link editor */ machine_editor->input_link_editor = ags_property_collection_editor_new(AGS_TYPE_LINK_COLLECTION_EDITOR, 1, input_link_editor_child_parameter); gtk_scrolled_window_add_with_viewport(machine_editor->input_link_editor_scrolled_window, (GtkWidget *) machine_editor->input_link_editor); /* resize editor */ machine_editor->resize_editor = ags_resize_editor_new(AGS_TYPE_OUTPUT); gtk_scrolled_window_add_with_viewport(machine_editor->resize_editor_scrolled_window, (GtkWidget *) machine_editor->resize_editor); } void ags_machine_editor_real_set_machine(AgsMachineEditor *machine_editor, AgsMachine *machine) { if(machine_editor->machine != NULL){ gtk_widget_destroy(GTK_WIDGET(machine_editor->output_editor)); gtk_widget_destroy(GTK_WIDGET(machine_editor->input_editor)); gtk_widget_destroy(GTK_WIDGET(machine_editor->output_link_editor)); gtk_widget_destroy(GTK_WIDGET(machine_editor->input_link_editor)); gtk_widget_destroy(GTK_WIDGET(machine_editor->resize_editor)); } machine_editor->machine = machine; if(machine != NULL) ags_machine_editor_add_children(machine_editor); } /** * ags_machine_editor_set_machine: * @machine_editor: an #AgsMachineEditor * @machine: the new #AgsMachine * * Is emitted as machine gets modified. * * Since: 0.3 */ void ags_machine_editor_set_machine(AgsMachineEditor *machine_editor, AgsMachine *machine) { g_return_if_fail(AGS_IS_MACHINE_EDITOR(machine_editor)); g_object_ref((GObject *) machine_editor); g_signal_emit(G_OBJECT(machine_editor), machine_editor_signals[SET_MACHINE], 0, machine); g_object_unref((GObject *) machine_editor); } /** * ags_machine_editor_new: * @machine: the assigned machine. * * Creates an #AgsMachineEditor * * Returns: a new #AgsMachineEditor * * Since: 0.3 */ AgsMachineEditor* ags_machine_editor_new(AgsMachine *machine) { AgsMachineEditor *machine_editor; machine_editor = (AgsMachineEditor *) g_object_new(AGS_TYPE_MACHINE_EDITOR, "machine\0", machine, NULL); return(machine_editor); } gsequencer-0.6.37/src/ags/X/ags_pad_editor_callbacks.h0000644000175000017500000000265112621463700017562 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_PAD_EDITOR_CALLBACKS_H__ #define __AGS_PAD_EDITOR_CALLBACKS_H__ #include #include #include #include #include int ags_pad_editor_parent_set_callback(GtkWidget *widget, GtkObject *old_parent, AgsPadEditor *pad_editor); int ags_pad_editor_destroy_callback(GtkObject *object, AgsPadEditor *pad_editor); int ags_pad_editor_show_callback(GtkWidget *widget, AgsPadEditor *pad_editor); void ags_pad_editor_set_audio_channels_callback(AgsAudio *audio, guint audio_channels, guint audio_channels_old, AgsPadEditor *pad_editor); #endif /*__AGS_PAD_EDITOR_CALLBACKS_H__*/ gsequencer-0.6.37/src/ags/X/ags_property_collection_editor.c0000644000175000017500000002005512626272146021116 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include void ags_property_collection_editor_class_init(AgsPropertyCollectionEditorClass *property_collection_editor); void ags_property_collection_editor_connectable_interface_init(AgsConnectableInterface *connectable); void ags_property_collection_editor_applicable_interface_init(AgsApplicableInterface *applicable); void ags_property_collection_editor_init(AgsPropertyCollectionEditor *property_collection_editor); void ags_property_collection_editor_connect(AgsConnectable *connectable); void ags_property_collection_editor_disconnect(AgsConnectable *connectable); void ags_property_collection_editor_set_update(AgsApplicable *applicable, gboolean update); void ags_property_collection_editor_apply(AgsApplicable *applicable); void ags_property_collection_editor_reset(AgsApplicable *applicable); void ags_property_collection_editor_destroy(GtkObject *object); void ags_property_collection_editor_show(GtkWidget *widget); /** * SECTION:ags_property_collection_editor * @short_description: Edit propertys in bulk mode. * @title: AgsPropertyCollectionEditor * @section_id: * @include: ags/X/ags_property_collection_editor.h * * #AgsPropertyCollectionEditor is a composite widget to modify propertys in bulk mode. A property collection * editor should be packed by a #AgsMachineEditor. */ AgsConnectableInterface *ags_property_collection_editor_parent_connectable_interface; GType ags_property_collection_editor_get_type(void) { static GType ags_type_property_collection_editor = 0; if(!ags_type_property_collection_editor){ static const GTypeInfo ags_property_collection_editor_info = { sizeof (AgsPropertyCollectionEditorClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_property_collection_editor_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsPropertyCollectionEditor), 0, /* n_preallocs */ (GInstanceInitFunc) ags_property_collection_editor_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_property_collection_editor_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_applicable_interface_info = { (GInterfaceInitFunc) ags_property_collection_editor_applicable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_property_collection_editor = g_type_register_static(AGS_TYPE_PROPERTY_EDITOR, "AgsPropertyCollectionEditor\0", &ags_property_collection_editor_info, 0); g_type_add_interface_static(ags_type_property_collection_editor, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_property_collection_editor, AGS_TYPE_APPLICABLE, &ags_applicable_interface_info); } return(ags_type_property_collection_editor); } void ags_property_collection_editor_class_init(AgsPropertyCollectionEditorClass *property_collection_editor) { } void ags_property_collection_editor_connectable_interface_init(AgsConnectableInterface *connectable) { ags_property_collection_editor_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_property_collection_editor_connect; connectable->disconnect = ags_property_collection_editor_disconnect; } void ags_property_collection_editor_applicable_interface_init(AgsApplicableInterface *applicable) { applicable->set_update = ags_property_collection_editor_set_update; applicable->apply = ags_property_collection_editor_apply; applicable->reset = ags_property_collection_editor_reset; } void ags_property_collection_editor_init(AgsPropertyCollectionEditor *property_collection_editor) { GtkAlignment *alignment; property_collection_editor->child = (GtkVBox *) gtk_vbox_new(FALSE, 16); gtk_box_pack_start(GTK_BOX(property_collection_editor), GTK_WIDGET(property_collection_editor->child), TRUE, TRUE, 0); alignment = (GtkAlignment *) gtk_alignment_new(0.0, 0.0, 0.0, 0.0); gtk_box_pack_start(GTK_BOX(property_collection_editor), GTK_WIDGET(alignment), FALSE, FALSE, 0); property_collection_editor->add_collection = (GtkButton *) gtk_button_new_from_stock(GTK_STOCK_ADD); gtk_container_add(GTK_CONTAINER(alignment), GTK_WIDGET(property_collection_editor->add_collection)); } void ags_property_collection_editor_connect(AgsConnectable *connectable) { AgsPropertyCollectionEditor *property_collection_editor; GList *pad_list; ags_property_collection_editor_parent_connectable_interface->connect(connectable); /* AgsPropertyCollectionEditor */ property_collection_editor = AGS_PROPERTY_COLLECTION_EDITOR(connectable); g_signal_connect(G_OBJECT(property_collection_editor->add_collection), "clicked\0", G_CALLBACK(ags_property_collection_editor_add_collection_callback), property_collection_editor); } void ags_property_collection_editor_disconnect(AgsConnectable *connectable) { /* empty */ } void ags_property_collection_editor_set_update(AgsApplicable *applicable, gboolean update) { AgsPropertyCollectionEditor *property_collection_editor; GList *list; property_collection_editor = AGS_PROPERTY_COLLECTION_EDITOR(applicable); /* empty */ } void ags_property_collection_editor_apply(AgsApplicable *applicable) { AgsPropertyCollectionEditor *property_collection_editor; GtkWidget *child; GList *list, *list_start; property_collection_editor = AGS_PROPERTY_COLLECTION_EDITOR(applicable); if((AGS_PROPERTY_EDITOR_ENABLED & (AGS_PROPERTY_EDITOR(property_collection_editor)->flags)) == 0) return; list_start = list = gtk_container_get_children(GTK_CONTAINER(property_collection_editor->child)); while(list != NULL){ child = GTK_WIDGET(g_object_get_data(G_OBJECT(list->data), "AgsChild\0")); ags_applicable_apply(AGS_APPLICABLE(child)); list = list->next; } g_list_free(list_start); } void ags_property_collection_editor_reset(AgsApplicable *applicable) { AgsPropertyCollectionEditor *property_collection_editor; property_collection_editor = AGS_PROPERTY_COLLECTION_EDITOR(applicable); /* empty */ } void ags_property_collection_editor_destroy(GtkObject *object) { /* empty */ } void ags_property_collection_editor_show(GtkWidget *widget) { /* empty */ } /** * ags_property_collection_editor_new: * @channel_type: either %AGS_TYPE_INPUT or %AGS_TYPE_OUTPUT * * Creates an #AgsPropertyCollectionEditor * * Returns: a new #AgsPropertyCollectionEditor * * Since: 0.3 */ AgsPropertyCollectionEditor* ags_property_collection_editor_new(GType child_type, guint child_parameter_count, GParameter *child_parameter) { AgsPropertyCollectionEditor *property_collection_editor; property_collection_editor = (AgsPropertyCollectionEditor *) g_object_new(AGS_TYPE_PROPERTY_COLLECTION_EDITOR, NULL); property_collection_editor->child_type = child_type; property_collection_editor->child_parameter_count = child_parameter_count; property_collection_editor->child_parameter = child_parameter; return(property_collection_editor); } gsequencer-0.6.37/src/ags/X/ags_navigation.h0000644000175000017500000000662012626272146015617 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_NAVIGATION_H__ #define __AGS_NAVIGATION_H__ #include #include #include #include #define AGS_TYPE_NAVIGATION (ags_navigation_get_type()) #define AGS_NAVIGATION(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_NAVIGATION, AgsNavigation)) #define AGS_NAVIGATION_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_NAVIGATION, AgsNavigationClass)) #define AGS_IS_NAVIGATION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_NAVIGATION)) #define AGS_IS_NAVIGATION_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_NAVIGATION)) #define AGS_NAVIGATION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_NAVIGATION, AgsNavigationClass)) #define AGS_NAVIGATION_DEFAULT_TACT_STEP (1.0) #define AGS_NAVIGATION_SEEK_STEPS (1.0) #define AGS_NAVIGATION_REWIND_STEPS (4.0) typedef struct _AgsNavigation AgsNavigation; typedef struct _AgsNavigationClass AgsNavigationClass; typedef enum{ AGS_NAVIGATION_BLOCK_TACT = 1, AGS_NAVIGATION_BLOCK_PLAY = 1 << 1, AGS_NAVIGATION_BLOCK_TIC = 1 << 2, }AgsNavigationFlags; struct _AgsNavigation { GtkVBox vbox; guint flags; AgsDevout *devout; gdouble start_tact; GtkToggleButton *expander; GtkSpinButton *bpm; gdouble current_bpm; GtkToggleButton *rewind; GtkButton *previous; GtkToggleButton *play; GtkButton *stop; GtkButton *next; GtkToggleButton *forward; GtkCheckButton *loop; GtkLabel *position_time; GtkSpinButton *position_tact; GtkLabel *duration_time; GtkSpinButton *duration_tact; GtkSpinButton *loop_left_tact; GtkSpinButton *loop_right_tact; GtkCheckButton *scroll; GtkCheckButton *exclude_sequencer; }; struct _AgsNavigationClass { GtkVBoxClass vbox; void (*change_position)(AgsNavigation *navigation, gdouble tact); }; GType ags_navigation_get_type(void); gchar* ags_navigation_tact_to_time_string(gdouble tact, gdouble bpm, gdouble delay_factor); gchar* ags_navigation_relative_tact_to_time_string(gchar *timestr, gdouble delay, gdouble bpm, gdouble delay_factor); gchar* ags_navigation_absolute_tact_to_time_string(gdouble tact, gdouble bpm, gdouble delay_factor); void ags_navigation_update_time_string(double tact, gdouble bpm, gdouble delay_factor, gchar *time_string); void ags_navigation_set_seeking_sensitive(AgsNavigation *navigation, gboolean enabled); void ags_navigation_change_position(AgsNavigation *navigation, gdouble tact); AgsNavigation* ags_navigation_new(); #endif /*__AGS_NAVIGATION_H__*/ gsequencer-0.6.37/src/ags/X/ags_line_member_callbacks.c0000644000175000017500000000562012621463700017720 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include int ags_line_member_parent_set_callback(GtkWidget *widget, GtkObject *old_parent, AgsLineMember *line_member) { if(old_parent == NULL){ //TODO:JK: implement me } } void ags_line_member_dial_changed_callback(GtkWidget *dial, AgsLineMember *line_member) { GtkAdjustment *adjustment; g_object_get(dial, "adjustment\0", &adjustment, NULL); ags_line_member_change_port(line_member, (gpointer) &(adjustment->value)); } void ags_line_member_vscale_changed_callback(GtkWidget *vscale, AgsLineMember *line_member) { GtkAdjustment *adjustment; adjustment = gtk_range_get_adjustment(GTK_RANGE(vscale)); ags_line_member_change_port(line_member, (gpointer) &(adjustment->value)); } void ags_line_member_hscale_changed_callback(GtkWidget *hscale, AgsLineMember *line_member) { GtkAdjustment *adjustment; adjustment = gtk_range_get_adjustment(GTK_RANGE(hscale)); ags_line_member_change_port(line_member, &(adjustment->value)); } void ags_line_member_spin_button_changed_callback(GtkWidget *spin_button, AgsLineMember *line_member) { GtkAdjustment *adjustment; adjustment = gtk_spin_button_get_adjustment((GtkSpinButton *) spin_button); ags_line_member_change_port(line_member, &(adjustment->value)); } void ags_line_member_check_button_clicked_callback(GtkWidget *check_button, AgsLineMember *line_member) { line_member->active = gtk_toggle_button_get_active((GtkToggleButton *) check_button); ags_line_member_change_port(line_member, &(line_member->active)); } void ags_line_member_toggle_button_clicked_callback(GtkWidget *toggle_button, AgsLineMember *line_member) { line_member->active = gtk_toggle_button_get_active((GtkToggleButton *) toggle_button); ags_line_member_change_port(line_member, &(line_member->active)); } void ags_line_member_button_clicked_callback(GtkWidget *button, AgsLineMember *line_member) { ags_line_member_change_port(line_member, &(line_member->active)); } void ags_line_member_port_safe_write_callback(AgsPort *port, GValue *value, AgsLineMember *line_member) { //TODO:JK: implement me } gsequencer-0.6.37/src/ags/X/ags_property_editor.c0000644000175000017500000001061512626272146016704 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include void ags_property_editor_class_init(AgsPropertyEditorClass *property_editor); void ags_property_editor_connectable_interface_init(AgsConnectableInterface *connectable); void ags_property_editor_init(AgsPropertyEditor *property_editor); void ags_property_editor_connect(AgsConnectable *connectable); void ags_property_editor_disconnect(AgsConnectable *connectable); void ags_property_editor_destroy(GtkObject *object); void ags_property_editor_show(GtkWidget *widget); /** * SECTION:ags_property_editor * @short_description: Property of audio, channels or pads in bulk mode. * @title: AgsPropertyEditor * @section_id: * @include: ags/X/ags_property_editor.h * * #AgsPropertyEditor is a composite widget to property. A property editor * should be packed by a #AgsPropertyCollectionEditor. */ GType ags_property_editor_get_type(void) { static GType ags_type_property_editor = 0; if(!ags_type_property_editor){ static const GTypeInfo ags_property_editor_info = { sizeof (AgsPropertyEditorClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_property_editor_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsPropertyEditor), 0, /* n_preallocs */ (GInstanceInitFunc) ags_property_editor_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_property_editor_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_property_editor = g_type_register_static(GTK_TYPE_VBOX, "AgsPropertyEditor\0", &ags_property_editor_info, 0); g_type_add_interface_static(ags_type_property_editor, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return(ags_type_property_editor); } void ags_property_editor_class_init(AgsPropertyEditorClass *property_editor) { } void ags_property_editor_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->is_ready = NULL; connectable->is_connected = NULL; connectable->connect = ags_property_editor_connect; connectable->disconnect = ags_property_editor_disconnect; } void ags_property_editor_init(AgsPropertyEditor *property_editor) { property_editor->flags = 0; property_editor->enabled = (GtkCheckButton *) gtk_check_button_new_with_label("enabled\0"); gtk_box_pack_start(GTK_BOX(property_editor), GTK_WIDGET(property_editor->enabled), FALSE, FALSE, 0); } void ags_property_editor_connect(AgsConnectable *connectable) { AgsPropertyEditor *property_editor; GList *pad_list; /* AgsPropertyEditor */ property_editor = AGS_PROPERTY_EDITOR(connectable); g_signal_connect_after(G_OBJECT(property_editor->enabled), "toggled\0", G_CALLBACK(ags_property_editor_enable_callback), property_editor); } void ags_property_editor_disconnect(AgsConnectable *connectable) { /* empty */ } void ags_property_editor_destroy(GtkObject *object) { AgsPropertyEditor *property_editor; property_editor = (AgsPropertyEditor *) object; } void ags_property_editor_show(GtkWidget *widget) { AgsPropertyEditor *property_editor = (AgsPropertyEditor *) widget; } /** * ags_property_editor_new: * * Creates an #AgsPropertyEditor * * Returns: a new #AgsPropertyEditor * * Since: 0.3 */ AgsPropertyEditor* ags_property_editor_new() { AgsPropertyEditor *property_editor; property_editor = (AgsPropertyEditor *) g_object_new(AGS_TYPE_PROPERTY_EDITOR, NULL); return(property_editor); } gsequencer-0.6.37/src/ags/X/ags_pad_editor.h0000644000175000017500000000426412621463700015565 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_PAD_EDITOR_H__ #define __AGS_PAD_EDITOR_H__ #include #include #include #include #define AGS_TYPE_PAD_EDITOR (ags_pad_editor_get_type()) #define AGS_PAD_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_PAD_EDITOR, AgsPadEditor)) #define AGS_PAD_EDITOR_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_PAD_EDITOR, AgsPadEditorClass)) #define AGS_IS_PAD_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_PAD_EDITOR)) #define AGS_IS_PAD_EDITOR_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_PAD_EDITOR)) #define AGS_PAD_EDITOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS (obj, AGS_TYPE_PAD_EDITOR, AgsPadEditorClass)) #define AGS_PAD_EDITOR_DEFAULT_VERSION "0.4.2\0" #define AGS_PAD_EDITOR_DEFAULT_BUILD_ID "CEST 02-10-2014 19:36\0" typedef struct _AgsPadEditor AgsPadEditor; typedef struct _AgsPadEditorClass AgsPadEditorClass; struct _AgsPadEditor { GtkVBox vbox; gchar *version; gchar *build_id; AgsChannel *pad; GtkExpander *line_editor_expander; GtkVBox *line_editor; gulong set_audio_channels_handler; }; struct _AgsPadEditorClass { GtkVBoxClass vbox; }; GType ags_pad_editor_get_type(void); void ags_pad_editor_set_channel(AgsPadEditor *pad_editor, AgsChannel *channel); AgsPadEditor* ags_pad_editor_new(AgsChannel *channel); #endif /*__AGS_PAD_EDITOR_H__*/ gsequencer-0.6.37/src/ags/X/ags_generic_preferences_callbacks.c0000644000175000017500000000321212626272146021441 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include void ags_generic_preferences_autosave_thread_clicked_callback(GtkWidget *check_button, AgsGenericPreferences *generic_preferences) { AgsMain *ags_main; AgsAutosaveThread *autosave_thread; AgsPreferences *preferences; preferences = (AgsPreferences *) gtk_widget_get_ancestor(GTK_WIDGET(generic_preferences), AGS_TYPE_PREFERENCES); ags_main = (AgsMain *) AGS_WINDOW(preferences->window)->ags_main; autosave_thread = (AgsAutosaveThread *) ags_main->autosave_thread; if(gtk_toggle_button_get_active(check_button)){ ags_thread_start((AgsThread *) autosave_thread); }else{ ags_thread_stop((AgsThread *) autosave_thread); } } gsequencer-0.6.37/src/ags/X/ags_ladspa_browser_callbacks.c0000644000175000017500000001660012626272146020460 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include void ags_ladspa_browser_plugin_filename_callback(GtkComboBoxText *combo_box, AgsLadspaBrowser *ladspa_browser) { GtkComboBoxText *filename, *effect; AgsLadspaPlugin *ladspa_plugin; GList *list; gchar *path; void *plugin_so; LADSPA_Descriptor_Function ladspa_descriptor; LADSPA_Descriptor *plugin_descriptor; list = gtk_container_get_children(GTK_CONTAINER(ladspa_browser->plugin)); filename = GTK_COMBO_BOX_TEXT(list->next->data); effect = GTK_COMBO_BOX_TEXT(list->next->next->next->data); gtk_list_store_clear(GTK_LIST_STORE(gtk_combo_box_get_model(effect))); ags_ladspa_manager_load_file(gtk_combo_box_text_get_active_text(filename)); ladspa_plugin = ags_ladspa_manager_find_ladspa_plugin(gtk_combo_box_text_get_active_text(filename)); plugin_so = ladspa_plugin->plugin_so; if(plugin_so){ ladspa_descriptor = (LADSPA_Descriptor_Function) dlsym(plugin_so, "ladspa_descriptor\0"); if(dlerror() == NULL && ladspa_descriptor){ long index; /* We've successfully found a ladspa_descriptor function. Pass it to the callback function. */ for(index = 0; (plugin_descriptor = ladspa_descriptor(index)) != NULL; index++){ gtk_combo_box_text_append_text(effect, g_strdup_printf("%s - %s:%lu\0", (LADSPA_IS_HARD_RT_CAPABLE(plugin_descriptor->Properties) ? "\342\230\221": " \342\230\220"), plugin_descriptor->Name, plugin_descriptor->UniqueID)); } } } gtk_combo_box_set_active((GtkComboBox *) effect, 0); } void ags_ladspa_browser_plugin_effect_callback(GtkComboBoxText *combo_box, AgsLadspaBrowser *ladspa_browser) { GtkTable *table; GtkComboBoxText *filename, *effect; GtkLabel *label; AgsLadspaPlugin *ladspa_plugin; GList *list, *list_start, *child, *child_start; gchar *str, *tmp; guint port_count; guint y; unsigned long i; void *plugin_so; LADSPA_Descriptor_Function ladspa_descriptor; LADSPA_Descriptor *plugin_descriptor; LADSPA_PortDescriptor *port_descriptor; unsigned long index; /* retrieve filename and effect */ list_start = list = gtk_container_get_children(GTK_CONTAINER(ladspa_browser->plugin)); filename = GTK_COMBO_BOX_TEXT(list->next->data); effect = GTK_COMBO_BOX_TEXT(list->next->next->next->data); g_list_free(list_start); /* update description */ list_start = list = gtk_container_get_children(GTK_CONTAINER(ladspa_browser->description)); ags_ladspa_manager_load_file(gtk_combo_box_text_get_active_text(filename)); ladspa_plugin = ags_ladspa_manager_find_ladspa_plugin(gtk_combo_box_text_get_active_text(filename)); plugin_so = ladspa_plugin->plugin_so; index = gtk_combo_box_get_active((GtkComboBox *) effect); if(index != -1 && plugin_so){ ladspa_descriptor = (LADSPA_Descriptor_Function) dlsym(plugin_so, "ladspa_descriptor\0"); if(dlerror() == NULL && ladspa_descriptor){ plugin_descriptor = ladspa_descriptor(index); port_descriptor = plugin_descriptor->PortDescriptors; /* update ui - reading plugin file */ label = GTK_LABEL(list->data); gtk_label_set_text(label, g_strconcat("Label: \0", plugin_descriptor->Label, NULL)); list = list->next; label = GTK_LABEL(list->data); gtk_label_set_text(label, g_strconcat("Maker: \0", plugin_descriptor->Maker, NULL)); list = list->next; label = GTK_LABEL(list->data); gtk_label_set_text(label, g_strconcat("Copyright: \0", plugin_descriptor->Copyright, NULL)); port_count = plugin_descriptor->PortCount; list = list->next; label = GTK_LABEL(list->data); str = g_strdup("Ports: \0"); gtk_label_set_text(label, str); list = list->next; table = GTK_TABLE(list->data); /* update ui - port information */ child_start = child = gtk_container_get_children(GTK_CONTAINER(table)); while(child != NULL){ gtk_widget_destroy(GTK_WIDGET(child->data)); child = child->next; } g_list_free(child_start); for(i = 0, y = 0; i < port_count; i++){ if(!(LADSPA_IS_PORT_CONTROL(port_descriptor[i]) && (LADSPA_IS_PORT_INPUT(port_descriptor[i]) || LADSPA_IS_PORT_OUTPUT(port_descriptor[i])))){ continue; } str = g_strdup(plugin_descriptor->PortNames[i]); label = (GtkLabel *) g_object_new(GTK_TYPE_LABEL, "xalign\0", 0.0, "label\0", str, NULL); gtk_table_attach_defaults(table, GTK_WIDGET(label), 0, 1, y, y + 1); if(LADSPA_IS_HINT_TOGGLED(plugin_descriptor->PortRangeHints[i].HintDescriptor) || plugin_descriptor->PortRangeHints[i].LowerBound == plugin_descriptor->PortRangeHints[i].UpperBound){ gtk_table_attach_defaults(table, GTK_WIDGET(ags_ladspa_browser_combo_box_boolean_controls_new()), 1, 2, y, y + 1); }else{ gtk_table_attach_defaults(table, GTK_WIDGET(ags_ladspa_browser_combo_box_float_controls_new()), 1, 2, y, y + 1); } y++; } gtk_widget_show_all((GtkWidget *) table); } }else{ /* update ui - empty */ label = GTK_LABEL(list->data); gtk_label_set_text(label, "Label: \0"); list = list->next; label = GTK_LABEL(list->data); gtk_label_set_text(label, "Maker: \0"); list = list->next; label = GTK_LABEL(list->data); gtk_label_set_text(label, "Copyright: \0"); list = list->next; label = GTK_LABEL(list->data); gtk_label_set_text(label, "Ports: \0"); list = list->next; table = GTK_TABLE(list->data); /* update ui - no ports */ child_start = child = gtk_container_get_children(GTK_CONTAINER(table)); while(child != NULL){ gtk_widget_destroy(GTK_WIDGET(child->data)); child = child->next; } g_list_free(child_start); } g_list_free(list_start); } void ags_ladspa_browser_preview_close_callback(GtkWidget *preview, AgsLadspaBrowser *ladspa_browser) { ladspa_browser->preview = NULL; gtk_widget_destroy(preview); } int ags_ladspa_browser_ok_callback(GtkWidget *widget, AgsLadspaBrowser *ladspa_browser) { gtk_widget_hide((GtkWidget *) ladspa_browser); return(0); } int ags_ladspa_browser_cancel_callback(GtkWidget *widget, AgsLadspaBrowser *ladspa_browser) { gtk_widget_hide((GtkWidget *) ladspa_browser); return(0); } gsequencer-0.6.37/src/ags/X/ags_navigation_callbacks.h0000644000175000017500000000525112626272146017615 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_NAVIGATION_CALLBACKS_H__ #define __AGS_NAVIGATION_CALLBACKS_H__ #include #include #include #include void ags_navigation_parent_set_callback(GtkWidget *widget, GtkObject *old_parent, gpointer data); gboolean ags_navigation_destroy_callback(GtkObject *object, gpointer data); void ags_navigation_show_callback(GtkWidget *widget, gpointer data); void ags_navigation_expander_callback(GtkWidget *widget, AgsNavigation *navigation); void ags_navigation_bpm_callback(GtkWidget *widget, AgsNavigation *navigation); void ags_navigation_rewind_callback(GtkWidget *widget, AgsNavigation *navigation); void ags_navigation_prev_callback(GtkWidget *widget, AgsNavigation *navigation); void ags_navigation_play_callback(GtkWidget *widget, AgsNavigation *navigation); void ags_navigation_stop_callback(GtkWidget *widget, AgsNavigation *navigation); void ags_navigation_next_callback(GtkWidget *widget, AgsNavigation *navigation); void ags_navigation_forward_callback(GtkWidget *widget, AgsNavigation *navigation); void ags_navigation_loop_callback(GtkWidget *widget, AgsNavigation *navigation); void ags_navigation_position_tact_callback(GtkWidget *widget, AgsNavigation *navigation); void ags_navigation_duration_tact_callback(GtkWidget *widget, AgsNavigation *navigation); void ags_navigation_loop_left_tact_callback(GtkWidget *widget, AgsNavigation *navigation); void ags_navigation_loop_right_tact_callback(GtkWidget *widget, AgsNavigation *navigation); void ags_navigation_raster_callback(GtkWidget *widget, AgsNavigation *navigation); void ags_navigation_tic_callback(AgsDevout *devout, AgsNavigation *navigation); void ags_navigation_devout_stop_callback(AgsDevout *devout, AgsNavigation *navigation); #endif /*__AGS_NAVIGATION_CALLBACKS_H__*/ gsequencer-0.6.37/src/ags/X/ags_window.h0000644000175000017500000000602612626272146014767 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_WINDOW_H__ #define __AGS_WINDOW_H__ #include #include #include #include #include #include #include #include #include #include #define AGS_TYPE_WINDOW (ags_window_get_type()) #define AGS_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_WINDOW, AgsWindow)) #define AGS_WINDOW_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_WINDOW, AgsWindowClass)) #define AGS_IS_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_WINDOW)) #define AGS_IS_WINDOW_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_WINDOW)) #define AGS_WINDOW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_WINDOW, AgsWindowClass)) #define AGS_MACHINE_COUNTER(ptr) ((AgsMachineCounter *)(ptr)) typedef struct _AgsWindow AgsWindow; typedef struct _AgsWindowClass AgsWindowClass; typedef struct _AgsMachineCounter AgsMachineCounter; typedef enum{ AGS_WINDOW_READY = 1, AGS_WINDOW_LOADING = 1 << 1, AGS_WINDOW_SAVING = 1 << 2, AGS_WINDOW_TERMINATING = 1 << 3, }AgsWindowFlags; struct _AgsWindow { GtkWindow window; guint flags; GObject *ags_main; AgsDevout *devout; char *name; AgsMenuBar *menu_bar; GtkVPaned *paned; GtkVBox *machines; GList *machine_counter; AgsMachine *selected; AgsEditor *editor; AgsNavigation *navigation; AgsExportWindow *export_window; AgsPreferences *preferences; }; struct _AgsWindowClass { GtkWindowClass window; }; struct _AgsMachineCounter { gchar *version; gchar *build_id; GType machine_type; guint counter; }; GType ags_window_get_type(void); AgsMachineCounter* ags_window_find_machine_counter(AgsWindow *window, GType machine_type); void ags_window_increment_machine_counter(AgsWindow *window, GType machine_type); void ags_window_decrement_machine_counter(AgsWindow *window, GType machine_type); AgsMachineCounter* ags_machine_counter_alloc(gchar *version, gchar *build_id, GType machine_type, guint initial_value); AgsWindow* ags_window_new(GObject *ags_main); #endif /*__AGS_WINDOW_H__*/ gsequencer-0.6.37/src/ags/X/ags_property_editor.h0000644000175000017500000000411412621463700016677 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_PROPERTY_EDITOR_H__ #define __AGS_PROPERTY_EDITOR_H__ #include #include #include #define AGS_TYPE_PROPERTY_EDITOR (ags_property_editor_get_type()) #define AGS_PROPERTY_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_PROPERTY_EDITOR, AgsPropertyEditor)) #define AGS_PROPERTY_EDITOR_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_PROPERTY_EDITOR, AgsPropertyEditorClass)) #define AGS_IS_PROPERTY_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_PROPERTY_EDITOR)) #define AGS_IS_PROPERTY_EDITOR_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_PROPERTY_EDITOR)) #define AGS_PROPERTY_EDITOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_PROPERTY_EDITOR, AgsPropertyEditorClass)) typedef struct _AgsPropertyEditor AgsPropertyEditor; typedef struct _AgsPropertyEditorClass AgsPropertyEditorClass; typedef enum{ AGS_PROPERTY_EDITOR_ENABLED = 1, }AgsPropertyEditorFlags; struct _AgsPropertyEditor { GtkVBox vbox; guint flags; GtkCheckButton *enabled; }; struct _AgsPropertyEditorClass { GtkVBoxClass vbox; void (*apply)(AgsPropertyEditor *property_editor); }; GType ags_property_editor_get_type(); AgsPropertyEditor* ags_property_editor_new(); #endif /*__AGS_PROPERTY_EDITOR_H__*/ gsequencer-0.6.37/src/ags/X/ags_listing_editor.c0000644000175000017500000002360612626272146016475 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include void ags_listing_editor_class_init(AgsListingEditorClass *listing_editor); void ags_listing_editor_connectable_interface_init(AgsConnectableInterface *connectable); void ags_listing_editor_applicable_interface_init(AgsApplicableInterface *applicable); void ags_listing_editor_init(AgsListingEditor *listing_editor); void ags_listing_editor_connect(AgsConnectable *connectable); void ags_listing_editor_disconnect(AgsConnectable *connectable); void ags_listing_editor_set_update(AgsApplicable *applicable, gboolean update); void ags_listing_editor_apply(AgsApplicable *applicable); void ags_listing_editor_reset(AgsApplicable *applicable); void ags_listing_editor_destroy(GtkObject *object); void ags_listing_editor_show(GtkWidget *widget); /** * SECTION:ags_listing_editor * @short_description: pack pad editors. * @title: AgsListingEditor * @section_id: * @include: ags/X/ags_listing_editor.h * * #AgsListingEditor is a composite widget to pack #AgsPadEditor. */ static gpointer ags_listing_editor_parent_class = NULL; static AgsConnectableInterface* ags_listing_editor_parent_connectable_interface; GType ags_listing_editor_get_type(void) { static GType ags_type_listing_editor = 0; if(!ags_type_listing_editor){ static const GTypeInfo ags_listing_editor_info = { sizeof (AgsListingEditorClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_listing_editor_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsListingEditor), 0, /* n_preallocs */ (GInstanceInitFunc) ags_listing_editor_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_listing_editor_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_applicable_interface_info = { (GInterfaceInitFunc) ags_listing_editor_applicable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_listing_editor = g_type_register_static(AGS_TYPE_PROPERTY_LISTING_EDITOR, "AgsListingEditor\0", &ags_listing_editor_info, 0); g_type_add_interface_static(ags_type_listing_editor, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_listing_editor, AGS_TYPE_APPLICABLE, &ags_applicable_interface_info); } return(ags_type_listing_editor); } void ags_listing_editor_class_init(AgsListingEditorClass *listing_editor) { } void ags_listing_editor_connectable_interface_init(AgsConnectableInterface *connectable) { ags_listing_editor_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->is_ready = NULL; connectable->is_connected = NULL; connectable->connect = ags_listing_editor_connect; connectable->disconnect = ags_listing_editor_disconnect; } void ags_listing_editor_applicable_interface_init(AgsApplicableInterface *applicable) { applicable->set_update = ags_listing_editor_set_update; applicable->apply = ags_listing_editor_apply; applicable->reset = ags_listing_editor_reset; } void ags_listing_editor_init(AgsListingEditor *listing_editor) { g_signal_connect_after(G_OBJECT(listing_editor), "parent_set\0", G_CALLBACK(ags_listing_editor_parent_set_callback), listing_editor); listing_editor->child = NULL; } void ags_listing_editor_connect(AgsConnectable *connectable) { AgsMachineEditor *machine_editor; AgsListingEditor *listing_editor; GList *pad_editor, *pad_editor_start; ags_listing_editor_parent_connectable_interface->connect(connectable); listing_editor = AGS_LISTING_EDITOR(connectable); machine_editor = (AgsMachineEditor *) gtk_widget_get_ancestor(GTK_WIDGET(listing_editor), AGS_TYPE_MACHINE_EDITOR); if(machine_editor != NULL && machine_editor->machine != NULL){ AgsAudio *audio; /* AgsAudio */ audio = machine_editor->machine->audio; listing_editor->set_pads_handler = g_signal_connect_after(G_OBJECT(audio), "set_pads\0", G_CALLBACK(ags_listing_editor_set_pads_callback), listing_editor); } /* AgsPadEditor */ pad_editor_start = pad_editor = gtk_container_get_children(GTK_CONTAINER(listing_editor->child)); while(pad_editor != NULL){ ags_connectable_connect(AGS_CONNECTABLE(pad_editor->data)); pad_editor = pad_editor->next; } g_list_free(pad_editor_start); } void ags_listing_editor_disconnect(AgsConnectable *connectable) { AgsMachineEditor *machine_editor; AgsListingEditor *listing_editor; GList *pad_editor, *pad_editor_start; ags_listing_editor_parent_connectable_interface->connect(connectable); listing_editor = AGS_LISTING_EDITOR(connectable); machine_editor = (AgsMachineEditor *) gtk_widget_get_ancestor(GTK_WIDGET(listing_editor), AGS_TYPE_MACHINE_EDITOR); if(machine_editor != NULL && machine_editor->machine != NULL){ AgsAudio *audio; /* AgsAudio */ audio = machine_editor->machine->audio; g_signal_handler_disconnect(audio, listing_editor->set_pads_handler); } /* AgsPadEditor */ pad_editor_start = pad_editor = gtk_container_get_children(GTK_CONTAINER(listing_editor->child)); while(pad_editor != NULL){ ags_connectable_disconnect(AGS_CONNECTABLE(pad_editor->data)); pad_editor = pad_editor->next; } g_list_free(pad_editor_start); } void ags_listing_editor_set_update(AgsApplicable *applicable, gboolean update) { AgsListingEditor *listing_editor; GList *pad_editor, *pad_editor_start; listing_editor = AGS_LISTING_EDITOR(applicable); pad_editor_start = pad_editor = gtk_container_get_children(GTK_CONTAINER(listing_editor->child)); while(pad_editor != NULL){ ags_applicable_set_update(AGS_APPLICABLE(pad_editor->data), update); pad_editor = pad_editor->next; } g_list_free(pad_editor_start); } void ags_listing_editor_apply(AgsApplicable *applicable) { AgsListingEditor *listing_editor; GList *pad_editor, *pad_editor_start; listing_editor = AGS_LISTING_EDITOR(applicable); if((AGS_PROPERTY_EDITOR_ENABLED & (AGS_PROPERTY_EDITOR(listing_editor)->flags)) == 0) return; pad_editor_start = pad_editor = gtk_container_get_children(GTK_CONTAINER(listing_editor->child)); while(pad_editor != NULL){ ags_applicable_apply(AGS_APPLICABLE(pad_editor->data)); pad_editor = pad_editor->next; } g_list_free(pad_editor_start); } void ags_listing_editor_reset(AgsApplicable *applicable) { AgsListingEditor *listing_editor; GList *pad_editor, *pad_editor_start; listing_editor = AGS_LISTING_EDITOR(applicable); pad_editor_start = pad_editor = gtk_container_get_children(GTK_CONTAINER(listing_editor->child)); while(pad_editor != NULL){ ags_applicable_reset(AGS_APPLICABLE(pad_editor->data)); pad_editor = pad_editor->next; } g_list_free(pad_editor_start); } void ags_listing_editor_destroy(GtkObject *object) { /* empty */ } void ags_listing_editor_show(GtkWidget *widget) { /* empty */ } /** * ags_listing_editor_add_children: * @audio: the #AgsAudio to use * @nth_channel: nth channel to start creation until end * @connect: if %TRUE widget is connected and shown * * Creates new pad editors or destroys them. * * Since: 0.3 */ void ags_listing_editor_add_children(AgsListingEditor *listing_editor, AgsAudio *audio, guint nth_channel, gboolean connect) { AgsPadEditor *pad_editor; GtkVBox *vbox; AgsChannel *channel; if(nth_channel == 0 && listing_editor->child != NULL){ vbox = listing_editor->child; listing_editor->child = NULL; gtk_widget_destroy(GTK_WIDGET(vbox)); } if(audio == NULL) return; if(nth_channel == 0){ listing_editor->child = (GtkVBox *) gtk_vbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(listing_editor), GTK_WIDGET(listing_editor->child), FALSE, FALSE, 0); } if(listing_editor->channel_type == AGS_TYPE_OUTPUT) channel = ags_channel_nth(audio->output, nth_channel); else channel = ags_channel_nth(audio->input, nth_channel); while(channel != NULL){ pad_editor = ags_pad_editor_new(channel); gtk_box_pack_start(GTK_BOX(listing_editor->child), GTK_WIDGET(pad_editor), FALSE, FALSE, 0); if(connect){ ags_connectable_connect(AGS_CONNECTABLE(pad_editor)); gtk_widget_show_all(GTK_WIDGET(pad_editor)); } channel = channel->next_pad; } } /** * ags_listing_editor_new: * @channel_type: the channel type to represent * * Creates an #AgsListingEditor * * Returns: a new #AgsListingEditor * * Since: 0.3 */ AgsListingEditor* ags_listing_editor_new(GType channel_type) { AgsListingEditor *listing_editor; listing_editor = (AgsListingEditor *) g_object_new(AGS_TYPE_LISTING_EDITOR, NULL); listing_editor->channel_type = channel_type; return(listing_editor); } gsequencer-0.6.37/src/ags/X/ags_plugin_preferences.c0000644000175000017500000001404112626272146017326 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include void ags_plugin_preferences_class_init(AgsPluginPreferencesClass *plugin_preferences); void ags_plugin_preferences_connectable_interface_init(AgsConnectableInterface *connectable); void ags_plugin_preferences_init(AgsPluginPreferences *plugin_preferences); void ags_plugin_preferences_connect(AgsConnectable *connectable); void ags_plugin_preferences_disconnect(AgsConnectable *connectable); static void ags_plugin_preferences_finalize(GObject *gobject); void ags_plugin_preferences_show(GtkWidget *widget); void ags_plugin_preferences_reset(AgsPluginPreferences *plugin_preferences); void* ags_plugin_preferences_refresh(void *ptr); /** * SECTION:ags_plugin_preferences * @short_description: A composite widget to do plugin related preferences * @title: AgsPluginPreferences * @section_id: * @include: ags/X/ags_plugin_preferences.h * * #AgsPluginPreferences enables you to make plugin related preferences. */ static gpointer ags_plugin_preferences_parent_class = NULL; GType ags_plugin_preferences_get_type(void) { static GType ags_type_plugin_preferences = 0; if(!ags_type_plugin_preferences){ static const GTypeInfo ags_plugin_preferences_info = { sizeof (AgsPluginPreferencesClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_plugin_preferences_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsPluginPreferences), 0, /* n_preallocs */ (GInstanceInitFunc) ags_plugin_preferences_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_plugin_preferences_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_plugin_preferences = g_type_register_static(GTK_TYPE_VBOX, "AgsPluginPreferences\0", &ags_plugin_preferences_info, 0); g_type_add_interface_static(ags_type_plugin_preferences, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return(ags_type_plugin_preferences); } void ags_plugin_preferences_class_init(AgsPluginPreferencesClass *plugin_preferences) { GObjectClass *gobject; GtkWidgetClass *widget; ags_plugin_preferences_parent_class = g_type_class_peek_parent(plugin_preferences); /* GtkObjectClass */ gobject = (GObjectClass *) plugin_preferences; gobject->finalize = ags_plugin_preferences_finalize; /* GtkWidgetClass */ widget = (GtkWidgetClass *) plugin_preferences; widget->show = ags_plugin_preferences_show; } void ags_plugin_preferences_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->is_ready = NULL; connectable->is_connected = NULL; connectable->connect = ags_plugin_preferences_connect; connectable->disconnect = ags_plugin_preferences_disconnect; } void ags_plugin_preferences_init(AgsPluginPreferences *plugin_preferences) { //TODO:JK: implement me } void ags_plugin_preferences_connect(AgsConnectable *connectable) { AgsPluginPreferences *plugin_preferences; plugin_preferences = AGS_PLUGIN_PREFERENCES(connectable); } void ags_plugin_preferences_disconnect(AgsConnectable *connectable) { /* empty */ } static void ags_plugin_preferences_finalize(GObject *gobject) { } void ags_plugin_preferences_show(GtkWidget *widget) { AgsPluginPreferences *plugin_preferences; pthread_t thread; plugin_preferences = AGS_PLUGIN_PREFERENCES(widget); GTK_WIDGET_CLASS(ags_plugin_preferences_parent_class)->show(widget); } AgsLadspaPluginPreferences* ags_ladspa_plugin_preferences_alloc(gchar *ladspa_path) { AgsLadspaPluginPreferences *ladspa_plugin_preferences; GtkListStore *list_store; GtkTreePath *path; GtkTreeIter iter; gchar **filenames, **filenames_start; static const gchar *default_ladspa_path = "/usr/lib/ladspa\0"; ladspa_plugin_preferences = (AgsLadspaPluginPreferences *) malloc(sizeof(AgsLadspaPluginPreferences)); if(ladspa_path == NULL){ gtk_entry_set_text(ladspa_plugin_preferences->ladspa_path, default_ladspa_path); }else{ gtk_entry_set_text(ladspa_plugin_preferences->ladspa_path, ladspa_path); } ladspa_plugin_preferences->plugin_file = (GtkCellView *) gtk_cell_view_new(); list_store = gtk_list_store_new(1, G_TYPE_STRING); filenames = filenames_start = ags_ladspa_manager_get_filenames(); while(*filenames != NULL){ // Add a new row to the model gtk_list_store_append (list_store, &iter); gtk_list_store_set(list_store, &iter, 0, *filenames, -1); filenames++; } free(filenames_start); gtk_cell_view_set_model(ladspa_plugin_preferences->plugin_file, GTK_TREE_MODEL(list_store)); return(ladspa_plugin_preferences); } /** * ags_plugin_preferences_new: * * Creates an #AgsPluginPreferences * * Returns: a new #AgsPluginPreferences * * Since: 0.4 */ AgsPluginPreferences* ags_plugin_preferences_new() { AgsPluginPreferences *plugin_preferences; plugin_preferences = (AgsPluginPreferences *) g_object_new(AGS_TYPE_PLUGIN_PREFERENCES, NULL); return(plugin_preferences); } gsequencer-0.6.37/src/ags/X/ags_listing_editor_callbacks.c0000644000175000017500000000406512621463700020463 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include int ags_listing_editor_parent_set_callback(GtkWidget *widget, GtkObject *old_parent, AgsListingEditor *listing_editor) { AgsMachineEditor *machine_editor; if(old_parent != NULL) return(0); machine_editor = (AgsMachineEditor *) gtk_widget_get_ancestor(widget, AGS_TYPE_MACHINE_EDITOR); if(machine_editor->machine != NULL) ags_listing_editor_add_children(listing_editor, machine_editor->machine->audio, 0, FALSE); return(0); } void ags_listing_editor_set_pads_callback(AgsAudio *audio, GType channel_type, guint pads, guint pads_old, AgsListingEditor *listing_editor) { if(channel_type != listing_editor->channel_type) return; if(pads_old < pads){ guint nth_channel; nth_channel = pads_old * audio->audio_channels; ags_listing_editor_add_children(listing_editor, audio, nth_channel, TRUE); }else{ GList *list, *list_next, *list_start; list_start = list = gtk_container_get_children(GTK_CONTAINER(listing_editor->child)); list = g_list_nth(list, pads); while(list != NULL){ list_next = list->next; gtk_widget_destroy(GTK_WIDGET(list->data)); list = list_next; } g_list_free(list_start); } } gsequencer-0.6.37/src/ags/X/ags_preferences_callbacks.c0000644000175000017500000000327412621463700017746 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include void ags_preferences_response_callback(GtkDialog *dialog, gint response_id, gpointer user_data) { gboolean apply; apply = FALSE; switch(response_id){ case GTK_RESPONSE_APPLY: { apply = TRUE; } case GTK_RESPONSE_OK: { ags_applicable_apply(AGS_APPLICABLE(dialog)); gtk_dialog_run((GtkDialog *) gtk_message_dialog_new((GtkWindow *) dialog, GTK_DIALOG_MODAL, GTK_MESSAGE_WARNING, GTK_BUTTONS_OK, "Restart Advanced Gtk+ Sequencer now!\0")); if(apply){ ags_applicable_reset(AGS_APPLICABLE(dialog)); break; } } case GTK_RESPONSE_CANCEL: { AGS_PREFERENCES(dialog)->flags |= AGS_PREFERENCES_SHUTDOWN; AGS_WINDOW(AGS_PREFERENCES(dialog)->window)->preferences = NULL; gtk_widget_destroy(GTK_WIDGET(dialog)); } } } gsequencer-0.6.37/src/ags/X/ags_line.c0000644000175000017500000004053712626272146014407 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include void ags_line_class_init(AgsLineClass *line); void ags_line_connectable_interface_init(AgsConnectableInterface *connectable); void ags_line_plugin_interface_init(AgsPluginInterface *plugin); void ags_line_init(AgsLine *line); void ags_line_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_line_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_line_connect(AgsConnectable *connectable); void ags_line_disconnect(AgsConnectable *connectable); gchar* ags_line_get_version(AgsPlugin *plugin); void ags_line_set_version(AgsPlugin *plugin, gchar *version); gchar* ags_line_get_build_id(AgsPlugin *plugin); void ags_line_set_build_id(AgsPlugin *plugin, gchar *build_id); void ags_line_real_set_channel(AgsLine *line, AgsChannel *channel); void ags_line_real_map_recall(AgsLine *line, guint output_pad_start); GList* ags_line_real_find_port(AgsLine *line); /** * SECTION:ags_line * @short_description: A composite widget to visualize #AgsChannel * @title: AgsLine * @section_id: * @include: ags/X/ags_line.h * * #AgsLine is a composite widget to visualize #AgsChannel. It should be * packed by an #AgsPad. It may contain #AgsLineMember to modify ports of * #AgsRecall. */ enum{ SET_CHANNEL, GROUP_CHANGED, MAP_RECALL, FIND_PORT, LAST_SIGNAL, }; enum{ PROP_0, PROP_PAD, PROP_CHANNEL, }; static gpointer ags_line_parent_class = NULL; static guint line_signals[LAST_SIGNAL]; extern pthread_mutex_t ags_application_mutex; GType ags_line_get_type(void) { static GType ags_type_line = 0; if(!ags_type_line){ static const GTypeInfo ags_line_info = { sizeof(AgsLineClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_line_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(AgsLine), 0, /* n_preallocs */ (GInstanceInitFunc) ags_line_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_line_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_plugin_interface_info = { (GInterfaceInitFunc) ags_line_plugin_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_line = g_type_register_static(GTK_TYPE_VBOX, "AgsLine\0", &ags_line_info, 0); g_type_add_interface_static(ags_type_line, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_line, AGS_TYPE_PLUGIN, &ags_plugin_interface_info); } return(ags_type_line); } void ags_line_class_init(AgsLineClass *line) { GObjectClass *gobject; GParamSpec *param_spec; ags_line_parent_class = g_type_class_peek_parent(line); /* GObjectClass */ gobject = G_OBJECT_CLASS(line); gobject->set_property = ags_line_set_property; gobject->get_property = ags_line_get_property; /* properties */ /** * AgsLine:pad: * * The assigned #AgsPad. * * Since: 0.4 */ param_spec = g_param_spec_object("pad\0", "parent pad\0", "The pad which is its parent\0", AGS_TYPE_PAD, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_PAD, param_spec); /** * AgsLine:channel: * * The assigned #AgsChannel to visualize. * * Since: 0.4 */ param_spec = g_param_spec_object("channel\0", "assigned channel\0", "The channel it is assigned with\0", AGS_TYPE_CHANNEL, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_CHANNEL, param_spec); /* AgsLineClass */ line->set_channel = ags_line_real_set_channel; line->group_changed = NULL; line->map_recall = ags_line_real_map_recall; line->find_port = ags_line_real_find_port; /* signals */ /** * AgsLine::set-channel: * @line: the #AgsLine to modify * @channel: the #AgsChannel to set * * The ::set-channel signal notifies about changed channel. */ line_signals[SET_CHANNEL] = g_signal_new("set-channel\0", G_TYPE_FROM_CLASS(line), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsLineClass, set_channel), NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, G_TYPE_OBJECT); /** * AgsLine::group-changed: * @line: the object group changed * * The ::group-changed signal notifies about changed grouping. This * normally happens as toggling group button in #AgsPad or #AgsLine. */ line_signals[GROUP_CHANGED] = g_signal_new("group-changed\0", G_TYPE_FROM_CLASS(line), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsLineClass, group_changed), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); /** * AgsLine::map-recall: * @line: the #AgsLine * * The ::map-recall as recalls should be mapped. */ line_signals[MAP_RECALL] = g_signal_new("map-recall\0", G_TYPE_FROM_CLASS(line), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsLineClass, map_recall), NULL, NULL, g_cclosure_marshal_VOID__UINT, G_TYPE_NONE, 1, G_TYPE_UINT); /** * AgsLine::find-port: * @line: the #AgsLine * Returns: a #GList with associated ports * * The ::find-port retrieves all associated ports. */ line_signals[FIND_PORT] = g_signal_new("find-port\0", G_TYPE_FROM_CLASS(line), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsLineClass, find_port), NULL, NULL, g_cclosure_user_marshal_POINTER__VOID, G_TYPE_NONE, 0); } void ags_line_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->is_ready = NULL; connectable->is_connected = NULL; connectable->connect = ags_line_connect; connectable->disconnect = ags_line_disconnect; } void ags_line_plugin_interface_init(AgsPluginInterface *plugin) { plugin->get_name = NULL; plugin->set_name = NULL; plugin->get_version = ags_line_get_version; plugin->set_version = ags_line_set_version; plugin->get_build_id = ags_line_get_build_id; plugin->set_build_id = ags_line_set_build_id; plugin->get_xml_type = NULL; plugin->set_xml_type = NULL; plugin->get_ports = NULL; plugin->read = NULL; plugin->write = NULL; plugin->set_ports = NULL; } void ags_line_init(AgsLine *line) { g_signal_connect_after((GObject *) line, "parent_set\0", G_CALLBACK(ags_line_parent_set_callback), (gpointer) line); line->flags = 0; line->version = AGS_VERSION; line->build_id = AGS_BUILD_ID; line->channel = NULL; // gtk_widget_set_can_focus(line, // TRUE); line->pad = NULL; line->label = (GtkLabel *) gtk_label_new(NULL); gtk_box_pack_start(GTK_BOX(line), GTK_WIDGET(line->label), FALSE, FALSE, 0); line->group = (GtkToggleButton *) gtk_toggle_button_new_with_label("group\0"); gtk_toggle_button_set_active(line->group, TRUE); gtk_box_pack_start(GTK_BOX(line), GTK_WIDGET(line->group), FALSE, FALSE, 0); line->expander = ags_expander_new(1, 1); gtk_table_set_row_spacings(line->expander->table, 2); gtk_table_set_col_spacings(line->expander->table, 2); gtk_box_pack_start(GTK_BOX(line), GTK_WIDGET(line->expander), TRUE, TRUE, 0); } void ags_line_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsLine *line; line = AGS_LINE(gobject); switch(prop_id){ case PROP_PAD: { GtkWidget *pad; pad = (GtkWidget *) g_value_get_object(value); if(line->pad == pad){ return; } if(line->pad != NULL){ g_object_unref(G_OBJECT(line->pad)); } if(pad != NULL){ g_object_ref(G_OBJECT(pad)); } line->pad = pad; } break; case PROP_CHANNEL: { AgsChannel *channel; channel = (AgsChannel *) g_value_get_object(value); ags_line_set_channel(line, channel); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_line_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsLine *line; line = AGS_LINE(gobject); switch(prop_id){ case PROP_PAD: g_value_set_object(value, line->pad); break; case PROP_CHANNEL: g_value_set_object(value, line->channel); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_line_connect(AgsConnectable *connectable) { AgsMachine *machine; AgsLine *line; GList *list, *list_start; line = AGS_LINE(connectable); if((AGS_LINE_CONNECTED & (line->flags)) != 0){ return; } /* set connected flag */ line->flags |= AGS_LINE_CONNECTED; #ifdef AGS_DEBUG g_message("line connect\0"); #endif if((AGS_LINE_PREMAPPED_RECALL & (line->flags)) == 0){ if((AGS_LINE_MAPPED_RECALL & (line->flags)) == 0){ ags_line_map_recall(line, 0); } }else{ ags_line_find_port(line); } /* AgsMachine */ machine = AGS_MACHINE(gtk_widget_get_ancestor((GtkWidget *) AGS_LINE(line), AGS_TYPE_MACHINE)); /* connect group button */ g_signal_connect_after((GObject *) line->group, "clicked\0", G_CALLBACK(ags_line_group_clicked_callback), (gpointer) line); /* connect line members */ list_start = list = gtk_container_get_children(GTK_CONTAINER(line->expander->table)); while(list != NULL){ if(AGS_IS_CONNECTABLE(list->data)){ ags_connectable_connect(AGS_CONNECTABLE(list->data)); } list = list->next; } if(list_start != NULL){ g_list_free(list_start); } } void ags_line_disconnect(AgsConnectable *connectable) { //TODO:JK: implement me } gchar* ags_line_get_version(AgsPlugin *plugin) { return(AGS_LINE(plugin)->version); } void ags_line_set_version(AgsPlugin *plugin, gchar *version) { AGS_LINE(plugin)->version = version; } gchar* ags_line_get_build_id(AgsPlugin *plugin) { return(AGS_LINE(plugin)->build_id); } void ags_line_set_build_id(AgsPlugin *plugin, gchar *build_id) { AGS_LINE(plugin)->build_id = build_id; } void ags_line_real_set_channel(AgsLine *line, AgsChannel *channel) { AgsMutexManager *mutex_manager; pthread_mutex_t *channel_mutex; if(line->channel == channel){ return; } if(line->channel != NULL){ g_object_unref(G_OBJECT(line->channel)); } if(channel != NULL){ g_object_ref(G_OBJECT(channel)); } if(line->channel != NULL){ line->flags &= (~AGS_LINE_PREMAPPED_RECALL); } line->channel = channel; /* lookup channel mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); channel_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); /* set label */ pthread_mutex_lock(channel_mutex); gtk_label_set_label(line->label, g_strdup_printf("channel %d\0", channel->audio_channel)); pthread_mutex_unlock(channel_mutex); } /** * ags_line_set_channel: * @line: an #AgsLine * @channel: the #AgsChannel to set * * Is emitted as channel gets modified. * * Since: 0.3 */ void ags_line_set_channel(AgsLine *line, AgsChannel *channel) { g_return_if_fail(AGS_IS_LINE(line)); g_object_ref((GObject *) line); g_signal_emit(G_OBJECT(line), line_signals[SET_CHANNEL], 0, channel); g_object_unref((GObject *) line); } /** * ags_line_group_changed: * @line: an #AgsLine * * Is emitted as group is changed. * * Since: 0.4 */ void ags_line_group_changed(AgsLine *line) { g_return_if_fail(AGS_IS_LINE(line)); g_object_ref((GObject *) line); g_signal_emit(G_OBJECT(line), line_signals[GROUP_CHANGED], 0); g_object_unref((GObject *) line); } void ags_line_real_map_recall(AgsLine *line, guint ouput_pad_start) { if((AGS_LINE_MAPPED_RECALL & (line->flags)) != 0){ return; } line->flags |= AGS_LINE_MAPPED_RECALL; ags_line_find_port(line); } /** * ags_line_map_recall: * @line: an #AgsLine * Returns: an #GList containing all related #AgsPort * * Is emitted as group is changed. * * Since: 0.4 */ void ags_line_map_recall(AgsLine *line, guint output_pad_start) { g_return_if_fail(AGS_IS_LINE(line)); g_object_ref((GObject *) line); g_signal_emit(G_OBJECT(line), line_signals[MAP_RECALL], 0, output_pad_start); g_object_unref((GObject *) line); } GList* ags_line_real_find_port(AgsLine *line) { AgsChannel *channel, *next_pad; AgsMutexManager *mutex_manager; GList *list, *tmp; GList *line_member, *line_member_start; pthread_mutex_t *channel_mutex; if(line == NULL || line->expander == NULL){ return(NULL); } line_member_start = line_member = gtk_container_get_children(GTK_CONTAINER(line->expander->table)); while(line_member != NULL){ if(AGS_IS_LINE_MEMBER(line_member->data)){ ags_line_member_find_port(AGS_LINE_MEMBER(line_member->data)); } line_member = line_member->next; } if(line_member_start != NULL){ g_list_free(line_member_start); } channel = line->channel; list = NULL; if(channel != NULL){ /* get mutex manager */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); channel_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); /* find ports */ pthread_mutex_lock(channel_mutex); next_pad = channel->next_pad; pthread_mutex_unlock(channel_mutex); while(channel != next_pad){ /* lookup channel mutex */ pthread_mutex_lock(&(ags_application_mutex)); channel_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); /* do it so */ if(list == NULL){ list = ags_channel_find_port(channel); }else{ tmp = ags_channel_find_port(channel); if(tmp != NULL){ list = g_list_concat(list, tmp); } } /* iterate */ pthread_mutex_lock(channel_mutex); channel = channel->next; pthread_mutex_unlock(channel_mutex); } } return(list); } /** * ags_line_find_port: * @line: an #AgsLine * Returns: an #GList containing all related #AgsPort * * Lookup ports of assigned recalls. * * Since: 0.4 */ GList* ags_line_find_port(AgsLine *line) { GList *list; list = NULL; g_return_val_if_fail(AGS_IS_LINE(line), NULL); g_object_ref((GObject *) line); g_signal_emit((GObject *) line, line_signals[FIND_PORT], 0, &list); g_object_unref((GObject *) line); return(list); } /** * ags_line_find_next_grouped: * @line: an #AgsLine * * Retrieve next grouped line. * * Since: 0.4 */ GList* ags_line_find_next_grouped(GList *line) { while(line != NULL && !gtk_toggle_button_get_active(AGS_LINE(line->data)->group)){ line = line->next; } return(line); } /** * ags_line_new: * @pad: the parent pad * @channel: the channel to visualize * * Creates an #AgsLine * * Returns: a new #AgsLine * * Since: 0.3 */ AgsLine* ags_line_new(GtkWidget *pad, AgsChannel *channel) { AgsLine *line; line = (AgsLine *) g_object_new(AGS_TYPE_LINE, "pad\0", pad, "channel\0", channel, NULL); return(line); } gsequencer-0.6.37/src/ags/X/ags_line_member_callbacks.h0000644000175000017500000000356512621463700017733 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_LINE_MEMBER_CALLBACKS_H__ #define __AGS_LINE_MEMBER_CALLBACKS_H__ #include #include #include #include int ags_line_member_parent_set_callback(GtkWidget *widget, GtkObject *old_parent, AgsLineMember *line_member); void ags_line_member_dial_changed_callback(GtkWidget *dial, AgsLineMember *line_member); void ags_line_member_vscale_changed_callback(GtkWidget *vscale, AgsLineMember *line_member); void ags_line_member_hscale_changed_callback(GtkWidget *hscale, AgsLineMember *line_member); void ags_line_member_spin_button_changed_callback(GtkWidget *spin_button, AgsLineMember *line_member); void ags_line_member_check_button_clicked_callback(GtkWidget *check_button, AgsLineMember *line_member); void ags_line_member_toggle_button_clicked_callback(GtkWidget *toggle_button, AgsLineMember *line_member); void ags_line_member_button_clicked_callback(GtkWidget *button, AgsLineMember *line_member); void ags_line_member_port_safe_write_callback(AgsPort *port, GValue *value, AgsLineMember *line_member); #endif /*__AGS_LINE_MEMBER_CALLBACKS_H__*/ gsequencer-0.6.37/src/ags/X/ags_editor.h0000644000175000017500000000624412626272146014750 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_EDITOR_H__ #define __AGS_EDITOR_H__ #include #include #include #include #include #include #include #include #include #include #include #define AGS_TYPE_EDITOR (ags_editor_get_type ()) #define AGS_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_EDITOR, AgsEditor)) #define AGS_EDITOR_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_EDITOR, AgsEditorClass)) #define AGS_IS_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_EDITOR)) #define AGS_IS_EDITOR_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_EDITOR)) #define AGS_EDITOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_EDITOR, AgsEditorClass)) #define AGS_EDITOR_CHILD(ptr) ((AgsEditorChild *)(ptr)) #define AGS_EDITOR_DEFAULT_VERSION "0.4.2\0" #define AGS_EDITOR_DEFAULT_BUILD_ID "CEST 02-10-2014 19:36\0" #define AGS_EDITOR_DEFAULT "default\0" typedef struct _AgsEditor AgsEditor; typedef struct _AgsEditorClass AgsEditorClass; typedef struct _AgsEditorChild AgsEditorChild; struct _AgsEditor { GtkVBox vbox; guint flags; gchar *version; gchar *build_id; AgsDevout *devout; AgsMachineSelector *machine_selector; AgsMachine *selected_machine; AgsToolbar *toolbar; GList *editor_child; GtkTable *table; AgsNotebook *current_notebook; AgsMeter *current_meter; GtkWidget *current_edit_widget; guint tact_counter; gdouble current_tact; }; struct _AgsEditorClass { GtkVBoxClass vbox; void (*machine_changed)(AgsEditor *editor, AgsMachine *machine); }; struct _AgsEditorChild { AgsMachine *machine; AgsNotebook *notebook; AgsMeter *meter; GtkWidget *edit_widget; }; GType ags_editor_get_type(void); AgsEditorChild* ags_editor_child_alloc(AgsMachine *machine, AgsNotebook *notebook, AgsMeter *meter, GtkWidget *edit_widget); void ags_editor_machine_changed(AgsEditor *editor, AgsMachine *machine); void ags_editor_select_all(AgsEditor *editor); void ags_editor_paste(AgsEditor *editor); void ags_editor_copy(AgsEditor *editor); void ags_editor_cut(AgsEditor *editor); void ags_editor_invert(AgsEditor *editor); AgsEditor* ags_editor_new(); #endif /*__AGS_EDITOR_H__*/ gsequencer-0.6.37/src/ags/X/ags_listing_editor.h0000644000175000017500000000440312621463700016465 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_LISTING_EDITOR_H__ #define __AGS_LISTING_EDITOR_H__ #include #include #include #include #include #define AGS_TYPE_LISTING_EDITOR (ags_listing_editor_get_type()) #define AGS_LISTING_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_LISTING_EDITOR, AgsListingEditor)) #define AGS_LISTING_EDITOR_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_LISTING_EDITOR, AgsListingEditorClass)) #define AGS_IS_LISTING_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_LISTING_EDITOR)) #define AGS_IS_LISTING_EDITOR_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_LISTING_EDITOR)) #define AGS_LISTING_EDITOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_LISTING_EDITOR, AgsListingEditorClass)) typedef struct _AgsListingEditor AgsListingEditor; typedef struct _AgsListingEditorClass AgsListingEditorClass; struct _AgsListingEditor { AgsPropertyListingEditor property_listing_editor; GType channel_type; GtkVBox *child; gulong set_pads_handler; }; struct _AgsListingEditorClass { AgsPropertyListingEditorClass property_listing_editor; }; GType ags_listing_editor_get_type(); void ags_listing_editor_add_children(AgsListingEditor *listing_editor, AgsAudio *audio, guint nth_channel, gboolean connect); AgsListingEditor* ags_listing_editor_new(GType channel_type); #endif /*__AGS_LISTING_EDITOR_H__*/ gsequencer-0.6.37/src/ags/X/ags_machine_editor_callbacks.c0000644000175000017500000000406112626272146020421 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include int ags_machine_editor_switch_page_callback(GtkNotebook *notebook, GtkNotebookPage *page, guint page_num, AgsMachineEditor *machine_editor) { /* empty */ } int ags_machine_editor_apply_callback(GtkWidget *widget, AgsMachineEditor *machine_editor) { ags_applicable_apply(AGS_APPLICABLE(machine_editor)); //TODO:JK: remove me // ags_applicable_reset(AGS_APPLICABLE(machine_editor)); return(0); } int ags_machine_editor_ok_callback(GtkWidget *widget, AgsMachineEditor *machine_editor) { // ags_applicable_set_update(AGS_APPLICABLE(machine_editor), FALSE); ags_connectable_disconnect(AGS_CONNECTABLE(machine_editor)); ags_applicable_apply(AGS_APPLICABLE(machine_editor)); gtk_widget_destroy((GtkWidget *) machine_editor); return(0); } int ags_machine_editor_cancel_callback(GtkWidget *widget, AgsMachineEditor *machine_editor) { gtk_widget_destroy((GtkWidget *) machine_editor); return(0); } gsequencer-0.6.37/src/ags/X/ags_pad.c0000644000175000017500000006505512626272146014226 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void ags_pad_class_init(AgsPadClass *pad); void ags_pad_connectable_interface_init(AgsConnectableInterface *connectable); void ags_pad_plugin_interface_init(AgsPluginInterface *plugin); void ags_pad_init(AgsPad *pad); void ags_pad_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_pad_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_pad_connect(AgsConnectable *connectable); void ags_pad_disconnect(AgsConnectable *connectable); gchar* ags_pad_get_version(AgsPlugin *plugin); void ags_pad_set_version(AgsPlugin *plugin, gchar *version); gchar* ags_pad_get_build_id(AgsPlugin *plugin); void ags_pad_set_build_id(AgsPlugin *plugin, gchar *build_id); void ags_pad_destroy(GtkObject *object); void ags_pad_show(GtkWidget *widget); void ags_pad_real_set_channel(AgsPad *pad, AgsChannel *channel); void ags_pad_real_resize_lines(AgsPad *pad, GType line_type, guint audio_channels, guint audio_channels_old); void ags_pad_real_map_recall(AgsPad *pad, guint output_pad_start); GList* ags_pad_real_find_port(AgsPad *pad); /** * SECTION:ags_pad * @short_description: A composite widget to visualize a bunch of #AgsChannel * @title: AgsPad * @section_id: * @include: ags/X/ags_pad.h * * #AgsPad is a composite widget to visualize a bunch of #AgsChannel. It should be * packed by an #AgsMachine. */ enum{ SET_CHANNEL, RESIZE_LINES, MAP_RECALL, FIND_PORT, LAST_SIGNAL, }; enum{ PROP_0, PROP_CHANNEL, }; static gpointer ags_pad_parent_class = NULL; static guint pad_signals[LAST_SIGNAL]; extern pthread_mutex_t ags_application_mutex; GType ags_pad_get_type(void) { static GType ags_type_pad = 0; if(!ags_type_pad){ static const GTypeInfo ags_pad_info = { sizeof(AgsPadClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_pad_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(AgsPad), 0, /* n_preallocs */ (GInstanceInitFunc) ags_pad_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_pad_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_plugin_interface_info = { (GInterfaceInitFunc) ags_pad_plugin_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_pad = g_type_register_static(GTK_TYPE_VBOX, "AgsPad\0", &ags_pad_info, 0); g_type_add_interface_static(ags_type_pad, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_pad, AGS_TYPE_PLUGIN, &ags_plugin_interface_info); } return(ags_type_pad); } void ags_pad_class_init(AgsPadClass *pad) { GObjectClass *gobject; GParamSpec *param_spec; ags_pad_parent_class = g_type_class_peek_parent(pad); /* GObjectClass */ gobject = G_OBJECT_CLASS(pad); gobject->set_property = ags_pad_set_property; gobject->get_property = ags_pad_get_property; /* properties */ //TODO:JK: add finalize /** * AgsPad:channel: * * The start of a bunch of #AgsChannel to visualize. * * Since: 0.4 */ param_spec = g_param_spec_object("channel\0", "assigned channel\0", "The channel it is assigned with\0", AGS_TYPE_CHANNEL, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_CHANNEL, param_spec); /* AgsPadClass */ pad->set_channel = ags_pad_real_set_channel; pad->resize_lines = ags_pad_real_resize_lines; pad->map_recall = ags_pad_real_map_recall; pad->find_port = ags_pad_real_find_port; /* signals */ /** * AgsPad::set-channel: * @pad: the #AgsPad to modify * @channel: the #AgsChannel to set * * The ::set-channel signal notifies about changed channel. */ pad_signals[SET_CHANNEL] = g_signal_new("set-channel\0", G_TYPE_FROM_CLASS(pad), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsPadClass, set_channel), NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, G_TYPE_OBJECT); /** * AgsPad::resize-lines: * @pad: the #AgsPad to resize * @line_type: the channel type * @audio_channels: count of lines * @audio_channels_old: old count of lines * * The ::resize-lines is emitted as count of lines pack is modified. */ pad_signals[RESIZE_LINES] = g_signal_new("resize-lines\0", G_TYPE_FROM_CLASS(pad), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsPadClass, resize_lines), NULL, NULL, g_cclosure_user_marshal_VOID__ULONG_UINT_UINT, G_TYPE_NONE, 3, G_TYPE_ULONG, G_TYPE_UINT, G_TYPE_UINT); /** * AgsPad::map-recall: * @pad: the #AgsPad to resize * @output_pad_start: start of output pad * * The ::map-recall as recall should be mapped */ pad_signals[MAP_RECALL] = g_signal_new("map-recall\0", G_TYPE_FROM_CLASS(pad), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsPadClass, map_recall), NULL, NULL, g_cclosure_marshal_VOID__UINT, G_TYPE_NONE, 1, G_TYPE_UINT); /** * AgsPad::find-port: * @pad: the #AgsPad to resize * Returns: a #GList with associated ports * * The ::find-port retrieves all associated ports */ pad_signals[FIND_PORT] = g_signal_new("find-port\0", G_TYPE_FROM_CLASS(pad), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsPadClass, find_port), NULL, NULL, g_cclosure_user_marshal_POINTER__VOID, G_TYPE_POINTER, 0); } void ags_pad_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->is_ready = NULL; connectable->is_connected = NULL; connectable->connect = ags_pad_connect; connectable->disconnect = ags_pad_disconnect; } void ags_pad_plugin_interface_init(AgsPluginInterface *plugin) { plugin->get_name = NULL; plugin->set_name = NULL; plugin->get_version = ags_pad_get_version; plugin->set_version = ags_pad_set_version; plugin->get_build_id = ags_pad_get_build_id; plugin->set_build_id = ags_pad_set_build_id; plugin->get_xml_type = NULL; plugin->set_xml_type = NULL; plugin->get_ports = NULL; plugin->read = NULL; plugin->write = NULL; plugin->set_ports = NULL; } void ags_pad_init(AgsPad *pad) { GtkMenu *menu; GtkHBox *hbox; g_signal_connect((GObject *) pad, "parent_set\0", G_CALLBACK(ags_pad_parent_set_callback), (gpointer) pad); pad->flags = 0; pad->name = NULL; pad->version = AGS_VERSION; pad->build_id = AGS_BUILD_ID; pad->cols = 2; pad->expander_set = ags_expander_set_new(1, 1); gtk_box_pack_start((GtkBox *) pad, (GtkWidget *) pad->expander_set, TRUE, TRUE, 0); hbox = (GtkHBox *) gtk_hbox_new(TRUE, 0); gtk_box_pack_start((GtkBox *) pad, (GtkWidget *) hbox, FALSE, FALSE, 0); pad->group = (GtkToggleButton *) gtk_toggle_button_new_with_label("G\0"); gtk_toggle_button_set_active(pad->group, TRUE); gtk_box_pack_start((GtkBox *) hbox, (GtkWidget *) pad->group, FALSE, FALSE, 0); pad->mute = (GtkToggleButton *) gtk_toggle_button_new_with_label("M\0"); gtk_box_pack_start((GtkBox *) hbox, (GtkWidget *) pad->mute, FALSE, FALSE, 0); pad->solo = (GtkToggleButton *) gtk_toggle_button_new_with_label("S\0"); gtk_box_pack_start((GtkBox *) hbox, (GtkWidget *) pad->solo, FALSE, FALSE, 0); pad->play = NULL; } void ags_pad_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsPad *pad; pad = AGS_PAD(gobject); switch(prop_id){ case PROP_CHANNEL: { AgsChannel *channel; channel = (AgsChannel *) g_value_get_object(value); ags_pad_set_channel(pad, channel); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_pad_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsPad *pad; pad = AGS_PAD(gobject); switch(prop_id){ case PROP_CHANNEL: g_value_set_object(value, pad->channel); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_pad_connect(AgsConnectable *connectable) { AgsPad *pad; GList *line_list, *line_list_start; /* AgsPad */ pad = AGS_PAD(connectable); if((AGS_PAD_CONNECTED & (pad->flags)) != 0){ return; } pad->flags |= AGS_PAD_CONNECTED; if((AGS_PAD_PREMAPPED_RECALL & (pad->flags)) == 0){ if((AGS_PAD_MAPPED_RECALL & (pad->flags)) == 0){ ags_pad_map_recall(pad, 0); } }else{ pad->flags &= (~AGS_PAD_PREMAPPED_RECALL); ags_pad_find_port(pad); } /* GtkObject */ g_signal_connect((GObject *) pad, "destroy\0", G_CALLBACK(ags_pad_destroy_callback), (gpointer) pad); /* GtkWidget */ g_signal_connect((GObject *) pad, "show\0", G_CALLBACK(ags_pad_show_callback), (gpointer) pad); /* GtkButton */ g_signal_connect_after((GObject *) pad->group, "clicked\0", G_CALLBACK(ags_pad_group_clicked_callback), (gpointer) pad); g_signal_connect_after((GObject *) pad->mute, "clicked\0", G_CALLBACK(ags_pad_mute_clicked_callback), (gpointer) pad); g_signal_connect_after((GObject *) pad->solo, "clicked\0", G_CALLBACK(ags_pad_solo_clicked_callback), (gpointer) pad); /* AgsLine */ line_list_start = line_list = gtk_container_get_children(GTK_CONTAINER(pad->expander_set)); while(line_list != NULL){ ags_connectable_connect(AGS_CONNECTABLE(line_list->data)); line_list = line_list->next; } g_list_free(line_list_start); } void ags_pad_disconnect(AgsConnectable *connectable) { //TODO:JK: implement me } gchar* ags_pad_get_version(AgsPlugin *plugin) { return(AGS_PAD(plugin)->version); } void ags_pad_set_version(AgsPlugin *plugin, gchar *version) { AgsPad *pad; pad = AGS_PAD(plugin); pad->version = version; } gchar* ags_pad_get_build_id(AgsPlugin *plugin) { return(AGS_PAD(plugin)->build_id); } void ags_pad_set_build_id(AgsPlugin *plugin, gchar *build_id) { AgsPad *pad; pad = AGS_PAD(plugin); pad->build_id = build_id; } void ags_pad_destroy(GtkObject *object) { //TODO:JK: implement me } void ags_pad_show(GtkWidget *widget) { AgsPad *pad; pad = AGS_PAD(widget); } void ags_pad_real_set_channel(AgsPad *pad, AgsChannel *channel) { AgsChannel *current; AgsMutexManager *mutex_manager; GList *line, *line_start; pthread_mutex_t *current_mutex; if(pad->channel == channel){ return; } if(pad->channel != NULL){ g_object_unref(G_OBJECT(pad->channel)); } if(channel != NULL){ g_object_ref(G_OBJECT(channel)); } pad->channel = channel; line_start = line = gtk_container_get_children(GTK_CONTAINER(AGS_PAD(pad)->expander_set)); current = channel; /* get mutex manager */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); pthread_mutex_unlock(&(ags_application_mutex)); /* set channel */ while(line != NULL){ if(current != NULL){ /* lookup current mutex */ pthread_mutex_lock(&(ags_application_mutex)); current_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) current); pthread_mutex_unlock(&(ags_application_mutex)); } g_object_set(G_OBJECT(line->data), "channel\0", current, NULL); /* iterate */ if(current != NULL){ pthread_mutex_lock(current_mutex); current = current->next; pthread_mutex_unlock(current_mutex); } line = line->next; } g_list_free(line_start); } /** * ags_pad_set_channel: * @pad: an #AgsPad * @channel: the #AgsChannel to set * * Is emitted as channel gets modified. * * Since: 0.3 */ void ags_pad_set_channel(AgsPad *pad, AgsChannel *channel) { g_return_if_fail(AGS_IS_PAD(pad)); g_object_ref((GObject *) pad); g_signal_emit(G_OBJECT(pad), pad_signals[SET_CHANNEL], 0, channel); g_object_unref((GObject *) pad); } void ags_pad_real_resize_lines(AgsPad *pad, GType line_type, guint audio_channels, guint audio_channels_old) { AgsMachine *machine; AgsLine *line; AgsChannel *channel; AgsMutexManager *mutex_manager; guint i, j; pthread_mutex_t *channel_mutex; #ifdef AGS_DEBUG g_message("ags_pad_real_resize_lines: audio_channels = %u ; audio_channels_old = %u\n\0", audio_channels, audio_channels_old); #endif machine = (AgsMachine *) gtk_widget_get_ancestor((GtkWidget *) pad, AGS_TYPE_MACHINE); /* get mutex manager */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); pthread_mutex_unlock(&(ags_application_mutex)); /* resize */ if(audio_channels > audio_channels_old){ channel = ags_channel_nth(pad->channel, audio_channels_old); /* create AgsLine */ for(i = audio_channels_old; i < audio_channels;){ for(j = audio_channels_old % pad->cols; j < pad->cols && i < audio_channels; j++, i++){ /* lookup channel mutex */ if(channel != NULL){ pthread_mutex_lock(&(ags_application_mutex)); channel_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); } /* instantiate line */ line = (AgsLine *) g_object_new(line_type, "pad\0", pad, "channel\0", channel, NULL); if(channel != NULL){ channel->line_widget = (GtkWidget *) line; } ags_expander_set_add(pad->expander_set, (GtkWidget *) line, j, i / pad->cols, 1, 1); /* iterate */ if(channel != NULL){ pthread_mutex_lock(channel_mutex); channel = channel->next; pthread_mutex_unlock(channel_mutex); } } } }else if(audio_channels < audio_channels_old){ GList *list, *list_start; list_start = list = g_list_nth(g_list_reverse(gtk_container_get_children(GTK_CONTAINER(pad->expander_set))), audio_channels); while(list != NULL){ ags_connectable_disconnect(AGS_CONNECTABLE(list->data)); list = list->next; } list = list_start; while(list != NULL){ gtk_widget_destroy(GTK_WIDGET(list->data)); list = list->next; } g_list_free(list_start); } } /** * ags_pad_resize_lines: * @pad: the #AgsPad to resize * @line_type: channel type, either %AGS_TYPE_INPUT or %AGS_TYPE_OUTPUT * @audio_channels: count of lines * @audio_channels_old: old count of lines * * Resize the count of #AgsLine packe by #AgsPad. * * Since: 0.3 */ void ags_pad_resize_lines(AgsPad *pad, GType line_type, guint audio_channels, guint audio_channels_old) { g_return_if_fail(AGS_IS_PAD(pad)); // fprintf(stdout, "ags_pad_resize_lines: audio_channels = %u ; audio_channels_old = %u\n\0", audio_channels, audio_channels_old); g_object_ref((GObject *) pad); g_signal_emit(G_OBJECT(pad), pad_signals[RESIZE_LINES], 0, line_type, audio_channels, audio_channels_old); g_object_unref((GObject *) pad); } void ags_pad_real_map_recall(AgsPad *pad, guint output_pad_start) { if((AGS_PAD_MAPPED_RECALL & (pad->flags)) != 0){ return; } pad->flags |= AGS_PAD_MAPPED_RECALL; ags_pad_find_port(pad); } /** * ags_pad_map_recall: * @pad: the #AgsPad to resize * @output_pad_start: start of output pad * * Start of output pad * * Since: 0.4 */ void ags_pad_map_recall(AgsPad *pad, guint output_pad_start) { g_return_if_fail(AGS_IS_PAD(pad)); g_object_ref((GObject *) pad); g_signal_emit(G_OBJECT(pad), pad_signals[MAP_RECALL], 0, output_pad_start); g_object_unref((GObject *) pad); } GList* ags_pad_real_find_port(AgsPad *pad) { AgsChannel *channel, *next_pad; AgsMutexManager *mutex_manager; GList *list, *tmp; pthread_mutex_t *channel_mutex; channel = pad->channel; list = NULL; if(channel != NULL){ /* get mutex manager */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); channel_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); /* find ports */ pthread_mutex_lock(channel_mutex); next_pad = channel->next_pad; pthread_mutex_unlock(channel_mutex); while(channel != next_pad){ /* lookup channel mutex */ pthread_mutex_lock(&(ags_application_mutex)); channel_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); /* do it so */ if(list != NULL){ list = ags_channel_find_port(channel); }else{ tmp = ags_channel_find_port(channel); list = g_list_concat(list, tmp); g_list_free(tmp); } /* iterate */ pthread_mutex_lock(channel_mutex); channel = channel->next; pthread_mutex_unlock(channel_mutex); } } return(list); } /** * ags_pad_find_port: * @pad: an #AgsPad * Returns: an #GList containing all related #AgsPort * * Lookup ports of assigned recalls. * * Since: 0.4 */ GList* ags_pad_find_port(AgsPad *pad) { GList *list; list = NULL; g_return_val_if_fail(AGS_IS_PAD(pad), NULL); g_object_ref((GObject *) pad); g_signal_emit((GObject *) pad, pad_signals[FIND_PORT], 0, &list); g_object_unref((GObject *) pad); return(list); } void ags_pad_play(AgsPad *pad) { AgsWindow *window; AgsMachine *machine; AgsDevout *devout; AgsChannel *channel; AgsStartDevout *start_devout; AgsInitChannel *init_channel; AgsAppendChannel *append_channel; AgsMutexManager *mutex_manager; AgsAudioLoop *audio_loop; AgsTaskThread *task_thread; AgsDevoutThread *devout_thread; AgsMain *ags_main; GList *tasks; gboolean play_all; pthread_mutex_t *audio_mutex; pthread_mutex_t *channel_mutex; machine = (AgsMachine *) gtk_widget_get_ancestor((GtkWidget *) pad, AGS_TYPE_MACHINE); window = (AgsWindow *) gtk_widget_get_toplevel(machine); ags_main = window->ags_main; /* get audio loop */ pthread_mutex_lock(&(ags_application_mutex)); audio_loop = ags_main->main_loop; pthread_mutex_unlock(&(ags_application_mutex)); /* get task and devout thread */ task_thread = (AgsTaskThread *) ags_thread_find_type(audio_loop, AGS_TYPE_TASK_THREAD); devout_thread = (AgsDevoutThread *) ags_thread_find_type(audio_loop, AGS_TYPE_DEVOUT_THREAD); /* lookup audio mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) machine->audio); pthread_mutex_unlock(&(ags_application_mutex)); /* get devout */ pthread_mutex_lock(audio_mutex); devout = machine->audio->devout; pthread_mutex_unlock(audio_mutex); /* */ tasks = NULL; play_all = pad->group->active; channel = pad->channel; /* lookup channel mutex */ pthread_mutex_lock(&(ags_application_mutex)); channel_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); if(pad->play->active){ /* init channel for playback */ init_channel = ags_init_channel_new(channel, play_all, TRUE, FALSE, FALSE); g_signal_connect_after(G_OBJECT(init_channel), "launch\0", G_CALLBACK(ags_pad_init_channel_launch_callback), pad); tasks = g_list_prepend(tasks, init_channel); if(play_all){ AgsChannel *next_pad; pthread_mutex_lock(channel_mutex); next_pad = channel->next_pad; pthread_mutex_unlock(channel_mutex); while(channel != next_pad){ /* lookup channel mutex */ pthread_mutex_lock(&(ags_application_mutex)); channel_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); /* append channel for playback */ append_channel = ags_append_channel_new(audio_loop, channel); tasks = g_list_prepend(tasks, append_channel); /* iterate */ pthread_mutex_lock(channel_mutex); channel = channel->next; pthread_mutex_unlock(channel_mutex); } }else{ AgsLine *line; GList *list; list = gtk_container_get_children(GTK_CONTAINER(pad->expander_set)); line = AGS_LINE(ags_line_find_next_grouped(list)->data); /* append channel for playback */ append_channel = ags_append_channel_new(audio_loop, line->channel); tasks = g_list_prepend(tasks, append_channel); g_list_free(list); } /* create start task */ if(tasks != NULL){ AgsGuiThread *gui_thread; AgsTaskCompletion *task_completion; gui_thread = (AgsGuiThread *) ags_thread_find_type(audio_loop, AGS_TYPE_GUI_THREAD); start_devout = ags_start_devout_new(window->devout); tasks = g_list_prepend(tasks, start_devout); task_completion = ags_task_completion_new((GObject *) start_devout, NULL); g_signal_connect_after(G_OBJECT(task_completion), "complete\0", G_CALLBACK(ags_pad_start_complete_callback), pad); gui_thread->task_completion = g_list_prepend(gui_thread->task_completion, task_completion); ags_connectable_connect(AGS_CONNECTABLE(task_completion)); /* append AgsStartDevout */ tasks = g_list_reverse(tasks); ags_task_thread_append_tasks((AgsTaskThread *) task_thread, tasks); } }else{ AgsDevoutPlay *devout_play; AgsRecallID *recall_id; AgsCancelChannel *cancel_channel; guint flags; channel = pad->channel; /* lookup channel mutex */ pthread_mutex_lock(&(ags_application_mutex)); channel_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); /* return if not playing */ pthread_mutex_lock(channel_mutex); devout_play = channel->devout_play; flags = g_atomic_int_get(&(devout_play->flags)); recall_id = devout_play->recall_id[0]; pthread_mutex_unlock(channel_mutex); if(recall_id == NULL || (AGS_DEVOUT_PLAY_DONE & (flags)) != 0){ return; } if((AGS_DEVOUT_PLAY_PAD & (flags)) != 0){ AgsChannel *next_pad; pthread_mutex_lock(channel_mutex); next_pad = channel->next_pad; pthread_mutex_unlock(channel_mutex); if((AGS_DEVOUT_PLAY_DONE & (flags)) == 0){ /* cancel request */ while(channel != next_pad){ /* lookup channel mutex */ pthread_mutex_lock(&(ags_application_mutex)); channel_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); /* create cancel task */ pthread_mutex_lock(channel_mutex); devout_play = channel->devout_play; recall_id = devout_play->recall_id[0]; pthread_mutex_unlock(channel_mutex); cancel_channel = ags_cancel_channel_new(channel, recall_id, devout_play); ags_task_thread_append_task(task_thread, (AgsTask *) cancel_channel); channel = channel->next; } }else{ /* done */ while(channel != next_pad){ /* lookup channel mutex */ pthread_mutex_lock(&(ags_application_mutex)); channel_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); /* set flags */ pthread_mutex_lock(channel_mutex); g_atomic_int_or(&(devout_play->flags), AGS_DEVOUT_PLAY_REMOVE); g_atomic_int_and(&(AGS_DEVOUT_PLAY(channel->devout_play)->flags), (~AGS_DEVOUT_PLAY_DONE)); channel = channel->next; pthread_mutex_unlock(channel_mutex); } } }else{ AgsLine *line; GList *list; list = gtk_container_get_children(GTK_CONTAINER(pad->expander_set)); line = AGS_LINE(ags_line_find_next_grouped(list)->data); g_list_free(list); /* */ channel = line->channel; /* lookup channel mutex */ pthread_mutex_lock(&(ags_application_mutex)); channel_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); /* create cancel task or set flags */ pthread_mutex_lock(channel_mutex); devout_play = channel->devout_play; flags = g_atomic_int_get(&(devout_play->flags)); recall_id = devout_play->recall_id[0]; pthread_mutex_unlock(channel_mutex); if((AGS_DEVOUT_PLAY_DONE & (flags)) == 0){ /* cancel request */ cancel_channel = ags_cancel_channel_new(channel, recall_id, devout_play); ags_task_thread_append_task(task_thread, (AgsTask *) cancel_channel); }else{ /* done */ pthread_mutex_lock(channel_mutex); AGS_DEVOUT_PLAY(channel->devout_play)->flags |= AGS_DEVOUT_PLAY_REMOVE; AGS_DEVOUT_PLAY(channel->devout_play)->flags &= (~AGS_DEVOUT_PLAY_DONE); pthread_mutex_unlock(channel_mutex); } } } } /** * ags_pad_new: * @pad: the parent pad * @channel: the bunch of channel to visualize * * Creates an #AgsPad * * Returns: a new #AgsPad * * Since: 0.3 */ AgsPad* ags_pad_new(AgsChannel *channel) { AgsPad *pad; pad = (AgsPad *) g_object_new(AGS_TYPE_PAD, NULL); return(pad); } gsequencer-0.6.37/src/ags/X/ags_navigation.c0000644000175000017500000005500312626272146015611 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include void ags_navigation_class_init(AgsNavigationClass *navigation); void ags_navigation_connectable_interface_init(AgsConnectableInterface *connectable); void ags_navigation_init(AgsNavigation *navigation); void ags_navigation_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_navigation_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_navigation_finalize(GObject *gobject); void ags_navigation_connect(AgsConnectable *connectable); void ags_navigation_disconnect(AgsConnectable *connectable); void ags_navigation_destroy(GtkObject *object); void ags_navigation_show(GtkWidget *widget); void ags_navigation_real_change_position(AgsNavigation *navigation, gdouble tact); /** * SECTION:ags_navigation * @short_description: control audio object's playback. * @title: AgsNavigation * @section_id: * @include: ags/X/ags_navigation.h * * #AgsNavigation is a composite widget to control playback of #AgsAudio objects. * It can start #AgsMachine in bulk mode or position the stream. */ enum{ PROP_0, PROP_DEVOUT, }; enum{ CHANGE_POSITION, LAST_SIGNAL, }; static gpointer ags_navigation_parent_class = NULL; static guint navigation_signals[LAST_SIGNAL]; extern AgsConfig *config; extern pthread_mutex_t ags_application_mutex; GType ags_navigation_get_type(void) { static GType ags_type_navigation = 0; if(!ags_type_navigation){ static const GTypeInfo ags_navigation_info = { sizeof (AgsNavigationClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_navigation_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsNavigation), 0, /* n_preallocs */ (GInstanceInitFunc) ags_navigation_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_navigation_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_navigation = g_type_register_static(GTK_TYPE_VBOX, "AgsNavigation\0", &ags_navigation_info, 0); g_type_add_interface_static(ags_type_navigation, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return(ags_type_navigation); } void ags_navigation_class_init(AgsNavigationClass *navigation) { GObjectClass *gobject; GtkWidgetClass *widget; GParamSpec *param_spec; ags_navigation_parent_class = g_type_class_peek_parent(navigation); /* GObjectClass */ gobject = (GObjectClass *) navigation; gobject->set_property = ags_navigation_set_property; gobject->get_property = ags_navigation_get_property; gobject->finalize = ags_navigation_finalize; /* properties */ /** * AgsNavigation:devout: * * The assigned #AgsDevout to use as default sink. * * Since: 0.4 */ param_spec = g_param_spec_object("devout\0", "assigned devout\0", "The devout it is assigned with\0", G_TYPE_OBJECT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_DEVOUT, param_spec); /* AgsNavigationClass */ navigation->change_position = ags_navigation_real_change_position; /* signals */ /** * AgsNavigation::change-position: * @navigation: the #AgsNavigation * @tact: the new position * * The ::change-position seeks the stream. */ navigation_signals[CHANGE_POSITION] = g_signal_new("change-position\0", G_TYPE_FROM_CLASS (navigation), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AgsNavigationClass, change_position), NULL, NULL, g_cclosure_marshal_VOID__DOUBLE, G_TYPE_NONE, 1, G_TYPE_DOUBLE); } void ags_navigation_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->is_ready = NULL; connectable->is_connected = NULL; connectable->connect = ags_navigation_connect; connectable->disconnect = ags_navigation_disconnect; } void ags_navigation_init(AgsNavigation *navigation) { GtkHBox *hbox; GtkLabel *label; navigation->flags = AGS_NAVIGATION_BLOCK_TIC; navigation->devout = NULL; g_signal_connect_after(G_OBJECT(navigation), "parent-set\0", G_CALLBACK(ags_navigation_parent_set_callback), NULL); navigation->start_tact = 0.0; /* GtkWidget */ hbox = (GtkHBox *) gtk_hbox_new(FALSE, 0); gtk_box_pack_start((GtkBox *) navigation, (GtkWidget *) hbox, FALSE, FALSE, 2); navigation->expander = (GtkToggleButton *) gtk_toggle_button_new(); gtk_box_pack_start((GtkBox*) hbox, (GtkWidget *) navigation->expander, FALSE, FALSE, 2); gtk_container_add((GtkContainer *) navigation->expander, (GtkWidget *) gtk_arrow_new(GTK_ARROW_RIGHT, GTK_SHADOW_NONE)); label = (GtkLabel *) gtk_label_new("bpm\0"); gtk_box_pack_start((GtkBox*) hbox, (GtkWidget *) label, FALSE, FALSE, 2); navigation->bpm = (GtkSpinButton *) gtk_spin_button_new_with_range(1.0, 1000.0, 1.0); navigation->bpm->adjustment->value = 120.0; gtk_box_pack_start((GtkBox*) hbox, (GtkWidget *) navigation->bpm, FALSE, FALSE, 2); navigation->current_bpm = 120.0; navigation->rewind = (GtkToggleButton *) g_object_new(GTK_TYPE_BUTTON, "image\0", (GtkWidget *) gtk_image_new_from_stock(GTK_STOCK_MEDIA_REWIND, GTK_ICON_SIZE_LARGE_TOOLBAR), NULL); gtk_box_pack_start((GtkBox *) hbox, (GtkWidget *) navigation->rewind, FALSE, FALSE, 0); navigation->previous = (GtkButton *) g_object_new(GTK_TYPE_BUTTON, "image\0", (GtkWidget *) gtk_image_new_from_stock(GTK_STOCK_MEDIA_PREVIOUS, GTK_ICON_SIZE_LARGE_TOOLBAR), NULL); gtk_box_pack_start((GtkBox *) hbox, (GtkWidget *) navigation->previous, FALSE, FALSE, 0); navigation->play = (GtkToggleButton *) g_object_new(GTK_TYPE_TOGGLE_BUTTON, "image\0", (GtkWidget *) gtk_image_new_from_stock(GTK_STOCK_MEDIA_PLAY, GTK_ICON_SIZE_LARGE_TOOLBAR), NULL); gtk_box_pack_start((GtkBox *) hbox, (GtkWidget *) navigation->play, FALSE, FALSE, 0); navigation->stop = (GtkButton *) g_object_new(GTK_TYPE_BUTTON, "image\0", (GtkWidget *) gtk_image_new_from_stock(GTK_STOCK_MEDIA_STOP, GTK_ICON_SIZE_LARGE_TOOLBAR), NULL); gtk_box_pack_start((GtkBox *) hbox, (GtkWidget *) navigation->stop, FALSE, FALSE, 0); navigation->next = (GtkButton *) g_object_new(GTK_TYPE_BUTTON, "image\0", (GtkWidget *) gtk_image_new_from_stock(GTK_STOCK_MEDIA_NEXT, GTK_ICON_SIZE_LARGE_TOOLBAR), NULL); gtk_box_pack_start((GtkBox *) hbox, (GtkWidget *) navigation->next, FALSE, FALSE, 0); navigation->forward = (GtkToggleButton *) g_object_new(GTK_TYPE_BUTTON, "image\0", (GtkWidget *) gtk_image_new_from_stock(GTK_STOCK_MEDIA_FORWARD, GTK_ICON_SIZE_LARGE_TOOLBAR), NULL); gtk_box_pack_start((GtkBox *) hbox, (GtkWidget *) navigation->forward, FALSE, FALSE, 0); navigation->loop = (GtkCheckButton *) gtk_check_button_new_with_label("loop\0"); gtk_box_pack_start((GtkBox *) hbox, (GtkWidget *) navigation->loop, FALSE, FALSE, 2); label = (GtkLabel *) gtk_label_new("position\0"); gtk_box_pack_start((GtkBox *) hbox, (GtkWidget *) label, FALSE, FALSE, 2); navigation->position_time = (GtkLabel *) gtk_label_new(g_strdup("00:00.000\0")); gtk_box_pack_start((GtkBox *) hbox, (GtkWidget *) navigation->position_time, FALSE, FALSE, 2); navigation->position_tact = (GtkSpinButton *) gtk_spin_button_new_with_range(0.0, AGS_NOTE_EDIT_MAX_CONTROLS * 64.0, 1.0); gtk_box_pack_start((GtkBox *) hbox, (GtkWidget *) navigation->position_tact, FALSE, FALSE, 2); label = (GtkLabel *) gtk_label_new("duration\0"); gtk_box_pack_start((GtkBox *) hbox, (GtkWidget *) label, FALSE, FALSE, 2); navigation->duration_time = (GtkLabel *) gtk_label_new(NULL); g_object_set(navigation->duration_time, "label\0", g_strdup("0000:00.000\0"), NULL); gtk_widget_queue_draw((GtkWidget *) navigation->duration_time); gtk_box_pack_start((GtkBox *) hbox, (GtkWidget *) navigation->duration_time, FALSE, FALSE, 2); navigation->duration_tact = NULL; // navigation->duration_tact = (GtkSpinButton *) gtk_spin_button_new_with_range(0.0, AGS_NOTE_EDIT_MAX_CONTROLS * 64.0, 1.0); // gtk_box_pack_start((GtkBox *) hbox, (GtkWidget *) navigation->duration_tact, FALSE, FALSE, 2); /* expansion */ hbox = (GtkHBox *) gtk_hbox_new(FALSE, 0); // GTK_WIDGET_SET_FLAGS((GtkWidget *) hbox, GTK_NO_SHOW_ALL); gtk_box_pack_start((GtkBox *) navigation, (GtkWidget *) hbox, FALSE, FALSE, 2); label = (GtkLabel *) gtk_label_new("loop L\0"); gtk_box_pack_start((GtkBox *) hbox, (GtkWidget *) label, FALSE, FALSE, 2); navigation->loop_left_tact = (GtkSpinButton *) gtk_spin_button_new_with_range(0.0, 65000.0, 1.0); gtk_box_pack_start((GtkBox *) hbox, (GtkWidget *) navigation->loop_left_tact, FALSE, FALSE, 2); label = (GtkLabel *) gtk_label_new("loop R\0"); gtk_box_pack_start((GtkBox *) hbox, (GtkWidget *) label, FALSE, FALSE, 2); navigation->loop_right_tact = (GtkSpinButton *) gtk_spin_button_new_with_range(0.0, 65000.0, 1.0); gtk_spin_button_set_value(navigation->loop_right_tact, 4.0); gtk_box_pack_start((GtkBox *) hbox, (GtkWidget *) navigation->loop_right_tact, FALSE, FALSE, 2); navigation->scroll = NULL; navigation->scroll = (GtkCheckButton *) gtk_check_button_new_with_label("auto-scroll\0"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(navigation->scroll), FALSE); gtk_box_pack_start((GtkBox *) hbox, (GtkWidget *) navigation->scroll, FALSE, FALSE, 2); navigation->exclude_sequencer = (GtkCheckButton *) gtk_check_button_new_with_label("exclude sequencers\0"); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(navigation->exclude_sequencer), TRUE); gtk_box_pack_start((GtkBox *) hbox, (GtkWidget *) navigation->exclude_sequencer, FALSE, FALSE, 2); } void ags_navigation_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsNavigation *navigation; navigation = AGS_NAVIGATION(gobject); switch(prop_id){ case PROP_DEVOUT: { AgsDevout *devout; devout = (AgsDevout *) g_value_get_object(value); if(navigation->devout == devout) return; if(devout != NULL) g_object_ref(devout); navigation->devout = devout; } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_navigation_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsNavigation *navigation; navigation = AGS_NAVIGATION(gobject); switch(prop_id){ case PROP_DEVOUT: g_value_set_object(value, navigation->devout); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_navigation_connect(AgsConnectable *connectable) { AgsNavigation *navigation; navigation = AGS_NAVIGATION(connectable); g_signal_connect((GObject *) navigation, "destroy\0", G_CALLBACK(ags_navigation_destroy_callback), (gpointer) navigation); g_signal_connect_after((GObject *) navigation, "show\0", G_CALLBACK(ags_navigation_show_callback), (gpointer) navigation); g_signal_connect((GObject *) navigation->expander, "clicked\0", G_CALLBACK(ags_navigation_expander_callback), (gpointer) navigation); g_signal_connect_after((GObject *) navigation->bpm, "value-changed\0", G_CALLBACK(ags_navigation_bpm_callback), (gpointer) navigation); g_signal_connect((GObject *) navigation->rewind, "clicked\0", G_CALLBACK(ags_navigation_rewind_callback), (gpointer) navigation); g_signal_connect((GObject *) navigation->previous, "clicked\0", G_CALLBACK(ags_navigation_prev_callback), (gpointer) navigation); g_signal_connect((GObject *) navigation->play, "clicked\0", G_CALLBACK(ags_navigation_play_callback), (gpointer) navigation); g_signal_connect((GObject *) navigation->stop, "clicked\0", G_CALLBACK(ags_navigation_stop_callback), (gpointer) navigation); g_signal_connect((GObject *) navigation->next, "clicked\0", G_CALLBACK(ags_navigation_next_callback), (gpointer) navigation); g_signal_connect((GObject *) navigation->forward, "clicked\0", G_CALLBACK(ags_navigation_forward_callback), (gpointer) navigation); g_signal_connect((GObject *) navigation->loop, "clicked\0", G_CALLBACK(ags_navigation_loop_callback), (gpointer) navigation); g_signal_connect_after((GObject *) navigation->position_tact, "value-changed\0", G_CALLBACK(ags_navigation_position_tact_callback), (gpointer) navigation); // g_signal_connect((GObject *) navigation->duration_tact, "value-changed\0", // G_CALLBACK(ags_navigation_duration_tact_callback), (gpointer) navigation); /* devout */ g_signal_connect_after((GObject *) navigation->devout, "tic\0", G_CALLBACK(ags_navigation_tic_callback), (gpointer) navigation); g_signal_connect_after((GObject *) navigation->devout, "stop\0", G_CALLBACK(ags_navigation_devout_stop_callback), (gpointer) navigation); /* expansion */ g_signal_connect((GObject *) navigation->loop_left_tact, "value-changed\0", G_CALLBACK(ags_navigation_loop_left_tact_callback), (gpointer) navigation); g_signal_connect((GObject *) navigation->loop_right_tact, "value-changed\0", G_CALLBACK(ags_navigation_loop_right_tact_callback), (gpointer) navigation); } void ags_navigation_disconnect(AgsConnectable *connectable) { //TODO:JK: implement me } void ags_navigation_finalize(GObject *gobject) { /* empty */ } void ags_navigation_destroy(GtkObject *object) { /* empty */ } void ags_navigation_show(GtkWidget *widget) { GList *list; /* empty */ // list = gtk_container_get_children((GtkContainer *) widget); // GTK_WIDGET_UNSET_FLAGS((GtkWidget *) list->next->data, GTK_NO_SHOW_ALL); } void ags_navigation_real_change_position(AgsNavigation *navigation, gdouble tact_counter) { AgsWindow *window; AgsEditor *editor; AgsSeekDevout *seek_devout; AgsAudioLoop *audio_loop; AgsTaskThread *task_thread; AgsMain *ags_main; gchar *timestr; double tact_factor, zoom_factor; double tact; gdouble delay; guint steps; gboolean move_forward; window = AGS_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(navigation))); editor = window->editor; ags_main = window->ags_main; /* get audio loop */ pthread_mutex_lock(&(ags_application_mutex)); audio_loop = ags_main->main_loop; pthread_mutex_unlock(&(ags_application_mutex)); /* get task thread */ task_thread = (AgsTaskThread *) ags_thread_find_type(audio_loop, AGS_TYPE_TASK_THREAD); /* seek devout */ delay = window->devout->delay[window->devout->tic_counter]; tact = window->devout->tact_counter - navigation->start_tact; if(tact < tact_counter){ steps = (guint) ((tact_counter - tact) * delay); move_forward = TRUE; }else{ steps = (guint) ((navigation->start_tact - tact) * delay); move_forward = FALSE; } seek_devout = ags_seek_devout_new(window->devout, steps, move_forward); ags_task_thread_append_task(task_thread, AGS_TASK(seek_devout)); /* update GUI */ zoom_factor = 0.25; tact_factor = exp2(6.0 - (double) gtk_combo_box_get_active((GtkComboBox *) editor->toolbar->zoom)); tact = exp2((double) gtk_combo_box_get_active((GtkComboBox *) editor->toolbar->zoom) - 2.0); if(AGS_IS_NOTE_EDIT(editor->current_edit_widget)){ gtk_adjustment_set_value(GTK_RANGE(AGS_NOTE_EDIT(editor->current_edit_widget)->hscrollbar)->adjustment, tact_counter * AGS_NOTE_EDIT(editor->current_edit_widget)->control_current.control_width * (16.0 / tact_factor)); }else if(AGS_IS_PATTERN_EDIT(editor->current_edit_widget)){ gtk_adjustment_set_value(GTK_RANGE(AGS_PATTERN_EDIT(editor->current_edit_widget)->hscrollbar)->adjustment, tact_counter * AGS_PATTERN_EDIT(editor->current_edit_widget)->control_current.control_width * (16.0 / tact_factor)); } timestr = ags_navigation_absolute_tact_to_time_string(16.0 * tact_counter, navigation->bpm->adjustment->value, window->devout->delay_factor); gtk_label_set_text(navigation->position_time, timestr); g_free(timestr); } /** * ags_navigation_change_position: * @navigation: the #AgsNavigation * @tact: the new position * * Change tact position of editor. The scrollbar is adjustet * and its playback position seeked. * * Since: 0.4 */ void ags_navigation_change_position(AgsNavigation *navigation, gdouble tact) { g_return_if_fail(AGS_IS_NAVIGATION(navigation)); g_object_ref(G_OBJECT(navigation)); g_signal_emit(G_OBJECT(navigation), navigation_signals[CHANGE_POSITION], 0, tact); g_object_unref(G_OBJECT(navigation)); } /** * ags_navigation_tact_to_time_string: * @tact: the new position * * Convert tact unit to time. * * Returns: tact as time string * * Since: 0.4 */ gchar* ags_navigation_tact_to_time_string(gdouble tact, gdouble bpm, gdouble delay_factor) { gdouble delay_min, delay_sec, delay_msec; gchar *timestr; gdouble tact_redux; guint min, sec, msec; delay_min = bpm / delay_factor; delay_sec = delay_min / 60.0; delay_msec = delay_sec / 1000.0; tact_redux = (tact + (tact / 16.0)) * 16.0; min = (guint) floor(tact_redux / delay_min); if(min > 0){ tact_redux = tact_redux - (min * delay_min); } sec = (guint) floor(tact_redux / delay_sec); if(sec > 0){ tact_redux = tact_redux - (sec * delay_sec); } msec = (guint) floor(tact_redux / delay_msec); timestr = g_strdup_printf("%.4d:%.2d.%.3d\0", min, sec, msec); return(timestr); } /** * ags_navigation_update_time_string: * @tact: the new position * @time_str: the pointer location to set * * Updates time as string. * * Since: 0.4 */ void ags_navigation_update_time_string(double tact, gdouble bpm, gdouble delay_factor, gchar *time_string) { gdouble delay_min, delay_sec, delay_msec; gchar *timestr; gdouble tact_redux; guint min, sec, msec; delay_min = bpm * (60.0 / bpm) * (60.0 / bpm) * delay_factor; delay_sec = delay_min / 60.0; delay_msec = delay_sec / 1000.0; tact_redux = 1.0 / 16.0; min = (guint) floor(tact_redux / delay_min); if(min > 0){ tact_redux = tact_redux - (min * delay_min); } sec = (guint) floor(tact_redux / delay_sec); if(sec > 0){ tact_redux = tact_redux - (sec * delay_sec); } msec = (guint) floor(tact_redux / delay_msec); sprintf(time_string, "%.4d:%.2d.%.3d\0", min, sec, msec); } gchar* ags_navigation_relative_tact_to_time_string(gchar *timestr, gdouble delay, gdouble bpm, gdouble delay_factor) { gchar *tmp; guint min, sec, msec; guint prev_min, prev_sec, prev_msec; gdouble sec_value; tmp = sscanf(timestr, "%d:%d.%d", &prev_min, &prev_sec, &prev_msec); sec_value = prev_min * 60.0; sec_value += prev_sec; sec_value += (1.0 / (16.0 * delay_factor) * (60.0 / bpm) + (1.0 / delay)) / 2.0; if(prev_msec != 0){ sec_value += (prev_msec / 1000.0); } // sec_value += (1.0 / delay); min = (guint) floor(sec_value / 60.0); sec = sec_value - 60 * min; msec = (sec_value - sec - min * 60) * 1000; timestr = g_strdup_printf("%.4d:%.2d.%.3d\0", min, sec, msec); return(timestr); } gchar* ags_navigation_absolute_tact_to_time_string(gdouble tact, gdouble bpm, gdouble delay_factor) { gchar *str; guint samplerate; guint buffer_size; gdouble delay; gdouble delay_min, delay_sec, delay_msec; gchar *timestr; gdouble tact_redux; guint min, sec, msec; /* retrieve some presets */ str = ags_config_get(config, AGS_CONFIG_DEVOUT, "samplerate\0"); samplerate = g_ascii_strtoull(str, NULL, 10); free(str); str = ags_config_get(config, AGS_CONFIG_DEVOUT, "buffer-size\0"); buffer_size = g_ascii_strtoull(str, NULL, 10); free(str); /* calculate delays */ delay = ((gdouble) samplerate / (gdouble) buffer_size) * (gdouble)(60.0 / bpm) * delay_factor; delay_sec = ((bpm / delay_factor) / 60.0); delay_min = delay_sec * 60.0; delay_msec = delay_sec / 1000.0; /* translate to time string */ tact_redux = tact; min = (guint) floor(tact_redux / delay_min); if(min > 0){ tact_redux = tact_redux - (min * delay_min); } sec = (guint) floor(tact_redux / delay_sec); if(sec > 0){ tact_redux = tact_redux - (sec * delay_sec); } msec = (guint) floor(tact_redux / delay_msec); timestr = g_strdup_printf("%.4d:%.2d.%.3d\0", min, sec, msec); return(timestr); } /** * ags_navigation_set_seeking_sensitive_new: * @navigation: the #AgsNavigation * @enabled: if %TRUE then sensitive, otherwise insensitive. * * Enables/Disables the #AgsNavigation to control the tree. * * Since: 0.4 */ void ags_navigation_set_seeking_sensitive(AgsNavigation *navigation, gboolean enabled) { gtk_widget_set_sensitive((GtkWidget *) navigation->rewind, enabled); gtk_widget_set_sensitive((GtkWidget *) navigation->previous, enabled); gtk_widget_set_sensitive((GtkWidget *) navigation->play, enabled); gtk_widget_set_sensitive((GtkWidget *) navigation->stop, enabled); gtk_widget_set_sensitive((GtkWidget *) navigation->next, enabled); gtk_widget_set_sensitive((GtkWidget *) navigation->forward, enabled); } /** * ags_navigation_new: * * Creates an #AgsNavigation to control the tree. * * Returns: a new #AgsNavigation * * Since: 0.4 */ AgsNavigation* ags_navigation_new() { AgsNavigation *navigation; navigation = (AgsNavigation *) g_object_new(AGS_TYPE_NAVIGATION, NULL); return(navigation); } gsequencer-0.6.37/src/ags/X/ags_export_window.h0000644000175000017500000000443612626272146016373 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_EXPORT_WINDOW_H__ #define __AGS_EXPORT_WINDOW_H__ #include #include #include #include #define AGS_TYPE_EXPORT_WINDOW (ags_export_window_get_type()) #define AGS_EXPORT_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_EXPORT_WINDOW, AgsExportWindow)) #define AGS_EXPORT_WINDOW_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_EXPORT_WINDOW, AgsExportWindowClass)) #define AGS_IS_EXPORT_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_EXPORT_WINDOW)) #define AGS_IS_EXPORT_WINDOW_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_EXPORT_WINDOW)) #define AGS_EXPORT_WINDOW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_EXPORT_WINDOW, AgsExportWindowClass)) typedef struct _AgsExportWindow AgsExportWindow; typedef struct _AgsExportWindowClass AgsExportWindowClass; typedef enum{ AGS_EXPORT_WINDOW_LIVE_EXPORT = 1, }AgsExportWindowFlags; struct _AgsExportWindow { GtkWindow window; guint flags; GObject *ags_main; AgsDevout *devout; GtkCheckButton *live_export; GtkCheckButton *exclude_sequencer; GtkEntry *filename; GtkButton *file_chooser_button; GtkComboBoxText *mode; GtkSpinButton *tact; GtkLabel *duration; GtkComboBoxText *output_format; GtkToggleButton *export; }; struct _AgsExportWindowClass { GtkWindowClass window; }; GType ags_export_window_get_type(void); AgsExportWindow* ags_export_window_new(); #endif /*__AGS_EXPORT_WINDOW_H__*/ gsequencer-0.6.37/src/ags/X/ags_generic_preferences.c0000644000175000017500000002235612626272146017454 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include void ags_generic_preferences_class_init(AgsGenericPreferencesClass *generic_preferences); void ags_generic_preferences_connectable_interface_init(AgsConnectableInterface *connectable); void ags_generic_preferences_applicable_interface_init(AgsApplicableInterface *applicable); void ags_generic_preferences_init(AgsGenericPreferences *generic_preferences); void ags_generic_preferences_connect(AgsConnectable *connectable); void ags_generic_preferences_disconnect(AgsConnectable *connectable); void ags_generic_preferences_set_update(AgsApplicable *applicable, gboolean update); void ags_generic_preferences_apply(AgsApplicable *applicable); void ags_generic_preferences_reset(AgsApplicable *applicable); static void ags_generic_preferences_finalize(GObject *gobject); void ags_generic_preferences_show(GtkWidget *widget); GtkListStore* ags_generic_preferences_create_segmentation(); /** * SECTION:ags_generic_preferences * @short_description: A composite widget to do generic related preferences * @title: AgsGenericPreferences * @section_id: * @include: ags/X/ags_generic_preferences.h * * #AgsGenericPreferences enables you to make generic related preferences. */ static gpointer ags_generic_preferences_parent_class = NULL; GType ags_generic_preferences_get_type(void) { static GType ags_type_generic_preferences = 0; if(!ags_type_generic_preferences){ static const GTypeInfo ags_generic_preferences_info = { sizeof (AgsGenericPreferencesClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_generic_preferences_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsGenericPreferences), 0, /* n_preallocs */ (GInstanceInitFunc) ags_generic_preferences_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_generic_preferences_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_applicable_interface_info = { (GInterfaceInitFunc) ags_generic_preferences_applicable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_generic_preferences = g_type_register_static(GTK_TYPE_VBOX, "AgsGenericPreferences\0", &ags_generic_preferences_info, 0); g_type_add_interface_static(ags_type_generic_preferences, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_generic_preferences, AGS_TYPE_APPLICABLE, &ags_applicable_interface_info); } return(ags_type_generic_preferences); } void ags_generic_preferences_class_init(AgsGenericPreferencesClass *generic_preferences) { GObjectClass *gobject; GtkWidgetClass *widget; ags_generic_preferences_parent_class = g_type_class_peek_parent(generic_preferences); /* GtkObjectClass */ gobject = (GObjectClass *) generic_preferences; gobject->finalize = ags_generic_preferences_finalize; /* GtkWidgetClass */ widget = (GtkWidgetClass *) generic_preferences; widget->show = ags_generic_preferences_show; } void ags_generic_preferences_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->is_ready = NULL; connectable->is_connected = NULL; connectable->connect = ags_generic_preferences_connect; connectable->disconnect = ags_generic_preferences_disconnect; } void ags_generic_preferences_applicable_interface_init(AgsApplicableInterface *applicable) { applicable->set_update = ags_generic_preferences_set_update; applicable->apply = ags_generic_preferences_apply; applicable->reset = ags_generic_preferences_reset; } void ags_generic_preferences_init(AgsGenericPreferences *generic_preferences) { GtkHBox *hbox; GtkLabel *label; generic_preferences->autosave_thread = (GtkCheckButton *) gtk_check_button_new_with_label("autosave thread\0"); gtk_box_pack_start(GTK_BOX(generic_preferences), GTK_WIDGET(generic_preferences->autosave_thread), FALSE, FALSE, 0); hbox = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(generic_preferences), GTK_WIDGET(hbox), FALSE, FALSE, 0); label = gtk_label_new("segmentation\0"); gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(label), FALSE, FALSE, 0); generic_preferences->segmentation = gtk_combo_box_text_new(); gtk_combo_box_set_model(generic_preferences->segmentation, ags_generic_preferences_create_segmentation()); gtk_combo_box_set_active(generic_preferences->segmentation, 2); gtk_box_pack_start(GTK_BOX(hbox), GTK_WIDGET(generic_preferences->segmentation), FALSE, FALSE, 0); } void ags_generic_preferences_connect(AgsConnectable *connectable) { AgsGenericPreferences *generic_preferences; generic_preferences = AGS_GENERIC_PREFERENCES(connectable); // g_signal_connect_after(G_OBJECT(generic_preferences->autosave_thread), "clicked\0", // G_CALLBACK(ags_generic_preferences_autosave_thread_clicked_callback), generic_preferences); } void ags_generic_preferences_disconnect(AgsConnectable *connectable) { /* empty */ } void ags_generic_preferences_set_update(AgsApplicable *applicable, gboolean update) { //TODO:JK: implement me } void ags_generic_preferences_apply(AgsApplicable *applicable) { AgsPreferences *preferences; AgsGenericPreferences *generic_preferences; AgsConfig *config; generic_preferences = AGS_GENERIC_PREFERENCES(applicable); preferences = (AgsPreferences *) gtk_widget_get_ancestor(GTK_WIDGET(generic_preferences), AGS_TYPE_PREFERENCES); config = AGS_CONFIG(AGS_MAIN(AGS_WINDOW(preferences->window)->ags_main)->config); if(gtk_toggle_button_get_active((GtkToggleButton *) generic_preferences->autosave_thread)){ ags_config_set(config, AGS_CONFIG_GENERIC, "autosave-thread\0", "true\0"); }else{ ags_config_set(config, AGS_CONFIG_GENERIC, "autosave-thread\0", "false\0"); } ags_config_set(config, AGS_CONFIG_GENERIC, "segmentation\0", gtk_combo_box_text_get_active_text(generic_preferences->segmentation)); } void ags_generic_preferences_reset(AgsApplicable *applicable) { AgsPreferences *preferences; AgsGenericPreferences *generic_preferences; AgsConfig *config; generic_preferences = AGS_GENERIC_PREFERENCES(applicable); preferences = (AgsPreferences *) gtk_widget_get_ancestor(GTK_WIDGET(generic_preferences), AGS_TYPE_PREFERENCES); config = AGS_CONFIG(AGS_MAIN(AGS_WINDOW(preferences->window)->ags_main)->config); gtk_toggle_button_set_active((GtkToggleButton *) generic_preferences->autosave_thread, ((!strncmp(ags_config_get(config, AGS_CONFIG_GENERIC, "autosave-thread\0"), "true\0", 5)) ? TRUE: FALSE)); } static void ags_generic_preferences_finalize(GObject *gobject) { //TODO:JK: implement me } void ags_generic_preferences_show(GtkWidget *widget) { AgsGenericPreferences *generic_preferences; pthread_t thread; generic_preferences = AGS_GENERIC_PREFERENCES(widget); GTK_WIDGET_CLASS(ags_generic_preferences_parent_class)->show(widget); } GtkListStore* ags_generic_preferences_create_segmentation() { GtkListStore *model; GtkTreeIter iter; model = gtk_list_store_new(3, G_TYPE_STRING, G_TYPE_UINT, G_TYPE_UINT); gtk_list_store_append(model, &iter); gtk_list_store_set(model, &iter, 0, "1/1\0", 1, 1, 2, 1, -1); gtk_list_store_append(model, &iter); gtk_list_store_set(model, &iter, 0, "3/4\0", 1, 4, 2, 4, -1); gtk_list_store_append(model, &iter); gtk_list_store_set(model, &iter, 0, "4/4\0", 1, 4, 2, 4, -1); gtk_list_store_append(model, &iter); gtk_list_store_set(model, &iter, 0, "8/8\0", 1, 4, 2, 4, -1); return(model); } /** * ags_generic_preferences_new: * * Creates an #AgsGenericPreferences * * Returns: a new #AgsGenericPreferences * * Since: 0.4 */ AgsGenericPreferences* ags_generic_preferences_new() { AgsGenericPreferences *generic_preferences; generic_preferences = (AgsGenericPreferences *) g_object_new(AGS_TYPE_GENERIC_PREFERENCES, NULL); return(generic_preferences); } gsequencer-0.6.37/src/ags/X/ags_property_collection_editor_callbacks.c0000644000175000017500000000466112626272146023122 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_property_collection_editor_add_collection_callback(GtkButton *button, AgsPropertyCollectionEditor *property_collection_editor) { GtkTable *table; GtkWidget *collection; GtkButton *remove_collection; GtkAlignment *alignment; table = (GtkTable *) gtk_table_new(2, 2, FALSE); gtk_box_pack_start(GTK_BOX(property_collection_editor->child), GTK_WIDGET(table), FALSE, FALSE, 0); collection = (GtkWidget *) g_object_newv(property_collection_editor->child_type, property_collection_editor->child_parameter_count, property_collection_editor->child_parameter); g_object_set_data(G_OBJECT(table), "AgsChild\0", collection); gtk_table_attach(table, GTK_WIDGET(collection), 0, 2, 0, 1, GTK_FILL, GTK_FILL, 0, 0); alignment = (GtkAlignment *) gtk_alignment_new(1.0, 0.0, 0.0, 0.0); gtk_table_attach(table, GTK_WIDGET(alignment), 1, 2, 1, 2, GTK_FILL, 0, 0, 0); remove_collection = (GtkButton *) gtk_button_new_from_stock(GTK_STOCK_REMOVE); gtk_container_add(GTK_CONTAINER(alignment), GTK_WIDGET(remove_collection)); g_signal_connect_after(G_OBJECT(remove_collection), "clicked\0", G_CALLBACK(ags_property_collection_editor_remove_collection_callback), table); gtk_table_set_row_spacing(table, 0, 8); ags_connectable_connect(AGS_CONNECTABLE(collection)); gtk_widget_show_all(GTK_WIDGET(table)); } void ags_property_collection_editor_remove_collection_callback(GtkButton *button, GtkTable *table) { gtk_widget_destroy(GTK_WIDGET(table)); } gsequencer-0.6.37/src/ags/X/ags_generic_preferences.h0000644000175000017500000000410612621463700017443 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_GENERIC_PREFERENCES_H__ #define __AGS_GENERIC_PREFERENCES_H__ #include #define AGS_TYPE_GENERIC_PREFERENCES (ags_generic_preferences_get_type()) #define AGS_GENERIC_PREFERENCES(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_GENERIC_PREFERENCES, AgsGenericPreferences)) #define AGS_GENERIC_PREFERENCES_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_GENERIC_PREFERENCES, AgsGenericPreferencesClass)) #define AGS_IS_GENERIC_PREFERENCES(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_GENERIC_PREFERENCES)) #define AGS_IS_GENERIC_PREFERENCES_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_GENERIC_PREFERENCES)) #define AGS_GENERIC_PREFERENCES_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_GENERIC_PREFERENCES, AgsGenericPreferencesClass)) typedef struct _AgsGenericPreferences AgsGenericPreferences; typedef struct _AgsGenericPreferencesClass AgsGenericPreferencesClass; struct _AgsGenericPreferences { GtkVBox vbox; GtkCheckButton *autosave_thread; GtkComboBox *audio_output_module; GtkComboBox *segmentation; }; struct _AgsGenericPreferencesClass { GtkVBoxClass vbox; }; GType ags_generic_preferences_get_type(void); AgsGenericPreferences* ags_generic_preferences_new(); #endif /*__AGS_GENERIC_PREFERENCES_H__*/ gsequencer-0.6.37/src/ags/X/ags_performance_preferences_callbacks.h0000644000175000017500000000175112621463700022332 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_PERFORMANCE_PREFERENCES_CALLBACKS_H__ #define __AGS_PERFORMANCE_PREFERENCES_CALLBACKS_H__ #include #include #endif /*__AGS_PERFORMANCE_PREFERENCES_CALLBACKS_H__*/ gsequencer-0.6.37/src/ags/X/ags_plugin_preferences_callbacks.c0000644000175000017500000000154212621463700021320 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include gsequencer-0.6.37/src/ags/X/ags_ladspa_browser.h0000644000175000017500000000461412626272146016470 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_LADSPA_BROWSER_H__ #define __AGS_LADSPA_BROWSER_H__ #include #include #include #define AGS_TYPE_LADSPA_BROWSER (ags_ladspa_browser_get_type()) #define AGS_LADSPA_BROWSER(obj) (G_TYPE_CHECK_INSTANCE_CAST(obj, AGS_TYPE_LADSPA_BROWSER, AgsLadspaBrowser)) #define AGS_LADSPA_BROWSER_CLASS(class) (G_TYPE_CHECK_CLASS_CAST(class, AGS_TYPE_LADSPA_BROWSER, AgsLadspaBrowserClass)) #define AGS_IS_LADSPA_BROWSER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_LADSPA_BROWSER)) #define AGS_IS_LADSPA_BROWSER_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_LADSPA_BROWSER)) #define AGS_LADSPA_BROWSER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_LADSPA_BROWSER, AgsLadspaBrowserClass)) typedef struct _AgsLadspaBrowser AgsLadspaBrowser; typedef struct _AgsLadspaBrowserClass AgsLadspaBrowserClass; struct _AgsLadspaBrowser { GtkDialog dialog; GtkWidget *parent; gchar *path; GtkHBox *plugin; GtkVBox *description; GtkWidget *preview; GtkButton *apply; GtkButton *ok; GtkButton *cancel; }; struct _AgsLadspaBrowserClass { GtkDialogClass dialog; }; GType ags_ladspa_browser_get_type(void); gchar* ags_ladspa_browser_get_plugin_filename(AgsLadspaBrowser *ladspa_browser); gchar* ags_ladspa_browser_get_plugin_effect(AgsLadspaBrowser *ladspa_browser); GtkWidget* ags_ladspa_browser_combo_box_boolean_controls_new(); GtkWidget* ags_ladspa_browser_combo_box_float_controls_new(); GtkWidget* ags_ladspa_browser_preview_new(); AgsLadspaBrowser* ags_ladspa_browser_new(GtkWidget *parent); #endif /*__AGS_LADSPA_BROWSER_H__*/ gsequencer-0.6.37/src/ags/X/ags_server_preferences.h0000644000175000017500000000406312621463700017337 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_SERVER_PREFERENCES_H__ #define __AGS_SERVER_PREFERENCES_H__ #include #define AGS_TYPE_SERVER_PREFERENCES (ags_server_preferences_get_type()) #define AGS_SERVER_PREFERENCES(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_SERVER_PREFERENCES, AgsServerPreferences)) #define AGS_SERVER_PREFERENCES_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_SERVER_PREFERENCES, AgsServerPreferencesClass)) #define AGS_IS_SERVER_PREFERENCES(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_SERVER_PREFERENCES)) #define AGS_IS_SERVER_PREFERENCES_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_SERVER_PREFERENCES)) #define AGS_SERVER_PREFERENCES_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_SERVER_PREFERENCES, AgsServerPreferencesClass)) typedef struct _AgsServerPreferences AgsServerPreferences; typedef struct _AgsServerPreferencesClass AgsServerPreferencesClass; struct _AgsServerPreferences { GtkVBox vbox; GtkCheckButton *start; GtkEntry *address; GtkEntry *port; GtkEntry *username; GtkEntry *password; }; struct _AgsServerPreferencesClass { GtkVBoxClass vbox; }; GType ags_server_preferences_get_type(void); AgsServerPreferences* ags_server_preferences_new(); #endif /*__AGS_SERVER_PREFERENCES_H__*/ gsequencer-0.6.37/src/ags/X/ags_preferences_callbacks.h0000644000175000017500000000206312621463700017746 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_PREFERENCES_CALLBACKS_H__ #define __AGS_PREFERENCES_CALLBACKS_H__ #include #include #include void ags_preferences_response_callback(GtkDialog *dialog, gint response_id, gpointer user_data); #endif /*__AGS_PREFERENCES_CALLBACKS_H__*/ gsequencer-0.6.37/src/ags/X/ags_link_editor_callbacks.h0000644000175000017500000000252012621463700017746 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_LINK_EDITOR_CALLBACKS_H__ #define __AGS_LINK_EDITOR_CALLBACKS_H__ #include #include #include #include int ags_link_editor_parent_set_callback(GtkWidget *widget, GtkObject *old_parent, AgsLinkEditor *link_editor); int ags_link_editor_destroy_callback(GtkObject *object, AgsLinkEditor *link_editor); int ags_link_editor_show_callback(GtkWidget *widget, AgsLinkEditor *link_editor); void ags_link_editor_combo_callback(GtkComboBox *combo, AgsLinkEditor *link_editor); #endif /*__AGS_LINK_EDITOR_CALLBACKS_H__*/ gsequencer-0.6.37/src/ags/X/ags_link_editor.c0000644000175000017500000003756112626272146015766 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void ags_link_editor_class_init(AgsLinkEditorClass *link_editor); void ags_link_editor_init(AgsLinkEditor *link_editor); void ags_link_editor_connectable_interface_init(AgsConnectableInterface *connectable); void ags_link_editor_applicable_interface_init(AgsApplicableInterface *applicable); void ags_link_editor_connect(AgsConnectable *connectable); void ags_link_editor_disconnect(AgsConnectable *connectable); void ags_link_editor_set_update(AgsApplicable *applicable, gboolean update); void ags_link_editor_apply(AgsApplicable *applicable); void ags_link_editor_reset(AgsApplicable *applicable); void ags_link_editor_destroy(GtkObject *object); void ags_link_editor_show(GtkWidget *widget); /** * SECTION:ags_link_editor * @short_description: Edit links. * @title: AgsLinkEditor * @section_id: * @include: ags/X/ags_link_editor.h * * #AgsLinkEditor is a composite widget to modify links. A link editor * should be packed by a #AgsLineEditor. */ static gpointer ags_link_editor_parent_class = NULL; extern pthread_mutex_t ags_application_mutex; GType ags_link_editor_get_type(void) { static GType ags_type_link_editor = 0; if(!ags_type_link_editor){ static const GTypeInfo ags_link_editor_info = { sizeof (AgsLinkEditorClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_link_editor_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsLinkEditor), 0, /* n_preallocs */ (GInstanceInitFunc) ags_link_editor_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_link_editor_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_applicable_interface_info = { (GInterfaceInitFunc) ags_link_editor_applicable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_link_editor = g_type_register_static(GTK_TYPE_HBOX, "AgsLinkEditor\0", &ags_link_editor_info, 0); g_type_add_interface_static(ags_type_link_editor, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_link_editor, AGS_TYPE_APPLICABLE, &ags_applicable_interface_info); } return(ags_type_link_editor); } void ags_link_editor_class_init(AgsLinkEditorClass *link_editor) { ags_link_editor_parent_class = g_type_class_peek_parent(link_editor); } void ags_link_editor_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->is_ready = NULL; connectable->is_connected = NULL; connectable->connect = ags_link_editor_connect; connectable->disconnect = ags_link_editor_disconnect; } void ags_link_editor_applicable_interface_init(AgsApplicableInterface *applicable) { applicable->set_update = ags_link_editor_set_update; applicable->apply = ags_link_editor_apply; applicable->reset = ags_link_editor_reset; } void ags_link_editor_init(AgsLinkEditor *link_editor) { GtkCellRenderer *cell_renderer; g_signal_connect_after((GObject *) link_editor, "parent_set\0", G_CALLBACK(ags_link_editor_parent_set_callback), (gpointer) link_editor); link_editor->flags = 0; /* linking machine */ link_editor->combo = (GtkComboBox *) gtk_combo_box_new(); gtk_box_pack_start(GTK_BOX(link_editor), GTK_WIDGET(link_editor->combo), FALSE, FALSE, 0); cell_renderer = gtk_cell_renderer_text_new(); gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(link_editor->combo), cell_renderer, FALSE); gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(link_editor->combo), cell_renderer, "text\0", 0, NULL); /* link with line */ link_editor->spin_button = (GtkSpinButton *) gtk_spin_button_new_with_range(0.0, 0.0, 1.0); gtk_box_pack_start(GTK_BOX(link_editor), GTK_WIDGET(link_editor->spin_button), FALSE, FALSE, 0); link_editor->audio_file = NULL; link_editor->file_chooser = NULL; } void ags_link_editor_connect(AgsConnectable *connectable) { AgsLinkEditor *link_editor; link_editor = AGS_LINK_EDITOR(connectable); /* GtkObject */ g_signal_connect(G_OBJECT(link_editor), "destroy\0", G_CALLBACK(ags_link_editor_destroy_callback), (gpointer) link_editor); /* GtkWidget */ g_signal_connect(G_OBJECT(link_editor), "show\0", G_CALLBACK(ags_link_editor_show_callback), (gpointer) link_editor); /* GtkComboBox */ g_signal_connect(G_OBJECT(link_editor->combo), "changed\0", G_CALLBACK(ags_link_editor_combo_callback), link_editor); } void ags_link_editor_disconnect(AgsConnectable *connectable) { /* empty */ } void ags_link_editor_set_update(AgsApplicable *applicable, gboolean update) { AgsLinkEditor *link_editor; link_editor = AGS_LINK_EDITOR(applicable); /* empty */ } void ags_link_editor_apply(AgsApplicable *applicable) { AgsLinkEditor *link_editor; GtkTreeIter iter; link_editor = AGS_LINK_EDITOR(applicable); /* reset */ if(gtk_combo_box_get_active_iter(link_editor->combo, &iter)){ AgsWindow *window; AgsMachine *link_machine, *machine; AgsLineEditor *line_editor; AgsDevout *devout; AgsAudio *audio; AgsChannel *channel, *link; AgsLinkChannel *link_channel; GtkTreeModel *model; AgsMutexManager *mutex_manager; AgsAudioLoop *audio_loop; AgsTaskThread *task_thread; AgsMain *ags_main; pthread_mutex_t *audio_mutex; pthread_mutex_t *channel_mutex; line_editor = AGS_LINE_EDITOR(gtk_widget_get_ancestor(GTK_WIDGET(link_editor), AGS_TYPE_LINE_EDITOR)); /* get channel */ channel = line_editor->channel; /* lookup channel mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); channel_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); /* get audio */ pthread_mutex_lock(channel_mutex); audio = channel->audio; pthread_mutex_unlock(channel_mutex); /* lookup audio mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); /* get devout and machine */ pthread_mutex_lock(audio_mutex); devout = audio->devout; machine = audio->machine; pthread_mutex_unlock(audio_mutex); /* get window and ags_main */ window = (AgsWindow *) gtk_widget_get_toplevel(machine); ags_main = window->ags_main; /* get audio loop */ pthread_mutex_lock(&(ags_application_mutex)); audio_loop = ags_main->main_loop; pthread_mutex_unlock(&(ags_application_mutex)); /* get task thread */ task_thread = (AgsTaskThread *) ags_thread_find_type(audio_loop, AGS_TYPE_TASK_THREAD); /* get model */ model = gtk_combo_box_get_model(link_editor->combo); gtk_tree_model_get(model, &iter, 1, &link_machine, -1); if(link_machine == NULL){ if((AGS_MACHINE_TAKES_FILE_INPUT & (machine->flags)) != 0 && ((AGS_MACHINE_ACCEPT_WAV & (machine->file_input_flags)) != 0 || ((AGS_MACHINE_ACCEPT_OGG & (machine->file_input_flags)) != 0)) && gtk_combo_box_get_active(link_editor->combo) + 1 == gtk_tree_model_iter_n_children(model, NULL)){ AgsOpenSingleFile *open_single_file; gchar *str, *filename; gtk_tree_model_get(model, &iter, 0, &str, -1); filename = g_strdup(str + 7); if(g_strcmp0(filename, "\0")){ open_single_file = ags_open_single_file_new(channel, devout, filename, (guint) gtk_spin_button_get_value_as_int(link_editor->spin_button), 1); /* append AgsLinkChannel */ ags_task_thread_append_task(task_thread, AGS_TASK(open_single_file)); } }else{ /* create task */ link_channel = ags_link_channel_new(channel, NULL); /* append AgsLinkChannel */ ags_task_thread_append_task(task_thread, AGS_TASK(link_channel)); } }else{ guint link_line; gboolean is_output; pthread_mutex_t *link_audio_mutex; link_line = (guint) gtk_spin_button_get_value_as_int(link_editor->spin_button); pthread_mutex_lock(channel_mutex); is_output = (AGS_IS_OUTPUT(channel)) ? TRUE: FALSE; pthread_mutex_unlock(channel_mutex); /* lookup link's audio mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); link_audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) link_machine->audio); pthread_mutex_unlock(&(ags_application_mutex)); /* get link */ pthread_mutex_lock(link_audio_mutex); if(!is_output){ link = link_machine->audio->output; }else{ link = link_machine->audio->input; } pthread_mutex_unlock(link_audio_mutex); link = ags_channel_nth(link, link_line); /* create task */ link_channel = ags_link_channel_new(channel, link); /* append AgsLinkChannel */ ags_task_thread_append_task(task_thread, AGS_TASK(link_channel)); } } } void ags_link_editor_reset(AgsApplicable *applicable) { AgsLinkEditor *link_editor; GtkTreeModel *model; GtkTreeIter iter; link_editor = AGS_LINK_EDITOR(applicable); model = gtk_combo_box_get_model(link_editor->combo); if(gtk_tree_model_get_iter_first(model, &iter)){ AgsMachine *machine, *link_machine, *link; AgsLineEditor *line_editor; AgsAudio *audio; AgsChannel *channel, *link_channel; AgsMutexManager *mutex_manager; gint i; gboolean found; pthread_mutex_t *audio_mutex; pthread_mutex_t *channel_mutex; pthread_mutex_t *link_channel_mutex; line_editor = AGS_LINE_EDITOR(gtk_widget_get_ancestor(GTK_WIDGET(link_editor), AGS_TYPE_LINE_EDITOR)); channel = line_editor->channel; /* lookup channel mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); channel_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); /* get audio and channel's link */ pthread_mutex_lock(channel_mutex); audio = channel->audio; link_channel = channel->link; pthread_mutex_unlock(channel_mutex); /* lookup audio mutex */ pthread_mutex_lock(&(ags_application_mutex)); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); /* get machine */ pthread_mutex_lock(audio_mutex); machine = (AgsMachine *) audio->machine; pthread_mutex_unlock(audio_mutex); /* */ if(link_channel != NULL){ AgsAudio *link_audio; pthread_mutex_t *link_audio_mutex; /* lookup channel mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); link_channel_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) link_channel); pthread_mutex_unlock(&(ags_application_mutex)); /* get audio */ pthread_mutex_lock(link_channel_mutex); link_audio = link_channel->audio; pthread_mutex_unlock(link_channel_mutex); /* lookup audio mutex */ pthread_mutex_lock(&(ags_application_mutex)); link_audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) link_audio); pthread_mutex_unlock(&(ags_application_mutex)); /* get machine */ pthread_mutex_lock(link_audio_mutex); link_machine = link_audio->machine; pthread_mutex_unlock(link_audio_mutex); }else{ link_machine = NULL; } i = 0; found = FALSE; if(link_machine != NULL){ do{ gtk_tree_model_get(model, &iter, 1, &link, -1); if(link_machine == link){ found = TRUE; break; } i++; }while(gtk_tree_model_iter_next(model, &iter)); } gtk_widget_set_sensitive((GtkWidget *) link_editor->spin_button, FALSE); if(found){ /* set channel link */ gtk_combo_box_set_active(link_editor->combo, i); if(link_channel == NULL){ gtk_spin_button_set_value(link_editor->spin_button, 0); }else{ pthread_mutex_lock(link_channel_mutex); gtk_spin_button_set_value(link_editor->spin_button, link_channel->line); pthread_mutex_unlock(link_channel_mutex); } }else{ gtk_combo_box_set_active(link_editor->combo, 0); } /* set file link */ pthread_mutex_lock(channel_mutex); if((AGS_MACHINE_TAKES_FILE_INPUT & (machine->flags)) != 0 && ((AGS_MACHINE_ACCEPT_WAV & (machine->file_input_flags)) != 0 || (AGS_MACHINE_ACCEPT_OGG & (machine->file_input_flags)) != 0) && AGS_IS_INPUT(channel)){ gtk_tree_model_iter_nth_child(model, &iter, NULL, gtk_tree_model_iter_n_children(model, NULL) - 1); if(AGS_INPUT(channel)->file_link != NULL){ /* add file link */ gtk_list_store_set(model, &iter, 0, g_strdup_printf("file://%s\0", AGS_FILE_LINK(AGS_INPUT(channel)->file_link)->filename), 1, NULL, -1); /* file link set active */ link_editor->flags |= AGS_LINK_EDITOR_BLOCK_FILE_CHOOSER; gtk_combo_box_set_active(link_editor->combo, gtk_tree_model_iter_n_children(model, NULL) - 1); /* set spin button insensitive */ gtk_spin_button_set_range(link_editor->spin_button, 0.0, 256.0); gtk_spin_button_set_value(link_editor->spin_button, AGS_FILE_LINK(AGS_INPUT(channel)->file_link)->audio_channel); gtk_widget_set_sensitive((GtkWidget *) link_editor->spin_button, FALSE); /* re-enable file chooser */ link_editor->flags &= (~AGS_LINK_EDITOR_BLOCK_FILE_CHOOSER); }else{ gtk_list_store_set(model, &iter, 0, "file://\0", 1, NULL, -1); } } pthread_mutex_unlock(channel_mutex); } } void ags_link_editor_destroy(GtkObject *object) { /* empty */ } void ags_link_editor_show(GtkWidget *widget) { /* empty */ } /** * ags_link_editor_new: * * Creates an #AgsLinkEditor * * Returns: a new #AgsLinkEditor * * Since: 0.3 */ AgsLinkEditor* ags_link_editor_new() { AgsLinkEditor *link_editor; link_editor = (AgsLinkEditor *) g_object_new(AGS_TYPE_LINK_EDITOR, NULL); return(link_editor); } gsequencer-0.6.37/src/ags/X/ags_pad_editor.c0000644000175000017500000002405212626272146015564 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include void ags_pad_editor_class_init(AgsPadEditorClass *pad_editor); void ags_pad_editor_connectable_interface_init(AgsConnectableInterface *connectable); void ags_pad_editor_applicable_interface_init(AgsApplicableInterface *applicable); void ags_pad_editor_init(AgsPadEditor *pad_editor); void ags_pad_editor_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_pad_editor_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_pad_editor_connect(AgsConnectable *connectable); void ags_pad_editor_disconnect(AgsConnectable *connectable); void ags_pad_editor_set_update(AgsApplicable *applicable, gboolean update); void ags_pad_editor_apply(AgsApplicable *applicable); void ags_pad_editor_reset(AgsApplicable *applicable); void ags_pad_editor_destroy(GtkObject *object); void ags_pad_editor_show(GtkWidget *widget); /** * SECTION:ags_pad_editor * @short_description: A composite widget to edit #AgsChannel * @title: AgsPadEditor * @section_id: * @include: ags/X/ags_pad_editor.h * * #AgsPadEditor is a composite widget to edit #AgsChannel. It should be * packed by an #AgsPadEditor. */ enum{ PROP_0, PROP_CHANNEL, }; GType ags_pad_editor_get_type(void) { static GType ags_type_pad_editor = 0; if(!ags_type_pad_editor){ static const GTypeInfo ags_pad_editor_info = { sizeof (AgsPadEditorClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_pad_editor_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsPadEditor), 0, /* n_preallocs */ (GInstanceInitFunc) ags_pad_editor_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_pad_editor_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_applicable_interface_info = { (GInterfaceInitFunc) ags_pad_editor_applicable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_pad_editor = g_type_register_static(GTK_TYPE_VBOX, "AgsPadEditor\0", &ags_pad_editor_info, 0); g_type_add_interface_static(ags_type_pad_editor, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_pad_editor, AGS_TYPE_APPLICABLE, &ags_applicable_interface_info); } return(ags_type_pad_editor); } void ags_pad_editor_class_init(AgsPadEditorClass *pad_editor) { GObjectClass *gobject; GParamSpec *param_spec; gobject = (GObjectClass *) pad_editor; gobject->set_property = ags_pad_editor_set_property; gobject->get_property = ags_pad_editor_get_property; param_spec = g_param_spec_object("channel\0", "assigned channel\0", "The channel which this pad editor is assigned with\0", AGS_TYPE_CHANNEL, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_CHANNEL, param_spec); } void ags_pad_editor_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->is_ready = NULL; connectable->is_connected = NULL; connectable->connect = ags_pad_editor_connect; connectable->disconnect = ags_pad_editor_disconnect; } void ags_pad_editor_applicable_interface_init(AgsApplicableInterface *applicable) { applicable->set_update = ags_pad_editor_set_update; applicable->apply = ags_pad_editor_apply; applicable->reset = ags_pad_editor_reset; } void ags_pad_editor_init(AgsPadEditor *pad_editor) { pad_editor->version = AGS_PAD_EDITOR_DEFAULT_VERSION; pad_editor->build_id = AGS_PAD_EDITOR_DEFAULT_BUILD_ID; pad_editor->line_editor_expander = (GtkExpander *) gtk_expander_new(NULL); gtk_box_pack_start(GTK_BOX(pad_editor), GTK_WIDGET(pad_editor->line_editor_expander), FALSE, FALSE, 0); pad_editor->line_editor = NULL; } void ags_pad_editor_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsPadEditor *pad_editor; pad_editor = AGS_PAD_EDITOR(gobject); switch(prop_id){ case PROP_CHANNEL: { AgsChannel *channel; channel = (AgsChannel *) g_value_get_object(value); ags_pad_editor_set_channel(pad_editor, channel); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_pad_editor_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsPadEditor *pad_editor; pad_editor = AGS_PAD_EDITOR(gobject); switch(prop_id){ case PROP_CHANNEL: g_value_set_object(value, pad_editor->pad); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_pad_editor_connect(AgsConnectable *connectable) { AgsPadEditor *pad_editor; AgsAudio *audio; GList *line_editor, *line_editor_start; pad_editor = AGS_PAD_EDITOR(connectable); g_signal_connect((GObject *) pad_editor, "destroy\0", G_CALLBACK(ags_pad_editor_destroy_callback), (gpointer) pad_editor); g_signal_connect((GObject *) pad_editor, "show\0", G_CALLBACK(ags_pad_editor_show_callback), (gpointer) pad_editor); /* AgsAudio */ audio = AGS_AUDIO(pad_editor->pad->audio); pad_editor->set_audio_channels_handler = g_signal_connect_after(G_OBJECT(audio), "set_audio_channels\0", G_CALLBACK(ags_pad_editor_set_audio_channels_callback), pad_editor); /* AgsLineEditor */ line_editor_start = line_editor = gtk_container_get_children(GTK_CONTAINER(pad_editor->line_editor)); while(line_editor != NULL){ ags_line_editor_connect(AGS_CONNECTABLE(line_editor->data)); line_editor = line_editor->next; } g_list_free(line_editor_start); } void ags_pad_editor_disconnect(AgsConnectable *connectable) { AgsPadEditor *pad_editor; AgsAudio *audio; pad_editor = AGS_PAD_EDITOR(connectable); /* AgsAudio */ audio = AGS_AUDIO(pad_editor->pad->audio); g_signal_handler_disconnect(audio, pad_editor->set_audio_channels_handler); } void ags_pad_editor_set_update(AgsApplicable *applicable, gboolean update) { AgsPadEditor *pad_editor; GList *line_editor, *line_editor_start; pad_editor = AGS_PAD_EDITOR(applicable); line_editor_start = line_editor = gtk_container_get_children(GTK_CONTAINER(pad_editor->line_editor)); while(line_editor != NULL){ ags_applicable_set_update(AGS_APPLICABLE(line_editor->data), update); line_editor = line_editor->next; } g_list_free(line_editor_start); } void ags_pad_editor_apply(AgsApplicable *applicable) { AgsPadEditor *pad_editor; GList *line_editor, *line_editor_start; pad_editor = AGS_PAD_EDITOR(applicable); line_editor_start = line_editor = gtk_container_get_children(GTK_CONTAINER(pad_editor->line_editor)); while(line_editor != NULL){ ags_applicable_apply(AGS_APPLICABLE(line_editor->data)); line_editor = line_editor->next; } g_list_free(line_editor_start); } void ags_pad_editor_reset(AgsApplicable *applicable) { AgsPadEditor *pad_editor; GList *line_editor, *line_editor_start; pad_editor = AGS_PAD_EDITOR(applicable); line_editor_start = line_editor = gtk_container_get_children(GTK_CONTAINER(pad_editor->line_editor)); while(line_editor != NULL){ ags_applicable_reset(AGS_APPLICABLE(line_editor->data)); line_editor = line_editor->next; } g_list_free(line_editor_start); } void ags_pad_editor_destroy(GtkObject *object) { /* empty */ } void ags_pad_editor_show(GtkWidget *widget) { /* empty */ } /** * ags_pad_editor_set_channel: * @pad_editor: an #AgsPadEditor * @channel: the new #AgsChannel * * Is called as channel gets modified. * * Since: 0.3 */ void ags_pad_editor_set_channel(AgsPadEditor *pad_editor, AgsChannel *channel) { GtkVBox *vbox; if(pad_editor->line_editor != NULL){ vbox = pad_editor->line_editor; pad_editor->line_editor = NULL; gtk_widget_destroy(GTK_WIDGET(vbox)); } pad_editor->pad = channel; if(channel != NULL){ AgsLineEditor *line_editor; AgsChannel *next_pad; gtk_expander_set_label(pad_editor->line_editor_expander, g_strdup_printf("pad: %u\0", channel->pad)); pad_editor->line_editor = (GtkVBox *) gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(pad_editor->line_editor_expander), GTK_WIDGET(pad_editor->line_editor)); next_pad = channel->next_pad; while(channel != next_pad){ line_editor = ags_line_editor_new(channel); gtk_box_pack_start(GTK_BOX(pad_editor->line_editor), GTK_WIDGET(line_editor), FALSE, FALSE, 0); channel = channel->next; } }else{ gtk_expander_set_label(pad_editor->line_editor_expander, NULL); } } /** * ags_pad_editor_new: * @channel: the channel to edit * * Creates an #AgsPadEditor * * Returns: a new #AgsPadEditor * * Since: 0.3 */ AgsPadEditor* ags_pad_editor_new(AgsChannel *channel) { AgsPadEditor *pad_editor; pad_editor = (AgsPadEditor *) g_object_new(AGS_TYPE_PAD_EDITOR, "channel\0", channel, NULL); return(pad_editor); } gsequencer-0.6.37/src/ags/X/ags_line_callbacks.c0000644000175000017500000001557512626272146016412 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include extern pthread_mutex_t ags_application_mutex; int ags_line_parent_set_callback(GtkWidget *widget, GtkObject *old_parent, AgsLine *line) { if(old_parent == NULL){ // gtk_widget_show_all(GTK_WIDGET(line)); } } void ags_line_remove_recall_callback(AgsRecall *recall, AgsLine *line) { if(recall->recall_id != NULL && recall->recall_id->recycling_container->parent != NULL){ if(AGS_IS_RECALL_AUDIO(recall) || AGS_RECALL_AUDIO_RUN(recall)){ ags_audio_remove_recall(AGS_AUDIO(line->channel->audio), (GObject *) recall, FALSE); }else{ ags_channel_remove_recall(AGS_CHANNEL(line->channel), (GObject *) recall, FALSE); } }else{ if(AGS_IS_RECALL_AUDIO(recall) || AGS_RECALL_AUDIO_RUN(recall)){ ags_audio_remove_recall(AGS_AUDIO(line->channel->audio), (GObject *) recall, TRUE); }else{ ags_channel_remove_recall(AGS_CHANNEL(line->channel), (GObject *) recall, TRUE); } } } int ags_line_group_clicked_callback(GtkWidget *widget, AgsLine *line) { AgsPad *pad; AgsLine *current; GtkContainer *container; GList *list, *list_start; pad = (AgsPad *) gtk_widget_get_ancestor(GTK_WIDGET(line), AGS_TYPE_PAD); container = (GtkContainer *) pad->expander_set; list_start = list = gtk_container_get_children(container); if(gtk_toggle_button_get_active(line->group)){ ags_line_group_changed(line); while(list != NULL){ current = AGS_LINE(list->data); if(!gtk_toggle_button_get_active(current->group)){ g_list_free(list_start); return(0); } list = list->next; } gtk_toggle_button_set_active(pad->group, TRUE); }else{ if(g_list_length(list) > 1){ if(gtk_toggle_button_get_active(pad->group)){ gtk_toggle_button_set_active(pad->group, FALSE); } while(list != NULL){ current = AGS_LINE(list->data); if(gtk_toggle_button_get_active(current->group)){ ags_line_group_changed(line); g_list_free(list_start); return(0); } list = list->next; } } gtk_toggle_button_set_active(line->group, TRUE); } g_list_free(list_start); return(0); } void ags_line_volume_callback(GtkRange *range, AgsLine *line) { AgsVolumeChannel *volume_channel; GList *list; GValue value = {0,}; g_value_init(&value, G_TYPE_DOUBLE); g_value_set_double(&value, gtk_range_get_value(range)); list = line->channel->play; while((list = ags_recall_find_type(list, AGS_TYPE_VOLUME_CHANNEL)) != NULL){ volume_channel = AGS_VOLUME_CHANNEL(list->data); ags_port_safe_write(volume_channel->volume, &value); list = list->next; } list = line->channel->recall; while((list = ags_recall_find_type(list, AGS_TYPE_VOLUME_CHANNEL)) != NULL){ volume_channel = AGS_VOLUME_CHANNEL(list->data); ags_port_safe_write(volume_channel->volume, &value); list = list->next; } } void ags_line_peak_run_post_callback(AgsRecall *peak_channel_run, AgsLine *line) { AgsWindow *window; AgsMachine *machine; GtkWidget *child; AgsPort *port; AgsChangeIndicator *change_indicator; AgsThread *audio_loop; AgsTaskThread *task_thread; AgsMain *ags_main; GList *list, *list_start; gdouble peak; GValue value = {0,}; machine = (AgsMachine *) gtk_widget_get_ancestor((GtkWidget *) line, AGS_TYPE_MACHINE); window = (AgsMachine *) gtk_widget_get_ancestor((GtkWidget *) machine, AGS_TYPE_WINDOW); ags_main = window->ags_main; /* get audio loop */ pthread_mutex_lock(&(ags_application_mutex)); audio_loop = ags_main->main_loop; pthread_mutex_unlock(&(ags_application_mutex)); /* get task thread */ task_thread = (AgsTaskThread *) ags_thread_find_type(audio_loop, AGS_TYPE_TASK_THREAD); list_start = list = gtk_container_get_children((GtkContainer *) AGS_LINE(line)->expander->table); while(list != NULL){ if(AGS_IS_LINE_MEMBER(list->data) && AGS_LINE_MEMBER(list->data)->widget_type == AGS_TYPE_VINDICATOR){ child = GTK_BIN(list->data)->child; port = AGS_PEAK_CHANNEL(AGS_RECALL_CHANNEL_RUN(peak_channel_run)->recall_channel)->peak; g_value_init(&value, G_TYPE_DOUBLE); ags_port_safe_read(port, &value); peak = g_value_get_double(&value); g_value_unset(&value); // if(peak_channel_run->recall_id->recycling_container->parent == NULL) // g_message("%f\0", peak); change_indicator = ags_change_indicator_new((AgsIndicator *) child, peak); ags_task_thread_append_task(task_thread, (AgsTask *) change_indicator); break; } list = list->next; } g_list_free(list_start); } void ags_line_channel_done_callback(AgsChannel *source, AgsRecallID *recall_id, AgsLine *line) { AgsChannel *channel; AgsDevoutPlay *devout_play; AgsChannel *next_pad; GList *current_recall; gboolean all_done; channel = AGS_PAD(AGS_LINE(line)->pad)->channel; next_pad = channel->next_pad; all_done = TRUE; while(channel != next_pad){ current_recall = channel->play; devout_play = AGS_DEVOUT_PLAY(channel->devout_play); if(devout_play->recall_id[0] != NULL){ all_done = FALSE; break; } channel = channel->next; } if(all_done){ AgsPad *pad; pad = AGS_PAD(AGS_LINE(line)->pad); if(pad->play != NULL){ gtk_toggle_button_set_active(pad->play, FALSE); } } } gsequencer-0.6.37/src/ags/X/ags_audio_preferences.h0000644000175000017500000000403512621463700017131 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_AUDIO_PREFERENCES_H__ #define __AGS_AUDIO_PREFERENCES_H__ #include #define AGS_TYPE_AUDIO_PREFERENCES (ags_audio_preferences_get_type()) #define AGS_AUDIO_PREFERENCES(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_AUDIO_PREFERENCES, AgsAudioPreferences)) #define AGS_AUDIO_PREFERENCES_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_AUDIO_PREFERENCES, AgsAudioPreferencesClass)) #define AGS_IS_AUDIO_PREFERENCES(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_AUDIO_PREFERENCES)) #define AGS_IS_AUDIO_PREFERENCES_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_AUDIO_PREFERENCES)) #define AGS_AUDIO_PREFERENCES_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_AUDIO_PREFERENCES, AgsAudioPreferencesClass)) typedef struct _AgsAudioPreferences AgsAudioPreferences; typedef struct _AgsAudioPreferencesClass AgsAudioPreferencesClass; struct _AgsAudioPreferences { GtkVBox vbox; GtkComboBox *card; GtkSpinButton *audio_channels; GtkSpinButton *samplerate; GtkSpinButton *buffer_size; }; struct _AgsAudioPreferencesClass { GtkVBoxClass vbox; }; GType ags_audio_preferences_get_type(void); AgsAudioPreferences* ags_audio_preferences_new(); #endif /*__AGS_AUDIO_PREFERENCES_H__*/ gsequencer-0.6.37/src/ags/X/ags_preferences.c0000644000175000017500000002214212626305300015736 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include void ags_preferences_class_init(AgsPreferencesClass *preferences); void ags_preferences_connectable_interface_init(AgsConnectableInterface *connectable); void ags_preferences_applicable_interface_init(AgsApplicableInterface *applicable); void ags_preferences_init(AgsPreferences *preferences); void ags_preferences_connect(AgsConnectable *connectable); void ags_preferences_disconnect(AgsConnectable *connectable); void ags_preferences_set_update(AgsApplicable *applicable, gboolean update); void ags_preferences_apply(AgsApplicable *applicable); void ags_preferences_reset(AgsApplicable *applicable); static void ags_preferences_finalize(GObject *gobject); void ags_preferences_show(GtkWidget *widget); /** * SECTION:ags_preferences * @short_description: A dialog to do preferences * @title: AgsPluginPreferences * @section_id: * @include: ags/X/ags_plugin_preferences.h * * #AgsDialogPreferences enables you to make preferences. */ static gpointer ags_preferences_parent_class = NULL; GType ags_preferences_get_type(void) { static GType ags_type_preferences = 0; if(!ags_type_preferences){ static const GTypeInfo ags_preferences_info = { sizeof (AgsPreferencesClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_preferences_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsPreferences), 0, /* n_preallocs */ (GInstanceInitFunc) ags_preferences_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_preferences_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_applicable_interface_info = { (GInterfaceInitFunc) ags_preferences_applicable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_preferences = g_type_register_static(GTK_TYPE_DIALOG, "AgsPreferences\0", &ags_preferences_info, 0); g_type_add_interface_static(ags_type_preferences, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_preferences, AGS_TYPE_APPLICABLE, &ags_applicable_interface_info); } return(ags_type_preferences); } void ags_preferences_class_init(AgsPreferencesClass *preferences) { GObjectClass *gobject; GtkWidgetClass *widget; ags_preferences_parent_class = g_type_class_peek_parent(preferences); /* GtkObjectClass */ gobject = (GObjectClass *) preferences; // gobject->finalize = ags_preferences_finalize; /* GtkWidgetClass */ widget = (GtkWidgetClass *) preferences; } void ags_preferences_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->is_ready = NULL; connectable->is_connected = NULL; connectable->connect = ags_preferences_connect; connectable->disconnect = ags_preferences_disconnect; } void ags_preferences_applicable_interface_init(AgsApplicableInterface *applicable) { applicable->set_update = ags_preferences_set_update; applicable->apply = ags_preferences_apply; applicable->reset = ags_preferences_reset; } void ags_preferences_init(AgsPreferences *preferences) { GtkNotebook *notebook; GtkButton *button; preferences->flags = 0; preferences->window = NULL; gtk_window_set_title(GTK_WINDOW(preferences), g_strdup("preferences\0")); gtk_window_set_deletable(GTK_WINDOW(preferences), TRUE); notebook = (GtkNotebook *) gtk_notebook_new(); g_object_set(G_OBJECT(notebook), "tab-pos\0", GTK_POS_LEFT, NULL); gtk_container_add(GTK_CONTAINER(GTK_DIALOG(preferences)->vbox), GTK_WIDGET(notebook)); preferences->generic_preferences = ags_generic_preferences_new(); gtk_notebook_append_page(notebook, GTK_WIDGET(preferences->generic_preferences), gtk_label_new("generic\0")); preferences->audio_preferences = ags_audio_preferences_new(); gtk_notebook_append_page(notebook, GTK_WIDGET(preferences->audio_preferences), gtk_label_new("audio\0")); preferences->performance_preferences = ags_performance_preferences_new(); gtk_notebook_append_page(notebook, GTK_WIDGET(preferences->performance_preferences), gtk_label_new("performance\0")); preferences->server_preferences = ags_server_preferences_new(); gtk_notebook_append_page(notebook, GTK_WIDGET(preferences->server_preferences), gtk_label_new("server\0")); gtk_dialog_add_action_widget(GTK_DIALOG(preferences), gtk_button_new_from_stock(GTK_STOCK_APPLY), GTK_RESPONSE_APPLY); gtk_dialog_add_action_widget(GTK_DIALOG(preferences), gtk_button_new_from_stock(GTK_STOCK_CANCEL), GTK_RESPONSE_CANCEL); gtk_dialog_add_action_widget(GTK_DIALOG(preferences), gtk_button_new_from_stock(GTK_STOCK_OK), GTK_RESPONSE_OK); } void ags_preferences_connect(AgsConnectable *connectable) { AgsPreferences *preferences; preferences = AGS_PREFERENCES(connectable); ags_connectable_connect(preferences->generic_preferences); ags_connectable_connect(preferences->audio_preferences); ags_connectable_connect(preferences->performance_preferences); ags_connectable_connect(preferences->server_preferences); g_signal_connect_after(G_OBJECT(preferences), "response\0", G_CALLBACK(ags_preferences_response_callback), NULL); } void ags_preferences_disconnect(AgsConnectable *connectable) { /* empty */ } void ags_preferences_set_update(AgsApplicable *applicable, gboolean update) { AgsPreferences *preferences; preferences = AGS_PREFERENCES(applicable); ags_applicable_set_update(AGS_APPLICABLE(preferences->generic_preferences), update); ags_applicable_set_update(AGS_APPLICABLE(preferences->audio_preferences), update); ags_applicable_set_update(AGS_APPLICABLE(preferences->performance_preferences), update); ags_applicable_set_update(AGS_APPLICABLE(preferences->server_preferences), update); } void ags_preferences_apply(AgsApplicable *applicable) { AgsPreferences *preferences; AgsConfig *config; AgsFile *file; struct passwd *pw; uid_t uid; gchar *filename; gchar **argv; GError *error; preferences = AGS_PREFERENCES(applicable); config = AGS_CONFIG(AGS_MAIN(AGS_WINDOW(preferences->window)->ags_main)->config); ags_applicable_apply(AGS_APPLICABLE(preferences->generic_preferences)); ags_applicable_apply(AGS_APPLICABLE(preferences->audio_preferences)); ags_applicable_apply(AGS_APPLICABLE(preferences->performance_preferences)); ags_applicable_apply(AGS_APPLICABLE(preferences->server_preferences)); ags_config_save(config); uid = getuid(); pw = getpwuid(uid); filename = g_strdup_printf("%s/%s/%s\0", pw->pw_dir, AGS_DEFAULT_DIRECTORY, AGS_PREFERENCES_DEFAULT_FILENAME); file = (AgsFile *) g_object_new(AGS_TYPE_FILE, "main\0", AGS_MAIN(AGS_WINDOW(preferences->window)->ags_main), "filename\0", filename, NULL); ags_file_write(file); g_object_unref(file); error = NULL; g_spawn_command_line_async(g_strdup_printf("gsequencer --filename %s\0", filename), &error); ags_main_quit(AGS_MAIN(AGS_WINDOW(preferences->window)->ags_main)); } void ags_preferences_reset(AgsApplicable *applicable) { AgsPreferences *preferences; preferences = AGS_PREFERENCES(applicable); ags_applicable_reset(AGS_APPLICABLE(preferences->generic_preferences)); ags_applicable_reset(AGS_APPLICABLE(preferences->audio_preferences)); ags_applicable_reset(AGS_APPLICABLE(preferences->performance_preferences)); ags_applicable_reset(AGS_APPLICABLE(preferences->server_preferences)); } static void ags_preferences_finalize(GObject *gobject) { //TODO:JK: implement me } void ags_preferences_show(GtkWidget *widget) { } /** * ags_preferences_new: * * Creates an #AgsPreferences * * Returns: a new #AgsPreferences * * Since: 0.4 */ AgsPreferences* ags_preferences_new() { AgsPreferences *preferences; preferences = (AgsPreferences *) g_object_new(AGS_TYPE_PREFERENCES, NULL); return(preferences); } gsequencer-0.6.37/src/ags/main.h0000644000175000017500000000632212626272146013342 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_MAIN_H__ #define __AGS_MAIN_H__ //#define AGS_DEBUG #define _GNU_SOURCE #define ALSA_PCM_NEW_HW_PARAMS_API #ifdef AGS_WITH_XMLRPC_C #include #include #include #include #endif #include #include #ifdef AGS_USE_LINUX_THREADS #include #else #include #endif #include #include #include #include #include #include #define AGS_TYPE_MAIN (ags_main_get_type()) #define AGS_MAIN(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_MAIN, AgsMain)) #define AGS_MAIN_CLASS(class) (G_TYPE_CHECK_CLASS_CAST(class, AGS_TYPE_MAIN, AgsMainClass)) #define AGS_IS_MAIN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_MAIN)) #define AGS_IS_MAIN_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_MAIN)) #define AGS_MAIN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS(obj, AGS_TYPE_MAIN, AgsMainClass)) #ifndef PACKAGE_VERSION #define AGS_VERSION "0.4.2\0" #else #define AGS_VERSION PACKAGE_VERSION #endif #define AGS_BUILD_ID "CEST 02-10-2014 19:36\0" #define AGS_EFFECTS_DEFAULT_VERSION "0.4.2\0" #define AGS_DEFAULT_DIRECTORY ".gsequencer\0" #define AGS_DEFAULT_CONFIG "ags.conf\0" #define AGS_PRIORITY (5) #define AGS_RT_PRIORITY (49) typedef struct _AgsMain AgsMain; typedef struct _AgsMainClass AgsMainClass; typedef enum{ AGS_MAIN_SINGLE_THREAD = 1, AGS_MAIN_CONNECTED = 1 << 1, }AgsMainFlags; struct _AgsMain { GObject object; guint flags; gchar *version; gchar *build_id; #ifdef AGS_WITH_XMLRPC_C xmlrpc_env env; #endif AgsThread *main_loop; AgsThread *autosave_thread; AgsThreadPool *thread_pool; AgsServer *server; GList *devout; AgsWindow *window; AgsConfig *config; AgsLog *log; }; struct _AgsMainClass { GObjectClass object; }; GType ags_main_get_type(); void ags_main_load_config(AgsMain *ags_main); void ags_main_add_devout(AgsMain *ags_main, AgsDevout *devout); void ags_main_register_thread_type(); void ags_main_register_recall_type(); void ags_main_register_task_type(); void ags_main_register_widget_type(); void ags_main_register_machine_type(); void ags_main_quit(AgsMain *ags_main); AgsMain* ags_main_new(); #endif /*__AGS_MAIN_H__*/ gsequencer-0.6.37/src/ags/util/0000755000175000017500000000000012633241335013271 500000000000000gsequencer-0.6.37/src/ags/util/ags_id_generator.h0000644000175000017500000000163512621463700016662 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_ID_GENERATOR_H__ #define __AGS_ID_GENERATOR_H__ #include gchar* ags_id_generator_create_uuid(); #endif /*__AGS_ID_GENERATOR_H__*/ gsequencer-0.6.37/src/ags/util/ags_id_generator.c0000644000175000017500000000313412621463700016651 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include /** * SECTION:ags_id_generator * @short_description: UUID util functions * @title: AgsIdGenerator * @section_id: * @include: ags/util/ags_id_generator.h * * Functions related to UUID. */ #define AGS_ID_GENERATOR_DEFAULT_UUID_LENGTH 36 /** * ags_id_generator_create_uuid: * * Creates a new string containing UUID. * * Returns: the string * * Since: 0.4 */ gchar* ags_id_generator_create_uuid() { uuid_t out; gchar *uuid_str; /* make sure uuid is really unique */ while(uuid_generate_time_safe(out) != 0); /* create a string representation */ uuid_str = (gchar *) malloc((AGS_ID_GENERATOR_DEFAULT_UUID_LENGTH + 1) * sizeof(gchar)); uuid_unparse(out, uuid_str); uuid_str[AGS_ID_GENERATOR_DEFAULT_UUID_LENGTH] = '\0'; return(uuid_str); } gsequencer-0.6.37/src/ags/object/0000755000175000017500000000000012633241335013562 500000000000000gsequencer-0.6.37/src/ags/object/ags_runnable.h0000644000175000017500000000351212621463700016313 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_RUNNABLE_H__ #define __AGS_RUNNABLE_H__ #include #define AGS_TYPE_RUNNABLE (ags_runnable_get_type()) #define AGS_RUNNABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_RUNNABLE, AgsRunnable)) #define AGS_RUNNABLE_INTERFACE(vtable) (G_TYPE_CHECK_CLASS_CAST((vtable), AGS_TYPE_RUNNABLE, AgsRunnableInterface)) #define AGS_IS_RUNNABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_RUNNABLE)) #define AGS_IS_RUNNABLE_INTERFACE(vtable) (G_TYPE_CHECK_CLASS_TYPE((vtable), AGS_TYPE_RUNNABLE)) #define AGS_RUNNABLE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE((obj), AGS_TYPE_RUNNABLE, AgsRunnableInterface)) typedef void AgsRunnable; typedef struct _AgsRunnableInterface AgsRunnableInterface; struct _AgsRunnableInterface { GTypeInterface interface; void (*run)(AgsRunnable *runnable); void (*stop)(AgsRunnable *runnable); }; GType ags_runnable_get_type(); void ags_runnable_run(AgsRunnable *runnable); void ags_runnable_stop(AgsRunnable *runnable); #endif /*__AGS_RUNNABLE_H__*/ gsequencer-0.6.37/src/ags/object/ags_stackable.h0000644000175000017500000000355312621463700016443 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_STACKABLE_H__ #define __AGS_STACKABLE_H__ #include #define AGS_TYPE_STACKABLE (ags_stackable_get_type()) #define AGS_STACKABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_STACKABLE, AgsStackable)) #define AGS_STACKABLE_INTERFACE(vtable) (G_TYPE_CHECK_CLASS_CAST((vtable), AGS_TYPE_STACKABLE, AgsStackableInterface)) #define AGS_IS_STACKABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_STACKABLE)) #define AGS_IS_STACKABLE_INTERFACE(vtable) (G_TYPE_CHECK_CLASS_TYPE((vtable), AGS_TYPE_STACKABLE)) #define AGS_STACKABLE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE((obj), AGS_TYPE_STACKABLE, AgsStackableInterface)) typedef void AgsStackable; typedef struct _AgsStackableInterface AgsStackableInterface; struct _AgsStackableInterface { GTypeInterface interface; void (*push)(AgsStackable *stackable); void (*pop)(AgsStackable *stackable); }; GType ags_stackable_get_type(); void ags_stackable_push(AgsStackable *stackable); void ags_stackable_pop(AgsStackable *stackable); #endif /*__AGS_STACKABLE_H__*/ gsequencer-0.6.37/src/ags/object/ags_applicable.c0000644000175000017500000000577612621463700016612 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_applicable_base_init(AgsApplicableInterface *interface); /** * SECTION:ags_applicable * @short_description: unique access to dialogs * @title: AgsApplicable * @section_id: * @include: ags/object/ags_applicable.h * * The #AgsApplicable interface gives you a unique access to dialogs. */ GType ags_applicable_get_type() { static GType ags_type_applicable = 0; if(!ags_type_applicable){ static const GTypeInfo ags_applicable_info = { sizeof(AgsApplicableInterface), (GBaseInitFunc) ags_applicable_base_init, NULL, /* base_finalize */ }; ags_type_applicable = g_type_register_static(G_TYPE_INTERFACE, "AgsApplicable\0", &ags_applicable_info, 0); } return(ags_type_applicable); } void ags_applicable_base_init(AgsApplicableInterface *interface) { /* empty */ } /** * ags_applicable_set_update: * @applicable: an #AgsApplicable * @update: if %TRUE do ::reset after ::update * * Update behaviour. * * Since: 0.3 */ void ags_applicable_set_update(AgsApplicable *applicable, gboolean update) { AgsApplicableInterface *applicable_interface; g_return_if_fail(AGS_IS_APPLICABLE(applicable)); applicable_interface = AGS_APPLICABLE_GET_INTERFACE(applicable); g_return_if_fail(applicable_interface->set_update); applicable_interface->set_update(applicable, update); } /** * ags_applicable_apply: * @applicable: an #AgsApplicable * * Apply all changes done so far. * * Since: 0.3 */ void ags_applicable_apply(AgsApplicable *applicable) { AgsApplicableInterface *applicable_interface; g_return_if_fail(AGS_IS_APPLICABLE(applicable)); applicable_interface = AGS_APPLICABLE_GET_INTERFACE(applicable); g_return_if_fail(applicable_interface->apply); applicable_interface->apply(applicable); } /** * ags_applicable_reset: * @applicable: an #AgsApplicable * * Reset all changes within the user interface. * * Since: 0.3 */ void ags_applicable_reset(AgsApplicable *applicable) { AgsApplicableInterface *applicable_interface; g_return_if_fail(AGS_IS_APPLICABLE(applicable)); applicable_interface = AGS_APPLICABLE_GET_INTERFACE(applicable); g_return_if_fail(applicable_interface->reset); applicable_interface->reset(applicable); } gsequencer-0.6.37/src/ags/object/ags_runnable.c0000644000175000017500000000367212621463700016315 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_runnable_base_init(AgsRunnableInterface *interface); GType ags_runnable_get_type() { static GType ags_type_runnable = 0; if(!ags_type_runnable){ static const GTypeInfo ags_runnable_info = { sizeof(AgsRunnableInterface), (GBaseInitFunc) ags_runnable_base_init, NULL, /* base_finalize */ }; ags_type_runnable = g_type_register_static(G_TYPE_INTERFACE, "AgsRunnable\0", &ags_runnable_info, 0); } return(ags_type_runnable); } void ags_runnable_base_init(AgsRunnableInterface *interface) { /* empty */ } void ags_runnable_run(AgsRunnable *runnable) { AgsRunnableInterface *runnable_interface; g_return_if_fail(AGS_IS_RUNNABLE(runnable)); runnable_interface = AGS_RUNNABLE_GET_INTERFACE(runnable); g_return_if_fail(runnable_interface->run); runnable_interface->run(runnable); } void ags_runnable_stop(AgsRunnable *runnable) { AgsRunnableInterface *runnable_interface; g_return_if_fail(AGS_IS_RUNNABLE(runnable)); runnable_interface = AGS_RUNNABLE_GET_INTERFACE(runnable); g_return_if_fail(runnable_interface->stop); runnable_interface->stop(runnable); } gsequencer-0.6.37/src/ags/object/ags_tactable.h0000644000175000017500000000434212621463700016266 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_TACTABLE_H__ #define __AGS_TACTABLE_H__ #include #define AGS_TYPE_TACTABLE (ags_tactable_get_type()) #define AGS_TACTABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_TACTABLE, AgsTactable)) #define AGS_TACTABLE_INTERFACE(vtable) (G_TYPE_CHECK_CLASS_CAST((vtable), AGS_TYPE_TACTABLE, AgsTactableInterface)) #define AGS_IS_TACTABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_TACTABLE)) #define AGS_IS_TACTABLE_INTERFACE(vtable) (G_TYPE_CHECK_CLASS_TYPE((vtable), AGS_TYPE_TACTABLE)) #define AGS_TACTABLE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE((obj), AGS_TYPE_TACTABLE, AgsTactableInterface)) typedef void AgsTactable; typedef struct _AgsTactableInterface AgsTactableInterface; struct _AgsTactableInterface { GTypeInterface interface; void (*change_sequencer_duration)(AgsTactable *tactable, gdouble duration); void (*change_notation_duration)(AgsTactable *tactable, gdouble duration); void (*change_tact)(AgsTactable *tactable, gdouble tact); void (*change_bpm)(AgsTactable *tactable, gdouble bpm); }; GType ags_tactable_get_type(); void ags_tactable_change_sequencer_duration(AgsTactable *tactable, gdouble duration); void ags_tactable_change_notation_duration(AgsTactable *tactable, gdouble duration); void ags_tactable_change_tact(AgsTactable *tactable, gdouble tact); void ags_tactable_change_bpm(AgsTactable *tactable, gdouble bpm); #endif /*__AGS_TACTABLE_H__*/ gsequencer-0.6.37/src/ags/object/ags_async_queue.h0000644000175000017500000000513412617404654017040 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_ASYNC_QUEUE_H__ #define __AGS_ASYNC_QUEUE_H__ #include #include #define AGS_TYPE_ASYNC_QUEUE (ags_async_queue_get_type()) #define AGS_ASYNC_QUEUE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_ASYNC_QUEUE, AgsAsyncQueue)) #define AGS_ASYNC_QUEUE_INTERFACE(vtable) (G_TYPE_CHECK_CLASS_CAST((vtable), AGS_TYPE_ASYNC_QUEUE, AgsAsyncQueueInterface)) #define AGS_IS_ASYNC_QUEUE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_ASYNC_QUEUE)) #define AGS_IS_ASYNC_QUEUE_INTERFACE(vtable) (G_TYPE_CHECK_CLASS_TYPE((vtable), AGS_TYPE_ASYNC_QUEUE)) #define AGS_ASYNC_QUEUE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE((obj), AGS_TYPE_ASYNC_QUEUE, AgsAsyncQueueInterface)) typedef void AgsAsyncQueue; typedef struct _AgsAsyncQueueInterface AgsAsyncQueueInterface; struct _AgsAsyncQueueInterface { GTypeInterface interface; void (*set_run_mutex)(AgsAsyncQueue *async_queue, pthread_mutex_t *run_mutex); pthread_mutex_t* (*get_run_mutex)(AgsAsyncQueue *async_queue); void (*set_run_cond)(AgsAsyncQueue *async_queue, pthread_cond_t *run_cond); pthread_cond_t* (*get_run_cond)(AgsAsyncQueue *async_queue); void (*set_run)(AgsAsyncQueue *async_queue, gboolean is_run); gboolean (*is_run)(AgsAsyncQueue *async_queue); }; GType ags_async_queue_get_type(); void ags_async_queue_set_run_mutex(AgsAsyncQueue *async_queue, pthread_mutex_t *run_mutex); pthread_mutex_t* ags_async_queue_get_run_mutex(AgsAsyncQueue *async_queue); void ags_async_queue_set_run_cond(AgsAsyncQueue *async_queue, pthread_cond_t *run_cond); pthread_cond_t* ags_async_queue_get_run_cond(AgsAsyncQueue *async_queue); void ags_async_queue_set_run(AgsAsyncQueue *async_queue, gboolean is_run); gboolean ags_async_queue_is_run(AgsAsyncQueue *async_queue); #endif /*__AGS_ASYNC_QUEUE_H__*/ gsequencer-0.6.37/src/ags/object/ags_tree_iterator.h0000644000175000017500000000566612621463700017371 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_TREE_ITERATOR_H__ #define __AGS_TREE_ITERATOR_H__ #include #define AGS_TYPE_TREE_ITERATOR (ags_tree_iterator_get_type()) #define AGS_TREE_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_TREE_ITERATOR, AgsTreeIterator)) #define AGS_TREE_ITERATOR_INTERFACE(vtable) (G_TYPE_CHECK_CLASS_CAST((vtable), AGS_TYPE_TREE_ITERATOR, AgsTreeIteratorInterface)) #define AGS_IS_TREE_ITERATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_TREE_ITERATOR)) #define AGS_IS_TREE_ITERATOR_INTERFACE(vtable) (G_TYPE_CHECK_CLASS_TYPE((vtable), AGS_TYPE_TREE_ITERATOR)) #define AGS_TREE_ITERATOR_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE((obj), AGS_TYPE_TREE_ITERATOR, AgsTreeIteratorInterface)) typedef void AgsTreeIterator; typedef struct _AgsTreeIteratorInterface AgsTreeIteratorInterface; struct _AgsTreeIteratorInterface { GTypeInterface interface; void (*set_inverse_mode)(AgsTreeIterator *tree, gboolean mode); gboolean (*is_inverse_mode)(AgsTreeIterator *tree); void (*iterate)(AgsTreeIterator *tree, gpointer node_id); void (*iterate_nested)(AgsTreeIterator *tree, gpointer node_id); void (*safe_iterate)(AgsTreeIterator *toplevel, AgsTreeIterator *current, gpointer node_id); void (*safe_iterate_nested)(AgsTreeIterator *toplevel, AgsTreeIterator *current, gpointer node_id); void (*loop_action)(AgsTreeIterator *current, gpointer node_id); void (*nested_loop_action)(AgsTreeIterator *current, gpointer node_id); }; GType ags_tree_iterator_get_type(); void ags_tree_iterator_set_inverse_mode(AgsTreeIterator *tree, gboolean mode); gboolean ags_tree_iterator_is_inverse_mode(AgsTreeIterator *tree); void ags_tree_iterator_iterate(AgsTreeIterator *tree, gpointer node_id); void ags_tree_iterator_iterate_nested(AgsTreeIterator *tree, gpointer node_id); void ags_tree_iterator_safe_iterate(AgsTreeIterator *toplevel, AgsTreeIterator *current, gpointer node_id); void ags_tree_iterator_safe_iterate_nested(AgsTreeIterator *toplevel, AgsTreeIterator *current, gpointer node_id); #endif /*__AGS_TREE_ITERATOR_H__*/ gsequencer-0.6.37/src/ags/object/ags_concurrent_tree.c0000644000175000017500000000745412626272146017721 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_concurrent_tree_base_init(AgsConcurrentTreeInterface *interface); /** * SECTION:ags_concurrent_tree * @short_description: unique access to recalls * @title: AgsConcurrentTree * @section_id: * @include: ags/object/ags_concurrent_tree.h * * The #AgsConcurrentTree interface provides essential locks to process tree * with parallelism. */ GType ags_concurrent_tree_get_type() { static GType ags_type_concurrent_tree = 0; if(!ags_type_concurrent_tree){ static const GTypeInfo ags_concurrent_tree_info = { sizeof(AgsConcurrentTreeInterface), (GBaseInitFunc) ags_concurrent_tree_base_init, NULL, /* base_finalize */ }; ags_type_concurrent_tree = g_type_register_static(G_TYPE_INTERFACE, "AgsConcurrentTree\0", &ags_concurrent_tree_info, 0); } return(ags_type_concurrent_tree); } void ags_concurrent_tree_base_init(AgsConcurrentTreeInterface *interface) { /* empty */ } /** * ags_concurrent_tree_get_lock: * @concurrent_tree an #AgsConcurrent_Tree * * Get tree node's lock. * * Since: 0.6 */ pthread_mutex_t* ags_concurrent_tree_get_lock(AgsConcurrentTree *concurrent_tree) { AgsConcurrentTreeInterface *concurrent_tree_interface; g_return_val_if_fail(AGS_IS_CONCURRENT_TREE(concurrent_tree), NULL); concurrent_tree_interface = AGS_CONCURRENT_TREE_GET_INTERFACE(concurrent_tree); g_return_val_if_fail(concurrent_tree_interface->get_lock, NULL); return(concurrent_tree_interface->get_lock(concurrent_tree)); } /** * ags_concurrent_tree_get_parent_lock: * @concurrent_tree an #AgsConcurrent_Tree * * Get tree node's parent lock. * * Since: 0.6 */ pthread_mutex_t* ags_concurrent_tree_get_parent_lock(AgsConcurrentTree *concurrent_tree) { AgsConcurrentTreeInterface *concurrent_tree_interface; g_return_val_if_fail(AGS_IS_CONCURRENT_TREE(concurrent_tree), NULL); concurrent_tree_interface = AGS_CONCURRENT_TREE_GET_INTERFACE(concurrent_tree); g_return_val_if_fail(concurrent_tree_interface->get_parent_lock, NULL); return(concurrent_tree_interface->get_parent_lock(concurrent_tree)); } gboolean ags_concurrent_tree_lock_context(AgsConcurrentTree *concurrent_tree) { pthread_mutex_t *parent_mutex, *mutex; gboolean lock_parent = TRUE; parent_mutex = ags_concurrent_tree_get_parent_lock(concurrent_tree); mutex = ags_concurrent_tree_get_lock(concurrent_tree); if(lock_parent){ static pthread_mutex_t exclusive_lock = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_lock(&exclusive_lock); pthread_mutex_lock(parent_mutex); pthread_mutex_lock(mutex); pthread_mutex_unlock(&exclusive_lock); return(TRUE); } } void ags_concurrent_tree_unlock_context(AgsConcurrentTree *concurrent_tree) { pthread_mutex_t *parent_mutex, *mutex; gboolean lock_parent = TRUE; parent_mutex = ags_concurrent_tree_get_parent_lock(concurrent_tree); mutex = ags_concurrent_tree_get_lock(concurrent_tree); if(lock_parent){ pthread_mutex_unlock(mutex); pthread_mutex_unlock(parent_mutex); } } gsequencer-0.6.37/src/ags/object/ags_countable.h0000644000175000017500000000366312621463700016470 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_COUNTABLE_H__ #define __AGS_COUNTABLE_H__ #include #define AGS_TYPE_COUNTABLE (ags_countable_get_type()) #define AGS_COUNTABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_COUNTABLE, AgsCountable)) #define AGS_COUNTABLE_INTERFACE(vtable) (G_TYPE_CHECK_CLASS_CAST((vtable), AGS_TYPE_COUNTABLE, AgsCountableInterface)) #define AGS_IS_COUNTABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_COUNTABLE)) #define AGS_IS_COUNTABLE_INTERFACE(vtable) (G_TYPE_CHECK_CLASS_TYPE((vtable), AGS_TYPE_COUNTABLE)) #define AGS_COUNTABLE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE((obj), AGS_TYPE_COUNTABLE, AgsCountableInterface)) typedef void AgsCountable; typedef struct _AgsCountableInterface AgsCountableInterface; struct _AgsCountableInterface { GTypeInterface interface; guint (*get_notation_counter)(AgsCountable *countable); guint (*get_sequencer_counter)(AgsCountable *countable); }; GType ags_countable_get_type(); guint ags_countable_get_notation_counter(AgsCountable *countable); guint ags_countable_get_sequencer_counter(AgsCountable *countable); #endif /*__AGS_COUNTABLE_H__*/ gsequencer-0.6.37/src/ags/object/ags_packable.h0000644000175000017500000000361012621463700016246 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_PACKABLE_H__ #define __AGS_PACKABLE_H__ #include #define AGS_TYPE_PACKABLE (ags_packable_get_type()) #define AGS_PACKABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_PACKABLE, AgsPackable)) #define AGS_PACKABLE_INTERFACE(vtable) (G_TYPE_CHECK_CLASS_CAST((vtable), AGS_TYPE_PACKABLE, AgsPackableInterface)) #define AGS_IS_PACKABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_PACKABLE)) #define AGS_IS_PACKABLE_INTERFACE(vtable) (G_TYPE_CHECK_CLASS_TYPE((vtable), AGS_TYPE_PACKABLE)) #define AGS_PACKABLE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE((obj), AGS_TYPE_PACKABLE, AgsPackableInterface)) typedef void AgsPackable; typedef struct _AgsPackableInterface AgsPackableInterface; struct _AgsPackableInterface { GTypeInterface interface; gboolean (*pack)(AgsPackable *packable, GObject *container); gboolean (*unpack)(AgsPackable *packable); }; GType ags_packable_get_type(); gboolean ags_packable_pack(AgsPackable *packable, GObject *container); gboolean ags_packable_unpack(AgsPackable *packable); #endif /*__AGS_PACKABLE_H__*/ gsequencer-0.6.37/src/ags/object/ags_effect.c0000644000175000017500000000253212621463700015735 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_effect_base_init(AgsEffectInterface *interface); GType ags_effect_get_type() { static GType ags_type_effect = 0; if(!ags_type_effect){ static const GTypeInfo ags_effect_info = { sizeof(AgsEffectInterface), (GBaseInitFunc) ags_effect_base_init, NULL, /* base_finalize */ }; ags_type_effect = g_type_register_static(G_TYPE_INTERFACE, "AgsEffect\0", &ags_effect_info, 0); } return(ags_type_effect); } void ags_effect_base_init(AgsEffectInterface *interface) { /* empty */ } gsequencer-0.6.37/src/ags/object/ags_playable.c0000644000175000017500000003230612632414331016272 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include void ags_playable_base_init(AgsPlayableInterface *interface); extern AgsConfig *config; extern pthread_mutex_t ags_application_mutex; /** * SECTION:ags_playable * @short_description: read/write audio * @title: AgsPlayable * @section_id: * @include: ags/object/ags_playable.h * * The #AgsPlayable interface gives you a unique access to file related * IO operations. */ GType ags_playable_get_type() { static GType ags_type_playable = 0; if(!ags_type_playable){ static const GTypeInfo ags_playable_info = { sizeof(AgsPlayableInterface), (GBaseInitFunc) ags_playable_base_init, NULL, /* base_finalize */ }; ags_type_playable = g_type_register_static(G_TYPE_INTERFACE, "AgsPlayable\0", &ags_playable_info, 0); } return(ags_type_playable); } GQuark ags_playable_error_quark() { return(g_quark_from_static_string("ags-playable-error-quark\0")); } void ags_playable_base_init(AgsPlayableInterface *interface) { /* empty */ } /** * ags_playable_rw_open: * @playable: the #AgsPlayable * @name: the filename * @create: if %TRUE file is created * @samplerate: the samplerate of the file * @channels: the count of audio channels * @frames: the count of frames * @format: the audio file's format * * Opens a file in read/write mode. * * Returns: %TRUE on success. */ gboolean ags_playable_rw_open(AgsPlayable *playable, gchar *name, gboolean create, guint samplerate, guint channels, guint frames, guint format) { AgsPlayableInterface *playable_interface; gboolean ret_val; g_return_val_if_fail(AGS_IS_PLAYABLE(playable), FALSE); playable_interface = AGS_PLAYABLE_GET_INTERFACE(playable); g_return_val_if_fail(playable_interface->open, FALSE); ret_val = playable_interface->rw_open(playable, name, create, samplerate, channels, frames, format); return(ret_val); } /** * ags_playable_open: * @playable: the #AgsPlayable * @name: the filename * * Opens a file in read-only mode. * * Returns: %TRUE on success */ gboolean ags_playable_open(AgsPlayable *playable, gchar *name) { AgsPlayableInterface *playable_interface; gboolean ret_val; g_return_val_if_fail(AGS_IS_PLAYABLE(playable), FALSE); playable_interface = AGS_PLAYABLE_GET_INTERFACE(playable); g_return_val_if_fail(playable_interface->open, FALSE); ret_val = playable_interface->open(playable, name); return(ret_val); } /** * ags_playable_level_count: * @playable: the #AgsPlayable * * Retrieve the count of levels. * * Returns: level count */ guint ags_playable_level_count(AgsPlayable *playable) { AgsPlayableInterface *playable_interface; guint ret_val; g_return_val_if_fail(AGS_IS_PLAYABLE(playable), 0); playable_interface = AGS_PLAYABLE_GET_INTERFACE(playable); g_return_val_if_fail(playable_interface->level_count, 0); ret_val = playable_interface->level_count(playable); return(ret_val); } /** * ags_playable_nth_level: * @playable: the #AgsPlayable * * Retrieve the selected level. * * Returns: nth level */ guint ags_playable_nth_level(AgsPlayable *playable) { AgsPlayableInterface *playable_interface; guint ret_val; g_return_val_if_fail(AGS_IS_PLAYABLE(playable), 0); playable_interface = AGS_PLAYABLE_GET_INTERFACE(playable); g_return_val_if_fail(playable_interface->nth_level, 0); ret_val = playable_interface->nth_level(playable); return(ret_val); } /** * ags_playable_selected_level: * @playable: the #AgsPlayable * * Retrieve the selected level's name. * * Returns: nth level name */ gchar* ags_playable_selected_level(AgsPlayable *playable) { AgsPlayableInterface *playable_interface; gchar *ret_val; g_return_val_if_fail(AGS_IS_PLAYABLE(playable), 0); playable_interface = AGS_PLAYABLE_GET_INTERFACE(playable); g_return_val_if_fail(playable_interface->selected_level, 0); ret_val = playable_interface->selected_level(playable); return(ret_val); } /** * ags_playable_sublevel_names: * @playable: the #AgsPlayable * * Retrieve the all sub-level's name. * * Returns: sub-level names */ gchar** ags_playable_sublevel_names(AgsPlayable *playable) { AgsPlayableInterface *playable_interface; gchar **ret_val; g_return_val_if_fail(AGS_IS_PLAYABLE(playable), NULL); playable_interface = AGS_PLAYABLE_GET_INTERFACE(playable); g_return_val_if_fail(playable_interface->sublevel_names, NULL); ret_val = playable_interface->sublevel_names(playable); return(ret_val); } /** * ags_playable_level_select: * @playable: an #AgsPlayable * @nth_level: of type guint * @sublevel_name: a gchar pointer * @error: an error that may occure * * Select a level in an monolythic file where @nth_level and @sublevel_name are equivalent. * If @sublevel_name is NULL @nth_level will be chosen. */ void ags_playable_level_select(AgsPlayable *playable, guint nth_level, gchar *sublevel_name, GError **error) { AgsPlayableInterface *playable_interface; g_return_if_fail(AGS_IS_PLAYABLE(playable)); playable_interface = AGS_PLAYABLE_GET_INTERFACE(playable); g_return_if_fail(playable_interface->level_select); playable_interface->level_select(playable, nth_level, sublevel_name, error); } /** * ags_playable_level_up: * @playable: an #AgsPlayable * @levels: n-levels up * @error: returned error * * Move up in hierarchy. */ void ags_playable_level_up(AgsPlayable *playable, guint levels, GError **error) { AgsPlayableInterface *playable_interface; g_return_if_fail(AGS_IS_PLAYABLE(playable)); playable_interface = AGS_PLAYABLE_GET_INTERFACE(playable); g_return_if_fail(playable_interface->level_up); playable_interface->level_up(playable, levels, error); } /** * ags_playable_iter_start: * @playable: an #AgsPlayable * * Start iterating current level. */ void ags_playable_iter_start(AgsPlayable *playable) { AgsPlayableInterface *playable_interface; g_return_if_fail(AGS_IS_PLAYABLE(playable)); playable_interface = AGS_PLAYABLE_GET_INTERFACE(playable); g_return_if_fail(playable_interface->iter_start); playable_interface->iter_start(playable); } /** * ags_playable_iter_next: * @playable: an #AgsPlayable * * Iterating next on current level. */ gboolean ags_playable_iter_next(AgsPlayable *playable) { AgsPlayableInterface *playable_interface; gboolean ret_val; g_return_val_if_fail(AGS_IS_PLAYABLE(playable), FALSE); playable_interface = AGS_PLAYABLE_GET_INTERFACE(playable); g_return_val_if_fail(playable_interface->iter_next, FALSE); ret_val = playable_interface->iter_next(playable); return(ret_val); } /** * ags_playable_info: * @playable: an #AgsPlayable * @channels: channels * @frames: frames * @loop_start: loop start * @loop_end: loop end * @error: returned error * * Retrieve information about selected audio data. */ void ags_playable_info(AgsPlayable *playable, guint *channels, guint *frames, guint *loop_start, guint *loop_end, GError **error) { AgsPlayableInterface *playable_interface; g_return_if_fail(AGS_IS_PLAYABLE(playable)); playable_interface = AGS_PLAYABLE_GET_INTERFACE(playable); g_return_if_fail(playable_interface->info); playable_interface->info(playable, channels, frames, loop_start, loop_end, error); } /** * ags_playable_read: * @playable: an #AgsPlayable * @channel: nth channel * @error: returned error * * Read audio buffer of playable audio data. * * Returns: audio buffer */ short* ags_playable_read(AgsPlayable *playable, guint channel, GError **error) { AgsPlayableInterface *playable_interface; g_return_if_fail(AGS_IS_PLAYABLE(playable)); playable_interface = AGS_PLAYABLE_GET_INTERFACE(playable); g_return_if_fail(playable_interface->read); playable_interface->read(playable, channel, error); } /** * ags_playable_write: * @playable: an #AgsPlayable * @buffer: audio data * @buffer_length: frame count * * Write @buffer_length of @buffer audio data. */ void ags_playable_write(AgsPlayable *playable, signed short *buffer, guint buffer_length) { AgsPlayableInterface *playable_interface; g_return_if_fail(AGS_IS_PLAYABLE(playable)); playable_interface = AGS_PLAYABLE_GET_INTERFACE(playable); g_return_if_fail(playable_interface->write); playable_interface->write(playable, buffer, buffer_length); } /** * ags_playable_flush: * @playable: an #AgsPlayable * * Flush internal audio buffer. */ void ags_playable_flush(AgsPlayable *playable) { AgsPlayableInterface *playable_interface; g_return_if_fail(AGS_IS_PLAYABLE(playable)); playable_interface = AGS_PLAYABLE_GET_INTERFACE(playable); g_return_if_fail(playable_interface->flush); playable_interface->flush(playable); } /** * ags_playable_seek: * @playable: an #AgsPlayable * @frames: n-frames to seek * @whence: SEEK_SET, SEEK_CUR, or SEEK_END * * Seek @playable to address. */ void ags_playable_seek(AgsPlayable *playable, guint frames, gint whence) { AgsPlayableInterface *playable_interface; g_return_if_fail(AGS_IS_PLAYABLE(playable)); playable_interface = AGS_PLAYABLE_GET_INTERFACE(playable); g_return_if_fail(playable_interface->seek); playable_interface->seek(playable, frames, whence); } /** * ags_playable_close: * @playable: an #AgsPlayable * * Close audio file. */ void ags_playable_close(AgsPlayable *playable) { AgsPlayableInterface *playable_interface; g_return_if_fail(AGS_IS_PLAYABLE(playable)); playable_interface = AGS_PLAYABLE_GET_INTERFACE(playable); g_return_if_fail(playable_interface->close); playable_interface->close(playable); } /** * ags_playable_read_audio_signal: * @playable: an #AgsPlayable * @devout: the #AgsDevout defaulting to * @start_channel: read from channel * @channels_to_read: n-times * * Read the audio signal of @AgsPlayable. * * Returns: a #GList of #AgsAudioSignal */ GList* ags_playable_read_audio_signal(AgsPlayable *playable, AgsDevout *devout, guint start_channel, guint channels_to_read) { AgsAudioSignal *audio_signal; GList *stream, *list, *list_beginning; short *buffer; guint channels; guint frames; guint loop_start; guint loop_end; guint length; guint buffer_size; guint samplerate; guint i, j, k, i_stop, j_stop; gchar *str; GError *error; g_return_val_if_fail(AGS_IS_PLAYABLE(playable), NULL); error = NULL; ags_playable_info(playable, &channels, &frames, &loop_start, &loop_end, &error); pthread_mutex_lock(&(ags_application_mutex)); str = ags_config_get(config, AGS_CONFIG_DEVOUT, "samplerate\0"); samplerate = g_ascii_strtoull(str, NULL, 10); free(str); str = ags_config_get(config, AGS_CONFIG_DEVOUT, "buffer-size\0"); buffer_size = g_ascii_strtoull(str, NULL, 10); free(str); pthread_mutex_unlock(&(ags_application_mutex)); length = (guint) ceil((double)(frames) / (double)(buffer_size)); //#ifdef AGS_DEBUG g_message("ags_playable_read_audio_signal:\n frames = %u\n buffer_size = %u\n length = %u\n\0", frames, buffer_size, length); //#endif list = NULL; i = start_channel; i_stop = start_channel + channels_to_read; for(; i < i_stop; i++){ audio_signal = ags_audio_signal_new((GObject *) devout, NULL, NULL); audio_signal->flags |= AGS_AUDIO_SIGNAL_TEMPLATE; list = g_list_prepend(list, audio_signal); ags_connectable_connect(AGS_CONNECTABLE(audio_signal)); } list_beginning = list; j_stop = (guint) floor((double)(frames) / (double)(buffer_size)); for(i = start_channel; list != NULL; i++){ audio_signal = AGS_AUDIO_SIGNAL(list->data); ags_audio_signal_stream_resize(audio_signal, length); audio_signal->loop_start = loop_start; audio_signal->loop_end = loop_end; //TODO:JK: read resolution of file // audio_signal->resolution = AGS_DEVOUT_RESOLUTION_16_BIT; error = NULL; buffer = ags_playable_read(playable, i, &error); if(error != NULL){ g_error("%s\0", error->message); } if(buffer != NULL){ stream = audio_signal->stream_beginning; for(j = 0; j < j_stop; j++){ for(k = 0; k < buffer_size; k++){ ((short *) stream->data)[k] = buffer[j * buffer_size + k]; } stream = stream->next; } if(frames % buffer_size != 0){ for(k = 0; k < frames % buffer_size; k++){ ((short *) stream->data)[k] = buffer[j * buffer_size + k]; } } free(buffer); } list = list->next; } return(list_beginning); } gsequencer-0.6.37/src/ags/object/ags_packable.c0000644000175000017500000000504212621463700016242 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include void ags_packable_base_init(AgsPackableInterface *interface); /** * SECTION:ags_packable * @short_description: packing recalls * @title: AgsPackable * @section_id: * @include: ags/object/ags_packable.h * * The #AgsPackable interface gives you a unique access to recalls * to be packed into a #AgsRecallContainer. */ GType ags_packable_get_type() { static GType ags_type_packable = 0; if(!ags_type_packable){ static const GTypeInfo ags_packable_info = { sizeof(AgsPackableInterface), (GBaseInitFunc) ags_packable_base_init, NULL, /* base_finalize */ }; ags_type_packable = g_type_register_static(G_TYPE_INTERFACE, "AgsPackable\0", &ags_packable_info, 0); } return(ags_type_packable); } void ags_packable_base_init(AgsPackableInterface *interface) { /* empty */ } /** * ags_packable_pack: * @packable: the #AgsPackable * * Pack to container. * * Returns: %TRUE on success * * Since: 0.4 */ gboolean ags_packable_pack(AgsPackable *packable, GObject *container) { AgsPackableInterface *packable_interface; g_return_val_if_fail(AGS_IS_PACKABLE(packable), TRUE); packable_interface = AGS_PACKABLE_GET_INTERFACE(packable); g_return_val_if_fail(packable_interface->pack, TRUE); return(packable_interface->pack(packable, container)); } /** * ags_packable_unpack: * @packable: the #AgsPackable * * Unpack of container. * * Returns: %TRUE on success * * Since: 0.4 */ gboolean ags_packable_unpack(AgsPackable *packable) { AgsPackableInterface *packable_interface; g_return_val_if_fail(AGS_IS_PACKABLE(packable), TRUE); packable_interface = AGS_PACKABLE_GET_INTERFACE(packable); g_return_val_if_fail(packable_interface->unpack, TRUE); return(packable_interface->unpack(packable)); } gsequencer-0.6.37/src/ags/object/ags_marshal.c0000644000175000017500000013124512626272146016143 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #ifdef G_ENABLE_DEBUG #define g_marshal_value_peek_boolean(v) g_value_get_boolean (v) #define g_marshal_value_peek_char(v) g_value_get_schar (v) #define g_marshal_value_peek_uchar(v) g_value_get_uchar (v) #define g_marshal_value_peek_int(v) g_value_get_int (v) #define g_marshal_value_peek_uint(v) g_value_get_uint (v) #define g_marshal_value_peek_long(v) g_value_get_long (v) #define g_marshal_value_peek_ulong(v) g_value_get_ulong (v) #define g_marshal_value_peek_int64(v) g_value_get_int64 (v) #define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v) #define g_marshal_value_peek_enum(v) g_value_get_enum (v) #define g_marshal_value_peek_flags(v) g_value_get_flags (v) #define g_marshal_value_peek_float(v) g_value_get_float (v) #define g_marshal_value_peek_double(v) g_value_get_double (v) #define g_marshal_value_peek_string(v) (char*) g_value_get_string (v) #define g_marshal_value_peek_param(v) g_value_get_param (v) #define g_marshal_value_peek_boxed(v) g_value_get_boxed (v) #define g_marshal_value_peek_pointer(v) g_value_get_pointer (v) #define g_marshal_value_peek_object(v) g_value_get_object (v) #define g_marshal_value_peek_variant(v) g_value_get_variant (v) #else /* !G_ENABLE_DEBUG */ /* WARNING: This code accesses GValues directly, which is UNSUPPORTED API. * Do not access GValues directly in your code. Instead, use the * g_value_get_*() functions */ #define g_marshal_value_peek_boolean(v) (v)->data[0].v_int #define g_marshal_value_peek_char(v) (v)->data[0].v_int #define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint #define g_marshal_value_peek_int(v) (v)->data[0].v_int #define g_marshal_value_peek_uint(v) (v)->data[0].v_uint #define g_marshal_value_peek_long(v) (v)->data[0].v_long #define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong #define g_marshal_value_peek_int64(v) (v)->data[0].v_int64 #define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64 #define g_marshal_value_peek_enum(v) (v)->data[0].v_long #define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong #define g_marshal_value_peek_float(v) (v)->data[0].v_float #define g_marshal_value_peek_double(v) (v)->data[0].v_double #define g_marshal_value_peek_string(v) (v)->data[0].v_pointer #define g_marshal_value_peek_param(v) (v)->data[0].v_pointer #define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer #define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer #define g_marshal_value_peek_object(v) (v)->data[0].v_pointer #define g_marshal_value_peek_variant(v) (v)->data[0].v_pointer #endif /* !G_ENABLE_DEBUG */ /* ULONG:VOID (ags_marshallers.list:1) */ void g_cclosure_user_marshal_ULONG__VOID (GClosure *closure, GValue *return_value G_GNUC_UNUSED, guint n_param_values, const GValue *param_values, gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data) { typedef gulong (*GMarshalFunc_ULONG__VOID) (gpointer data1, gpointer data2); register GMarshalFunc_ULONG__VOID callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; gulong v_return; g_return_if_fail (return_value != NULL); g_return_if_fail (n_param_values == 1); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_ULONG__VOID) (marshal_data ? marshal_data : cc->callback); v_return = callback (data1, data2); g_value_set_ulong (return_value, v_return); } /* VOID:UINT,BOOLEAN (ags_marshallers.list:2) */ void g_cclosure_user_marshal_VOID__UINT_BOOLEAN (GClosure *closure, GValue *return_value G_GNUC_UNUSED, guint n_param_values, const GValue *param_values, gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data) { typedef void (*GMarshalFunc_VOID__UINT_BOOLEAN) (gpointer data1, guint arg_1, gboolean arg_2, gpointer data2); register GMarshalFunc_VOID__UINT_BOOLEAN callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; g_return_if_fail (n_param_values == 3); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_VOID__UINT_BOOLEAN) (marshal_data ? marshal_data : cc->callback); callback (data1, g_marshal_value_peek_uint (param_values + 1), g_marshal_value_peek_boolean (param_values + 2), data2); } /* VOID:UINT,UINT (ags_marshallers.list:3) */ void g_cclosure_user_marshal_VOID__UINT_UINT (GClosure *closure, GValue *return_value G_GNUC_UNUSED, guint n_param_values, const GValue *param_values, gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data) { typedef void (*GMarshalFunc_VOID__UINT_UINT) (gpointer data1, guint arg_1, guint arg_2, gpointer data2); register GMarshalFunc_VOID__UINT_UINT callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; g_return_if_fail (n_param_values == 3); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_VOID__UINT_UINT) (marshal_data ? marshal_data : cc->callback); callback (data1, g_marshal_value_peek_uint (param_values + 1), g_marshal_value_peek_uint (param_values + 2), data2); } /* VOID:UINT,UINT,UINT (ags_marshallers.list:4) */ void g_cclosure_user_marshal_VOID__UINT_UINT_UINT (GClosure *closure, GValue *return_value G_GNUC_UNUSED, guint n_param_values, const GValue *param_values, gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data) { typedef void (*GMarshalFunc_VOID__UINT_UINT_UINT) (gpointer data1, guint arg_1, guint arg_2, guint arg_3, gpointer data2); register GMarshalFunc_VOID__UINT_UINT_UINT callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; g_return_if_fail (n_param_values == 4); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_VOID__UINT_UINT_UINT) (marshal_data ? marshal_data : cc->callback); callback (data1, g_marshal_value_peek_uint (param_values + 1), g_marshal_value_peek_uint (param_values + 2), g_marshal_value_peek_uint (param_values + 3), data2); } /* VOID:UINT,DOUBLE,UINT (ags_marshallers.list:5) */ void g_cclosure_user_marshal_VOID__UINT_DOUBLE_UINT (GClosure *closure, GValue *return_value G_GNUC_UNUSED, guint n_param_values, const GValue *param_values, gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data) { typedef void (*GMarshalFunc_VOID__UINT_DOUBLE_UINT) (gpointer data1, guint arg_1, gdouble arg_2, guint arg_3, gpointer data2); register GMarshalFunc_VOID__UINT_DOUBLE_UINT callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; g_return_if_fail (n_param_values == 4); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_VOID__UINT_DOUBLE_UINT) (marshal_data ? marshal_data : cc->callback); callback (data1, g_marshal_value_peek_uint (param_values + 1), g_marshal_value_peek_double (param_values + 2), g_marshal_value_peek_uint (param_values + 3), data2); } /* VOID:UINT,INT (ags_marshallers.list:6) */ void g_cclosure_user_marshal_VOID__UINT_INT (GClosure *closure, GValue *return_value G_GNUC_UNUSED, guint n_param_values, const GValue *param_values, gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data) { typedef void (*GMarshalFunc_VOID__UINT_INT) (gpointer data1, guint arg_1, gint arg_2, gpointer data2); register GMarshalFunc_VOID__UINT_INT callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; g_return_if_fail (n_param_values == 3); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_VOID__UINT_INT) (marshal_data ? marshal_data : cc->callback); callback (data1, g_marshal_value_peek_uint (param_values + 1), g_marshal_value_peek_int (param_values + 2), data2); } /* VOID:UINT,DOUBLE (ags_marshallers.list:7) */ void g_cclosure_user_marshal_VOID__UINT_DOUBLE (GClosure *closure, GValue *return_value G_GNUC_UNUSED, guint n_param_values, const GValue *param_values, gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data) { typedef void (*GMarshalFunc_VOID__UINT_DOUBLE) (gpointer data1, guint arg_1, gdouble arg_2, gpointer data2); register GMarshalFunc_VOID__UINT_DOUBLE callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; g_return_if_fail (n_param_values == 3); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_VOID__UINT_DOUBLE) (marshal_data ? marshal_data : cc->callback); callback (data1, g_marshal_value_peek_uint (param_values + 1), g_marshal_value_peek_double (param_values + 2), data2); } /* VOID:ULONG,UINT (ags_marshallers.list:8) */ void g_cclosure_user_marshal_VOID__ULONG_UINT (GClosure *closure, GValue *return_value G_GNUC_UNUSED, guint n_param_values, const GValue *param_values, gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data) { typedef void (*GMarshalFunc_VOID__ULONG_UINT) (gpointer data1, gulong arg_1, guint arg_2, gpointer data2); register GMarshalFunc_VOID__ULONG_UINT callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; g_return_if_fail (n_param_values == 3); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_VOID__ULONG_UINT) (marshal_data ? marshal_data : cc->callback); callback (data1, g_marshal_value_peek_ulong (param_values + 1), g_marshal_value_peek_uint (param_values + 2), data2); } /* VOID:DOUBLE,DOUBLE (ags_marshallers.list:9) */ void g_cclosure_user_marshal_VOID__DOUBLE_DOUBLE (GClosure *closure, GValue *return_value G_GNUC_UNUSED, guint n_param_values, const GValue *param_values, gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data) { typedef void (*GMarshalFunc_VOID__DOUBLE_DOUBLE) (gpointer data1, gdouble arg_1, gdouble arg_2, gpointer data2); register GMarshalFunc_VOID__DOUBLE_DOUBLE callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; g_return_if_fail (n_param_values == 3); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_VOID__DOUBLE_DOUBLE) (marshal_data ? marshal_data : cc->callback); callback (data1, g_marshal_value_peek_double (param_values + 1), g_marshal_value_peek_double (param_values + 2), data2); } /* VOID:ULONG,UINT,UINT (ags_marshallers.list:10) */ void g_cclosure_user_marshal_VOID__ULONG_UINT_UINT (GClosure *closure, GValue *return_value G_GNUC_UNUSED, guint n_param_values, const GValue *param_values, gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data) { typedef void (*GMarshalFunc_VOID__ULONG_UINT_UINT) (gpointer data1, gulong arg_1, guint arg_2, guint arg_3, gpointer data2); register GMarshalFunc_VOID__ULONG_UINT_UINT callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; g_return_if_fail (n_param_values == 4); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_VOID__ULONG_UINT_UINT) (marshal_data ? marshal_data : cc->callback); callback (data1, g_marshal_value_peek_ulong (param_values + 1), g_marshal_value_peek_uint (param_values + 2), g_marshal_value_peek_uint (param_values + 3), data2); } /* VOID:STRING,UINT (ags_marshallers.list:11) */ void g_cclosure_user_marshal_VOID__STRING_UINT (GClosure *closure, GValue *return_value G_GNUC_UNUSED, guint n_param_values, const GValue *param_values, gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data) { typedef void (*GMarshalFunc_VOID__STRING_UINT) (gpointer data1, gpointer arg_1, guint arg_2, gpointer data2); register GMarshalFunc_VOID__STRING_UINT callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; g_return_if_fail (n_param_values == 3); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_VOID__STRING_UINT) (marshal_data ? marshal_data : cc->callback); callback (data1, g_marshal_value_peek_string (param_values + 1), g_marshal_value_peek_uint (param_values + 2), data2); } /* VOID:STRING,POINTER (ags_marshallers.list:12) */ void g_cclosure_user_marshal_VOID__STRING_POINTER (GClosure *closure, GValue *return_value G_GNUC_UNUSED, guint n_param_values, const GValue *param_values, gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data) { typedef void (*GMarshalFunc_VOID__STRING_POINTER) (gpointer data1, gpointer arg_1, gpointer arg_2, gpointer data2); register GMarshalFunc_VOID__STRING_POINTER callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; g_return_if_fail (n_param_values == 3); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_VOID__STRING_POINTER) (marshal_data ? marshal_data : cc->callback); callback (data1, g_marshal_value_peek_string (param_values + 1), g_marshal_value_peek_pointer (param_values + 2), data2); } /* VOID:OBJECT,UINT (ags_marshallers.list:13) */ void g_cclosure_user_marshal_VOID__OBJECT_UINT (GClosure *closure, GValue *return_value G_GNUC_UNUSED, guint n_param_values, const GValue *param_values, gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data) { typedef void (*GMarshalFunc_VOID__OBJECT_UINT) (gpointer data1, gpointer arg_1, guint arg_2, gpointer data2); register GMarshalFunc_VOID__OBJECT_UINT callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; g_return_if_fail (n_param_values == 3); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_VOID__OBJECT_UINT) (marshal_data ? marshal_data : cc->callback); callback (data1, g_marshal_value_peek_object (param_values + 1), g_marshal_value_peek_uint (param_values + 2), data2); } /* VOID:OBJECT,OBJECT (ags_marshallers.list:14) */ void g_cclosure_user_marshal_VOID__OBJECT_OBJECT (GClosure *closure, GValue *return_value G_GNUC_UNUSED, guint n_param_values, const GValue *param_values, gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data) { typedef void (*GMarshalFunc_VOID__OBJECT_OBJECT) (gpointer data1, gpointer arg_1, gpointer arg_2, gpointer data2); register GMarshalFunc_VOID__OBJECT_OBJECT callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; g_return_if_fail (n_param_values == 3); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_VOID__OBJECT_OBJECT) (marshal_data ? marshal_data : cc->callback); callback (data1, g_marshal_value_peek_object (param_values + 1), g_marshal_value_peek_object (param_values + 2), data2); } /* VOID:OBJECT,OBJECT,OBJECT,INT,BOOLEAN (ags_marshallers.list:15) */ void g_cclosure_user_marshal_VOID__OBJECT_OBJECT_OBJECT_INT_BOOLEAN (GClosure *closure, GValue *return_value G_GNUC_UNUSED, guint n_param_values, const GValue *param_values, gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data) { typedef void (*GMarshalFunc_VOID__OBJECT_OBJECT_OBJECT_INT_BOOLEAN) (gpointer data1, gpointer arg_1, gpointer arg_2, gpointer arg_3, gint arg_4, gboolean arg_5, gpointer data2); register GMarshalFunc_VOID__OBJECT_OBJECT_OBJECT_INT_BOOLEAN callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; g_return_if_fail (n_param_values == 6); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_VOID__OBJECT_OBJECT_OBJECT_INT_BOOLEAN) (marshal_data ? marshal_data : cc->callback); callback (data1, g_marshal_value_peek_object (param_values + 1), g_marshal_value_peek_object (param_values + 2), g_marshal_value_peek_object (param_values + 3), g_marshal_value_peek_int (param_values + 4), g_marshal_value_peek_boolean (param_values + 5), data2); } /* VOID:OBJECT,OBJECT,OBJECT,OBJECT,OBJECT,OBJECT,UINT,INT,BOOLEAN (ags_marshallers.list:16) */ void g_cclosure_user_marshal_VOID__OBJECT_OBJECT_OBJECT_OBJECT_OBJECT_OBJECT_UINT_INT_BOOLEAN (GClosure *closure, GValue *return_value G_GNUC_UNUSED, guint n_param_values, const GValue *param_values, gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data) { typedef void (*GMarshalFunc_VOID__OBJECT_OBJECT_OBJECT_OBJECT_OBJECT_OBJECT_UINT_INT_BOOLEAN) (gpointer data1, gpointer arg_1, gpointer arg_2, gpointer arg_3, gpointer arg_4, gpointer arg_5, gpointer arg_6, guint arg_7, gint arg_8, gboolean arg_9, gpointer data2); register GMarshalFunc_VOID__OBJECT_OBJECT_OBJECT_OBJECT_OBJECT_OBJECT_UINT_INT_BOOLEAN callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; g_return_if_fail (n_param_values == 10); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_VOID__OBJECT_OBJECT_OBJECT_OBJECT_OBJECT_OBJECT_UINT_INT_BOOLEAN) (marshal_data ? marshal_data : cc->callback); callback (data1, g_marshal_value_peek_object (param_values + 1), g_marshal_value_peek_object (param_values + 2), g_marshal_value_peek_object (param_values + 3), g_marshal_value_peek_object (param_values + 4), g_marshal_value_peek_object (param_values + 5), g_marshal_value_peek_object (param_values + 6), g_marshal_value_peek_uint (param_values + 7), g_marshal_value_peek_int (param_values + 8), g_marshal_value_peek_boolean (param_values + 9), data2); } /* VOID:OBJECT,OBJECT,OBJECT,OBJECT,OBJECT,OBJECT,OBJECT,OBJECT (ags_marshallers.list:17) */ void g_cclosure_user_marshal_VOID__OBJECT_OBJECT_OBJECT_OBJECT_OBJECT_OBJECT_OBJECT_OBJECT (GClosure *closure, GValue *return_value G_GNUC_UNUSED, guint n_param_values, const GValue *param_values, gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data) { typedef void (*GMarshalFunc_VOID__OBJECT_OBJECT_OBJECT_OBJECT_OBJECT_OBJECT_OBJECT_OBJECT) (gpointer data1, gpointer arg_1, gpointer arg_2, gpointer arg_3, gpointer arg_4, gpointer arg_5, gpointer arg_6, gpointer arg_7, gpointer arg_8, gpointer data2); register GMarshalFunc_VOID__OBJECT_OBJECT_OBJECT_OBJECT_OBJECT_OBJECT_OBJECT_OBJECT callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; g_return_if_fail (n_param_values == 9); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_VOID__OBJECT_OBJECT_OBJECT_OBJECT_OBJECT_OBJECT_OBJECT_OBJECT) (marshal_data ? marshal_data : cc->callback); callback (data1, g_marshal_value_peek_object (param_values + 1), g_marshal_value_peek_object (param_values + 2), g_marshal_value_peek_object (param_values + 3), g_marshal_value_peek_object (param_values + 4), g_marshal_value_peek_object (param_values + 5), g_marshal_value_peek_object (param_values + 6), g_marshal_value_peek_object (param_values + 7), g_marshal_value_peek_object (param_values + 8), data2); } /* BOOLEAN:OBJECT,OBJECT (ags_marshallers.list:18) */ void g_cclosure_user_marshal_BOOLEAN__OBJECT_OBJECT (GClosure *closure, GValue *return_value G_GNUC_UNUSED, guint n_param_values, const GValue *param_values, gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data) { typedef gboolean (*GMarshalFunc_BOOLEAN__OBJECT_OBJECT) (gpointer data1, gpointer arg_1, gpointer arg_2, gpointer data2); register GMarshalFunc_BOOLEAN__OBJECT_OBJECT callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; gboolean v_return; g_return_if_fail (return_value != NULL); g_return_if_fail (n_param_values == 3); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_BOOLEAN__OBJECT_OBJECT) (marshal_data ? marshal_data : cc->callback); v_return = callback (data1, g_marshal_value_peek_object (param_values + 1), g_marshal_value_peek_object (param_values + 2), data2); g_value_set_boolean (return_value, v_return); } /* STRING:ULONG,STRING,STRING,STRING,STRING,UINT,POINTER (ags_marshallers.list:19) */ void g_cclosure_user_marshal_STRING__ULONG_STRING_STRING_STRING_STRING_UINT_POINTER (GClosure *closure, GValue *return_value G_GNUC_UNUSED, guint n_param_values, const GValue *param_values, gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data) { typedef gchar* (*GMarshalFunc_STRING__ULONG_STRING_STRING_STRING_STRING_UINT_POINTER) (gpointer data1, gulong arg_1, gpointer arg_2, gpointer arg_3, gpointer arg_4, gpointer arg_5, guint arg_6, gpointer arg_7, gpointer data2); register GMarshalFunc_STRING__ULONG_STRING_STRING_STRING_STRING_UINT_POINTER callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; gchar* v_return; g_return_if_fail (return_value != NULL); g_return_if_fail (n_param_values == 8); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_STRING__ULONG_STRING_STRING_STRING_STRING_UINT_POINTER) (marshal_data ? marshal_data : cc->callback); v_return = callback (data1, g_marshal_value_peek_ulong (param_values + 1), g_marshal_value_peek_string (param_values + 2), g_marshal_value_peek_string (param_values + 3), g_marshal_value_peek_string (param_values + 4), g_marshal_value_peek_string (param_values + 5), g_marshal_value_peek_uint (param_values + 6), g_marshal_value_peek_pointer (param_values + 7), data2); g_value_take_string (return_value, v_return); } /* POINTER:VOID (ags_marshallers.list:20) */ void g_cclosure_user_marshal_POINTER__VOID (GClosure *closure, GValue *return_value G_GNUC_UNUSED, guint n_param_values, const GValue *param_values, gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data) { typedef gpointer (*GMarshalFunc_POINTER__VOID) (gpointer data1, gpointer data2); register GMarshalFunc_POINTER__VOID callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; gpointer v_return; g_return_if_fail (return_value != NULL); g_return_if_fail (n_param_values == 1); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_POINTER__VOID) (marshal_data ? marshal_data : cc->callback); v_return = callback (data1, data2); g_value_set_pointer (return_value, v_return); } /* OBJECT:VOID (ags_marshallers.list:21) */ void g_cclosure_user_marshal_OBJECT__VOID (GClosure *closure, GValue *return_value G_GNUC_UNUSED, guint n_param_values, const GValue *param_values, gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data) { typedef GObject* (*GMarshalFunc_OBJECT__VOID) (gpointer data1, gpointer data2); register GMarshalFunc_OBJECT__VOID callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; GObject* v_return; g_return_if_fail (return_value != NULL); g_return_if_fail (n_param_values == 1); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_OBJECT__VOID) (marshal_data ? marshal_data : cc->callback); v_return = callback (data1, data2); g_value_take_object (return_value, v_return); } /* OBJECT:STRING,STRING,STRING (ags_marshallers.list:22) */ void g_cclosure_user_marshal_OBJECT__STRING_STRING_STRING (GClosure *closure, GValue *return_value G_GNUC_UNUSED, guint n_param_values, const GValue *param_values, gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data) { typedef GObject* (*GMarshalFunc_OBJECT__STRING_STRING_STRING) (gpointer data1, gpointer arg_1, gpointer arg_2, gpointer arg_3, gpointer data2); register GMarshalFunc_OBJECT__STRING_STRING_STRING callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; GObject* v_return; g_return_if_fail (return_value != NULL); g_return_if_fail (n_param_values == 4); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_OBJECT__STRING_STRING_STRING) (marshal_data ? marshal_data : cc->callback); v_return = callback (data1, g_marshal_value_peek_string (param_values + 1), g_marshal_value_peek_string (param_values + 2), g_marshal_value_peek_string (param_values + 3), data2); g_value_take_object (return_value, v_return); } /* OBJECT:OBJECT,POINTER,POINTER (ags_marshallers.list:23) */ void g_cclosure_user_marshal_OBJECT__OBJECT_POINTER_POINTER (GClosure *closure, GValue *return_value G_GNUC_UNUSED, guint n_param_values, const GValue *param_values, gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data) { typedef GObject* (*GMarshalFunc_OBJECT__OBJECT_POINTER_POINTER) (gpointer data1, gpointer arg_1, gpointer arg_2, gpointer arg_3, gpointer data2); register GMarshalFunc_OBJECT__OBJECT_POINTER_POINTER callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; GObject* v_return; g_return_if_fail (return_value != NULL); g_return_if_fail (n_param_values == 4); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_OBJECT__OBJECT_POINTER_POINTER) (marshal_data ? marshal_data : cc->callback); v_return = callback (data1, g_marshal_value_peek_object (param_values + 1), g_marshal_value_peek_pointer (param_values + 2), g_marshal_value_peek_pointer (param_values + 3), data2); g_value_take_object (return_value, v_return); } /* OBJECT:OBJECT,OBJECT (ags_marshallers.list:24) */ void g_cclosure_user_marshal_OBJECT__OBJECT_OBJECT (GClosure *closure, GValue *return_value G_GNUC_UNUSED, guint n_param_values, const GValue *param_values, gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data) { typedef GObject* (*GMarshalFunc_OBJECT__OBJECT_OBJECT) (gpointer data1, gpointer arg_1, gpointer arg_2, gpointer data2); register GMarshalFunc_OBJECT__OBJECT_OBJECT callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; GObject* v_return; g_return_if_fail (return_value != NULL); g_return_if_fail (n_param_values == 3); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_OBJECT__OBJECT_OBJECT) (marshal_data ? marshal_data : cc->callback); v_return = callback (data1, g_marshal_value_peek_object (param_values + 1), g_marshal_value_peek_object (param_values + 2), data2); g_value_take_object (return_value, v_return); } gsequencer-0.6.37/src/ags/object/ags_countable.c0000644000175000017500000000551112626272146016464 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_countable_base_init(AgsCountableInterface *interface); /** * SECTION:ags_countable * @short_description: unique access to dialogs * @title: AgsCountable * @section_id: * @include: ags/object/ags_countable.h * * The #AgsCountable interface gives you a unique access to counters. Generally we * distinguish between notation and sequencer counters. Those may have their own * relative positions, especially the sequencers may loop. */ GType ags_countable_get_type() { static GType ags_type_countable = 0; if(!ags_type_countable){ static const GTypeInfo ags_countable_info = { sizeof(AgsCountableInterface), (GBaseInitFunc) ags_countable_base_init, NULL, /* base_finalize */ }; ags_type_countable = g_type_register_static(G_TYPE_INTERFACE, "AgsCountable\0", &ags_countable_info, 0); } return(ags_type_countable); } void ags_countable_base_init(AgsCountableInterface *interface) { /* empty */ } /** * ags_countable_get_notation_counter: * @countable: an #AgsCountable * * Retrieve current position of notation. * * Returns: the current position * * Since: 0.4 */ guint ags_countable_get_notation_counter(AgsCountable *countable) { AgsCountableInterface *countable_interface; g_return_val_if_fail(AGS_IS_COUNTABLE(countable), -1); countable_interface = AGS_COUNTABLE_GET_INTERFACE(countable); g_return_val_if_fail(countable_interface->get_notation_counter, -1); countable_interface->get_notation_counter(countable); } /** * ags_countable_get_sequencer_counter: * @countable: an #AgsCountable * * Retrieve current position of sequencer. * * Returns: the current position * * Since: 0.4 */ guint ags_countable_get_sequencer_counter(AgsCountable *countable) { AgsCountableInterface *countable_interface; g_return_val_if_fail(AGS_IS_COUNTABLE(countable), -1); countable_interface = AGS_COUNTABLE_GET_INTERFACE(countable); g_return_val_if_fail(countable_interface->get_sequencer_counter, -1); countable_interface->get_sequencer_counter(countable); } gsequencer-0.6.37/src/ags/object/ags_dynamic_connectable.h0000644000175000017500000000425612621463700020474 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_DYNAMIC_CONNECTABLE_H__ #define __AGS_DYNAMIC_CONNECTABLE_H__ #include #define AGS_TYPE_DYNAMIC_CONNECTABLE (ags_dynamic_connectable_get_type()) #define AGS_DYNAMIC_CONNECTABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_DYNAMIC_CONNECTABLE, AgsDynamicConnectable)) #define AGS_DYNAMIC_CONNECTABLE_INTERFACE(vtable) (G_TYPE_CHECK_CLASS_CAST((vtable), AGS_TYPE_DYNAMIC_CONNECTABLE, AgsDynamicConnectableInterface)) #define AGS_IS_DYNAMIC_CONNECTABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_DYNAMIC_CONNECTABLE)) #define AGS_IS_DYNAMIC_CONNECTABLE_INTERFACE(vtable) (G_TYPE_CHECK_CLASS_TYPE((vtable), AGS_TYPE_DYNAMIC_CONNECTABLE)) #define AGS_DYNAMIC_CONNECTABLE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE((obj), AGS_TYPE_DYNAMIC_CONNECTABLE, AgsDynamicConnectableInterface)) typedef void AgsDynamicConnectable; typedef struct _AgsDynamicConnectableInterface AgsDynamicConnectableInterface; struct _AgsDynamicConnectableInterface { GTypeInterface interface; void (*connect_dynamic)(AgsDynamicConnectable *connectable); void (*disconnect_dynamic)(AgsDynamicConnectable *connectable); }; GType ags_dynamic_connectable_get_type(); void ags_dynamic_connectable_connect(AgsDynamicConnectable *connectable); void ags_dynamic_connectable_disconnect(AgsDynamicConnectable *connectable); #endif /*__AGS_DYNAMIC_CONNECTABLE_H__*/ gsequencer-0.6.37/src/ags/object/ags_portlet.c0000644000175000017500000001006712621463700016174 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_portlet_base_init(AgsPortletInterface *interface); /** * SECTION:ags_portlet * @short_description: interfacing portlets * @title: AgsPortlet * @section_id: * @include: ags/object/ags_portlet.h * * The #AgsPortlet interface is intended to use with ports containing #GObject. * Whereas its should implement this interface. */ GType ags_portlet_get_type() { static GType ags_type_portlet = 0; if(!ags_type_portlet){ static const GTypeInfo ags_portlet_info = { sizeof(AgsPortletInterface), (GBaseInitFunc) ags_portlet_base_init, NULL, /* base_finalize */ }; ags_type_portlet = g_type_register_static(G_TYPE_INTERFACE, "AgsPortlet\0", &ags_portlet_info, 0); } return(ags_type_portlet); } void ags_portlet_base_init(AgsPortletInterface *interface) { /* empty */ } /** * ags_portlet_set_port: * @portlet: an #AgsPortlet * @port: the #AgsPort * * Set port. * * Since: 0.4 */ void ags_portlet_set_port(AgsPortlet *portlet, AgsPort *port) { AgsPortletInterface *portlet_interface; g_return_if_fail(AGS_IS_PORTLET(portlet)); portlet_interface = AGS_PORTLET_GET_INTERFACE(portlet); g_return_if_fail(portlet_interface->set_port); portlet_interface->set_port(portlet, port); } /** * ags_portlet_get_port: * @portlet: an #AgsPortlet * * Get port. * * Returns: the #AgsPort * * Since: 0.4 */ AgsPort* ags_portlet_get_port(AgsPortlet *portlet) { AgsPortletInterface *portlet_interface; g_return_val_if_fail(AGS_IS_PORTLET(portlet), NULL); portlet_interface = AGS_PORTLET_GET_INTERFACE(portlet); g_return_val_if_fail(portlet_interface->get_port, NULL); portlet_interface->get_port(portlet); } /** * ags_portlet_list_safe_properties: * @portlet: an #AgsPortlet * * Retrieve thread-safe properties. * * Returns: a #GList containing properties * * Since: 0.4 */ GList* ags_portlet_list_safe_properties(AgsPortlet *portlet) { AgsPortletInterface *portlet_interface; g_return_val_if_fail(AGS_IS_PORTLET(portlet), NULL); portlet_interface = AGS_PORTLET_GET_INTERFACE(portlet); g_return_val_if_fail(portlet_interface->list_safe_properties, NULL); portlet_interface->list_safe_properties(portlet); } /** * ags_portlet_safe_get_property: * @portlet: an #AgsPortlet * @property_name: propertie's name * @value: the #GValue * * Get property thread safe. * * Since: 0.4 */ void ags_portlet_safe_get_property(AgsPortlet *portlet, gchar *property_name, GValue *value) { AgsPortletInterface *portlet_interface; g_return_if_fail(AGS_IS_PORTLET(portlet)); portlet_interface = AGS_PORTLET_GET_INTERFACE(portlet); g_return_if_fail(portlet_interface->safe_get_property); portlet_interface->safe_get_property(portlet, property_name, value); } /** * ags_portlet_safe_set_property: * @portlet: an #AgsPortlet * @property_name: propertie's name * @value: the #GValue * * Set property thread safe. * * Since: 0.4 */ void ags_portlet_safe_set_property(AgsPortlet *portlet, gchar *property_name, GValue *value) { AgsPortletInterface *portlet_interface; g_return_if_fail(AGS_IS_PORTLET(portlet)); portlet_interface = AGS_PORTLET_GET_INTERFACE(portlet); g_return_if_fail(portlet_interface->safe_set_property); portlet_interface->safe_set_property(portlet, property_name, value); } gsequencer-0.6.37/src/ags/object/ags_seekable.c0000644000175000017500000000427612626272146016272 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_seekable_class_init(AgsSeekableInterface *interface); GType ags_seekable_get_type() { static GType seekable_type = 0; if(!seekable_type){ seekable_type = g_type_register_static_simple (G_TYPE_INTERFACE, "AgsSeekable\0", sizeof (AgsSeekableInterface), (GClassInitFunc) ags_seekable_class_init, 0, NULL, 0); } return seekable_type; } void ags_seekable_class_init(AgsSeekableInterface *interface) { /** * AgsSeekable::seek: * @seekable: the object * @steps: relative seeking * @forward: direction to seek, if %TRUE seek forward * * The ::seek signal notifies about changed position * of sequencer. */ g_signal_new("seek\0", G_TYPE_FROM_INTERFACE(interface), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsSeekableInterface, seek), NULL, NULL, g_cclosure_user_marshal_VOID__UINT_BOOLEAN, G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_BOOLEAN); } void ags_seekable_base_init(AgsSeekableInterface *interface) { /* empty */ } void ags_seekable_seek(AgsSeekable *seekable, guint steps, gboolean forward) { AgsSeekableInterface *seekable_interface; g_return_if_fail(AGS_IS_SEEKABLE(seekable)); seekable_interface = AGS_SEEKABLE_GET_INTERFACE(seekable); g_return_if_fail(seekable_interface->seek); seekable_interface->seek(seekable, steps, forward); } gsequencer-0.6.37/src/ags/object/ags_seekable.h0000644000175000017500000000346512621463700016267 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_SEEKABLE_H__ #define __AGS_SEEKABLE_H__ #include #define AGS_TYPE_SEEKABLE (ags_seekable_get_type()) #define AGS_SEEKABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_SEEKABLE, AgsSeekable)) #define AGS_SEEKABLE_INTERFACE(vtable) (G_TYPE_CHECK_CLASS_CAST((vtable), AGS_TYPE_SEEKABLE, AgsSeekableInterface)) #define AGS_IS_SEEKABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_SEEKABLE)) #define AGS_IS_SEEKABLE_INTERFACE(vtable) (G_TYPE_CHECK_CLASS_TYPE((vtable), AGS_TYPE_SEEKABLE)) #define AGS_SEEKABLE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE((obj), AGS_TYPE_SEEKABLE, AgsSeekableInterface)) typedef void AgsSeekable; typedef struct _AgsSeekableInterface AgsSeekableInterface; struct _AgsSeekableInterface { GTypeInterface interface; void (*seek)(AgsSeekable *seekable, guint steps, gboolean forward); }; GType ags_seekable_get_type(); void ags_seekable_seek(AgsSeekable *seekable, guint steps, gboolean forward); #endif /*__AGS_SEEKABLE_H__*/ gsequencer-0.6.37/src/ags/object/ags_persistable.c0000644000175000017500000000567512621463700017031 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_persistable_base_init(AgsPersistableInterface *interface); GType ags_persistable_get_type() { static GType ags_type_persistable = 0; if(!ags_type_persistable){ static const GTypeInfo ags_persistable_info = { sizeof(AgsPersistableInterface), (GBaseInitFunc) ags_persistable_base_init, NULL, /* base_finalize */ }; ags_type_persistable = g_type_register_static(G_TYPE_INTERFACE, "AgsPersistable\0", &ags_persistable_info, 0); } return(ags_type_persistable); } void ags_persistable_base_init(AgsPersistableInterface *interface) { /* empty */ } AgsPersistable* ags_persistable_read(AgsPersistable *persistable, xmlDocPtr doc, xmlNodePtr node) { AgsPersistableInterface *persistable_interface; g_return_val_if_fail(AGS_IS_PERSISTABLE(persistable), NULL); persistable_interface = AGS_PERSISTABLE_GET_INTERFACE(persistable); g_return_val_if_fail(persistable_interface->read, NULL); return(persistable_interface->read(persistable, doc, node)); } void ags_persistable_read_link(AgsPersistable *persistable, xmlDocPtr doc, xmlNodePtr node) { AgsPersistableInterface *persistable_interface; g_return_if_fail(AGS_IS_PERSISTABLE(persistable)); persistable_interface = AGS_PERSISTABLE_GET_INTERFACE(persistable); g_return_if_fail(persistable_interface->read_link); persistable_interface->read_link(persistable, doc, node); } xmlNodePtr ags_persistable_write(AgsPersistable *persistable, xmlDocPtr doc) { AgsPersistableInterface *persistable_interface; g_return_val_if_fail(AGS_IS_PERSISTABLE(persistable), NULL); persistable_interface = AGS_PERSISTABLE_GET_INTERFACE(persistable); g_return_val_if_fail(persistable_interface->write, NULL); return(persistable_interface->write(persistable, doc)); } void ags_persistable_write_link(AgsPersistable *persistable, xmlDocPtr doc, xmlNodePtr node) { AgsPersistableInterface *persistable_interface; g_return_if_fail(AGS_IS_PERSISTABLE(persistable)); persistable_interface = AGS_PERSISTABLE_GET_INTERFACE(persistable); g_return_if_fail(persistable_interface->write_link); persistable_interface->write_link(persistable, doc, node); } gsequencer-0.6.37/src/ags/object/ags_portlet.h0000644000175000017500000000454512621463700016205 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_PORTLET_H__ #define __AGS_PORTLET_H__ #include #include #define AGS_TYPE_PORTLET (ags_portlet_get_type()) #define AGS_PORTLET(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_PORTLET, AgsPortlet)) #define AGS_PORTLET_INTERFACE(vtable) (G_TYPE_CHECK_CLASS_CAST((vtable), AGS_TYPE_PORTLET, AgsPortletInterface)) #define AGS_IS_PORTLET(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_PORTLET)) #define AGS_IS_PORTLET_INTERFACE(vtable) (G_TYPE_CHECK_CLASS_TYPE((vtable), AGS_TYPE_PORTLET)) #define AGS_PORTLET_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE((obj), AGS_TYPE_PORTLET, AgsPortletInterface)) typedef void AgsPortlet; typedef struct _AgsPortletInterface AgsPortletInterface; struct _AgsPortletInterface { GTypeInterface interface; AgsPort* (*get_port)(AgsPortlet *portlet); void (*set_port)(AgsPortlet *portlet, AgsPort *port); GList* (*list_safe_properties)(AgsPortlet *portlet); void (*safe_get_property)(AgsPortlet *portlet, gchar *property_name, GValue *value); void (*safe_set_property)(AgsPortlet *portlet, gchar *property_name, GValue *value); }; GType ags_portlet_get_type(); AgsPort* ags_portlet_get_port(AgsPortlet *portlet); void ags_portlet_set_port(AgsPortlet *portlet, AgsPort *port); GList* ags_portlet_list_safe_properties(AgsPortlet *portlet); void ags_portlet_safe_get_property(AgsPortlet *portlet, gchar *property_name, GValue *value); void ags_portlet_safe_set_property(AgsPortlet *portlet, gchar *property_name, GValue *value); #endif /*__AGS_PORTLET_H__*/ gsequencer-0.6.37/src/ags/object/ags_main_loop.h0000644000175000017500000000503712626272146016475 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_MAIN_LOOP_H__ #define __AGS_MAIN_LOOP_H__ #include #define AGS_TYPE_MAIN_LOOP (ags_main_loop_get_type()) #define AGS_MAIN_LOOP(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_MAIN_LOOP, AgsMainLoop)) #define AGS_MAIN_LOOP_INTERFACE(vtable) (G_TYPE_CHECK_CLASS_CAST((vtable), AGS_TYPE_MAIN_LOOP, AgsMainLoopInterface)) #define AGS_IS_MAIN_LOOP(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_MAIN_LOOP)) #define AGS_IS_MAIN_LOOP_INTERFACE(vtable) (G_TYPE_CHECK_CLASS_TYPE((vtable), AGS_TYPE_MAIN_LOOP)) #define AGS_MAIN_LOOP_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE((obj), AGS_TYPE_MAIN_LOOP, AgsMainLoopInterface)) typedef void AgsMainLoop; typedef struct _AgsMainLoopInterface AgsMainLoopInterface; struct _AgsMainLoopInterface { GTypeInterface interface; pthread_mutex_t* (*get_tree_lock)(AgsMainLoop *main_loop); void (*set_async_queue)(AgsMainLoop *main_loop, GObject *async_queue); GObject* (*get_async_queue)(AgsMainLoop *main_loop); void (*set_tic)(AgsMainLoop *main_loop, guint tic); guint (*get_tic)(AgsMainLoop *main_loop); void (*set_last_sync)(AgsMainLoop *main_loop, guint last_sync); guint (*get_last_sync)(AgsMainLoop *main_loop); }; GType ags_main_loop_get_type(); pthread_mutex_t* ags_main_loop_get_tree_lock(AgsMainLoop *main_loop); void ags_main_loop_set_async_queue(AgsMainLoop *main_loop, GObject *async_queue); GObject* ags_main_loop_get_async_queue(AgsMainLoop *main_loop); void ags_main_loop_set_tic(AgsMainLoop *main_loop, guint tic); guint ags_main_loop_get_tic(AgsMainLoop *main_loop); void ags_main_loop_set_last_sync(AgsMainLoop *main_loop, guint last_sync); guint ags_main_loop_get_last_sync(AgsMainLoop *main_loop); #endif /*__AGS_MAIN_LOOP_H__*/ gsequencer-0.6.37/src/ags/object/ags_concurrent_tree.h0000644000175000017500000000445112621245070017707 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_CONCURRENT_TREE_H__ #define __AGS_CONCURRENT_TREE_H__ #include #include #define AGS_TYPE_CONCURRENT_TREE (ags_concurrent_tree_get_type()) #define AGS_CONCURRENT_TREE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_CONCURRENT_TREE, AgsConcurrentTree)) #define AGS_CONCURRENT_TREE_INTERFACE(vtable) (G_TYPE_CHECK_CLASS_CAST((vtable), AGS_TYPE_CONCURRENT_TREE, AgsConcurrentTreeInterface)) #define AGS_IS_CONCURRENT_TREE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_CONCURRENT_TREE)) #define AGS_IS_CONCURRENT_TREE_INTERFACE(vtable) (G_TYPE_CHECK_CLASS_TYPE((vtable), AGS_TYPE_CONCURRENT_TREE)) #define AGS_CONCURRENT_TREE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE((obj), AGS_TYPE_CONCURRENT_TREE, AgsConcurrentTreeInterface)) typedef void AgsConcurrentTree; typedef struct _AgsConcurrentTreeInterface AgsConcurrentTreeInterface; struct _AgsConcurrentTreeInterface { GTypeInterface interface; pthread_mutex_t* (*get_lock)(AgsConcurrentTree *concurrent_tree); pthread_mutex_t* (*get_parent_lock)(AgsConcurrentTree *concurrent_tree); }; GType ags_concurrent_tree_get_type(); pthread_mutex_t* ags_concurrent_tree_get_lock(AgsConcurrentTree *concurrent_tree); pthread_mutex_t* ags_concurrent_tree_get_parent_lock(AgsConcurrentTree *concurrent_tree); gboolean ags_concurrent_tree_lock_context(AgsConcurrentTree *concurrent_tree); void ags_concurrent_tree_unlock_context(AgsConcurrentTree *concurrent_tree); #endif /*__AGS_CONCURRENT_TREE_H__*/ gsequencer-0.6.37/src/ags/object/ags_main_loop.c0000644000175000017500000001220412626272146016462 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_main_loop_base_init(AgsMainLoopInterface *interface); /** * SECTION:ags_main_loop * @short_description: toplevel threads * @title: AgsMainLoop * @section_id: * @include: ags/object/ags_main_loop.h * * The #AgsMainLoop interface gives you a unique access to toplevel * threads and has to be implemented for it. */ GType ags_main_loop_get_type() { static GType ags_type_main_loop = 0; if(!ags_type_main_loop){ static const GTypeInfo ags_main_loop_info = { sizeof(AgsMainLoopInterface), (GBaseInitFunc) ags_main_loop_base_init, NULL, /* base_finalize */ }; ags_type_main_loop = g_type_register_static(G_TYPE_INTERFACE, "AgsMainLoop\0", &ags_main_loop_info, 0); } return(ags_type_main_loop); } void ags_main_loop_base_init(AgsMainLoopInterface *interface) { /* empty */ } /** * ags_main_loop_get_tree_lock: * @main_loop: the #AgsMainLoop * * Retrieve the tree mutex. * * Returns: the mutex * * Since: 0.6 */ pthread_mutex_t* ags_main_loop_get_tree_lock(AgsMainLoop *main_loop) { AgsMainLoopInterface *main_loop_interface; g_return_val_if_fail(AGS_IS_MAIN_LOOP(main_loop), NULL); main_loop_interface = AGS_MAIN_LOOP_GET_INTERFACE(main_loop); g_return_val_if_fail(main_loop_interface->get_tree_lock, NULL); return(main_loop_interface->get_tree_lock(main_loop)); } /** * ags_main_loop_set_async_queue: * @main_loop: the #AgsMainLoop * @async_queue: the #AgsAsyncQueue * * Sets the asynchronous queue. * * Since: 0.4 */ void ags_main_loop_set_async_queue(AgsMainLoop *main_loop, GObject *async_queue) { AgsMainLoopInterface *main_loop_interface; g_return_if_fail(AGS_IS_MAIN_LOOP(main_loop)); main_loop_interface = AGS_MAIN_LOOP_GET_INTERFACE(main_loop); g_return_if_fail(main_loop_interface->set_async_queue); main_loop_interface->set_async_queue(main_loop, async_queue); } /** * ags_main_loop_get_async_queue: * @main_loop: the #AgsMainLoop * * Retrieve the #AgsAsyncQueue. * * Returns: the #AgsAsyncQueue * * Since: 0.4 */ GObject* ags_main_loop_get_async_queue(AgsMainLoop *main_loop) { AgsMainLoopInterface *main_loop_interface; g_return_val_if_fail(AGS_IS_MAIN_LOOP(main_loop), NULL); main_loop_interface = AGS_MAIN_LOOP_GET_INTERFACE(main_loop); g_return_val_if_fail(main_loop_interface->get_async_queue, NULL); return(main_loop_interface->get_async_queue(main_loop)); } /** * ags_main_loop_set_tic: * @main_loop: the #AgsMainLoop * @tic: tic * * Sets tic to @tic. * * Since: 0.4 */ void ags_main_loop_set_tic(AgsMainLoop *main_loop, guint tic) { AgsMainLoopInterface *main_loop_interface; g_return_if_fail(AGS_IS_MAIN_LOOP(main_loop)); main_loop_interface = AGS_MAIN_LOOP_GET_INTERFACE(main_loop); g_return_if_fail(main_loop_interface->set_tic); main_loop_interface->set_tic(main_loop, tic); } /** * ags_main_loop_get_tic: * @main_loop: the #AgsMainLoop * * Retrieve current tic of synchronization context. * * Returns: current tic * * Since: 0.4 */ guint ags_main_loop_get_tic(AgsMainLoop *main_loop) { AgsMainLoopInterface *main_loop_interface; g_return_val_if_fail(AGS_IS_MAIN_LOOP(main_loop), G_MAXUINT); main_loop_interface = AGS_MAIN_LOOP_GET_INTERFACE(main_loop); g_return_val_if_fail(main_loop_interface->get_tic, G_MAXUINT); return(main_loop_interface->get_tic(main_loop)); } /** * ags_main_loop_set_last_sync: * @main_loop: the #AgsMainLoop * @last_sync: last sync * * Sets last sync to @last_sync. * * Since: 0.4 */ void ags_main_loop_set_last_sync(AgsMainLoop *main_loop, guint last_sync) { AgsMainLoopInterface *main_loop_interface; g_return_if_fail(AGS_IS_MAIN_LOOP(main_loop)); main_loop_interface = AGS_MAIN_LOOP_GET_INTERFACE(main_loop); g_return_if_fail(main_loop_interface->set_last_sync); main_loop_interface->set_last_sync(main_loop, last_sync); } /** * ags_main_loop_get_last_sync: * @main_loop: the #AgsMainLoop * * Retrieve last sync as tic of synchronization context. * * Returns: last synced tic * * Since: 0.4 */ guint ags_main_loop_get_last_sync(AgsMainLoop *main_loop) { AgsMainLoopInterface *main_loop_interface; g_return_val_if_fail(AGS_IS_MAIN_LOOP(main_loop), G_MAXUINT); main_loop_interface = AGS_MAIN_LOOP_GET_INTERFACE(main_loop); g_return_val_if_fail(main_loop_interface->get_last_sync, G_MAXUINT); return(main_loop_interface->get_last_sync(main_loop)); } gsequencer-0.6.37/src/ags/object/ags_plugin.c0000644000175000017500000001610612626272146016010 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_plugin_base_init(AgsPluginInterface *interface); /** * SECTION:ags_plugin * @short_description: interfacing plugins * @title: AgsPlugin * @section_id: * @include: ags/object/ags_plugin.h * * The #AgsPlugin interface gives you a unique access to recalls, * line members, lines, pads or machines ... */ GType ags_plugin_get_type() { static GType ags_type_plugin = 0; if(!ags_type_plugin){ static const GTypeInfo ags_plugin_info = { sizeof(AgsPluginInterface), (GBaseInitFunc) ags_plugin_base_init, NULL, /* base_finalize */ }; ags_type_plugin = g_type_register_static(G_TYPE_INTERFACE, "AgsPlugin\0", &ags_plugin_info, 0); } return(ags_type_plugin); } void ags_plugin_base_init(AgsPluginInterface *interface) { /* empty */ } /** * ags_plugin_get_name: * @plugin: an @AgsPlugin * * Retrieve the name of the plugin. * * Returns: the plugins name */ gchar* ags_plugin_get_name(AgsPlugin *plugin) { AgsPluginInterface *plugin_interface; gchar *ret_val; g_return_val_if_fail(AGS_IS_PLUGIN(plugin), NULL); plugin_interface = AGS_PLUGIN_GET_INTERFACE(plugin); g_return_val_if_fail(plugin_interface->get_name, NULL); ret_val = plugin_interface->get_name(plugin); return(ret_val); } /** * ags_plugin_set_name: * @plugin: an @AgsPlugin * @name: the name of plugin * * Set the name of the plugin. */ void ags_plugin_set_name(AgsPlugin *plugin, gchar *name) { AgsPluginInterface *plugin_interface; g_return_if_fail(AGS_IS_PLUGIN(plugin)); plugin_interface = AGS_PLUGIN_GET_INTERFACE(plugin); g_return_if_fail(plugin_interface->set_name); plugin_interface->set_name(plugin, name); } /** * ags_plugin_get_version: * @plugin: an @AgsPlugin * * Retrieve the version of the plugin. * * Returns: the plugins version */ gchar* ags_plugin_get_version(AgsPlugin *plugin) { AgsPluginInterface *plugin_interface; gchar *ret_val; g_return_val_if_fail(AGS_IS_PLUGIN(plugin), NULL); plugin_interface = AGS_PLUGIN_GET_INTERFACE(plugin); g_return_val_if_fail(plugin_interface->get_version, NULL); ret_val = plugin_interface->get_version(plugin); return(ret_val); } /** * ags_plugin_set_version: * @plugin: an @AgsPlugin * @version: the version of plugin * * Set the version of the plugin. */ void ags_plugin_set_version(AgsPlugin *plugin, gchar *version) { AgsPluginInterface *plugin_interface; g_return_if_fail(AGS_IS_PLUGIN(plugin)); plugin_interface = AGS_PLUGIN_GET_INTERFACE(plugin); g_return_if_fail(plugin_interface->set_version); plugin_interface->set_version(plugin, version); } /** * ags_plugin_get_build_id: * @plugin: an @AgsPlugin * * Retrieve the build id of the plugin. * * Returns: the plugins build id */ gchar* ags_plugin_get_build_id(AgsPlugin *plugin) { AgsPluginInterface *plugin_interface; gchar *ret_val; g_return_val_if_fail(AGS_IS_PLUGIN(plugin), NULL); plugin_interface = AGS_PLUGIN_GET_INTERFACE(plugin); g_return_val_if_fail(plugin_interface->get_build_id, NULL); ret_val = plugin_interface->get_build_id(plugin); return(ret_val); } /** * ags_plugin_set_build_id: * @plugin: an @AgsPlugin * @build_id: the build id of plugin * * Set the build id of the plugin. */ void ags_plugin_set_build_id(AgsPlugin *plugin, gchar *build_id) { AgsPluginInterface *plugin_interface; g_return_if_fail(AGS_IS_PLUGIN(plugin)); plugin_interface = AGS_PLUGIN_GET_INTERFACE(plugin); g_return_if_fail(plugin_interface->set_build_id); plugin_interface->set_build_id(plugin, build_id); } /** * ags_plugin_get_xml_type: * @plugin: an @AgsPlugin * * Retrieve the xml type of the plugin. * * Returns: the plugins xml type */ gchar* ags_plugin_get_xml_type(AgsPlugin *plugin) { AgsPluginInterface *plugin_interface; gchar *ret_val; g_return_val_if_fail(AGS_IS_PLUGIN(plugin), NULL); plugin_interface = AGS_PLUGIN_GET_INTERFACE(plugin); g_return_val_if_fail(plugin_interface->get_xml_type, NULL); ret_val = plugin_interface->get_xml_type(plugin); return(ret_val); } /** * ags_plugin_set_xml_type: * @plugin: an @AgsPlugin * @xml_type: the build id of plugin * * Set the build id of the plugin. */ void ags_plugin_set_xml_type(AgsPlugin *plugin, gchar *xml_type) { AgsPluginInterface *plugin_interface; g_return_if_fail(AGS_IS_PLUGIN(plugin)); plugin_interface = AGS_PLUGIN_GET_INTERFACE(plugin); g_return_if_fail(plugin_interface->set_xml_type); plugin_interface->set_xml_type(plugin, xml_type); } /** * ags_plugin_get_ports: * @plugin: an @AgsPlugin * * Retrieve the ports of the plugin. * * Returns: the plugins ports */ GList* ags_plugin_get_ports(AgsPlugin *plugin) { AgsPluginInterface *plugin_interface; GList *ret_val; g_return_val_if_fail(AGS_IS_PLUGIN(plugin), NULL); plugin_interface = AGS_PLUGIN_GET_INTERFACE(plugin); g_return_val_if_fail(plugin_interface->get_ports, NULL); ret_val = plugin_interface->get_ports(plugin); return(ret_val); } /** * ags_plugin_set_ports: * @plugin: an @AgsPlugin * @ports: the build id of plugin * * Set the build id of the plugin. */ void ags_plugin_set_ports(AgsPlugin *plugin, GList *ports) { AgsPluginInterface *plugin_interface; g_return_if_fail(AGS_IS_PLUGIN(plugin)); plugin_interface = AGS_PLUGIN_GET_INTERFACE(plugin); g_return_if_fail(plugin_interface->set_ports); plugin_interface->set_ports(plugin, ports); } /** * ags_plugin_read: * @file: the #AgsFile * @node: the node * @plugin: the #AgsPlugin * * Read of file. */ void ags_plugin_read(AgsFile *file, xmlNode *node, AgsPlugin *plugin) { AgsPluginInterface *plugin_interface; g_return_if_fail(AGS_IS_PLUGIN(plugin)); plugin_interface = AGS_PLUGIN_GET_INTERFACE(plugin); g_return_if_fail(plugin_interface->read); plugin_interface->read(file, node, plugin); } /** * ags_plugin_write: * @file: the #AgsFile * @parent: the parent node * @plugin: the #AgsPlugin * * Write to file. * * Returns: the new node you created */ xmlNode* ags_plugin_write(AgsFile *file, xmlNode *parent, AgsPlugin *plugin) { AgsPluginInterface *plugin_interface; xmlNode *ret_val; g_return_val_if_fail(AGS_IS_PLUGIN(plugin), NULL); plugin_interface = AGS_PLUGIN_GET_INTERFACE(plugin); g_return_val_if_fail(plugin_interface->write, NULL); ret_val = plugin_interface->write(file, parent, plugin); return(ret_val); } gsequencer-0.6.37/src/ags/object/ags_marshal.h0000644000175000017500000003605312626272146016151 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __g_cclosure_user_marshal_MARSHAL_H__ #define __g_cclosure_user_marshal_MARSHAL_H__ #include G_BEGIN_DECLS /* ULONG:VOID (ags_marshallers.list:1) */ extern void g_cclosure_user_marshal_ULONG__VOID (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); /* VOID:UINT,BOOLEAN (ags_marshallers.list:2) */ extern void g_cclosure_user_marshal_VOID__UINT_BOOLEAN (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); /* VOID:UINT,UINT (ags_marshallers.list:3) */ extern void g_cclosure_user_marshal_VOID__UINT_UINT (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); /* VOID:UINT,UINT,UINT (ags_marshallers.list:4) */ extern void g_cclosure_user_marshal_VOID__UINT_UINT_UINT (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); /* VOID:UINT,DOUBLE,UINT (ags_marshallers.list:5) */ extern void g_cclosure_user_marshal_VOID__UINT_DOUBLE_UINT (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); /* VOID:UINT,INT (ags_marshallers.list:6) */ extern void g_cclosure_user_marshal_VOID__UINT_INT (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); /* VOID:UINT,DOUBLE (ags_marshallers.list:7) */ extern void g_cclosure_user_marshal_VOID__UINT_DOUBLE (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); /* VOID:ULONG,UINT (ags_marshallers.list:8) */ extern void g_cclosure_user_marshal_VOID__ULONG_UINT (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); /* VOID:DOUBLE,DOUBLE (ags_marshallers.list:9) */ extern void g_cclosure_user_marshal_VOID__DOUBLE_DOUBLE (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); /* VOID:ULONG,UINT,UINT (ags_marshallers.list:10) */ extern void g_cclosure_user_marshal_VOID__ULONG_UINT_UINT (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); /* VOID:STRING,UINT (ags_marshallers.list:11) */ extern void g_cclosure_user_marshal_VOID__STRING_UINT (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); /* VOID:STRING,POINTER (ags_marshallers.list:12) */ extern void g_cclosure_user_marshal_VOID__STRING_POINTER (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); /* VOID:OBJECT,UINT (ags_marshallers.list:13) */ extern void g_cclosure_user_marshal_VOID__OBJECT_UINT (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); /* VOID:OBJECT,OBJECT (ags_marshallers.list:14) */ extern void g_cclosure_user_marshal_VOID__OBJECT_OBJECT (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); /* VOID:OBJECT,OBJECT,OBJECT,INT,BOOLEAN (ags_marshallers.list:15) */ extern void g_cclosure_user_marshal_VOID__OBJECT_OBJECT_OBJECT_INT_BOOLEAN (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); /* VOID:OBJECT,OBJECT,OBJECT,OBJECT,OBJECT,OBJECT,UINT,INT,BOOLEAN (ags_marshallers.list:16) */ extern void g_cclosure_user_marshal_VOID__OBJECT_OBJECT_OBJECT_OBJECT_OBJECT_OBJECT_UINT_INT_BOOLEAN (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); /* VOID:OBJECT,OBJECT,OBJECT,OBJECT,OBJECT,OBJECT,OBJECT,OBJECT (ags_marshallers.list:17) */ extern void g_cclosure_user_marshal_VOID__OBJECT_OBJECT_OBJECT_OBJECT_OBJECT_OBJECT_OBJECT_OBJECT (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); /* BOOLEAN:OBJECT,OBJECT (ags_marshallers.list:18) */ extern void g_cclosure_user_marshal_BOOLEAN__OBJECT_OBJECT (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); /* STRING:ULONG,STRING,STRING,STRING,STRING,UINT,POINTER (ags_marshallers.list:19) */ extern void g_cclosure_user_marshal_STRING__ULONG_STRING_STRING_STRING_STRING_UINT_POINTER (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); /* POINTER:VOID (ags_marshallers.list:20) */ extern void g_cclosure_user_marshal_POINTER__VOID (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); /* OBJECT:VOID (ags_marshallers.list:21) */ extern void g_cclosure_user_marshal_OBJECT__VOID (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); /* OBJECT:STRING,STRING,STRING (ags_marshallers.list:22) */ extern void g_cclosure_user_marshal_OBJECT__STRING_STRING_STRING (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); /* OBJECT:OBJECT,POINTER,POINTER (ags_marshallers.list:23) */ extern void g_cclosure_user_marshal_OBJECT__OBJECT_POINTER_POINTER (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); /* OBJECT:OBJECT,OBJECT (ags_marshallers.list:24) */ extern void g_cclosure_user_marshal_OBJECT__OBJECT_OBJECT (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); G_END_DECLS #endif /* __g_cclosure_user_marshal_MARSHAL_H__ */ gsequencer-0.6.37/src/ags/object/ags_dynamic_connectable.c0000644000175000017500000000614512621463700020466 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_dynamic_connectable_base_init(AgsDynamicConnectableInterface *interface); /** * SECTION:ags_dynamic_connectable * @short_description: unique access to recalls * @title: AgsDynamicConnectable * @section_id: * @include: ags/object/ags_dynamic_connectable.h * * The #AgsDynamicConnectable interface gives you a unique access to recalls. Its main * purpose is to setup up signal handlers with dynamic context for ::connect-dynamic. * A dynamic context would be a dependency that has to be resolved first within run * initialization. */ GType ags_dynamic_connectable_get_type() { static GType ags_type_dynamic_connectable = 0; if(!ags_type_dynamic_connectable){ static const GTypeInfo ags_dynamic_connectable_info = { sizeof(AgsDynamicConnectableInterface), (GBaseInitFunc) ags_dynamic_connectable_base_init, NULL, /* base_finalize */ }; ags_type_dynamic_connectable = g_type_register_static(G_TYPE_INTERFACE, "AgsDynamicConnectable\0", &ags_dynamic_connectable_info, 0); } return(ags_type_dynamic_connectable); } void ags_dynamic_connectable_base_init(AgsDynamicConnectableInterface *interface) { /* empty */ } /** * ags_dynamic_connectable_connect_dynamic: * @connectable: an #AgsDynamicConnectable * * Connect signal handlers within dynamic context. * * Since: 0.3 */ void ags_dynamic_connectable_connect_dynamic(AgsDynamicConnectable *connectable) { AgsDynamicConnectableInterface *connectable_interface; g_return_if_fail(AGS_IS_DYNAMIC_CONNECTABLE(connectable)); connectable_interface = AGS_DYNAMIC_CONNECTABLE_GET_INTERFACE(connectable); g_return_if_fail(connectable_interface->connect_dynamic); connectable_interface->connect_dynamic(connectable); } /** * ags_dynamic_connectable_disconnect_dynamic: * @connectable: an #AgsDynamicConnectable * * Disconnect signal handlers within dynamic context. * * Since: 0.3 */ void ags_dynamic_connectable_disconnect_dynamic(AgsDynamicConnectable *connectable) { AgsDynamicConnectableInterface *connectable_interface; g_return_if_fail(AGS_IS_DYNAMIC_CONNECTABLE(connectable)); connectable_interface = AGS_DYNAMIC_CONNECTABLE_GET_INTERFACE(connectable); g_return_if_fail(connectable_interface->disconnect_dynamic); connectable_interface->disconnect_dynamic(connectable); } gsequencer-0.6.37/src/ags/object/ags_persistable.h0000644000175000017500000000465712621463700017035 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_PERSISTABLE_H__ #define __AGS_PERSISTABLE_H__ #include #include #define AGS_TYPE_PERSISTABLE (ags_persistable_get_type()) #define AGS_PERSISTABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_PERSISTABLE, AgsPersistable)) #define AGS_PERSISTABLE_INTERFACE(vtable) (G_TYPE_CHECK_CLASS_CAST((vtable), AGS_TYPE_PERSISTABLE, AgsPersistableInterface)) #define AGS_IS_PERSISTABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_PERSISTABLE)) #define AGS_IS_PERSISTABLE_INTERFACE(vtable) (G_TYPE_CHECK_CLASS_TYPE((vtable), AGS_TYPE_PERSISTABLE)) #define AGS_PERSISTABLE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE((obj), AGS_TYPE_PERSISTABLE, AgsPersistableInterface)) typedef void AgsPersistable; typedef struct _AgsPersistableInterface AgsPersistableInterface; struct _AgsPersistableInterface { GTypeInterface interface; AgsPersistable* (*read)(AgsPersistable *persistable, xmlDocPtr doc, xmlNodePtr node); void (*read_link)(AgsPersistable *persistable, xmlDocPtr doc, xmlNodePtr node); xmlNodePtr (*write)(AgsPersistable *persistable, xmlDocPtr doc); void (*write_link)(AgsPersistable *persistable, xmlDocPtr doc, xmlNodePtr node); }; GType ags_persistable_get_type(); AgsPersistable* ags_persistable_read(AgsPersistable *persistable, xmlDocPtr doc, xmlNodePtr node); void ags_persistable_read_link(AgsPersistable *persistable, xmlDocPtr doc, xmlNodePtr node); xmlNodePtr ags_persistable_write(AgsPersistable *persistable, xmlDocPtr doc); void ags_persistable_write_link(AgsPersistable *persistable, xmlDocPtr doc, xmlNodePtr node); #endif /*__AGS_PERSISTABLE_H__*/ gsequencer-0.6.37/src/ags/object/ags_soundcard.c0000644000175000017500000001450012626272146016470 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_soundcard_base_init(AgsSoundcardInterface *interface); GType ags_soundcard_get_type() { static GType ags_type_soundcard = 0; if(!ags_type_soundcard){ static const GTypeInfo ags_soundcard_info = { sizeof(AgsSoundcardInterface), (GBaseInitFunc) ags_soundcard_base_init, NULL, /* base_finalize */ }; ags_type_soundcard = g_type_register_static(G_TYPE_INTERFACE, "AgsSoundcard\0", &ags_soundcard_info, 0); } return(ags_type_soundcard); } GQuark ags_soundcard_error_quark() { return(g_quark_from_static_string("ags-soundcard-error-quark\0")); } void ags_soundcard_base_init(AgsSoundcardInterface *interface) { /* empty */ } /** * ags_soundcard_play: * @soundcard an #AgsSoundcard * @card_id a list containing card ids * @card_name a list containing card names * @error an error that may occure * * Retrieve @card_id and @card_name as a list of strings. */ void ags_soundcard_list_cards(AgsSoundcard *soundcard, GList **card_id, GList **card_name) { AgsSoundcardInterface *soundcard_interface; g_return_if_fail(AGS_IS_SOUNDCARD(soundcard)); soundcard_interface = AGS_SOUNDCARD_GET_INTERFACE(soundcard); g_return_if_fail(soundcard_interface->list_cards); soundcard_interface->list_cards(soundcard, card_id, card_name); } /** * ags_soundcard_play: * @soundcard an #AgsSoundcard * @card_id the selected soundcard by its string identifier * @channels_min min channels supported * @channels_max max channels supported * @rate_min min samplerate supported * @rate_max max samplerate supported * @buffer_size_min min buffer size supported by soundcard * @buffer_size_max max buffer size supported by soundcard * @error an error that may occure * * Retrieve detailed information of @card_id soundcard. */ void ags_soundcard_pcm_info(AgsSoundcard *soundcard, gchar *card_id, guint *channels_min, guint *channels_max, guint *rate_min, guint *rate_max, guint *buffer_size_min, guint *buffer_size_max, GError **error) { AgsSoundcardInterface *soundcard_interface; g_return_if_fail(AGS_IS_SOUNDCARD(soundcard)); soundcard_interface = AGS_SOUNDCARD_GET_INTERFACE(soundcard); g_return_if_fail(soundcard_interface->pcm_info); soundcard_interface->pcm_info(soundcard, card_id, channels_min, channels_max, rate_min, rate_max, buffer_size_min, buffer_size_max, error); } /** * ags_soundcard_play: * @soundcard an #AgsSoundcard * @error an error that may occure * * Initializes the soundcard for playback. */ void ags_soundcard_play_init(AgsSoundcard *soundcard, GError **error) { AgsSoundcardInterface *soundcard_interface; g_return_if_fail(AGS_IS_SOUNDCARD(soundcard)); soundcard_interface = AGS_SOUNDCARD_GET_INTERFACE(soundcard); g_return_if_fail(soundcard_interface->play_init); soundcard_interface->play_init(soundcard, error); } /** * ags_soundcard_play: * @soundcard an #AgsSoundcard * @error an error that may occure * * Plays the current buffer of soundcard. */ void ags_soundcard_play(AgsSoundcard *soundcard, GError **error) { AgsSoundcardInterface *soundcard_interface; g_return_if_fail(AGS_IS_SOUNDCARD(soundcard)); soundcard_interface = AGS_SOUNDCARD_GET_INTERFACE(soundcard); g_return_if_fail(soundcard_interface->play); soundcard_interface->play(soundcard, error); } /** * ags_soundcard_stop: * @soundcard an #AgsSoundcard * * Stops the soundcard from playing to it. */ void ags_soundcard_stop(AgsSoundcard *soundcard) { AgsSoundcardInterface *soundcard_interface; g_return_if_fail(AGS_IS_SOUNDCARD(soundcard)); soundcard_interface = AGS_SOUNDCARD_GET_INTERFACE(soundcard); g_return_if_fail(soundcard_interface->stop); soundcard_interface->stop(soundcard); } /** * ags_soundcard_tic: * @soundcard an #AgsSoundcard * * Every call to play may generate a tic. */ void ags_soundcard_tic(AgsSoundcard *soundcard) { AgsSoundcardInterface *soundcard_interface; g_return_if_fail(AGS_IS_SOUNDCARD(soundcard)); soundcard_interface = AGS_SOUNDCARD_GET_INTERFACE(soundcard); g_return_if_fail(soundcard_interface->tic); soundcard_interface->tic(soundcard); } /** * ags_soundcard_tic: * @soundcard an #AgsSoundcard * * Callback when counter expires minor note offset. */ void ags_soundcard_offset_changed(AgsSoundcard *soundcard, guint note_offset) { AgsSoundcardInterface *soundcard_interface; g_return_if_fail(AGS_IS_SOUNDCARD(soundcard)); soundcard_interface = AGS_SOUNDCARD_GET_INTERFACE(soundcard); g_return_if_fail(soundcard_interface->offset_changed); soundcard_interface->offset_changed(soundcard, note_offset); } /** * ags_soundcard_get_buffer: * @soundcard an #AgsSoundcard * * Get current playback buffer. */ signed short* ags_soundcard_get_buffer(AgsSoundcard *soundcard) { AgsSoundcardInterface *soundcard_interface; g_return_val_if_fail(AGS_IS_SOUNDCARD(soundcard), NULL); soundcard_interface = AGS_SOUNDCARD_GET_INTERFACE(soundcard); g_return_val_if_fail(soundcard_interface->get_buffer, NULL); return(soundcard_interface->get_buffer(soundcard)); } /** * ags_soundcard_get_next_buffer: * @soundcard an #AgsSoundcard * * Get future playback buffer. */ signed short* ags_soundcard_get_next_buffer(AgsSoundcard *soundcard) { AgsSoundcardInterface *soundcard_interface; g_return_val_if_fail(AGS_IS_SOUNDCARD(soundcard), NULL); soundcard_interface = AGS_SOUNDCARD_GET_INTERFACE(soundcard); g_return_val_if_fail(soundcard_interface->get_next_buffer, NULL); return(soundcard_interface->get_next_buffer(soundcard)); } gsequencer-0.6.37/src/ags/object/ags_plugin.h0000644000175000017500000000603012621463700016001 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_PLUGIN_H__ #define __AGS_PLUGIN_H__ #include #include #define AGS_TYPE_PLUGIN (ags_plugin_get_type()) #define AGS_PLUGIN(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_PLUGIN, AgsPlugin)) #define AGS_PLUGIN_INTERFACE(vtable) (G_TYPE_CHECK_CLASS_CAST((vtable), AGS_TYPE_PLUGIN, AgsPluginInterface)) #define AGS_IS_PLUGIN(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_PLUGIN)) #define AGS_IS_PLUGIN_INTERFACE(vtable) (G_TYPE_CHECK_CLASS_TYPE((vtable), AGS_TYPE_PLUGIN)) #define AGS_PLUGIN_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE((obj), AGS_TYPE_PLUGIN, AgsPluginInterface)) typedef void AgsPlugin; typedef struct _AgsPluginInterface AgsPluginInterface; struct _AgsPluginInterface { GTypeInterface interface; gchar* (*get_name)(AgsPlugin *plugin); void (*set_name)(AgsPlugin *plugin, gchar *name); gchar* (*get_version)(AgsPlugin *plugin); void (*set_version)(AgsPlugin *plugin, gchar *version); gchar* (*get_build_id)(AgsPlugin *plugin); void (*set_build_id)(AgsPlugin *plugin, gchar *build_id); gchar* (*get_xml_type)(AgsPlugin *plugin); void (*set_xml_type)(AgsPlugin *plugin, gchar *xml_type); GList* (*get_ports)(AgsPlugin *plugin); void (*set_ports)(AgsPlugin *plugin, GList *ports); void (*read)(AgsFile *file, xmlNode *node, AgsPlugin *plugin); xmlNode* (*write)(AgsFile *file, xmlNode *parent, AgsPlugin *plugin); }; GType ags_plugin_get_type(); gchar* ags_plugin_get_name(AgsPlugin *plugin); void ags_plugin_set_name(AgsPlugin *plugin, gchar *name); gchar* ags_plugin_get_version(AgsPlugin *plugin); void ags_plugin_set_version(AgsPlugin *plugin, gchar *version); gchar* ags_plugin_get_build_id(AgsPlugin *plugin); void ags_plugin_set_build_id(AgsPlugin *plugin, gchar *build_id); gchar* ags_plugin_get_xml_type(AgsPlugin *plugin); void ags_plugin_set_xml_type(AgsPlugin *plugin, gchar *xml_type); GList* ags_plugin_get_ports(AgsPlugin *plugin); void ags_plugin_set_ports(AgsPlugin *plugin, GList *ports); void ags_plugin_read(AgsFile *file, xmlNode *node, AgsPlugin *plugin); xmlNode* ags_plugin_write(AgsFile *file, xmlNode *parent, AgsPlugin *plugin); #endif /*__AGS_PLUGIN_H__*/ gsequencer-0.6.37/src/ags/object/ags_playable.h0000644000175000017500000001116212626272146016305 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_PLAYABLE_H__ #define __AGS_PLAYABLE_H__ #include #include #define AGS_TYPE_PLAYABLE (ags_playable_get_type()) #define AGS_PLAYABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_PLAYABLE, AgsPlayable)) #define AGS_PLAYABLE_INTERFACE(vtable) (G_TYPE_CHECK_CLASS_CAST((vtable), AGS_TYPE_PLAYABLE, AgsPlayableInterface)) #define AGS_IS_PLAYABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_PLAYABLE)) #define AGS_IS_PLAYABLE_INTERFACE(vtable) (G_TYPE_CHECK_CLASS_TYPE((vtable), AGS_TYPE_PLAYABLE)) #define AGS_PLAYABLE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE((obj), AGS_TYPE_PLAYABLE, AgsPlayableInterface)) typedef void AgsPlayable; typedef struct _AgsPlayableInterface AgsPlayableInterface; #define AGS_PLAYABLE_ERROR (ags_playable_error_quark()) typedef enum{ AGS_PLAYABLE_ERROR_NO_SUCH_LEVEL, AGS_PLAYABLE_ERROR_NO_SAMPLE, }AgsPlayableError; struct _AgsPlayableInterface { GTypeInterface interface; gboolean (*open)(AgsPlayable *playable, gchar *name); gboolean (*rw_open)(AgsPlayable *playable, gchar *name, gboolean create, guint samplerate, guint channels, guint frames, guint format); /* these functions are especially for soundfonts */ guint (*level_count)(AgsPlayable *playable); guint (*nth_level)(AgsPlayable *playable); gchar* (*selected_level)(AgsPlayable *playable); gchar** (*sublevel_names)(AgsPlayable *playable); void (*level_select)(AgsPlayable *playable, guint nth_level, gchar *sublevel_name, GError **error); void (*level_up)(AgsPlayable *playable, guint levels, GError **error); void (*iter_start)(AgsPlayable *playable); gboolean (*iter_next)(AgsPlayable *playable); /* read sample data */ void (*info)(AgsPlayable *playable, guint *channels, guint *frames, guint *loop_start, guint *loop_end, GError **error); signed short* (*read)(AgsPlayable *playable, guint channel, GError **error); /* write sample data */ void (*write)(AgsPlayable *playable, signed short *buffer, guint buffer_length); void (*flush)(AgsPlayable *playable); /* position */ void (*seek)(AgsPlayable *playable, guint frames, gint whence); /* close */ void (*close)(AgsPlayable *playable); }; GType ags_playable_get_type(); GQuark ags_playable_error_quark(); gboolean ags_playable_open(AgsPlayable *playable, gchar *name); gboolean ags_playable_rw_open(AgsPlayable *playable, gchar *name, gboolean create, guint samplerate, guint channels, guint frames, guint format); guint ags_playable_level_count(AgsPlayable *playable); guint ags_playable_nth_level(AgsPlayable *playable); gchar* ags_playable_selected_level(AgsPlayable *playable); gchar** ags_playable_sublevel_names(AgsPlayable *playable); void ags_playable_level_select(AgsPlayable *playable, guint nth_level, gchar *sublevel_name, GError **error); void ags_playable_level_up(AgsPlayable *playable, guint levels, GError **error); void ags_playable_iter_start(AgsPlayable *playable); gboolean ags_playable_iter_next(AgsPlayable *playable); void ags_playable_info(AgsPlayable *playable, guint *channels, guint *frames, guint *loop_start, guint *loop_end, GError **error); signed short* ags_playable_read(AgsPlayable *playable, guint channel, GError **error); void ags_playable_write(AgsPlayable *playable, signed short *buffer, guint buffer_length); void ags_playable_flush(AgsPlayable *playable); void ags_playable_seek(AgsPlayable *playable, guint frames, gint whence); void ags_playable_close(AgsPlayable *playable); GList* ags_playable_read_audio_signal(AgsPlayable *playable, AgsDevout *devout, guint start_channel, guint channels); #endif /*__AGS_PLAYABLE_H__*/ gsequencer-0.6.37/src/ags/object/ags_async_queue.c0000644000175000017500000000756312626272146017042 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_async_queue_base_init(AgsAsyncQueueInterface *interface); /** * SECTION:ags_async_queue * @short_description: asynchronous run * @title: AgsAsyncQueue * @section_id: * @include: ags/object/ags_async_queue.h * * The #AgsAsyncQueue interface determines if it is safe to run. */ GType ags_async_queue_get_type() { static GType ags_type_async_queue = 0; if(!ags_type_async_queue){ static const GTypeInfo ags_async_queue_info = { sizeof(AgsAsyncQueueInterface), (GBaseInitFunc) ags_async_queue_base_init, NULL, /* base_finalize */ }; ags_type_async_queue = g_type_register_static(G_TYPE_INTERFACE, "AgsAsyncQueue\0", &ags_async_queue_info, 0); } return(ags_type_async_queue); } void ags_async_queue_base_init(AgsAsyncQueueInterface *interface) { /* empty */ } void ags_async_queue_set_run_mutex(AgsAsyncQueue *async_queue, pthread_mutex_t *run_mutex) { AgsAsyncQueueInterface *async_queue_interface; g_return_if_fail(AGS_IS_ASYNC_QUEUE(async_queue)); async_queue_interface = AGS_ASYNC_QUEUE_GET_INTERFACE(async_queue); g_return_if_fail(async_queue_interface->set_run_mutex); async_queue_interface->set_run_mutex(async_queue, run_mutex); } pthread_mutex_t* ags_async_queue_get_run_mutex(AgsAsyncQueue *async_queue) { AgsAsyncQueueInterface *async_queue_interface; g_return_val_if_fail(AGS_IS_ASYNC_QUEUE(async_queue), NULL); async_queue_interface = AGS_ASYNC_QUEUE_GET_INTERFACE(async_queue); g_return_val_if_fail(async_queue_interface->get_run_mutex, NULL); return(async_queue_interface->get_run_mutex(async_queue)); } void ags_async_queue_set_run_cond(AgsAsyncQueue *async_queue, pthread_cond_t *run_cond) { AgsAsyncQueueInterface *async_queue_interface; g_return_if_fail(AGS_IS_ASYNC_QUEUE(async_queue)); async_queue_interface = AGS_ASYNC_QUEUE_GET_INTERFACE(async_queue); g_return_if_fail(async_queue_interface->set_run_cond); async_queue_interface->set_run_cond(async_queue, run_cond); } pthread_cond_t* ags_async_queue_get_run_cond(AgsAsyncQueue *async_queue) { AgsAsyncQueueInterface *async_queue_interface; g_return_val_if_fail(AGS_IS_ASYNC_QUEUE(async_queue), NULL); async_queue_interface = AGS_ASYNC_QUEUE_GET_INTERFACE(async_queue); g_return_val_if_fail(async_queue_interface->get_run_cond, NULL); return(async_queue_interface->get_run_cond(async_queue)); } void ags_async_queue_set_run(AgsAsyncQueue *async_queue, gboolean is_run) { AgsAsyncQueueInterface *async_queue_interface; g_return_if_fail(AGS_IS_ASYNC_QUEUE(async_queue)); async_queue_interface = AGS_ASYNC_QUEUE_GET_INTERFACE(async_queue); g_return_if_fail(async_queue_interface->set_run); async_queue_interface->set_run(async_queue, is_run); } gboolean ags_async_queue_is_run(AgsAsyncQueue *async_queue) { AgsAsyncQueueInterface *async_queue_interface; g_return_val_if_fail(AGS_IS_ASYNC_QUEUE(async_queue), FALSE); async_queue_interface = AGS_ASYNC_QUEUE_GET_INTERFACE(async_queue); g_return_val_if_fail(async_queue_interface->is_run, FALSE); return(async_queue_interface->is_run(async_queue)); } gsequencer-0.6.37/src/ags/object/ags_applicable.h0000644000175000017500000000404212621463700016600 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_APPLICABLE_H__ #define __AGS_APPLICABLE_H__ #include #define AGS_TYPE_APPLICABLE (ags_applicable_get_type()) #define AGS_APPLICABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_APPLICABLE, AgsApplicable)) #define AGS_APPLICABLE_INTERFACE(vtable) (G_TYPE_CHECK_CLASS_CAST((vtable), AGS_TYPE_APPLICABLE, AgsApplicableInterface)) #define AGS_IS_APPLICABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_APPLICABLE)) #define AGS_IS_APPLICABLE_INTERFACE(vtable) (G_TYPE_CHECK_CLASS_TYPE((vtable), AGS_TYPE_APPLICABLE)) #define AGS_APPLICABLE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE((obj), AGS_TYPE_APPLICABLE, AgsApplicableInterface)) typedef void AgsApplicable; typedef struct _AgsApplicableInterface AgsApplicableInterface; struct _AgsApplicableInterface { GTypeInterface interface; void (*set_update)(AgsApplicable *applicable, gboolean update); void (*apply)(AgsApplicable *applicable); void (*reset)(AgsApplicable *applicable); }; GType ags_applicable_get_type(); void ags_applicable_set_update(AgsApplicable *applicable, gboolean update); void ags_applicable_apply(AgsApplicable *applicable); void ags_applicable_reset(AgsApplicable *applicable); #endif /*__AGS_APPLICABLE_H__*/ gsequencer-0.6.37/src/ags/object/ags_mutable.h0000644000175000017500000000344712626272146016154 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_MUTABLE_H__ #define __AGS_MUTABLE_H__ #include #include #define AGS_TYPE_MUTABLE (ags_mutable_get_type()) #define AGS_MUTABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_MUTABLE, AgsMutable)) #define AGS_MUTABLE_INTERFACE(vtable) (G_TYPE_CHECK_CLASS_CAST((vtable), AGS_TYPE_MUTABLE, AgsMutableInterface)) #define AGS_IS_MUTABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_MUTABLE)) #define AGS_IS_MUTABLE_INTERFACE(vtable) (G_TYPE_CHECK_CLASS_TYPE((vtable), AGS_TYPE_MUTABLE)) #define AGS_MUTABLE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE((obj), AGS_TYPE_MUTABLE, AgsMutableInterface)) typedef void AgsMutable; typedef struct _AgsMutableInterface AgsMutableInterface; struct _AgsMutableInterface { GTypeInterface interface; void (*set_muted)(AgsMutable *mutable, gboolean muted); }; GType ags_mutable_get_type(); void ags_mutable_set_muted(AgsMutable *mutable, gboolean muted); #endif /*__AGS_MUTABLE_H__*/ gsequencer-0.6.37/src/ags/object/ags_effect.h0000644000175000017500000000321212621463700015736 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_EFFECT_H__ #define __AGS_EFFECT_H__ #include #include #define AGS_TYPE_EFFECT (ags_effect_get_type()) #define AGS_EFFECT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_EFFECT, AgsEffect)) #define AGS_EFFECT_INTERFACE(vtable) (G_TYPE_CHECK_CLASS_CAST((vtable), AGS_TYPE_EFFECT, AgsEffectInterface)) #define AGS_IS_EFFECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_EFFECT)) #define AGS_IS_EFFECT_INTERFACE(vtable) (G_TYPE_CHECK_CLASS_TYPE((vtable), AGS_TYPE_EFFECT)) #define AGS_EFFECT_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE((obj), AGS_TYPE_EFFECT, AgsEffectInterface)) typedef void AgsEffect; typedef struct _AgsEffectInterface AgsEffectInterface; struct _AgsEffectInterface { GTypeInterface interface; }; GType ags_effect_get_type(); #endif /*__AGS_EFFECT_H__*/ gsequencer-0.6.37/src/ags/object/ags_stackable.c0000644000175000017500000000372712621463700016441 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_stackable_base_init(AgsStackableInterface *interface); GType ags_stackable_get_type() { static GType ags_type_stackable = 0; if(!ags_type_stackable){ static const GTypeInfo ags_stackable_info = { sizeof(AgsStackableInterface), (GBaseInitFunc) ags_stackable_base_init, NULL, /* base_finalize */ }; ags_type_stackable = g_type_register_static(G_TYPE_INTERFACE, "AgsStackable\0", &ags_stackable_info, 0); } return(ags_type_stackable); } void ags_stackable_base_init(AgsStackableInterface *interface) { /* empty */ } void ags_stackable_push(AgsStackable *stackable) { AgsStackableInterface *stackable_interface; g_return_if_fail(AGS_IS_STACKABLE(stackable)); stackable_interface = AGS_STACKABLE_GET_INTERFACE(stackable); g_return_if_fail(stackable_interface->push); stackable_interface->push(stackable); } void ags_stackable_pop(AgsStackable *stackable) { AgsStackableInterface *stackable_interface; g_return_if_fail(AGS_IS_STACKABLE(stackable)); stackable_interface = AGS_STACKABLE_GET_INTERFACE(stackable); g_return_if_fail(stackable_interface->pop); stackable_interface->pop(stackable); } gsequencer-0.6.37/src/ags/object/ags_tactable.c0000644000175000017500000001231012621463700016253 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_tactable_class_init(AgsTactableInterface *interface); /** * SECTION:ags_tactable * @short_description: Unique tempo set or attributes access * @title: AgsTactable * @section_id: * @include: ags/object/ags_tactable.h * * The #AgsTactable interface gives you a unique access to modify tempo. */ GType ags_tactable_get_type() { static GType tactable_type = 0; if(!tactable_type){ tactable_type = g_type_register_static_simple (G_TYPE_INTERFACE, "AgsTactable\0", sizeof (AgsTactableInterface), (GClassInitFunc) ags_tactable_class_init, 0, NULL, 0); } return tactable_type; } void ags_tactable_class_init(AgsTactableInterface *interface) { /** * AgsTactable::change-sequencer-duration: * @tactable: the object * @duration: new duration * * The ::change-sequencer-duration signal notifies about changed duration * of sequencer. */ g_signal_new("change_sequencer_duration\0", G_TYPE_FROM_INTERFACE(interface), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsTactableInterface, change_sequencer_duration), NULL, NULL, g_cclosure_marshal_VOID__DOUBLE, G_TYPE_NONE, 1, G_TYPE_DOUBLE); /** * AgsTactable::change-notation-duration: * @tactable: the object * @duration: new duration * * The ::change-notation-duration signal notifies about changed duration * of notation. */ g_signal_new("change_notation_duration\0", G_TYPE_FROM_INTERFACE(interface), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsTactableInterface, change_notation_duration), NULL, NULL, g_cclosure_marshal_VOID__DOUBLE, G_TYPE_NONE, 1, G_TYPE_DOUBLE); /** * AgsTactable::change-tact * @tactable: the object * @tact: new tact * * The ::change-tact signal notifies about changed tact. */ g_signal_new("change_tact\0", G_TYPE_FROM_INTERFACE(interface), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsTactableInterface, change_tact), NULL, NULL, g_cclosure_marshal_VOID__DOUBLE, G_TYPE_NONE, 1, G_TYPE_DOUBLE); /** * AgsTactable::change-bpm: * @tactable: the object * @duration: new duration * * The ::change-bpm signal notifies about changed bpm. */ g_signal_new("change_bpm\0", G_TYPE_FROM_INTERFACE(interface), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsTactableInterface, change_bpm), NULL, NULL, g_cclosure_marshal_VOID__DOUBLE, G_TYPE_NONE, 1, G_TYPE_DOUBLE); } /** * ags_tactable_change_sequencer_duration: * @tactable: an #AgsTactable * @duration: the duration * * Sequencer duration changed. */ void ags_tactable_change_sequencer_duration(AgsTactable *tactable, double duration) { AgsTactableInterface *tactable_interface; g_return_if_fail(AGS_IS_TACTABLE(tactable)); tactable_interface = AGS_TACTABLE_GET_INTERFACE(tactable); g_return_if_fail(tactable_interface->change_sequencer_duration); tactable_interface->change_sequencer_duration(tactable, duration); } /** * ags_tactable_change_notation_duration: * @tactable: an #AgsTactable * @duration: the duration * * Notation duration changed. */ void ags_tactable_change_notation_duration(AgsTactable *tactable, double duration) { AgsTactableInterface *tactable_interface; g_return_if_fail(AGS_IS_TACTABLE(tactable)); tactable_interface = AGS_TACTABLE_GET_INTERFACE(tactable); g_return_if_fail(tactable_interface->change_notation_duration); tactable_interface->change_notation_duration(tactable, duration); } /** * ags_tactable_change_tact: * @tactable: an #AgsTactable * @tact: the tact * * Tact changed. */ void ags_tactable_change_tact(AgsTactable *tactable, double tact) { AgsTactableInterface *tactable_interface; g_return_if_fail(AGS_IS_TACTABLE(tactable)); tactable_interface = AGS_TACTABLE_GET_INTERFACE(tactable); g_return_if_fail(tactable_interface->change_tact); tactable_interface->change_tact(tactable, tact); } /** * ags_tactable_change_bpm: * @tactable: an #AgsTactable * @bpm: the bpm * * Bpm changed. */ void ags_tactable_change_bpm(AgsTactable *tactable, double bpm) { AgsTactableInterface *tactable_interface; g_return_if_fail(AGS_IS_TACTABLE(tactable)); tactable_interface = AGS_TACTABLE_GET_INTERFACE(tactable); g_return_if_fail(tactable_interface->change_bpm); tactable_interface->change_bpm(tactable, bpm); } gsequencer-0.6.37/src/ags/object/ags_tree_iterator.c0000644000175000017500000000761212621463700017355 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_tree_iterator_base_init(AgsTreeIteratorInterface *interface); GType ags_tree_iterator_get_type() { static GType ags_type_tree_iterator = 0; if(!ags_type_tree_iterator){ static const GTypeInfo ags_tree_iterator_info = { sizeof(AgsTreeIteratorInterface), (GBaseInitFunc) ags_tree_iterator_base_init, NULL, /* base_finalize */ }; ags_type_tree_iterator = g_type_register_static(G_TYPE_INTERFACE, "AgsTreeIterator\0", &ags_tree_iterator_info, 0); } return(ags_type_tree_iterator); } void ags_tree_iterator_base_init(AgsTreeIteratorInterface *interface) { /* empty */ } void ags_tree_iterator_set_inverse_mode(AgsTreeIterator *tree_iterator, gboolean mode) { AgsTreeIteratorInterface *tree_iterator_interface; g_return_if_fail(AGS_IS_TREE_ITERATOR(tree_iterator)); tree_iterator_interface = AGS_TREE_ITERATOR_GET_INTERFACE(tree_iterator); g_return_if_fail(tree_iterator_interface->set_inverse_mode); tree_iterator_interface->set_inverse_mode(tree_iterator, mode); } gboolean ags_tree_iterator_is_inverse_mode(AgsTreeIterator *tree_iterator) { AgsTreeIteratorInterface *tree_iterator_interface; g_return_val_if_fail(AGS_IS_TREE_ITERATOR(tree_iterator), FALSE); tree_iterator_interface = AGS_TREE_ITERATOR_GET_INTERFACE(tree_iterator); g_return_val_if_fail(tree_iterator_interface->is_inverse_mode, FALSE); tree_iterator_interface->is_inverse_mode(tree_iterator); } void ags_tree_iterator_iterate(AgsTreeIterator *tree_iterator, gpointer node_id) { AgsTreeIteratorInterface *tree_iterator_interface; g_return_if_fail(AGS_IS_TREE_ITERATOR(tree_iterator)); tree_iterator_interface = AGS_TREE_ITERATOR_GET_INTERFACE(tree_iterator); g_return_if_fail(tree_iterator_interface->iterate); tree_iterator_interface->iterate(tree_iterator, node_id); } void ags_tree_iterator_iterate_nested(AgsTreeIterator *tree_iterator, gpointer node_id) { AgsTreeIteratorInterface *tree_iterator_interface; g_return_if_fail(AGS_IS_TREE_ITERATOR(tree_iterator)); tree_iterator_interface = AGS_TREE_ITERATOR_GET_INTERFACE(tree_iterator); g_return_if_fail(tree_iterator_interface->iterate_nested); tree_iterator_interface->iterate_nested(tree_iterator, node_id); } void ags_tree_iterator_safe_iterate(AgsTreeIterator *toplevel, AgsTreeIterator *current, gpointer node_id) { AgsTreeIteratorInterface *tree_iterator_interface; g_return_if_fail(AGS_IS_TREE_ITERATOR(toplevel)); tree_iterator_interface = AGS_TREE_ITERATOR_GET_INTERFACE(toplevel); g_return_if_fail(tree_iterator_interface->iterate); tree_iterator_interface->safe_iterate(toplevel, current, node_id); } void ags_tree_iterator_safe_iterate_nested(AgsTreeIterator *toplevel, AgsTreeIterator *current, gpointer node_id) { AgsTreeIteratorInterface *tree_iterator_interface; g_return_if_fail(AGS_IS_TREE_ITERATOR(toplevel)); tree_iterator_interface = AGS_TREE_ITERATOR_GET_INTERFACE(toplevel); g_return_if_fail(tree_iterator_interface->iterate); tree_iterator_interface->safe_iterate_nested(toplevel, current, node_id); } gsequencer-0.6.37/src/ags/object/ags_mutable.c0000644000175000017500000000410712626272146016141 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include void ags_mutable_base_init(AgsMutableInterface *interface); /** * SECTION:ags_mutable * @short_description: unique access to dialogs * @title: AgsMutable * @section_id: * @include: ags/object/ags_mutable.h * * The #AgsMutable interface gives you a unique access to recalls. Its * purpose is to mute playback. */ GType ags_mutable_get_type() { static GType ags_type_mutable = 0; if(!ags_type_mutable){ static const GTypeInfo ags_mutable_info = { sizeof(AgsMutableInterface), (GBaseInitFunc) ags_mutable_base_init, NULL, /* base_finalize */ }; ags_type_mutable = g_type_register_static(G_TYPE_INTERFACE, "AgsMutable\0", &ags_mutable_info, 0); } return(ags_type_mutable); } void ags_mutable_base_init(AgsMutableInterface *interface) { /* empty */ } /** * ags_mutable_set_update: * @mutable: an #AgsMutable * @update: if %TRUE then muted, else playing * * Mute an #AgsChannel within run iteration. * * Since: 0.4 */ void ags_mutable_set_muted(AgsMutable *mutable, gboolean muted) { AgsMutableInterface *mutable_interface; g_return_if_fail(AGS_IS_MUTABLE(mutable)); mutable_interface = AGS_MUTABLE_GET_INTERFACE(mutable); g_return_if_fail(mutable_interface->set_muted); mutable_interface->set_muted(mutable, muted); } gsequencer-0.6.37/src/ags/object/ags_soundcard.h0000644000175000017500000000600012626272146016471 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_SOUNDCARD_H__ #define __AGS_SOUNDCARD_H__ #include #include #define AGS_TYPE_SOUNDCARD (ags_soundcard_get_type()) #define AGS_SOUNDCARD(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_SOUNDCARD, AgsSoundcard)) #define AGS_SOUNDCARD_INTERFACE(vtable) (G_TYPE_CHECK_CLASS_CAST((vtable), AGS_TYPE_SOUNDCARD, AgsSoundcardInterface)) #define AGS_IS_SOUNDCARD(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_SOUNDCARD)) #define AGS_IS_SOUNDCARD_INTERFACE(vtable) (G_TYPE_CHECK_CLASS_TYPE((vtable), AGS_TYPE_SOUNDCARD)) #define AGS_SOUNDCARD_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE((obj), AGS_TYPE_SOUNDCARD, AgsSoundcardInterface)) typedef void AgsSoundcard; typedef struct _AgsSoundcardInterface AgsSoundcardInterface; struct _AgsSoundcardInterface { GTypeInterface interface; void (*list_cards)(AgsSoundcard *soundcard, GList **card_id, GList **card_name); void (*pcm_info)(AgsSoundcard *soundcard, gchar *card_id, guint *channels_min, guint *channels_max, guint *rate_min, guint *rate_max, guint *buffer_size_min, guint *buffer_size_max, GError **error); void (*play_init)(AgsSoundcard *soundcard, GError **error); void (*play)(AgsSoundcard *soundcard, GError **error); void (*stop)(AgsSoundcard *soundcard); void (*tic)(AgsSoundcard *soundcard); void (*offset_changed)(AgsSoundcard *soundcard, guint note_offset); signed short* (*get_buffer)(AgsSoundcard *soundcard); signed short* (*get_next_buffer)(AgsSoundcard *soundcard); }; GType ags_soundcard_get_type(); void ags_soundcard_list_cards(AgsSoundcard *soundcard, GList **card_id, GList **card_name); void ags_soundcard_pcm_info(AgsSoundcard *soundcard, gchar *card_id, guint *channels_min, guint *channels_max, guint *rate_min, guint *rate_max, guint *buffer_size_min, guint *buffer_size_max, GError **error); void ags_soundcard_tic(AgsSoundcard *soundcard); void ags_soundcard_offset_changed(AgsSoundcard *soundcard, guint note_offset); signed short* ags_soundcard_get_buffer(AgsSoundcard *soundcard); signed short* ags_soundcard_get_next_buffer(AgsSoundcard *soundcard); #endif /*__AGS_SOUNDCARD_H__*/ gsequencer-0.6.37/src/ags/audio/0000755000175000017500000000000012633241335013415 500000000000000gsequencer-0.6.37/src/ags/audio/ags_recall_id.h0000644000175000017500000000602612626272146016270 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_RECALL_ID_H__ #define __AGS_RECALL_ID_H__ #include #include #include #include #define AGS_TYPE_RECALL_ID (ags_recall_id_get_type ()) #define AGS_RECALL_ID(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), AGS_TYPE_RECALL_ID, AgsRecallID)) #define AGS_RECALL_ID_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), AGS_TYPE_RECALL_ID, AgsRecallIDClass)) #define AGS_IS_RECALL_ID(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_RECALL_ID)) #define AGS_IS_RECALL_ID_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_RECALL_ID)) #define AGS_RECALL_ID_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_RECALL_ID, AgsRecallIDClass)) typedef struct _AgsRecallID AgsRecallID; typedef struct _AgsRecallIDClass AgsRecallIDClass; typedef enum{ AGS_RECALL_ID_PLAYBACK = 1, AGS_RECALL_ID_SEQUENCER = 1 << 1, AGS_RECALL_ID_NOTATION = 1 << 2, AGS_RECALL_ID_DUPLICATE = 1 << 3, AGS_RECALL_ID_RESOLVE = 1 << 4, AGS_RECALL_ID_INIT_PRE = 1 << 5, AGS_RECALL_ID_INIT_INTER = 1 << 6, AGS_RECALL_ID_INIT_POST = 1 << 7, AGS_RECALL_ID_PRE = 1 << 8, AGS_RECALL_ID_INTER = 1 << 9, AGS_RECALL_ID_POST = 1 << 10, AGS_RECALL_ID_CANCEL = 1 << 11, }AgsRecallIDFlags; struct _AgsRecallID { GObject object; guint flags; GObject *recycling; AgsRecyclingContainer *recycling_container; }; struct _AgsRecallIDClass { GObjectClass object; }; GType ags_recall_id_get_type(void); gboolean ags_recall_id_get_run_stage(AgsRecallID *id, gint stage); void ags_recall_id_set_run_stage(AgsRecallID *recall_id, gint stage); void ags_recall_id_unset_run_stage(AgsRecallID *recall_id, gint stage); AgsRecallID* ags_recall_id_find_recycling_container(GList *recall_id_list, AgsRecyclingContainer *recycling_container); AgsRecallID* ags_recall_id_find_parent_recycling_container(GList *recall_id_list, AgsRecyclingContainer *parent_recycling_container); GList* ags_recall_id_add(GList *recall_id_list, AgsRecallID *recall_id); AgsRecallID* ags_recall_id_new(AgsRecycling *recycling); #endif /*__AGS_RECALL_ID_H__*/ gsequencer-0.6.37/src/ags/audio/ags_recall_id.c0000644000175000017500000002404312626272146016262 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include void ags_recall_id_class_init(AgsRecallIDClass *recall_id); void ags_recall_id_connectable_interface_init(AgsConnectableInterface *connectable); void ags_recall_id_init(AgsRecallID *recall_id); void ags_recall_id_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_recall_id_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_recall_id_connect(AgsConnectable *connectable); void ags_recall_id_disconnect(AgsConnectable *connectable); void ags_recall_id_finalize(GObject *gobject); /** * SECTION:ags_recall_id * @short_description: The object specifies run context. * @title: AgsRecallID * @section_id: * @include: ags/audio/ags_recall_id.h * * #AgsRecallID acts as dynamic context identifier. */ enum{ PROP_0, PROP_RECYCLING, PROP_RECYCLING_CONTAINER, }; static gpointer ags_recall_id_parent_class = NULL; GType ags_recall_id_get_type(void) { static GType ags_type_recall_id = 0; if(!ags_type_recall_id){ static const GTypeInfo ags_recall_id_info = { sizeof (AgsRecallIDClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_recall_id_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsRecallID), 0, /* n_preallocs */ (GInstanceInitFunc) ags_recall_id_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_recall_id_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_recall_id = g_type_register_static(G_TYPE_OBJECT, "AgsRecallID\0", &ags_recall_id_info, 0); g_type_add_interface_static(ags_type_recall_id, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_recall_id); } void ags_recall_id_class_init(AgsRecallIDClass *recall_id) { GObjectClass *gobject; GParamSpec *param_spec; ags_recall_id_parent_class = g_type_class_peek_parent(recall_id); /* GObjectClass */ gobject = (GObjectClass *) recall_id; gobject->set_property = ags_recall_id_set_property; gobject->get_property = ags_recall_id_get_property; gobject->finalize = ags_recall_id_finalize; /* properties */ /** * AgsRecallID:recycling: * * The assigned #AgsRecycling. * * Since: 0.4.0 */ param_spec = g_param_spec_object("recycling\0", "assigned recycling\0", "The recycling it is assigned with\0", G_TYPE_OBJECT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_RECYCLING, param_spec); /** * AgsRecallID:recycling-container: * * The dynamic run context belonging to. * * Since: 0.4.0 */ param_spec = g_param_spec_object("recycling-container\0", "assigned recycling container\0", "The recycling container it is assigned with\0", G_TYPE_OBJECT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_RECYCLING_CONTAINER, param_spec); } void ags_recall_id_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->connect = ags_recall_id_connect; connectable->disconnect = ags_recall_id_disconnect; } void ags_recall_id_init(AgsRecallID *recall_id) { recall_id->flags = 0; recall_id->recycling = NULL; recall_id->recycling_container = NULL; } void ags_recall_id_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsRecallID *recall_id; recall_id = AGS_RECALL_ID(gobject); switch(prop_id){ case PROP_RECYCLING: { AgsRecycling *recycling; recycling = g_value_get_object(value); if(recall_id->recycling == (GObject *) recycling) return; if(recall_id->recycling != NULL){ g_object_unref(recycling); } if(recycling != NULL){ g_object_ref(recycling); } recall_id->recycling = (GObject *) recycling; } break; case PROP_RECYCLING_CONTAINER: { AgsRecyclingContainer *recycling_container; recycling_container = g_value_get_object(value); if(recall_id->recycling_container == recycling_container) return; if(recall_id->recycling_container != NULL){ g_object_unref(recall_id->recycling_container); } if(recycling_container != NULL){ g_object_ref(recycling_container); } recall_id->recycling_container = recycling_container; } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_recall_id_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsRecallID *recall_id; recall_id = AGS_RECALL_ID(gobject); switch(prop_id){ case PROP_RECYCLING: g_value_set_object(value, recall_id->recycling); break; case PROP_RECYCLING_CONTAINER: g_value_set_object(value, recall_id->recycling_container); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_recall_id_connect(AgsConnectable *connectable) { } void ags_recall_id_disconnect(AgsConnectable *connectable) { } void ags_recall_id_finalize(GObject *gobject) { g_warning("ags_recall_id_finalize\0"); G_OBJECT_CLASS(ags_recall_id_parent_class)->finalize(gobject); } /** * ags_recall_id_get_run_stage: * @id: the #AgsRecallID to check * @stage: the current run stage to check against * * Check if a run stage already has been passed for current run. This * function is intended to handle AGS_AUDIO_ASYNC correctly. * * Returns: %TRUE if the stage isn't run yet otherwise %FALSE * * Since: 0.3 */ gboolean ags_recall_id_get_run_stage(AgsRecallID *id, gint stage) { switch(stage){ case 0: if((AGS_RECALL_ID_PRE & (id->flags)) == 0) return(TRUE); break; case 1: if((AGS_RECALL_ID_INTER & (id->flags)) == 0) return(TRUE); break; case 2: if((AGS_RECALL_ID_POST & (id->flags)) == 0) return(TRUE); break; } return(FALSE); } /** * ags_recall_id_set_run_stage: * @recall_id: the #AgsRecallID which has been passed * @stage: the run stage the networked channels are in * * Marks the run stage to be passed for audio channel. * * Since: 0.3 */ void ags_recall_id_set_run_stage(AgsRecallID *recall_id, gint stage) { guint i; if(stage == 0){ recall_id->flags |= AGS_RECALL_ID_PRE; }else if(stage == 1){ recall_id->flags |= AGS_RECALL_ID_INTER; }else{ recall_id->flags |= AGS_RECALL_ID_POST; } } /** * ags_recall_id_unset_run_stage: * @recall_id: the #AgsRecallID which has been passed * @stage: the run stage the networked channels are in * * Unmarks the run stage to be passed for audio channel. * * Since: 0.3 */ void ags_recall_id_unset_run_stage(AgsRecallID *recall_id, gint stage) { if(stage == 0){ recall_id->flags &= (~AGS_RECALL_ID_PRE); }else if(stage == 1){ recall_id->flags &= (~AGS_RECALL_ID_INTER); }else{ recall_id->flags &= (~AGS_RECALL_ID_POST); } } /** * ags_recall_id_add: * @recall_id_list: the #GList the new #AgsRecallID should be added * @recall_id: the #AgsRecallID to add * * Adds an #AgsRecallID with given properties to the passed #GList. * * Returns: the newly allocated #GList which is the new start of the #GList, too. * * Since: 0.4 */ GList* ags_recall_id_add(GList *recall_id_list, AgsRecallID *recall_id) { GList *list; list = g_list_prepend(recall_id_list, (gpointer) recall_id); return(list); } /** * ags_recall_id_find_recycling_container: * @recall_id_list: a #GList containing #AgsRecallID * @recycling_container: the #AgsRecyclingContainer to match * * Retrieve recall id by recycling container. * * Returns: Matching recall id. * * Since: 0.4 */ AgsRecallID* ags_recall_id_find_recycling_container(GList *recall_id_list, AgsRecyclingContainer *recycling_container) { AgsRecallID *recall_id; while(recall_id_list != NULL){ recall_id = AGS_RECALL_ID(recall_id_list->data); if(recall_id->recycling_container == recycling_container){ return(recall_id); } recall_id_list = recall_id_list->next; } return(NULL); } /** * ags_recall_id_find_parent_recycling_container: * @recall_id_list: a #GList containing #AgsRecallID * @recycling_container: the #AgsRecyclingContainer to match * * Retrieve recall id by recycling container. * * Returns: Matching recall id. * * Since: 0.4 */ AgsRecallID* ags_recall_id_find_parent_recycling_container(GList *recall_id_list, AgsRecyclingContainer *parent_recycling_container) { AgsRecallID *recall_id; while(recall_id_list != NULL){ recall_id = AGS_RECALL_ID(recall_id_list->data); if(recall_id->recycling_container->parent == parent_recycling_container){ return(recall_id); } recall_id_list = recall_id_list->next; } return(NULL); } /** * ags_recall_id_new: * @recycling: * * Creates a #AgsRecallID, assigned to @recycling * * Returns: a new #AgsRecallID * * Since: 0.3 */ AgsRecallID* ags_recall_id_new(AgsRecycling *recycling) { AgsRecallID *recall_id; recall_id = (AgsRecallID *) g_object_new(AGS_TYPE_RECALL_ID, NULL); return(recall_id); } gsequencer-0.6.37/src/ags/audio/ags_timestamp.c0000644000175000017500000000512512626272146016347 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include void ags_timestamp_class_init(AgsTimestampClass *timestamp); void ags_timestamp_init (AgsTimestamp *timestamp); void ags_timestamp_finalize(GObject *gobject); /** * SECTION:ags_timestamp * @short_description: Timestamp unix and alike * @title: AgsTimestamp * @section_id: * @include: ags/audio/ags_timestamp.h * * #AgsTimestamp measure of time. */ static gpointer ags_timestamp_parent_class = NULL; GType ags_timestamp_get_type (void) { static GType ags_type_timestamp = 0; if(!ags_type_timestamp){ static const GTypeInfo ags_timestamp_info = { sizeof (AgsTimestampClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_timestamp_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsTimestamp), 0, /* n_preallocs */ (GInstanceInitFunc) ags_timestamp_init, }; ags_type_timestamp = g_type_register_static(G_TYPE_OBJECT, "AgsTimestamp\0", &ags_timestamp_info, 0); } return (ags_type_timestamp); } void ags_timestamp_class_init(AgsTimestampClass *timestamp) { GObjectClass *gobject; ags_timestamp_parent_class = g_type_class_peek_parent(timestamp); /* GObjectClass */ gobject = (GObjectClass *) timestamp; gobject->finalize = ags_timestamp_finalize; } void ags_timestamp_init(AgsTimestamp *timestamp) { timestamp->flags = 0; time(&(timestamp->timer.unix_time.time_val)); timestamp->delay = 0; timestamp->attack = 0; } void ags_timestamp_finalize(GObject *gobject) { /* empty */ } /** * ags_timestamp_new: * * Creates an #AgsTimestamp * * Returns: a new #AgsTimestamp * * Since: 0.4 */ AgsTimestamp* ags_timestamp_new() { AgsTimestamp *timestamp; timestamp = (AgsTimestamp *) g_object_new(AGS_TYPE_TIMESTAMP, NULL); return(timestamp); } gsequencer-0.6.37/src/ags/audio/ags_recall_recycling_dummy.c0000644000175000017500000002005112626272146021053 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include void ags_recall_recycling_dummy_class_init(AgsRecallRecyclingDummyClass *recall_recycling_dummy); void ags_recall_recycling_dummy_connectable_interface_init(AgsConnectableInterface *connectable); void ags_recall_recycling_dummy_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable); void ags_recall_recycling_dummy_init(AgsRecallRecyclingDummy *recall_recycling_dummy); void ags_recall_recycling_dummy_connect(AgsConnectable *connectable); void ags_recall_recycling_dummy_disconnect(AgsConnectable *connectable); void ags_recall_recycling_dummy_connect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_recall_recycling_dummy_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_recall_recycling_dummy_finalize(GObject *gobject); AgsRecall* ags_recall_recycling_dummy_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter); /** * SECTION:ags_recall_recycling_dummy * @short_description: recycling dummy dynamic context of recall * @title: AgsRecallRecyclingDummy * @section_id: * @include: ags/audio/ags_recall_recycling_dummy.h * * #AgsRecallRecyclingDummy acts as recycling dummy dynamic recall. */ static gpointer ags_recall_recycling_dummy_parent_class = NULL; static AgsConnectableInterface *ags_recall_recycling_dummy_parent_connectable_interface; static AgsDynamicConnectableInterface *ags_recall_recycling_dummy_parent_dynamic_connectable_interface; GType ags_recall_recycling_dummy_get_type() { static GType ags_type_recall_recycling_dummy = 0; if(!ags_type_recall_recycling_dummy){ static const GTypeInfo ags_recall_recycling_dummy_info = { sizeof (AgsRecallRecyclingDummyClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_recall_recycling_dummy_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsRecallRecyclingDummy), 0, /* n_preallocs */ (GInstanceInitFunc) ags_recall_recycling_dummy_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_recall_recycling_dummy_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_dynamic_connectable_interface_info = { (GInterfaceInitFunc) ags_recall_recycling_dummy_dynamic_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_recall_recycling_dummy = g_type_register_static(AGS_TYPE_RECALL_RECYCLING, "AgsRecallRecyclingDummy\0", &ags_recall_recycling_dummy_info, 0); g_type_add_interface_static(ags_type_recall_recycling_dummy, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_recall_recycling_dummy, AGS_TYPE_DYNAMIC_CONNECTABLE, &ags_dynamic_connectable_interface_info); } return (ags_type_recall_recycling_dummy); } void ags_recall_recycling_dummy_class_init(AgsRecallRecyclingDummyClass *recall_recycling_dummy) { GObjectClass *gobject; AgsRecallClass *recall; GParamSpec *param_spec; ags_recall_recycling_dummy_parent_class = g_type_class_peek_parent(recall_recycling_dummy); /* GObjectClass */ gobject = (GObjectClass *) recall_recycling_dummy; gobject->finalize = ags_recall_recycling_dummy_finalize; /* AgsRecallClass */ recall = (AgsRecallClass *) recall_recycling_dummy; recall->duplicate = ags_recall_recycling_dummy_duplicate; } void ags_recall_recycling_dummy_connectable_interface_init(AgsConnectableInterface *connectable) { ags_recall_recycling_dummy_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_recall_recycling_dummy_connect; connectable->disconnect = ags_recall_recycling_dummy_disconnect; } void ags_recall_recycling_dummy_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable) { ags_recall_recycling_dummy_parent_dynamic_connectable_interface = g_type_interface_peek_parent(dynamic_connectable); dynamic_connectable->connect_dynamic = ags_recall_recycling_dummy_connect_dynamic; dynamic_connectable->disconnect_dynamic = ags_recall_recycling_dummy_disconnect_dynamic; } void ags_recall_recycling_dummy_init(AgsRecallRecyclingDummy *recall_recycling_dummy) { AGS_RECALL(recall_recycling_dummy)->name = "ags-recall\0"; AGS_RECALL(recall_recycling_dummy)->version = AGS_EFFECTS_DEFAULT_VERSION; AGS_RECALL(recall_recycling_dummy)->build_id = AGS_BUILD_ID; AGS_RECALL(recall_recycling_dummy)->xml_type = "ags-recall-recycling-dummy\0"; AGS_RECALL(recall_recycling_dummy)->port = NULL; AGS_RECALL(recall_recycling_dummy)->flags |= AGS_RECALL_PERSISTENT; AGS_RECALL(recall_recycling_dummy)->child_type = G_TYPE_NONE; } void ags_recall_recycling_dummy_finalize(GObject *gobject) { /* empty */ /* call parent */ G_OBJECT_CLASS(ags_recall_recycling_dummy_parent_class)->finalize(gobject); } void ags_recall_recycling_dummy_connect(AgsConnectable *connectable) { AgsRecallRecyclingDummy *recall_recycling_dummy; recall_recycling_dummy = AGS_RECALL_RECYCLING_DUMMY(connectable); ags_recall_recycling_dummy_parent_connectable_interface->connect(connectable); /* empty */ } void ags_recall_recycling_dummy_disconnect(AgsConnectable *connectable) { ags_recall_recycling_dummy_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_recall_recycling_dummy_connect_dynamic(AgsDynamicConnectable *dynamic_connectable) { AgsRecallRecyclingDummy *recall_recycling_dummy; ags_recall_recycling_dummy_parent_dynamic_connectable_interface->connect_dynamic(dynamic_connectable); } void ags_recall_recycling_dummy_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable) { ags_recall_recycling_dummy_parent_dynamic_connectable_interface->disconnect_dynamic(dynamic_connectable); } AgsRecall* ags_recall_recycling_dummy_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter) { AgsRecallRecyclingDummy *copy; copy = (AgsRecallRecyclingDummy *) AGS_RECALL_CLASS(ags_recall_recycling_dummy_parent_class)->duplicate(recall, recall_id, n_params, parameter); AGS_RECALL(copy)->child_type = recall->child_type; return((AgsRecall *) copy); } /** * ags_recall_recycling_dummy_new: * @source the source #AgsRecycling * @child_type child type * * Creates an #AgsRecallRecyclingDummy. * * Returns: a new #AgsRecallRecyclingDummy. * * Since: 0.4 */ AgsRecallRecyclingDummy* ags_recall_recycling_dummy_new(AgsRecycling *recycling, GType child_type) { AgsRecallRecyclingDummy *recall_recycling_dummy; recall_recycling_dummy = (AgsRecallRecyclingDummy *) g_object_new(AGS_TYPE_RECALL_RECYCLING_DUMMY, "source\0", recycling, NULL); AGS_RECALL(recall_recycling_dummy)->child_type = child_type; return(recall_recycling_dummy); } gsequencer-0.6.37/src/ags/audio/ags_recall_audio.c0000644000175000017500000002317312626272146016772 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include void ags_recall_audio_class_init(AgsRecallAudioClass *recall_audio); void ags_recall_audio_connectable_interface_init(AgsConnectableInterface *connectable); void ags_recall_audio_packable_interface_init(AgsPackableInterface *packable); void ags_recall_audio_init(AgsRecallAudio *recall_audio); void ags_recall_audio_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_recall_audio_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_recall_audio_connect(AgsConnectable *connectable); void ags_recall_audio_disconnect(AgsConnectable *connectable); gboolean ags_recall_audio_pack(AgsPackable *packable, GObject *container); gboolean ags_recall_audio_unpack(AgsPackable *packable); void ags_recall_audio_finalize(GObject *gobject); void ags_recall_audio_remove(AgsRecall *recall); AgsRecall* ags_recall_audio_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter); /** * SECTION:ags_recall_audio * @short_description: audio context of recall * @title: AgsRecallAudio * @section_id: * @include: ags/audio/ags_recall_audio.h * * #AgsRecallAudio acts as audio recall. */ enum{ PROP_0, PROP_AUDIO, }; static gpointer ags_recall_audio_parent_class = NULL; static AgsConnectableInterface* ags_recall_audio_parent_connectable_interface; static AgsPackableInterface* ags_recall_audio_parent_packable_interface; GType ags_recall_audio_get_type() { static GType ags_type_recall_audio = 0; if(!ags_type_recall_audio){ static const GTypeInfo ags_recall_audio_info = { sizeof (AgsRecallAudioClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_recall_audio_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsRecallAudio), 0, /* n_preallocs */ (GInstanceInitFunc) ags_recall_audio_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_recall_audio_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_packable_interface_info = { (GInterfaceInitFunc) ags_recall_audio_packable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_recall_audio = g_type_register_static(AGS_TYPE_RECALL, "AgsRecallAudio\0", &ags_recall_audio_info, 0); g_type_add_interface_static(ags_type_recall_audio, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_recall_audio, AGS_TYPE_PACKABLE, &ags_packable_interface_info); } return(ags_type_recall_audio); } void ags_recall_audio_class_init(AgsRecallAudioClass *recall_audio) { GObjectClass *gobject; AgsRecallClass *recall; GParamSpec *param_spec; ags_recall_audio_parent_class = g_type_class_peek_parent(recall_audio); /* GObjectClass */ gobject = (GObjectClass *) recall_audio; gobject->finalize = ags_recall_audio_finalize; gobject->set_property = ags_recall_audio_set_property; gobject->get_property = ags_recall_audio_get_property; /* properties */ /** * AgsRecallAudio:audio: * * The assigned audio. * * Since: 0.4.0 */ param_spec = g_param_spec_object("audio\0", "assigned audio\0", "The audio object it is assigned to\0", AGS_TYPE_AUDIO, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_AUDIO, param_spec); /* AgsRecallClass */ recall = (AgsRecallClass *) recall_audio; recall->remove = ags_recall_audio_remove; recall->duplicate = ags_recall_audio_duplicate; } void ags_recall_audio_connectable_interface_init(AgsConnectableInterface *connectable) { ags_recall_audio_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_recall_audio_connect; connectable->disconnect = ags_recall_audio_disconnect; } void ags_recall_audio_packable_interface_init(AgsPackableInterface *packable) { ags_recall_audio_parent_packable_interface = g_type_interface_peek_parent(packable); packable->pack = ags_recall_audio_pack; packable->unpack = ags_recall_audio_unpack; } void ags_recall_audio_init(AgsRecallAudio *recall_audio) { recall_audio->audio = NULL; } void ags_recall_audio_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsRecallAudio *recall_audio; recall_audio = AGS_RECALL_AUDIO(gobject); switch(prop_id){ case PROP_AUDIO: { AgsAudio *audio; audio = (AgsAudio *) g_value_get_object(value); if(recall_audio->audio == audio) return; if(recall_audio->audio != NULL) g_object_unref(recall_audio->audio); if(audio != NULL) g_object_ref(audio); recall_audio->audio = audio; } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_recall_audio_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsRecallAudio *recall_audio; recall_audio = AGS_RECALL_AUDIO(gobject); switch(prop_id){ case PROP_AUDIO: g_value_set_object(value, recall_audio->audio); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_recall_audio_connect(AgsConnectable *connectable) { ags_recall_audio_parent_connectable_interface->connect(connectable); /* empty */ } void ags_recall_audio_disconnect(AgsConnectable *connectable) { ags_recall_audio_parent_connectable_interface->disconnect(connectable); /* empty */ } gboolean ags_recall_audio_pack(AgsPackable *packable, GObject *container) { AgsRecallContainer *recall_container; GList *list; if(ags_recall_audio_parent_packable_interface->pack(packable, container)) return(TRUE); recall_container = AGS_RECALL_CONTAINER(container); g_object_set(G_OBJECT(recall_container), "recall_audio\0", AGS_RECALL(packable), NULL); /* set in AgsRecallAudioRun */ list = recall_container->recall_audio_run; while(list != NULL){ g_object_set(G_OBJECT(list->data), "recall_audio\0", AGS_RECALL_AUDIO(packable), NULL); list = list->next; } return(FALSE); } gboolean ags_recall_audio_unpack(AgsPackable *packable) { AgsRecall *recall; AgsRecallContainer *recall_container; GList *list; recall = AGS_RECALL(packable); if(recall == NULL) return(TRUE); recall_container = AGS_RECALL_CONTAINER(recall->container); if(recall_container == NULL) return(TRUE); /* ref */ g_object_ref(recall); g_object_ref(recall_container); /* unset in AgsRecallAudioRun */ list = recall_container->recall_audio_run; while(list != NULL){ g_object_set(G_OBJECT(list->data), "recall_audio\0", NULL, NULL); list = list->next; } /* call parent */ if(ags_recall_audio_parent_packable_interface->unpack(packable)){ g_object_unref(recall); g_object_unref(recall_container); return(TRUE); } recall_container->recall_audio = NULL; /* unref */ g_object_unref(recall); g_object_unref(recall_container); return(FALSE); } void ags_recall_audio_finalize(GObject *gobject) { AgsRecallAudio *recall_audio; recall_audio = AGS_RECALL_AUDIO(gobject); if(recall_audio->audio != NULL) g_object_unref(G_OBJECT(recall_audio->audio)); G_OBJECT_CLASS(ags_recall_audio_parent_class)->finalize(gobject); } void ags_recall_audio_remove(AgsRecall *recall) { if(AGS_RECALL_AUDIO(recall)->audio != NULL){ ags_audio_remove_recall(AGS_RECALL_AUDIO(recall)->audio, recall, ((recall->recall_id->recycling_container->parent) ? TRUE: FALSE)); } AGS_RECALL_CLASS(ags_recall_audio_parent_class)->remove(recall); } AgsRecall* ags_recall_audio_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter) { AgsRecallAudio *recall_audio, *copy; recall_audio = AGS_RECALL_AUDIO(recall); copy = AGS_RECALL_AUDIO(AGS_RECALL_CLASS(ags_recall_audio_parent_class)->duplicate(recall, recall_id, n_params, parameter)); g_message("ags warning - ags_recall_audio_duplicate: you shouldn't do this %s\n\0", G_OBJECT_TYPE_NAME(recall)); return((AgsRecall *) copy); } /** * ags_recall_audio_new: * * Creates an #AgsRecallAudio. * * Returns: a new #AgsRecallAudio. * * Since: 0.4 */ AgsRecallAudio* ags_recall_audio_new(AgsAudio *audio) { AgsRecallAudio *recall_audio; recall_audio = (AgsRecallAudio *) g_object_new(AGS_TYPE_RECALL_AUDIO, "audio\0", audio, NULL); return(recall_audio); } gsequencer-0.6.37/src/ags/audio/ags_audio_signal.h0000644000175000017500000001160612626272146017010 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_AUDIO_SIGNAL_H__ #define __AGS_AUDIO_SIGNAL_H__ #include #define AGS_TYPE_AUDIO_SIGNAL (ags_audio_signal_get_type()) #define AGS_AUDIO_SIGNAL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_AUDIO_SIGNAL, AgsAudioSignal)) #define AGS_AUDIO_SIGNAL_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_AUDIO_SIGNAL, AgsAudioSignalClass)) #define AGS_IS_AUDIO_SIGNAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_AUDIO_SIGNAL)) #define AGS_IS_AUDIO_SIGNAL_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_AUDIO_SIGNAL)) #define AGS_AUDIO_SIGNAL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_AUDIO_SIGNAL, AgsAudioSignalClass)) typedef struct _AgsAudioSignal AgsAudioSignal; typedef struct _AgsAudioSignalClass AgsAudioSignalClass; typedef struct _AgsAttack AgsAttack; typedef enum{ AGS_AUDIO_SIGNAL_TEMPLATE = 1, AGS_AUDIO_SIGNAL_PLAY_DONE = 1 << 1, AGS_AUDIO_SIGNAL_STANDALONE = 1 << 2, }AgsAudioSignalFlags; typedef enum{ AGS_ATTACK_INITIAL_RUN = 1, AGS_ATTACK_SWAP = 1 << 1, }AgsAttackFlags; struct _AgsAudioSignal { GObject object; guint flags; GObject *devout; GObject *recycling; GObject *recall_id; // AGS_TYPE_RECALL_ID to identify the AgsAudioSignal guint samplerate; guint buffer_size; guint resolution; guint length; guint last_frame; // the last frame at stream_end guint loop_start; guint loop_end; gdouble delay; guint attack; guint lock_attack; GList *stream_beginning; GList *stream_current; GList *stream_end; }; struct _AgsAudioSignalClass { GObjectClass object; void (*realloc_buffer_size)(AgsAudioSignal *audio_signal, guint buffer_size); void (*morph_samplerate)(AgsAudioSignal *audio_signal, guint samplerate, double k_morph); }; GType ags_audio_signal_get_type(); signed short* ags_stream_alloc(guint buffer_size); guint ags_audio_signal_get_length_till_current(AgsAudioSignal *audio_signal); void ags_audio_signal_add_stream(AgsAudioSignal *audio_signal); void ags_audio_signal_stream_resize(AgsAudioSignal *audio_signal, guint length); void ags_audio_signal_stream_safe_resize(AgsAudioSignal *audio_signal, guint length); void ags_audio_signal_realloc_buffer_size(AgsAudioSignal *audio_signal, guint buffer_size); void ags_audio_signal_morph_samplerate(AgsAudioSignal *audio_signal, guint samplerate, double k_morph); void ags_audio_signal_copy_buffer_to_buffer(signed short *destination, guint dchannels, signed short *source, guint schannels, guint size); // __attribute__ ((hot)) // __attribute__ ((fastcall)); void ags_audio_signal_copy_buffer_to_double_buffer(double *destination, guint dchannels, signed short *source, guint schannels, guint size); // __attribute__ ((hot)) // __attribute__ ((fastcall)); void ags_audio_signal_copy_double_buffer_to_buffer(signed short *destination, guint dchannels, double *source, guint schannels, guint size); // __attribute__ ((hot)) // __attribute__ ((fastcall)); void ags_audio_signal_duplicate_stream(AgsAudioSignal *audio_signal, AgsAudioSignal *template); //TODO:JK: rename these functions name it rather find than get AgsAudioSignal* ags_audio_signal_get_template(GList *audio_signal); GList* ags_audio_signal_get_stream_current(GList *audio_signal, GObject *recall_id); GList* ags_audio_signal_get_by_recall_id(GList *audio_signal, GObject *recall_id); void ags_audio_signal_tile(AgsAudioSignal *audio_signal, AgsAudioSignal *template, guint length); void ags_audio_signal_scale(AgsAudioSignal *audio_signal, AgsAudioSignal *template, guint length); void ags_audio_signal_envelope(AgsAudioSignal *audio_signal, gdouble attack, gdouble decay, gdouble sustain, gdouble release, gdouble ratio); AgsAudioSignal* ags_audio_signal_new(GObject *devout, GObject *recycling, GObject *recall_id); AgsAudioSignal* ags_audio_signal_new_with_length(GObject *devout, GObject *recycling, GObject *recall_id, guint length); #endif /*__AGS_AUDIO_SIGNAL_H__*/ gsequencer-0.6.37/src/ags/audio/ags_config.h0000644000175000017500000000474612626272146015626 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_CONFIG_H__ #define __AGS_CONFIG_H__ #include #include #define AGS_TYPE_CONFIG (ags_config_get_type ()) #define AGS_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_CONFIG, AgsConfig)) #define AGS_CONFIG_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_CONFIG, AgsConfigClass)) #define AGS_IS_CONFIG(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_CONFIG)) #define AGS_IS_CONFIG_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_CONFIG)) #define AGS_CONFIG_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_CONFIG, AgsConfigClass)) #define AGS_CONFIG_DEFAULT_VERSION "0.4.2\0" #define AGS_CONFIG_DEFAULT_BUILD_ID "CEST 02-10-2014 19:36\0" #define AGS_CONFIG_GENERIC "generic\0" #define AGS_CONFIG_THREAD "thread\0" #define AGS_CONFIG_DEVOUT "device\0" #define AGS_CONFIG_RECALL "recall\0" typedef struct _AgsConfig AgsConfig; typedef struct _AgsConfigClass AgsConfigClass; struct _AgsConfig { GObject object; gchar *version; gchar *build_id; GObject *ags_main; GKeyFile *key_file; }; struct _AgsConfigClass { GObjectClass object; }; GType ags_config_get_type(); void ags_config_load_defaults(AgsConfig *config); void ags_config_load_from_file(AgsConfig *config, gchar *filename); void ags_config_load_from_data(AgsConfig *config, char *buffer, gsize buffer_length); void ags_config_to_data(AgsConfig *config, char **buffer, gsize *buffer_length); void ags_config_save(AgsConfig *config); void ags_config_set(AgsConfig *config, gchar *group, gchar *key, gchar *value); gchar* ags_config_get(AgsConfig *config, gchar *group, gchar *key); AgsConfig* ags_config_new(); #endif /*__AGS_CONFIG_H__*/ gsequencer-0.6.37/src/ags/audio/ags_channel_iter.c0000644000175000017500000001371212612232537016773 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include AgsChannelIter* ags_channel_iter_alloc(AgsChannel *start) { AgsChannelIter *iter; iter = (AgsChannelIter *) malloc(sizeof(AgsChannelIter)); iter->current_start = start; iter->parent = NULL; iter->children = NULL; iter->current_iter = iter; iter->current = start; return(iter); } void ags_channel_iter_free(AgsChannelIter *iter) { } AgsChannel* ags_channel_iter_prev(AgsChannelIter *iter, guint mode) { //TODO:JK: implement me return(NULL); } AgsChannel* ags_channel_iter_next(AgsChannelIter *iter, guint mode) { AgsAudio *audio; AgsChannelIter *current_iter, *next_iter; auto AgsChannel* ags_channel_iter_axis_to_leafes(AgsChannelIter *iter); auto AgsChannelIter* ags_channel_iter_axis_to_leafes_go_up(AgsChannelIter *iter); /* * Axis to leafes iteration strategy. */ AgsChannel* ags_channel_iter_axis_to_leafes(AgsChannelIter *iter){ if(AGS_IS_OUTPUT(current_iter->current)){ if(audio->input == NULL){ iter->current_iter = ags_channel_iter_axis_to_leafes_go_up(iter); return(iter->current_iter->current); } }else{ if(current_iter->current->link == NULL){ if((AGS_AUDIO_ASYNC & (audio->flags)) != 0){ if(current_iter->current->next_pad == NULL){ iter->current_iter = ags_channel_iter_axis_to_leafes_go_up(iter); return(iter->current_iter->current); } }else{ iter->current_iter = ags_channel_iter_axis_to_leafes_go_up(iter); return(iter->current_iter->current); } } } if(AGS_IS_OUTPUT(current_iter->current)){ next_iter = ags_channel_iter_alloc(ags_channel_nth(audio->input, (((AGS_AUDIO_ASYNC & (audio->flags)) != 0) ? current_iter->current->audio_channel: current_iter->current->line))); current_iter->children = g_list_prepend(current_iter->children, next_iter); next_iter->parent = current_iter; iter->current_iter = next_iter; return(next_iter->current); }else{ if(current_iter->current->link == NULL){ if((AGS_AUDIO_ASYNC & (audio->flags)) != 0){ current_iter->current = current_iter->current->next_pad; return(current_iter->current); } }else{ next_iter = ags_channel_iter_alloc(current_iter->current->link); current_iter->children = g_list_prepend(current_iter->children, next_iter); next_iter->parent = current_iter; iter->current_iter = next_iter; return(next_iter->current); } } } /* * Returns: next AgsChannelIter * * goes up in the iteration list and frees unneeded AgsChannelIter. */ AgsChannelIter* ags_channel_iter_axis_to_leafes_go_up(AgsChannelIter *iter){ AgsChannelIter *current_iter, *old_iter, *new_iter; current_iter = iter->current_iter; while(current_iter->parent != NULL){ if(AGS_OUTPUT(current_iter->current)){ old_iter = current_iter; current_iter = current_iter->parent; current_iter->children = g_list_remove(current_iter->children, old_iter); free(old_iter); }else{ if(current_iter->current->next_pad == NULL){ old_iter = current_iter; current_iter = current_iter->parent; current_iter->children = g_list_remove(current_iter->children, old_iter); free(old_iter); }else{ current_iter->current = current_iter->current->next_pad; return(current_iter); } } } if(AGS_OUTPUT(current_iter->current)){ if(current_iter->current->link != NULL){ next_iter = ags_channel_iter_alloc(current_iter->current->link); next_iter->children = g_list_prepend(next_iter->children, current_iter); current_iter->parent = next_iter; return(next_iter); } }else{ AgsAudio *audio; AgsChannel *channel; audio = AGS_AUDIO(current_iter->current->audio); if(audio->output != NULL){ if((AGS_AUDIO_ASYNC & (audio->flags)) != 0){ channel = ags_channel_nth(audio->output, current_iter->current->audio_channel); }else{ channel = ags_channel_nth(audio->output, current_iter->current->line); } next_iter = ags_channel_iter_alloc(channel); next_iter->children = g_list_prepend(next_iter->children, current_iter); current_iter->parent = next_iter; return(next_iter); } } return(NULL); } if(iter->current_start == NULL){ return(NULL); } current_iter = iter->current_iter; audio = AGS_AUDIO(current_iter->current->audio); if((AGS_CHANNEL_ITER_DIRECTION_AXIS_TO_LEAFES & (mode)) != 0){ if((AGS_CHANNEL_ITER_LEVEL_STRICT & (mode)) != 0){ //TODO:JK: implement me }else{ return(ags_channel_iter_axis_to_leafes(iter)); } }else if((AGS_CHANNEL_ITER_DIRECTION_AXIS_TO_ROOT & (mode)) != 0){ if((AGS_CHANNEL_ITER_LEVEL_STRICT & (mode)) != 0){ //TODO:JK: implement me }else{ //TODO:JK: implement me } }else if((AGS_CHANNEL_ITER_DIRECTION_LEAFES_TO_ROOT & (mode)) != 0){ if((AGS_CHANNEL_ITER_LEVEL_STRICT & (mode)) != 0){ //TODO:JK: implement me }else{ //TODO:JK: implement me } }else if((AGS_CHANNEL_ITER_DIRECTION_ROOT_TO_LEAFES & (mode)) != 0){ if((AGS_CHANNEL_ITER_LEVEL_STRICT & (mode)) != 0){ //TODO:JK: implement me }else{ //TODO:JK: implement me } } return(NULL); } gsequencer-0.6.37/src/ags/audio/ags_recall_dependency.h0000644000175000017500000000452412612232537020006 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_RECALL_DEPENDENCY_H__ #define __AGS_RECALL_DEPENDENCY_H__ #include #include #include #define AGS_TYPE_RECALL_DEPENDENCY (ags_recall_dependency_get_type ()) #define AGS_RECALL_DEPENDENCY(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), AGS_TYPE_RECALL_DEPENDENCY, AgsRecallDependency)) #define AGS_RECALL_DEPENDENCY_CLASS(class) (G_TYPE_CHECK_CLASS_CAST ((class), AGS_TYPE_RECALL_DEPENDENCY, AgsRecallDependencyClass)) #define AGS_IS_RECALL_DEPENDENCY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_RECALL_DEPENDENCY)) #define AGS_IS_RECALL_DEPENDENCY_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_RECALL_DEPENDENCY)) #define AGS_RECALL_DEPENDENCY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_RECALL_DEPENDENCY, AgsRecallDependencyClass)) typedef struct _AgsRecallDependency AgsRecallDependency; typedef struct _AgsRecallDependencyClass AgsRecallDependencyClass; struct _AgsRecallDependency { GObject object; GObject *dependency; }; struct _AgsRecallDependencyClass { GObjectClass object; }; GType ags_recall_dependency_get_type(void); GList* ags_recall_dependency_find_dependency(GList *recall_dependencies, GObject *dependency); GList* ags_recall_dependency_find_dependency_by_provider(GList *recall_dependencies, GObject *provider); GObject* ags_recall_dependency_resolve(AgsRecallDependency *recall_dependency, AgsRecallID *recall_id); AgsRecallDependency* ags_recall_dependency_new(GObject *dependency); #endif /*__AGS_RECALL_DEPENDENCY_H__*/ gsequencer-0.6.37/src/ags/audio/ags_recall_audio_run.h0000644000175000017500000000401612612232537017651 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_RECALL_AUDIO_RUN_H__ #define __AGS_RECALL_AUDIO_RUN_H__ #include #include #include #include #define AGS_TYPE_RECALL_AUDIO_RUN (ags_recall_audio_run_get_type()) #define AGS_RECALL_AUDIO_RUN(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_RECALL_AUDIO_RUN, AgsRecallAudioRun)) #define AGS_RECALL_AUDIO_RUN_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_RECALL_AUDIO_RUN, AgsRecallAudioRunClass)) #define AGS_IS_RECALL_AUDIO_RUN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_RECALL_AUDIO_RUN)) #define AGS_IS_RECALL_AUDIO_RUN_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_RECALL_AUDIO_RUN)) #define AGS_RECALL_AUDIO_RUN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_RECALL_AUDIO_RUN, AgsRecallAudioRunClass)) typedef struct _AgsRecallAudioRun AgsRecallAudioRun; typedef struct _AgsRecallAudioRunClass AgsRecallAudioRunClass; struct _AgsRecallAudioRun { AgsRecall recall; AgsRecallAudio *recall_audio; }; struct _AgsRecallAudioRunClass { AgsRecallClass recall; }; GType ags_recall_audio_run_get_type(); AgsRecallAudioRun* ags_recall_audio_run_new(); #endif /*__AGS_RECALL_AUDIO_RUN_H__*/ gsequencer-0.6.37/src/ags/audio/ags_recall_ladspa.h0000644000175000017500000000537012626272146017141 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_RECALL_LADSPA_H__ #define __AGS_RECALL_LADSPA_H__ #include #include #include #include #include #include #define AGS_TYPE_RECALL_LADSPA (ags_recall_ladspa_get_type()) #define AGS_RECALL_LADSPA(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_RECALL_LADSPA, AgsRecallLadspa)) #define AGS_RECALL_LADSPA_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_RECALL_LADSPA, AgsRecallLadspaClass)) #define AGS_IS_RECALL_LADSPA(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_RECALL_LADSPA)) #define AGS_IS_RECALL_LADSPA_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_RECALL_LADSPA)) #define AGS_RECALL_LADSPA_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_RECALL_LADSPA, AgsRecallLadspaClass)) typedef struct _AgsRecallLadspa AgsRecallLadspa; typedef struct _AgsRecallLadspaClass AgsRecallLadspaClass; struct _AgsRecallLadspa { AgsRecallChannel recall_channel; gchar *filename; gchar *effect; unsigned long index; LADSPA_Descriptor *plugin_descriptor; unsigned long *input_port; unsigned long input_lines; unsigned long *output_port; unsigned long output_lines; }; struct _AgsRecallLadspaClass { AgsRecallChannelClass recall_channel; }; GType ags_recall_ladspa_get_type(); GList* ags_recall_ladspa_load_ports(AgsRecallLadspa *recall_ladspa); void ags_recall_ladspa_short_to_float(signed short *buffer, LADSPA_Data *destination, guint buffer_size, guint lines); void ags_recall_ladspa_float_to_short(LADSPA_Data *buffer, signed short *destination, guint buffer_size, guint lines); GList* ags_recall_ladpsa_find(GList *recall, gchar *filename, gchar *effect); AgsRecallLadspa* ags_recall_ladspa_new(AgsChannel *source, gchar *filename, gchar *effect, unsigned long index); #endif /*__AGS_RECALL_LADSPA_H__*/ gsequencer-0.6.37/src/ags/audio/ags_garbage_collector.h0000644000175000017500000000457512612232540020004 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_GARBAGE_COLLECTOR_H__ #define __AGS_GARBAGE_COLLECTOR_H__ #include #include #include #include #define AGS_TYPE_GARBAGE_COLLECTOR (ags_garbage_collector_get_type()) #define AGS_GARBAGE_COLLECTOR(obj) ((AgsGarbage_Collector*) G_TYPE_CHECK_INSTANCE_CAST(obj, AGS_TYPE_GARBAGE_COLLECTOR, AgsGarbageCollector)) #define AGS_GARBAGE_COLLECTOR_CLASS(class) ((AgsGarbage_CollectorClass*) G_TYPE_CHECK_CLASS_CAST(class, AGS_TYPE_GARBAGE_COLLECTOR, AgsGarbageCollectorClass)) typedef struct _AgsGarbageCollector AgsGarbageCollector; typedef struct _AgsGarbageCollectorClass AgsGarbageCollectorClass; typedef enum{ AGS_GARBAGE_COLLECTOR_RUN = 1, // cancel flag of ags_garbage_collector run AGS_GARBAGE_COLLECTOR_CANCEL_RUN = 1 << 1, // used by ags_garbage_collector_remove to remove the current (stopped) AgsRecycling while ags_garbage_collector_run is running }AgsGarbageCollectorFlags; struct _AgsGarbageCollector { GObject object; guint32 flags; GObject *devout; GList *list; // data of type AgsRecycling GList *stopped; GList *start; GList *end; }; struct _AgsGarbageCollectorClass { GObjectClass object; }; GType ags_garbage_collector_get_type(); void ags_garbage_collector_add(AgsGarbageCollector *garbage_collector, AgsRecycling *recycling); void ags_garbage_collector_remove(AgsGarbageCollector *garbage_collector, AgsRecycling *recycling); void ags_garbage_collector_run(AgsGarbageCollector *garbage_collector); AgsGarbageCollector* ags_garbage_collector_new(); #endif /*__AGS_GARBAGE_COLLECTOR_H__*/ gsequencer-0.6.37/src/ags/audio/ags_libao.c0000644000175000017500000004744312626272146015443 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include void ags_libao_class_init(AgsLibaoClass *libao); void ags_libao_connectable_interface_init(AgsConnectableInterface *connectable); void ags_libao_init(AgsLibao *libao); void ags_libao_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_libao_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_libao_disconnect(AgsConnectable *connectable); void ags_libao_connect(AgsConnectable *connectable); void ags_libao_finalize(GObject *gobject); void ags_libao_real_change_bpm(AgsLibao *libao, double bpm); void ags_libao_switch_buffer_flag(AgsLibao *libao); void ags_libao_output_init(AgsLibao *libao, GError **error); void ags_libao_output_play(AgsLibao *libao, GError **error); void ags_libao_output_free(AgsLibao *libao); enum{ PROP_0, PROP_MAIN, PROP_DEVICE, PROP_DSP_CHANNELS, PROP_PCM_CHANNELS, PROP_BITS, PROP_BUFFER_SIZE, PROP_FREQUENCY, PROP_BUFFER, PROP_BPM, PROP_ATTACK, PROP_TASK, }; enum{ RUN, STOP, TIC, LAST_SIGNAL, }; static gpointer ags_libao_parent_class = NULL; static guint libao_signals[LAST_SIGNAL]; /* dangerous - produces a lot of output */ static gboolean DEBUG_LIBAO = FALSE; GType ags_libao_get_type (void) { static GType ags_type_libao = 0; if(!ags_type_libao){ static const GTypeInfo ags_libao_info = { sizeof (AgsLibaoClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_libao_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsLibao), 0, /* n_preallocs */ (GInstanceInitFunc) ags_libao_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_libao_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_libao = g_type_register_static(G_TYPE_OBJECT, "AgsLibao\0", &ags_libao_info, 0); g_type_add_interface_static(ags_type_libao, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_libao); } void ags_libao_class_init(AgsLibaoClass *libao) { GObjectClass *gobject; GParamSpec *param_spec; ags_libao_parent_class = g_type_class_peek_parent(libao); /* GObjectClass */ gobject = (GObjectClass *) libao; gobject->set_property = ags_libao_set_property; gobject->get_property = ags_libao_get_property; gobject->finalize = ags_libao_finalize; /* properties */ param_spec = g_param_spec_object("main\0", "the main object\0", "The main object\0", AGS_TYPE_MAIN, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_MAIN, param_spec); param_spec = g_param_spec_string("device\0", "the device identifier\0", "The device to perform output to\0", "hw:0\0", G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_DEVICE, param_spec); param_spec = g_param_spec_uint("dsp_channels\0", "count of DSP channels\0", "The count of DSP channels to use\0", 1, 64, 2, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_DSP_CHANNELS, param_spec); param_spec = g_param_spec_uint("pcm_channels\0", "count of PCM channels\0", "The count of PCM channels to use\0", 1, 64, 2, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_PCM_CHANNELS, param_spec); /* * TODO:JK: add support for other quality than 16 bit */ param_spec = g_param_spec_uint("bits\0", "precision of buffer\0", "The precision to use for a frame\0", 1, 64, 16, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_BITS, param_spec); param_spec = g_param_spec_uint("buffer_size\0", "frame count of a buffer\0", "The count of frames a buffer contains\0", 1, 44100, 940, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_BUFFER_SIZE, param_spec); param_spec = g_param_spec_uint("frequency\0", "frames per second\0", "The frames count played during a second\0", 8000, 96000, 44100, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_FREQUENCY, param_spec); param_spec = g_param_spec_pointer("buffer\0", "the buffer\0", "The buffer to play\0", G_PARAM_READABLE); g_object_class_install_property(gobject, PROP_BUFFER, param_spec); param_spec = g_param_spec_double("bpm\0", "beats per minute\0", "Beats per minute to use\0", 1.0, 240.0, 120.0, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_BPM, param_spec); param_spec = g_param_spec_pointer("attack\0", "attack of buffer\0", "The attack to use for the buffer\0", G_PARAM_READABLE); g_object_class_install_property(gobject, PROP_ATTACK, param_spec); param_spec = g_param_spec_object("task\0", "task to launch\0", "A task to launch\0", AGS_TYPE_TASK, G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_TASK, param_spec); /* AgsLibaoClass */ libao->play_init = ags_libao_output_init; libao->play = ags_libao_output_play; libao->stop = ags_libao_output_free; libao->tic = NULL; libao->note_offset_changed = NULL; libao_signals[TIC] = g_signal_new("tic\0", G_TYPE_FROM_CLASS (libao), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AgsLibaoClass, tic), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); } GQuark ags_libao_error_quark() { return(g_quark_from_static_string("ags-libao-error-quark\0")); } void ags_libao_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->is_ready = NULL; connectable->is_connected = NULL; connectable->connect = ags_libao_connect; connectable->disconnect = ags_libao_disconnect; } void ags_libao_init(AgsLibao *libao) { guint default_tact_frames; guint default_tic_frames; guint i; /* flags */ libao->flags = (AGS_LIBAO_ALSA); /* quality */ libao->dsp_channels = 2; libao->pcm_channels = 2; libao->bits = 16; libao->buffer_size = AGS_LIBAO_DEFAULT_BUFFER_SIZE; libao->frequency = AGS_LIBAO_DEFAULT_SAMPLERATE; // libao->out.ao.device = NULL; /* buffer */ libao->buffer = (signed short **) malloc(4 * sizeof(signed short*)); libao->buffer[0] = (signed short *) malloc(libao->dsp_channels * libao->buffer_size * sizeof(signed short)); libao->buffer[1] = (signed short *) malloc(libao->dsp_channels * libao->buffer_size * sizeof(signed short)); libao->buffer[2] = (signed short *) malloc(libao->dsp_channels * libao->buffer_size * sizeof(signed short)); libao->buffer[3] = (signed short *) malloc(libao->dsp_channels * libao->buffer_size * sizeof(signed short)); /* bpm */ libao->bpm = AGS_LIBAO_DEFAULT_BPM; /* delay and attack */ libao->delay = (gdouble *) malloc((int) ceil(2.0 * AGS_NOTATION_TICS_PER_BEAT) * sizeof(gdouble)); libao->attack = (guint *) malloc((int) ceil(2.0 * AGS_NOTATION_TICS_PER_BEAT) * sizeof(guint)); default_tact_frames = (guint) (AGS_LIBAO_DEFAULT_DELAY * AGS_LIBAO_DEFAULT_BUFFER_SIZE); default_tic_frames = (guint) (default_tact_frames * AGS_NOTATION_MINIMUM_NOTE_LENGTH); memset(libao->delay, 0, (int) (ceil(2.0 * AGS_NOTATION_TICS_PER_BEAT) * sizeof(guint))); memset(libao->delay, 0, (int) (ceil(2.0 * AGS_NOTATION_TICS_PER_BEAT) * sizeof(guint))); for(i = 0; i < (int) ceil(2.0 * AGS_NOTATION_TICS_PER_BEAT); i++){ libao->attack[i] = (i * default_tic_frames) % AGS_LIBAO_DEFAULT_BUFFER_SIZE; } for(i = 0; i < (int) ceil(2.0 * AGS_NOTATION_TICS_PER_BEAT); i++){ // libao->delay[i] = AGS_LIBAO_DEFAULT_BUFFER_SIZE / (default_tic_frames) / (AGS_LIBAO_DEFAULT_SAMPLERATE / AGS_NOTATION_DEFAULT_JIFFIE); } /* */ libao->delay_counter = 0; libao->tic_counter = 0; /* parent */ libao->ags_main = NULL; /* all AgsAudio */ libao->audio = NULL; } void ags_libao_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsLibao *libao; libao = AGS_LIBAO(gobject); //TODO:JK: implement set functionality switch(prop_id){ case PROP_MAIN: { AgsMain *ags_main; ags_main = (AgsMain *) g_value_get_object(value); if((AgsMain *) libao->ags_main == ags_main){ return; } if(libao->ags_main != NULL){ g_object_unref(G_OBJECT(libao->ags_main)); } if(ags_main != NULL){ g_object_ref(G_OBJECT(ags_main)); } libao->ags_main = (AgsMain *) ags_main; } break; case PROP_DEVICE: { char *device; device = (char *) g_value_get_string(value); if((AGS_LIBAO_LIBAO & (libao->flags)) != 0){ //TODO:JK: implement me } } break; case PROP_DSP_CHANNELS: { guint dsp_channels; dsp_channels = g_value_get_uint(value); if(dsp_channels == libao->dsp_channels){ return; } libao->dsp_channels = dsp_channels; } break; case PROP_PCM_CHANNELS: { guint pcm_channels; pcm_channels = g_value_get_uint(value); if(pcm_channels == libao->pcm_channels){ return; } libao->pcm_channels = pcm_channels; free(libao->buffer[0]); free(libao->buffer[1]); free(libao->buffer[2]); free(libao->buffer[3]); libao->buffer[0] = (signed short *) malloc((pcm_channels * libao->buffer_size) * sizeof(signed short)); libao->buffer[1] = (signed short *) malloc((pcm_channels * libao->buffer_size) * sizeof(signed short)); libao->buffer[2] = (signed short *) malloc((pcm_channels * libao->buffer_size) * sizeof(signed short)); libao->buffer[3] = (signed short *) malloc((pcm_channels * libao->buffer_size) * sizeof(signed short)); } break; case PROP_BITS: { //TODO:JK: implement me } break; case PROP_BUFFER_SIZE: { guint buffer_size; buffer_size = g_value_get_uint(value); if(buffer_size == libao->buffer_size){ return; } libao->buffer_size = buffer_size; free(libao->buffer[0]); free(libao->buffer[1]); free(libao->buffer[2]); free(libao->buffer[3]); libao->buffer[0] = (signed short *) malloc((libao->pcm_channels * buffer_size) * sizeof(signed short)); libao->buffer[1] = (signed short *) malloc((libao->pcm_channels * buffer_size) * sizeof(signed short)); libao->buffer[2] = (signed short *) malloc((libao->pcm_channels * buffer_size) * sizeof(signed short)); libao->buffer[3] = (signed short *) malloc((libao->pcm_channels * buffer_size) * sizeof(signed short)); } break; case PROP_FREQUENCY: { guint frequency; frequency = g_value_get_uint(value); if(frequency == libao->frequency){ return; } libao->frequency = frequency; } break; case PROP_BUFFER: { //TODO:JK: implement me } break; case PROP_BPM: { //TODO:JK: implement me } break; case PROP_TASK: { //TODO:JK: implement me } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_libao_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsLibao *libao; libao = AGS_LIBAO(gobject); switch(prop_id){ case PROP_DEVICE: { if((AGS_LIBAO_LIBAO & (libao->flags)) != 0){ g_value_set_string(value, ao_driver_info(libao->out.ao.driver_ao)->name); } } break; case PROP_DSP_CHANNELS: { g_value_set_uint(value, libao->dsp_channels); } break; case PROP_PCM_CHANNELS: { g_value_set_uint(value, libao->pcm_channels); } break; case PROP_BITS: { g_value_set_uint(value, libao->bits); } break; case PROP_BUFFER_SIZE: { g_value_set_uint(value, libao->buffer_size); } break; case PROP_FREQUENCY: { g_value_set_uint(value, libao->frequency); } break; case PROP_BUFFER: { g_value_set_pointer(value, libao->buffer); } break; case PROP_BPM: { g_value_set_double(value, libao->bpm); } break; case PROP_ATTACK: { g_value_set_pointer(value, libao->attack); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_libao_finalize(GObject *gobject) { AgsLibao *libao; GList *list, *list_next; libao = AGS_LIBAO(gobject); /* free output buffer */ free(libao->buffer[0]); free(libao->buffer[1]); free(libao->buffer[2]); free(libao->buffer[3]); /* free buffer array */ free(libao->buffer); /* free AgsAttack */ free(libao->attack); /* call parent */ G_OBJECT_CLASS(ags_libao_parent_class)->finalize(gobject); } void ags_libao_connect(AgsConnectable *connectable) { AgsLibao *libao; GList *list; libao = AGS_LIBAO(connectable); list = libao->audio; while(list != NULL){ ags_connectable_connect(AGS_CONNECTABLE(list->data)); list = list->next; } } void ags_libao_disconnect(AgsConnectable *connectable) { //TODO:JK: implement me } AgsLibaoPlayDomain* ags_libao_play_domain_alloc() { AgsLibaoPlayDomain *libao_play_domain; libao_play_domain = (AgsLibaoPlayDomain *) malloc(sizeof(AgsLibaoPlayDomain)); libao_play_domain->domain = NULL; libao_play_domain->playback = FALSE; libao_play_domain->sequencer = FALSE; libao_play_domain->notation = FALSE; libao_play_domain->libao_play = NULL; return(libao_play_domain); } void ags_libao_play_domain_free(AgsLibaoPlayDomain *libao_play_domain) { g_list_free(libao_play_domain->libao_play); free(libao_play_domain); } AgsLibaoPlay* ags_libao_play_alloc() { AgsLibaoPlay *play; play = (AgsLibaoPlay *) malloc(sizeof(AgsLibaoPlay)); play->flags = 0; play->iterator_thread = (AgsIteratorThread **) malloc(3 * sizeof(AgsIteratorThread *)); play->iterator_thread[0] = ags_iterator_thread_new(); play->iterator_thread[1] = ags_iterator_thread_new(); play->iterator_thread[2] = ags_iterator_thread_new(); play->source = NULL; play->audio_channel = 0; play->recall_id[0] = NULL; play->recall_id[1] = NULL; play->recall_id[2] = NULL; return(play); } void ags_libao_play_free(AgsLibaoPlay *play) { g_object_unref(G_OBJECT(play->iterator_thread[0])); g_object_unref(G_OBJECT(play->iterator_thread[1])); g_object_unref(G_OBJECT(play->iterator_thread[2])); free(play->iterator_thread); } void ags_libao_list_cards(GList **card_id, GList **card_name) { } void ags_libao_pcm_info(char *card_id, guint *channels_min, guint *channels_max, guint *rate_min, guint *rate_max, guint *buffer_size_min, guint *buffer_size_max, GError **error) { } void ags_libao_add_audio(AgsLibao *libao, GObject *audio) { g_object_ref(G_OBJECT(audio)); libao->audio = g_list_prepend(libao->audio, audio); } void ags_libao_remove_audio(AgsLibao *libao, GObject *audio) { libao->audio = g_list_remove(libao->audio, audio); g_object_unref(G_OBJECT(audio)); } void ags_libao_tic(AgsLibao *libao) { g_return_if_fail(AGS_IS_LIBAO(libao)); if((AGS_LIBAO_PLAY & libao->flags) == 0){ g_message("ags_libao_tic: not playing\0"); return; } g_object_ref((GObject *) libao); g_signal_emit(G_OBJECT(libao), libao_signals[TIC], 0); g_object_unref((GObject *) libao); } /** * ags_libao_switch_buffer_flag: * @libao an #AgsLibao * * The buffer flag indicates the currently played buffer. */ void ags_libao_switch_buffer_flag(AgsLibao *libao) { if((AGS_LIBAO_BUFFER0 & (libao->flags)) != 0){ libao->flags &= (~AGS_LIBAO_BUFFER0); libao->flags |= AGS_LIBAO_BUFFER1; }else if((AGS_LIBAO_BUFFER1 & (libao->flags)) != 0){ libao->flags &= (~AGS_LIBAO_BUFFER1); libao->flags |= AGS_LIBAO_BUFFER2; }else if((AGS_LIBAO_BUFFER2 & (libao->flags)) != 0){ libao->flags &= (~AGS_LIBAO_BUFFER2); libao->flags |= AGS_LIBAO_BUFFER3; }else if((AGS_LIBAO_BUFFER3 & (libao->flags)) != 0){ libao->flags &= (~AGS_LIBAO_BUFFER3); libao->flags |= AGS_LIBAO_BUFFER0; } } void ags_libao_output_init(AgsLibao *libao, GError **error) { ao_sample_format *format; format = (ao_sample_format *) malloc(sizeof(ao_sample_format)); format->bits = libao->bits; format->rate = libao->frequency; format->channels = libao->dsp_channels; format->byte_format = AO_FMT_LITTLE; format->matrix = g_strdup("L,R\0"); libao->out.ao.format = format; libao->out.ao.device = ao_open_live(libao->out.ao.driver_ao, libao->out.ao.format, NULL); } void ags_libao_output_play(AgsLibao *libao, GError **error) { int rc; /* */ if((AGS_LIBAO_BUFFER0 & (libao->flags)) != 0){ memset(libao->buffer[3], 0, (size_t) libao->dsp_channels * libao->buffer_size * sizeof(signed short)); rc = ao_play(libao->out.ao.device, (void *) libao->buffer[0], libao->dsp_channels * libao->buffer_size * sizeof(signed short)); }else if((AGS_LIBAO_BUFFER1 & (libao->flags)) != 0){ memset(libao->buffer[0], 0, (size_t) libao->dsp_channels * libao->buffer_size * sizeof(signed short)); rc = ao_play(libao->out.ao.device, (void *) libao->buffer[1], libao->dsp_channels * libao->buffer_size * sizeof(signed short)); }else if((AGS_LIBAO_BUFFER2 & (libao->flags)) != 0){ memset(libao->buffer[1], 0, (size_t) libao->dsp_channels * libao->buffer_size * sizeof(signed short)); rc = ao_play(libao->out.ao.device, (void *) libao->buffer[2], libao->dsp_channels * libao->buffer_size * sizeof(signed short)); }else if((AGS_LIBAO_BUFFER3 & libao->flags) != 0){ memset(libao->buffer[2], 0, (size_t) libao->dsp_channels * libao->buffer_size * sizeof(signed short)); rc = ao_play(libao->out.ao.device, (void *) libao->buffer[3], libao->dsp_channels * libao->buffer_size * sizeof(signed short)); } /* if((AGS_LIBAO_COUNT & (libao->flags)) != 0) libao->offset++; */ /* determine if attack should be switched */ libao->delay_counter += (AGS_DEVOUT_DEFAULT_DELAY * AGS_NOTATION_MINIMUM_NOTE_LENGTH); if(libao->delay_counter >= libao->delay[libao->tic_counter]){ /* tic */ // ags_libao_tic(libao); libao->tic_counter += 1; if(libao->tic_counter == AGS_NOTATION_TICS_PER_BEAT){ libao->tic_counter = 0; } /* delay */ libao->delay_counter = 0; } /* switch buffer flags */ ags_libao_switch_buffer_flag(libao); } void ags_libao_output_free(AgsLibao *libao) { ao_close(libao->out.ao.device); } AgsLibao* ags_libao_new(GObject *ags_main) { AgsLibao *libao; libao = (AgsLibao *) g_object_new(AGS_TYPE_LIBAO, NULL); if(ags_main != NULL){ g_object_ref(G_OBJECT(ags_main)); libao->ags_main = ags_main; } return(libao); } gsequencer-0.6.37/src/ags/audio/ags_recall_container.h0000644000175000017500000000556112621463700017652 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_RECALL_CONTAINER_H__ #define __AGS_RECALL_CONTAINER_H__ #include #include #include #define AGS_TYPE_RECALL_CONTAINER (ags_recall_container_get_type()) #define AGS_RECALL_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_RECALL_CONTAINER, AgsRecallContainer)) #define AGS_RECALL_CONTAINER_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_RECALL_CONTAINER, AgsRecallContainerClass)) #define AGS_IS_RECALL_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_RECALL_CONTAINER)) #define AGS_IS_RECALL_CONTAINER_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_RECALL_CONTAINER)) #define AGS_RECALL_CONTAINER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_RECALL_CONTAINER, AgsRecallContainerClass)) typedef struct _AgsRecallContainer AgsRecallContainer; typedef struct _AgsRecallContainerClass AgsRecallContainerClass; typedef enum{ AGS_RECALL_CONTAINER_PLAY = 1, }AgsRecallContainerFlags; typedef enum{ AGS_RECALL_CONTAINER_FIND_TYPE, AGS_RECALL_CONTAINER_FIND_TEMPLATE, AGS_RECALL_CONTAINER_FIND_RECALL_ID, }AgsRecallContainerFindFlags; struct _AgsRecallContainer { GObject object; guint flags; GType recall_audio_type; AgsRecall *recall_audio; GType recall_audio_run_type; GList *recall_audio_run; GType recall_channel_type; GList *recall_channel; GType recall_channel_run_type; GList *recall_channel_run; }; struct _AgsRecallContainerClass { GObjectClass object; }; GType ags_recall_container_get_type(); AgsRecall* ags_recall_container_get_recall_audio(AgsRecallContainer *container); GList* ags_recall_container_get_recall_audio_run(AgsRecallContainer *container); GList* ags_recall_container_get_recall_channel(AgsRecallContainer *container); GList* ags_recall_container_get_recall_channel_run(AgsRecallContainer *container); GList* ags_recall_container_find(GList *recall_container, GType type, guint find_flags, AgsRecallID *recall_id); AgsRecallContainer* ags_recall_container_new(); #endif /*__AGS_RECALL_CONTAINER_H__*/ gsequencer-0.6.37/src/ags/audio/task/0000755000175000017500000000000012633241335014357 500000000000000gsequencer-0.6.37/src/ags/audio/task/ags_remove_region_from_selection.c0000644000175000017500000001433312626272146023237 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_remove_region_from_selection_class_init(AgsRemoveRegionFromSelectionClass *remove_region_from_selection); void ags_remove_region_from_selection_connectable_interface_init(AgsConnectableInterface *connectable); void ags_remove_region_from_selection_init(AgsRemoveRegionFromSelection *remove_region_from_selection); void ags_remove_region_from_selection_connect(AgsConnectable *connectable); void ags_remove_region_from_selection_disconnect(AgsConnectable *connectable); void ags_remove_region_from_selection_finalize(GObject *gobject); void ags_remove_region_from_selection_launch(AgsTask *task); /** * SECTION:ags_remove_region_to_selection * @short_description: remove region to notation selection * @title: AgsRemoveRegionToSelection * @section_id: * @include: ags/audio/task/ags_remove_region_to_selection.h * * The #AgsRemoveRegionToSelection task removes the specified #AgsNote to selection of #AgsNotation. */ static gpointer ags_remove_region_from_selection_parent_class = NULL; static AgsConnectableInterface *ags_remove_region_from_selection_parent_connectable_interface; GType ags_remove_region_from_selection_get_type() { static GType ags_type_remove_region_from_selection = 0; if(!ags_type_remove_region_from_selection){ static const GTypeInfo ags_remove_region_from_selection_info = { sizeof (AgsRemoveRegionFromSelectionClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_remove_region_from_selection_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsRemoveRegionFromSelection), 0, /* n_preallocs */ (GInstanceInitFunc) ags_remove_region_from_selection_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_remove_region_from_selection_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_remove_region_from_selection = g_type_register_static(AGS_TYPE_TASK, "AgsRemoveRegionFromSelection\0", &ags_remove_region_from_selection_info, 0); g_type_add_interface_static(ags_type_remove_region_from_selection, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_remove_region_from_selection); } void ags_remove_region_from_selection_class_init(AgsRemoveRegionFromSelectionClass *remove_region_from_selection) { GObjectClass *gobject; AgsTaskClass *task; ags_remove_region_from_selection_parent_class = g_type_class_peek_parent(remove_region_from_selection); /* gobject */ gobject = (GObjectClass *) remove_region_from_selection; gobject->finalize = ags_remove_region_from_selection_finalize; /* task */ task = (AgsTaskClass *) remove_region_from_selection; task->launch = ags_remove_region_from_selection_launch; } void ags_remove_region_from_selection_connectable_interface_init(AgsConnectableInterface *connectable) { ags_remove_region_from_selection_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_remove_region_from_selection_connect; connectable->disconnect = ags_remove_region_from_selection_disconnect; } void ags_remove_region_from_selection_init(AgsRemoveRegionFromSelection *remove_region_from_selection) { remove_region_from_selection->notation = NULL; remove_region_from_selection->x0 = 0; remove_region_from_selection->y0 = 0; remove_region_from_selection->x1 = 0; remove_region_from_selection->y1 = 0; } void ags_remove_region_from_selection_connect(AgsConnectable *connectable) { ags_remove_region_from_selection_parent_connectable_interface->connect(connectable); /* empty */ } void ags_remove_region_from_selection_disconnect(AgsConnectable *connectable) { ags_remove_region_from_selection_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_remove_region_from_selection_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_remove_region_from_selection_parent_class)->finalize(gobject); /* empty */ } void ags_remove_region_from_selection_launch(AgsTask *task) { AgsRemoveRegionFromSelection *remove_region_from_selection; remove_region_from_selection = AGS_REMOVE_REGION_FROM_SELECTION(task); /* add note */ ags_notation_remove_region_from_selection(remove_region_from_selection->notation, remove_region_from_selection->x0, remove_region_from_selection->y0, remove_region_from_selection->x1, remove_region_from_selection->y1); } /** * ags_remove_region_to_selection_new: * @notation: the #AgsNotation providing the selection * @x0: start x coordinate * @y0: start y coordinate * @x1: end x coordinate * @y1: end y coordinate * * Creates an #AgsRemoveRegionToSelection. * * Returns: an new #AgsRemoveRegionToSelection. * * Since: 0.4 */ AgsRemoveRegionFromSelection* ags_remove_region_from_selection_new(AgsNotation *notation, guint x0, guint y0, guint x1, guint y1) { AgsRemoveRegionFromSelection *remove_region_from_selection; remove_region_from_selection = (AgsRemoveRegionFromSelection *) g_object_new(AGS_TYPE_REMOVE_REGION_FROM_SELECTION, NULL); remove_region_from_selection->notation = notation; remove_region_from_selection->x0 = x0; remove_region_from_selection->y0 = y0; remove_region_from_selection->x1 = x1; remove_region_from_selection->y1 = y1; return(remove_region_from_selection); } gsequencer-0.6.37/src/ags/audio/task/ags_audio_set_recycling.h0000644000175000017500000000425212626272146021326 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_AUDIO_SET_RECYCLING_H__ #define __AGS_AUDIO_SET_RECYCLING_H__ #include #include #include #include #include #define AGS_TYPE_AUDIO_SET_RECYCLING (ags_audio_set_recycling_get_type()) #define AGS_AUDIO_SET_RECYCLING(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_AUDIO_SET_RECYCLING, AgsAudioSetRecycling)) #define AGS_AUDIO_SET_RECYCLING_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_AUDIO_SET_RECYCLING, AgsAudioSetRecyclingClass)) #define AGS_IS_AUDIO_SET_RECYCLING(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_AUDIO_SET_RECYCLING)) #define AGS_IS_AUDIO_SET_RECYCLING_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_AUDIO_SET_RECYCLING)) #define AGS_AUDIO_SET_RECYCLING_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_AUDIO_SET_RECYCLING, AgsAudioSetRecyclingClass)) typedef struct _AgsAudioSetRecycling AgsAudioSetRecycling; typedef struct _AgsAudioSetRecyclingClass AgsAudioSetRecyclingClass; struct _AgsAudioSetRecycling { AgsTask task; AgsAudio *audio; GParameter *parameter; }; struct _AgsAudioSetRecyclingClass { AgsTaskClass task; }; GType ags_audio_set_recycling_get_type(); AgsAudioSetRecycling* ags_audio_set_recycling_new(AgsAudio *audio, GParameter *parameter); #endif /*__AGS_AUDIO_SET_RECYCLING_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_add_audio.h0000644000175000017500000000361212626272146017223 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_ADD_AUDIO_H__ #define __AGS_ADD_AUDIO_H__ #include #include #include #include #define AGS_TYPE_ADD_AUDIO (ags_add_audio_get_type()) #define AGS_ADD_AUDIO(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_ADD_AUDIO, AgsAddAudio)) #define AGS_ADD_AUDIO_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_ADD_AUDIO, AgsAddAudioClass)) #define AGS_IS_ADD_AUDIO(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_ADD_AUDIO)) #define AGS_IS_ADD_AUDIO_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_ADD_AUDIO)) #define AGS_ADD_AUDIO_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_ADD_AUDIO, AgsAddAudioClass)) typedef struct _AgsAddAudio AgsAddAudio; typedef struct _AgsAddAudioClass AgsAddAudioClass; struct _AgsAddAudio { AgsTask task; AgsDevout *devout; AgsAudio *audio; }; struct _AgsAddAudioClass { AgsTaskClass task; }; GType ags_add_audio_get_type(); AgsAddAudio* ags_add_audio_new(AgsDevout *devout, AgsAudio *audio); #endif /*__AGS_ADD_AUDIO_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_free_selection.h0000644000175000017500000000373612626272146020307 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_FREE_SELECTION_H__ #define __AGS_FREE_SELECTION_H__ #include #include #include #include #define AGS_TYPE_FREE_SELECTION (ags_free_selection_get_type()) #define AGS_FREE_SELECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_FREE_SELECTION, AgsFreeSelection)) #define AGS_FREE_SELECTION_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_FREE_SELECTION, AgsFreeSelectionClass)) #define AGS_IS_FREE_SELECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_FREE_SELECTION)) #define AGS_IS_FREE_SELECTION_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_FREE_SELECTION)) #define AGS_FREE_SELECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_FREE_SELECTION, AgsFreeSelectionClass)) typedef struct _AgsFreeSelection AgsFreeSelection; typedef struct _AgsFreeSelectionClass AgsFreeSelectionClass; struct _AgsFreeSelection { AgsTask task; AgsNotation *notation; }; struct _AgsFreeSelectionClass { AgsTaskClass task; }; GType ags_free_selection_get_type(); AgsFreeSelection* ags_free_selection_new(AgsNotation *notation); #endif /*__AGS_FREE_SELECTION_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_seek_devout.h0000644000175000017500000000373112626272146017631 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_SEEK_DEVOUT_H__ #define __AGS_SEEK_DEVOUT_H__ #include #include #include #include #define AGS_TYPE_SEEK_DEVOUT (ags_seek_devout_get_type()) #define AGS_SEEK_DEVOUT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_SEEK_DEVOUT, AgsSeekDevout)) #define AGS_SEEK_DEVOUT_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_SEEK_DEVOUT, AgsSeekDevoutClass)) #define AGS_IS_SEEK_DEVOUT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_SEEK_DEVOUT)) #define AGS_IS_SEEK_DEVOUT_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_SEEK_DEVOUT)) #define AGS_SEEK_DEVOUT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_SEEK_DEVOUT, AgsSeekDevoutClass)) typedef struct _AgsSeekDevout AgsSeekDevout; typedef struct _AgsSeekDevoutClass AgsSeekDevoutClass; struct _AgsSeekDevout { AgsTask task; GObject *devout; guint steps; gboolean move_forward; }; struct _AgsSeekDevoutClass { AgsTaskClass task; }; GType ags_seek_devout_get_type(); AgsSeekDevout* ags_seek_devout_new(GObject *devout, guint steps, gboolean move_forward); #endif /*__AGS_SEEK_DEVOUT_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_unref_audio_signal.c0000644000175000017500000001066412626272146021147 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_unref_audio_signal_class_init(AgsUnrefAudioSignalClass *unref_audio_signal); void ags_unref_audio_signal_connectable_interface_init(AgsConnectableInterface *connectable); void ags_unref_audio_signal_init(AgsUnrefAudioSignal *unref_audio_signal); void ags_unref_audio_signal_connect(AgsConnectable *connectable); void ags_unref_audio_signal_disconnect(AgsConnectable *connectable); void ags_unref_audio_signal_finalize(GObject *gobject); void ags_unref_audio_signal_launch(AgsTask *task); static gpointer ags_unref_audio_signal_parent_class = NULL; static AgsConnectableInterface *ags_unref_audio_signal_parent_connectable_interface; GType ags_unref_audio_signal_get_type() { static GType ags_type_unref_audio_signal = 0; if(!ags_type_unref_audio_signal){ static const GTypeInfo ags_unref_audio_signal_info = { sizeof (AgsUnrefAudioSignalClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_unref_audio_signal_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsUnrefAudioSignal), 0, /* n_preallocs */ (GInstanceInitFunc) ags_unref_audio_signal_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_unref_audio_signal_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_unref_audio_signal = g_type_register_static(AGS_TYPE_TASK, "AgsUnrefAudioSignal\0", &ags_unref_audio_signal_info, 0); g_type_add_interface_static(ags_type_unref_audio_signal, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_unref_audio_signal); } void ags_unref_audio_signal_class_init(AgsUnrefAudioSignalClass *unref_audio_signal) { GObjectClass *gobject; AgsTaskClass *task; ags_unref_audio_signal_parent_class = g_type_class_peek_parent(unref_audio_signal); /* gobject */ gobject = (GObjectClass *) unref_audio_signal; gobject->finalize = ags_unref_audio_signal_finalize; /* task */ task = (AgsTaskClass *) unref_audio_signal; task->launch = ags_unref_audio_signal_launch; } void ags_unref_audio_signal_connectable_interface_init(AgsConnectableInterface *connectable) { ags_unref_audio_signal_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_unref_audio_signal_connect; connectable->disconnect = ags_unref_audio_signal_disconnect; } void ags_unref_audio_signal_init(AgsUnrefAudioSignal *unref_audio_signal) { unref_audio_signal->audio_signal = NULL; } void ags_unref_audio_signal_connect(AgsConnectable *connectable) { ags_unref_audio_signal_parent_connectable_interface->connect(connectable); /* empty */ } void ags_unref_audio_signal_disconnect(AgsConnectable *connectable) { ags_unref_audio_signal_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_unref_audio_signal_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_unref_audio_signal_parent_class)->finalize(gobject); /* empty */ } void ags_unref_audio_signal_launch(AgsTask *task) { AgsUnrefAudioSignal *unref_audio_signal; unref_audio_signal = AGS_UNREF_AUDIO_SIGNAL(task); /* cancel AgsRecall */ g_object_unref(unref_audio_signal->audio_signal); } AgsUnrefAudioSignal* ags_unref_audio_signal_new(AgsAudioSignal *audio_signal) { AgsUnrefAudioSignal *unref_audio_signal; unref_audio_signal = (AgsUnrefAudioSignal *) g_object_new(AGS_TYPE_UNREF_AUDIO_SIGNAL, NULL); unref_audio_signal->audio_signal = audio_signal; return(unref_audio_signal); } gsequencer-0.6.37/src/ags/audio/task/ags_resize_audio.c0000644000175000017500000001775412626272146020003 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include void ags_resize_audio_class_init(AgsResizeAudioClass *resize_audio); void ags_resize_audio_connectable_interface_init(AgsConnectableInterface *connectable); void ags_resize_audio_init(AgsResizeAudio *resize_audio); void ags_resize_audio_connect(AgsConnectable *connectable); void ags_resize_audio_disconnect(AgsConnectable *connectable); void ags_resize_audio_finalize(GObject *gobject); void ags_resize_audio_launch(AgsTask *task); /** * SECTION:ags_resize_audio * @short_description: resize audio object * @title: AgsResizeAudio * @section_id: * @include: ags/audio/task/ags_resize_audio.h * * The #AgsResizeAudio task resizes #AgsAudio. */ static gpointer ags_resize_audio_parent_class = NULL; static AgsConnectableInterface *ags_resize_audio_parent_connectable_interface; GType ags_resize_audio_get_type() { static GType ags_type_resize_audio = 0; if(!ags_type_resize_audio){ static const GTypeInfo ags_resize_audio_info = { sizeof (AgsResizeAudioClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_resize_audio_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsResizeAudio), 0, /* n_preallocs */ (GInstanceInitFunc) ags_resize_audio_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_resize_audio_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_resize_audio = g_type_register_static(AGS_TYPE_TASK, "AgsResizeAudio\0", &ags_resize_audio_info, 0); g_type_add_interface_static(ags_type_resize_audio, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_resize_audio); } void ags_resize_audio_class_init(AgsResizeAudioClass *resize_audio) { GObjectClass *gobject; AgsTaskClass *task; ags_resize_audio_parent_class = g_type_class_peek_parent(resize_audio); /* gobject */ gobject = (GObjectClass *) resize_audio; gobject->finalize = ags_resize_audio_finalize; /* task */ task = (AgsTaskClass *) resize_audio; task->launch = ags_resize_audio_launch; } void ags_resize_audio_connectable_interface_init(AgsConnectableInterface *connectable) { ags_resize_audio_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_resize_audio_connect; connectable->disconnect = ags_resize_audio_disconnect; } void ags_resize_audio_init(AgsResizeAudio *resize_audio) { resize_audio->audio = NULL; resize_audio->output_pads = 0; resize_audio->input_pads = 0; resize_audio->audio_channels = 0; } void ags_resize_audio_connect(AgsConnectable *connectable) { ags_resize_audio_parent_connectable_interface->connect(connectable); /* empty */ } void ags_resize_audio_disconnect(AgsConnectable *connectable) { ags_resize_audio_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_resize_audio_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_resize_audio_parent_class)->finalize(gobject); /* empty */ } void ags_resize_audio_launch(AgsTask *task) { AgsResizeAudio *resize_audio; AgsMachine *machine; AgsChannel *iter; GList *list, *list_start; guint pads_old; resize_audio = AGS_RESIZE_AUDIO(task); /* resize audio */ if(resize_audio->audio->output_pads != resize_audio->output_pads){ pads_old = resize_audio->audio->output_pads; ags_audio_set_pads(resize_audio->audio, AGS_TYPE_OUTPUT, resize_audio->output_pads); if(pads_old < resize_audio->audio->output_pads){ iter = ags_channel_pad_nth(resize_audio->audio->input, pads_old); while(iter != NULL){ ags_connectable_connect(AGS_CONNECTABLE(iter)); iter = iter->next; } } machine = (AgsMachine *) resize_audio->audio->machine; list_start = list = gtk_container_get_children(machine->output); list = g_list_nth(list, pads_old); while(list != NULL){ ags_connectable_connect(AGS_CONNECTABLE(list->data)); gtk_widget_show_all(list->data); list = list->next; } g_list_free(list_start); } if(resize_audio->audio->input_pads != resize_audio->input_pads){ pads_old = resize_audio->audio->input_pads; ags_audio_set_pads(resize_audio->audio, AGS_TYPE_INPUT, resize_audio->input_pads); if(pads_old < resize_audio->audio->output_pads){ iter = ags_channel_pad_nth(resize_audio->audio->input, pads_old); while(iter != NULL){ ags_connectable_connect(AGS_CONNECTABLE(iter)); iter = iter->next; } } machine = (AgsMachine *) resize_audio->audio->machine; list_start = list = gtk_container_get_children(machine->input); list = g_list_nth(list, pads_old); while(list != NULL){ ags_connectable_connect(AGS_CONNECTABLE(list->data)); gtk_widget_show_all(list->data); list = list->next; } g_list_free(list_start); } if(resize_audio->audio->audio_channels != resize_audio->audio_channels){ AgsPad *pad; GList *line, *line_start; guint audio_channels_old; audio_channels_old = resize_audio->audio->audio_channels; ags_audio_set_audio_channels(resize_audio->audio, resize_audio->audio_channels); if(resize_audio->audio_channels > audio_channels_old){ machine = (AgsMachine *) resize_audio->audio->machine; list_start = list = gtk_container_get_children(machine->output); while(list != NULL){ pad = list->data; line = g_list_reverse(gtk_container_get_children(pad->expander_set)); line = g_list_nth(line, audio_channels_old); while(line != NULL){ ags_connectable_connect(AGS_CONNECTABLE(line->data)); gtk_widget_show_all(line->data); line = line->next; } list = list->next; } g_list_free(list_start); list_start = list = gtk_container_get_children(machine->input); while(list != NULL){ pad = list->data; line = g_list_reverse(gtk_container_get_children(pad->expander_set)); line = g_list_nth(line, audio_channels_old); while(line != NULL){ ags_connectable_connect(AGS_CONNECTABLE(line->data)); gtk_widget_show_all(line->data); line = line->next; } list = list->next; } g_list_free(list_start); } } } /** * ags_resize_audio_new: * @audio: the #AgsAudio to resize * @output_pads: output pads * @input_pads: input pads * @audio_channels: audio channels * * Creates an #AgsResizeAudio. * * Returns: an new #AgsResizeAudio. * * Since: 0.4 */ AgsResizeAudio* ags_resize_audio_new(AgsAudio *audio, guint output_pads, guint input_pads, guint audio_channels) { AgsResizeAudio *resize_audio; resize_audio = (AgsResizeAudio *) g_object_new(AGS_TYPE_RESIZE_AUDIO, NULL); resize_audio->audio = audio; resize_audio->output_pads = output_pads; resize_audio->input_pads = input_pads; resize_audio->audio_channels = audio_channels; return(resize_audio); } gsequencer-0.6.37/src/ags/audio/task/ags_audio_set_recycling.c0000644000175000017500000001570012626272146021321 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include void ags_audio_set_recycling_class_init(AgsAudioSetRecyclingClass *audio_set_recycling); void ags_audio_set_recycling_connectable_interface_init(AgsConnectableInterface *connectable); void ags_audio_set_recycling_init(AgsAudioSetRecycling *audio_set_recycling); void ags_audio_set_recycling_connect(AgsConnectable *connectable); void ags_audio_set_recycling_disconnect(AgsConnectable *connectable); void ags_audio_set_recycling_finalize(GObject *gobject); void ags_audio_set_recycling_launch(AgsTask *task); static gpointer ags_audio_set_recycling_parent_class = NULL; static AgsConnectableInterface *ags_audio_set_recycling_parent_connectable_interface; GType ags_audio_set_recycling_get_type() { static GType ags_type_audio_set_recycling = 0; if(!ags_type_audio_set_recycling){ static const GTypeInfo ags_audio_set_recycling_info = { sizeof (AgsAudioSetRecyclingClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_audio_set_recycling_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsAudioSetRecycling), 0, /* n_preallocs */ (GInstanceInitFunc) ags_audio_set_recycling_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_audio_set_recycling_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_audio_set_recycling = g_type_register_static(AGS_TYPE_TASK, "AgsAudioSetRecycling\0", &ags_audio_set_recycling_info, 0); g_type_add_interface_static(ags_type_audio_set_recycling, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_audio_set_recycling); } void ags_audio_set_recycling_class_init(AgsAudioSetRecyclingClass *audio_set_recycling) { GObjectClass *gobject; AgsTaskClass *task; ags_audio_set_recycling_parent_class = g_type_class_peek_parent(audio_set_recycling); /* GObjectClass */ gobject = (GObjectClass *) audio_set_recycling; gobject->finalize = ags_audio_set_recycling_finalize; /* AgsTaskClass */ task = (AgsTaskClass *) audio_set_recycling; task->launch = ags_audio_set_recycling_launch; } void ags_audio_set_recycling_connectable_interface_init(AgsConnectableInterface *connectable) { ags_audio_set_recycling_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_audio_set_recycling_connect; connectable->disconnect = ags_audio_set_recycling_disconnect; } void ags_audio_set_recycling_init(AgsAudioSetRecycling *audio_set_recycling) { audio_set_recycling->audio = NULL; audio_set_recycling->parameter = NULL; } void ags_audio_set_recycling_connect(AgsConnectable *connectable) { ags_audio_set_recycling_parent_connectable_interface->connect(connectable); /* empty */ } void ags_audio_set_recycling_disconnect(AgsConnectable *connectable) { ags_audio_set_recycling_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_audio_set_recycling_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_audio_set_recycling_parent_class)->finalize(gobject); /* empty */ } void ags_audio_set_recycling_launch(AgsTask *task) { AgsAudioSetRecycling *audio_set_recycling; AgsChannel *channel, *start_channel, *end_channel; AgsRecycling *recycling, *start_recycling, *end_recycling; GParameter *parameter; GList *link; GError *error; int i; auto void ags_audio_set_recycling_launch_read_parameter(); void ags_audio_set_recycling_launch_read_parameter(){ int i; for(i = 0; i < 4; i++){ if(!strncmp("start_channel\0", parameter[i].name, 13)){ start_channel = (AgsChannel *) g_value_get_object(&(parameter[i].value)); }else if(!strncmp("end_channel\0", parameter[i].name, 11)){ end_channel = (AgsChannel *) g_value_get_object(&(parameter[i].value)); }else if(!strncmp("start_recycling\0", parameter[i].name, 15)){ start_recycling = (AgsRecycling *) g_value_get_object(&(parameter[i].value)); }else if(!strncmp("end_recycling\0", parameter[i].name, 13)){ end_recycling = (AgsRecycling *) g_value_get_object(&(parameter[i].value)); }else{ g_error("ags_audio_set_recycling_launch_read_parameter: unknow Parameter\0"); } } } parameter = audio_set_recycling->parameter; audio_set_recycling = AGS_AUDIO_SET_RECYCLING(task); for(i = 0; i < audio_set_recycling->audio->audio_channels; i++){ ags_audio_set_recycling_launch_read_parameter(); /* unset link */ channel = start_channel; link = NULL; while(channel != end_channel){ link = g_list_prepend(link, channel->link); error = NULL; ags_channel_set_link(channel, NULL, &error); if(error != NULL){ g_error("%s\0", error->message); } channel = channel->next_pad; } link = g_list_reverse(link); /* set recycling */ channel = start_channel; recycling = start_recycling; while(channel != end_channel && recycling != end_recycling->next){ link = g_list_prepend(link, channel->link); error = NULL; ags_channel_set_recycling(channel, recycling, recycling, TRUE, TRUE); if(error != NULL){ g_error("%s\0", error->message); } channel = channel->next_pad; } /* reset link */ channel = start_channel; while(channel != end_channel){ error = NULL; ags_channel_set_link(channel, AGS_CHANNEL(link->data), &error); if(error != NULL){ g_error("%s\0", error->message); } channel = channel->next_pad; link = link->next; } } } AgsAudioSetRecycling* ags_audio_set_recycling_new(AgsAudio *audio, GParameter *parameter) { AgsAudioSetRecycling *audio_set_recycling; audio_set_recycling = (AgsAudioSetRecycling *) g_object_new(AGS_TYPE_AUDIO_SET_RECYCLING, NULL); audio_set_recycling->audio = audio; audio_set_recycling->parameter = parameter; return(audio_set_recycling); } gsequencer-0.6.37/src/ags/audio/task/ags_set_samplerate.c0000644000175000017500000001657712626272146020333 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include void ags_set_samplerate_class_init(AgsSetSamplerateClass *set_samplerate); void ags_set_samplerate_connectable_interface_init(AgsConnectableInterface *connectable); void ags_set_samplerate_init(AgsSetSamplerate *set_samplerate); void ags_set_samplerate_connect(AgsConnectable *connectable); void ags_set_samplerate_disconnect(AgsConnectable *connectable); void ags_set_samplerate_finalize(GObject *gobject); void ags_set_samplerate_launch(AgsTask *task); void ags_set_samplerate_audio_signal(AgsSetSamplerate *set_samplerate, AgsAudioSignal *audio_signal); void ags_set_samplerate_recycling(AgsSetSamplerate *set_samplerate, AgsRecycling *recycling); void ags_set_samplerate_channel(AgsSetSamplerate *set_samplerate, AgsChannel *channel); void ags_set_samplerate_audio(AgsSetSamplerate *set_samplerate, AgsAudio *audio); void ags_set_samplerate_devout(AgsSetSamplerate *set_samplerate, AgsDevout *devout); /** * SECTION:ags_set_samplerate * @short_description: modifies samplerate * @title: AgsSetSamplerate * @section_id: * @include: ags/audio/task/ags_set_samplerate.h * * The #AgsSetSamplerate task modifies samplerate of #AgsDevout. */ static gpointer ags_set_samplerate_parent_class = NULL; static AgsConnectableInterface *ags_set_samplerate_parent_connectable_interface; GType ags_set_samplerate_get_type() { static GType ags_type_set_samplerate = 0; if(!ags_type_set_samplerate){ static const GTypeInfo ags_set_samplerate_info = { sizeof (AgsSetSamplerateClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_set_samplerate_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsSetSamplerate), 0, /* n_preallocs */ (GInstanceInitFunc) ags_set_samplerate_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_set_samplerate_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_set_samplerate = g_type_register_static(AGS_TYPE_TASK, "AgsSetSamplerate\0", &ags_set_samplerate_info, 0); g_type_add_interface_static(ags_type_set_samplerate, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_set_samplerate); } void ags_set_samplerate_class_init(AgsSetSamplerateClass *set_samplerate) { GObjectClass *gobject; AgsTaskClass *task; ags_set_samplerate_parent_class = g_type_class_peek_parent(set_samplerate); /* gobject */ gobject = (GObjectClass *) set_samplerate; gobject->finalize = ags_set_samplerate_finalize; /* task */ task = (AgsTaskClass *) set_samplerate; task->launch = ags_set_samplerate_launch; } void ags_set_samplerate_connectable_interface_init(AgsConnectableInterface *connectable) { ags_set_samplerate_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_set_samplerate_connect; connectable->disconnect = ags_set_samplerate_disconnect; } void ags_set_samplerate_init(AgsSetSamplerate *set_samplerate) { set_samplerate->gobject = NULL; set_samplerate->samplerate = 44100; } void ags_set_samplerate_connect(AgsConnectable *connectable) { ags_set_samplerate_parent_connectable_interface->connect(connectable); /* empty */ } void ags_set_samplerate_disconnect(AgsConnectable *connectable) { ags_set_samplerate_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_set_samplerate_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_set_samplerate_parent_class)->finalize(gobject); /* empty */ } void ags_set_samplerate_launch(AgsTask *task) { AgsSetSamplerate *set_samplerate; GObject *gobject; set_samplerate = AGS_SET_SAMPLERATE(task); gobject = set_samplerate->gobject; if(AGS_IS_DEVOUT(gobject)){ ags_set_samplerate_devout(set_samplerate, AGS_DEVOUT(gobject)); }else if(AGS_IS_AUDIO(gobject)){ ags_set_samplerate_audio(set_samplerate, AGS_AUDIO(gobject)); }else if(AGS_IS_CHANNEL(gobject)){ ags_set_samplerate_channel(set_samplerate, AGS_CHANNEL(gobject)); }else if(AGS_IS_RECYCLING(gobject)){ ags_set_samplerate_recycling(set_samplerate, AGS_RECYCLING(gobject)); }else if(AGS_IS_AUDIO_SIGNAL(gobject)){ ags_set_samplerate_audio_signal(set_samplerate, AGS_AUDIO_SIGNAL(gobject)); } } void ags_set_samplerate_audio_signal(AgsSetSamplerate *set_samplerate, AgsAudioSignal *audio_signal) { ags_audio_signal_morph_samplerate(audio_signal, set_samplerate->samplerate, 0.0); } void ags_set_samplerate_recycling(AgsSetSamplerate *set_samplerate, AgsRecycling *recycling) { GList *list; list = recycling->audio_signal; while(list != NULL){ ags_set_samplerate_audio_signal(set_samplerate, AGS_AUDIO_SIGNAL(list->data)); list = list->next; } } void ags_set_samplerate_channel(AgsSetSamplerate *set_samplerate, AgsChannel *channel) { AgsRecycling *recycling; recycling = channel->first_recycling; while(recycling != NULL){ ags_set_samplerate_recycling(set_samplerate, recycling); recycling = recycling->next; } } void ags_set_samplerate_audio(AgsSetSamplerate *set_samplerate, AgsAudio *audio) { AgsChannel *channel; /* AgsOutput */ channel = audio->output; while(channel != NULL){ ags_set_samplerate_channel(set_samplerate, channel); channel = channel->next; } /* AgsInput */ channel = audio->input; while(channel != NULL){ ags_set_samplerate_channel(set_samplerate, channel); channel = channel->next; } } void ags_set_samplerate_devout(AgsSetSamplerate *set_samplerate, AgsDevout *devout) { GList *list; g_object_set(G_OBJECT(devout), "frequency\0", (guint) set_samplerate->samplerate, NULL); /* AgsAudio */ list = devout->audio; while(list != NULL){ ags_set_samplerate_audio(set_samplerate, AGS_AUDIO(list->data)); list = list->next; } } /** * ags_set_samplerate_new: * @devout: the #AgsDevout to reset * @samplerate: the new samplerate * * Creates an #AgsSetSamplerate. * * Returns: an new #AgsSetSamplerate. * * Since: 0.4 */ AgsSetSamplerate* ags_set_samplerate_new(GObject *gobject, guint samplerate) { AgsSetSamplerate *set_samplerate; set_samplerate = (AgsSetSamplerate *) g_object_new(AGS_TYPE_SET_SAMPLERATE, NULL); set_samplerate->gobject = gobject; set_samplerate->samplerate = samplerate; return(set_samplerate); } gsequencer-0.6.37/src/ags/audio/task/ags_apply_synth.c0000644000175000017500000002450712626272146017665 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include void ags_apply_synth_class_init(AgsApplySynthClass *apply_synth); void ags_apply_synth_connectable_interface_init(AgsConnectableInterface *connectable); void ags_apply_synth_init(AgsApplySynth *apply_synth); void ags_apply_synth_connect(AgsConnectable *connectable); void ags_apply_synth_disconnect(AgsConnectable *connectable); void ags_apply_synth_finalize(GObject *gobject); void ags_apply_synth_launch(AgsTask *task); extern AgsConfig *config; /** * SECTION:ags_apply_synth * @short_description: apply synth to channel * @title: AgsApplySynth * @section_id: * @include: ags/synth/task/ags_apply_synth.h * * The #AgsApplySynth task apply the specified synth to channel. */ static gpointer ags_apply_synth_parent_class = NULL; static AgsConnectableInterface *ags_apply_synth_parent_connectable_interface; GType ags_apply_synth_get_type() { static GType ags_type_apply_synth = 0; if(!ags_type_apply_synth){ static const GTypeInfo ags_apply_synth_info = { sizeof (AgsApplySynthClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_apply_synth_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsApplySynth), 0, /* n_preallocs */ (GInstanceInitFunc) ags_apply_synth_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_apply_synth_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_apply_synth = g_type_register_static(AGS_TYPE_TASK, "AgsApplySynth\0", &ags_apply_synth_info, 0); g_type_add_interface_static(ags_type_apply_synth, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_apply_synth); } void ags_apply_synth_class_init(AgsApplySynthClass *apply_synth) { GObjectClass *gobject; AgsTaskClass *task; ags_apply_synth_parent_class = g_type_class_peek_parent(apply_synth); /* GObjectClass */ gobject = (GObjectClass *) apply_synth; gobject->finalize = ags_apply_synth_finalize; /* AgsTaskClass */ task = (AgsTaskClass *) apply_synth; task->launch = ags_apply_synth_launch; } void ags_apply_synth_connectable_interface_init(AgsConnectableInterface *connectable) { ags_apply_synth_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_apply_synth_connect; connectable->disconnect = ags_apply_synth_disconnect; } void ags_apply_synth_init(AgsApplySynth *apply_synth) { apply_synth->start_channel = NULL; apply_synth->count = 0; apply_synth->wave = AGS_APPLY_SYNTH_INVALID; apply_synth->attack = 0; apply_synth->frame_count = 0; apply_synth->phase = 0; apply_synth->start = 0; apply_synth->volume = 1.0; apply_synth->loop_start = 0; apply_synth->loop_end = 0; } void ags_apply_synth_connect(AgsConnectable *connectable) { ags_apply_synth_parent_connectable_interface->connect(connectable); /* empty */ } void ags_apply_synth_disconnect(AgsConnectable *connectable) { ags_apply_synth_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_apply_synth_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_apply_synth_parent_class)->finalize(gobject); /* empty */ } void ags_apply_synth_launch(AgsTask *task) { AgsDevout *devout; AgsChannel *channel; AgsAudioSignal *audio_signal; AgsApplySynth *apply_synth; GList *stream; gint wave; guint attack, frame_count, stop, phase, frequency; double volume; guint current_attack, current_frame_count, current_stop, current_phase[2], current_frequency; guint stream_start, last_frame_count; guint i, j; double factor; guint buffer_size; guint samplerate; gchar *str; double ags_apply_synth_calculate_factor(guint base_frequency, guint wished_frequency, guint wave){ double factor; factor = ((1.0 / base_frequency) * (wished_frequency)); return(factor); } void ags_apply_synth_launch_write(guint offset, guint frequency, guint phase, guint frame_count, double volume){ switch(wave){ case AGS_APPLY_SYNTH_SIN: ags_synth_sin(devout, (signed short *) stream->data, offset, frequency, phase, frame_count, volume); break; case AGS_APPLY_SYNTH_SAW: ags_synth_saw(devout, (signed short *) stream->data, offset, frequency, phase, frame_count, volume); break; case AGS_APPLY_SYNTH_SQUARE: ags_synth_square(devout, (signed short *) stream->data, offset, frequency, phase, frame_count, volume); break; case AGS_APPLY_SYNTH_TRIANGLE: ags_synth_triangle(devout, (signed short *) stream->data, offset, frequency, phase, frame_count, volume); break; default: g_warning("ags_apply_synth_launch_write: warning no wave selected\n\0"); } } apply_synth = AGS_APPLY_SYNTH(task); channel = apply_synth->start_channel; devout = AGS_DEVOUT(AGS_AUDIO(channel->audio)->devout); str = ags_config_get(config, AGS_CONFIG_DEVOUT, "buffer-size\0"); buffer_size = g_ascii_strtoull(str, NULL, 10); free(str); str = ags_config_get(config, AGS_CONFIG_DEVOUT, "samplerate\0"); samplerate = g_ascii_strtoull(str, NULL, 10); free(str); wave = (gint) apply_synth->wave; g_message("wave = %d\n\0", wave); /* some settings */ frequency = apply_synth->frequency; volume = (double) apply_synth->volume; /* settings which needs to be initialized for factorizing */ attack = apply_synth->attack; frame_count = apply_synth->frame_count; stop = (guint) ceil((double)(attack + frame_count) / (double) buffer_size); phase = apply_synth->phase; //TODO:JK: // attack = attack % (guint) buffer_size; current_phase[0] = (phase + (buffer_size - attack) + i * buffer_size) % frequency; factor = 1.0; for(i = 0; channel != NULL; i++){ /* calculate wished frequncy and phase */ current_frequency = (guint) ((double) frequency * exp2((double)((apply_synth->start * -1.0) + (double)i) / 12.0)); current_phase[0] = (guint) ((double) phase * ((double) frequency / (double) current_frequency)); /* settings which needs to be factorized */ factor = ags_apply_synth_calculate_factor(frequency, current_frequency, wave); current_attack = (guint) (factor * attack) % (guint) buffer_size; current_frame_count = frame_count * factor; current_stop = (guint) ceil((double)(current_attack + current_frame_count) / (double)buffer_size); current_phase[0] = ((guint)(factor * phase) + (buffer_size - current_attack) + i * buffer_size) % current_frequency; stream_start = (guint) floor((double)current_attack / (double) buffer_size); last_frame_count = (current_frame_count - buffer_size - current_attack) % buffer_size; /* create AgsAudioSignal */ audio_signal = ags_audio_signal_get_template(channel->first_recycling->audio_signal); if(audio_signal->length < current_stop) ags_audio_signal_stream_resize(audio_signal, stop); audio_signal->loop_start = (guint) ((double) apply_synth->loop_start) * factor; audio_signal->loop_end = (guint) ((double) apply_synth->loop_end) * factor; /* fill in the stream */ stream = g_list_nth(audio_signal->stream_beginning, stream_start); if(stream->next != NULL){ g_message("freq = %u, phase = %u\n\0", current_frequency, current_phase[0]); ags_apply_synth_launch_write(attack, current_frequency, current_phase[0], buffer_size - attack, volume); }else{ ags_apply_synth_launch_write(attack, current_frequency, current_phase[0], frame_count, volume); channel = channel->next; continue; } stream = stream->next; for(j = 1; stream->next != NULL; j++){ current_phase[1] = (j * buffer_size + current_phase[0]) % (samplerate / current_frequency); g_message("freq = %u, phase = %u\n\0", current_frequency, current_phase[1]); ags_apply_synth_launch_write(0, frequency, current_phase[1], buffer_size, volume); stream = stream->next; } current_phase[1] = (current_phase[0] + (buffer_size - attack) + j * buffer_size) % current_frequency; ags_apply_synth_launch_write(0, current_frequency, current_phase[1], last_frame_count, volume); channel = channel->next; } } /** * ags_apply_synth_new: * @start_channel: * @count: * @wave: * @attack: * @frame_count: * @frequency: * @phase: * @start: * @volume: * @loop_start: * @loop_end: * * Creates an #AgsApplySynth. * * Returns: an new #AgsApplySynth. * * Since: 0.4 */ AgsApplySynth* ags_apply_synth_new(AgsChannel *start_channel, guint count, guint wave, guint attack, guint frame_count, guint frequency, guint phase, guint start, gdouble volume, guint loop_start, guint loop_end) { AgsApplySynth *apply_synth; apply_synth = (AgsApplySynth *) g_object_new(AGS_TYPE_APPLY_SYNTH, NULL); apply_synth->start_channel = start_channel; apply_synth->count = count; apply_synth->wave = wave; apply_synth->attack = attack; apply_synth->frame_count = frame_count; apply_synth->frequency = frequency; apply_synth->phase = phase; apply_synth->start = start; apply_synth->volume = volume; apply_synth->loop_start = loop_start; apply_synth->loop_end = loop_end; return(apply_synth); } gsequencer-0.6.37/src/ags/audio/task/ags_remove_note.c0000644000175000017500000001112012626272146017620 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_remove_note_class_init(AgsRemoveNoteClass *remove_note); void ags_remove_note_connectable_interface_init(AgsConnectableInterface *connectable); void ags_remove_note_init(AgsRemoveNote *remove_note); void ags_remove_note_connect(AgsConnectable *connectable); void ags_remove_note_disconnect(AgsConnectable *connectable); void ags_remove_note_finalize(GObject *gobject); void ags_remove_note_launch(AgsTask *task); /** * SECTION:ags_remove_note * @short_description: remove note object to notation * @title: AgsRemoveNote * @section_id: * @include: ags/audio/task/ags_remove_note.h * * The #AgsRemoveNote task removes #AgsNote to #AgsNotation. */ static gpointer ags_remove_note_parent_class = NULL; static AgsConnectableInterface *ags_remove_note_parent_connectable_interface; GType ags_remove_note_get_type() { static GType ags_type_remove_note = 0; if(!ags_type_remove_note){ static const GTypeInfo ags_remove_note_info = { sizeof (AgsRemoveNoteClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_remove_note_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsRemoveNote), 0, /* n_preallocs */ (GInstanceInitFunc) ags_remove_note_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_remove_note_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_remove_note = g_type_register_static(AGS_TYPE_TASK, "AgsRemoveNote\0", &ags_remove_note_info, 0); g_type_add_interface_static(ags_type_remove_note, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_remove_note); } void ags_remove_note_class_init(AgsRemoveNoteClass *remove_note) { GObjectClass *gobject; AgsTaskClass *task; ags_remove_note_parent_class = g_type_class_peek_parent(remove_note); /* gobject */ gobject = (GObjectClass *) remove_note; gobject->finalize = ags_remove_note_finalize; /* task */ task = (AgsTaskClass *) remove_note; task->launch = ags_remove_note_launch; } void ags_remove_note_connectable_interface_init(AgsConnectableInterface *connectable) { ags_remove_note_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_remove_note_connect; connectable->disconnect = ags_remove_note_disconnect; } void ags_remove_note_init(AgsRemoveNote *remove_note) { remove_note->notation = NULL; remove_note->x = 0; remove_note->y = 0; } void ags_remove_note_connect(AgsConnectable *connectable) { ags_remove_note_parent_connectable_interface->connect(connectable); /* empty */ } void ags_remove_note_disconnect(AgsConnectable *connectable) { ags_remove_note_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_remove_note_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_remove_note_parent_class)->finalize(gobject); /* empty */ } void ags_remove_note_launch(AgsTask *task) { AgsRemoveNote *remove_note; remove_note = AGS_REMOVE_NOTE(task); /* remove note */ ags_notation_remove_note_at_position(remove_note->notation, remove_note->x, remove_note->y); } /** * ags_remove_note_new: * @notation: the #AgsNotation * @x: the x coordinate of #AgsNote * @y: the y coordinate of #AgsNote * * Creates an #AgsRemoveNote. * * Returns: an new #AgsRemoveNote. * * Since: 0.4 */ AgsRemoveNote* ags_remove_note_new(AgsNotation *notation, guint x, guint y) { AgsRemoveNote *remove_note; remove_note = (AgsRemoveNote *) g_object_new(AGS_TYPE_REMOVE_NOTE, NULL); remove_note->notation = notation; remove_note->x = x; remove_note->y = y; return(remove_note); } gsequencer-0.6.37/src/ags/audio/task/ags_change_tact.c0000644000175000017500000001145212626272146017546 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include void ags_change_tact_class_init(AgsChangeTactClass *change_tact); void ags_change_tact_connectable_interface_init(AgsConnectableInterface *connectable); void ags_change_tact_init(AgsChangeTact *change_tact); void ags_change_tact_connect(AgsConnectable *connectable); void ags_change_tact_disconnect(AgsConnectable *connectable); void ags_change_tact_finalize(GObject *gobject); void ags_change_tact_launch(AgsTask *task); static gpointer ags_change_tact_parent_class = NULL; static AgsConnectableInterface *ags_change_tact_parent_connectable_interface; GType ags_change_tact_get_type() { static GType ags_type_change_tact = 0; if(!ags_type_change_tact){ static const GTypeInfo ags_change_tact_info = { sizeof (AgsChangeTactClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_change_tact_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsChangeTact), 0, /* n_preallocs */ (GInstanceInitFunc) ags_change_tact_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_change_tact_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_change_tact = g_type_register_static(AGS_TYPE_TASK, "AgsChangeTact\0", &ags_change_tact_info, 0); g_type_add_interface_static(ags_type_change_tact, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_change_tact); } void ags_change_tact_class_init(AgsChangeTactClass *change_tact) { GObjectClass *gobject; AgsTaskClass *task; ags_change_tact_parent_class = g_type_class_peek_parent(change_tact); /* gobject */ gobject = (GObjectClass *) change_tact; gobject->finalize = ags_change_tact_finalize; /* task */ task = (AgsTaskClass *) change_tact; task->launch = ags_change_tact_launch; } void ags_change_tact_connectable_interface_init(AgsConnectableInterface *connectable) { ags_change_tact_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_change_tact_connect; connectable->disconnect = ags_change_tact_disconnect; } void ags_change_tact_init(AgsChangeTact *change_tact) { change_tact->navigation = NULL; } void ags_change_tact_connect(AgsConnectable *connectable) { ags_change_tact_parent_connectable_interface->connect(connectable); /* empty */ } void ags_change_tact_disconnect(AgsConnectable *connectable) { ags_change_tact_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_change_tact_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_change_tact_parent_class)->finalize(gobject); /* empty */ } void ags_change_tact_launch(AgsTask *task) { gdouble tact; if(!gtk_toggle_button_get_active((GtkToggleButton *) AGS_CHANGE_TACT(task)->navigation->scroll)){ return; } AGS_CHANGE_TACT(task)->navigation->flags |= AGS_NAVIGATION_BLOCK_TACT; tact = gtk_spin_button_get_value(AGS_CHANGE_TACT(task)->navigation->position_tact); if(!gtk_toggle_button_get_active((GtkToggleButton *) AGS_CHANGE_TACT(task)->navigation->loop) || tact + AGS_NAVIGATION_DEFAULT_TACT_STEP < gtk_spin_button_get_value(AGS_CHANGE_TACT(task)->navigation->loop_right_tact)){ gtk_spin_button_set_value(AGS_CHANGE_TACT(task)->navigation->position_tact, tact + AGS_NAVIGATION_DEFAULT_TACT_STEP); }else{ gtk_spin_button_set_value(AGS_CHANGE_TACT(task)->navigation->position_tact, gtk_spin_button_get_value(AGS_CHANGE_TACT(task)->navigation->loop_left_tact)); } AGS_CHANGE_TACT(task)->navigation->flags &= (~AGS_NAVIGATION_BLOCK_TACT); } AgsChangeTact* ags_change_tact_new(AgsNavigation *navigation) { AgsChangeTact *change_tact; change_tact = (AgsChangeTact *) g_object_new(AGS_TYPE_CHANGE_TACT, NULL); change_tact->navigation = navigation; return(change_tact); } gsequencer-0.6.37/src/ags/audio/task/ags_cancel_channel.h0000644000175000017500000000414112626272146020225 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_CANCEL_CHANNEL_H__ #define __AGS_CANCEL_CHANNEL_H__ #include #include #include #include #include #define AGS_TYPE_CANCEL_CHANNEL (ags_cancel_channel_get_type()) #define AGS_CANCEL_CHANNEL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_CANCEL_CHANNEL, AgsCancelChannel)) #define AGS_CANCEL_CHANNEL_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_CANCEL_CHANNEL, AgsCancelChannelClass)) #define AGS_IS_CANCEL_CHANNEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_CANCEL_CHANNEL)) #define AGS_IS_CANCEL_CHANNEL_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_CANCEL_CHANNEL)) #define AGS_CANCEL_CHANNEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_CANCEL_CHANNEL, AgsCancelChannelClass)) typedef struct _AgsCancelChannel AgsCancelChannel; typedef struct _AgsCancelChannelClass AgsCancelChannelClass; struct _AgsCancelChannel { AgsTask task; AgsChannel *channel; AgsRecallID *recall_id; AgsDevoutPlay *play; }; struct _AgsCancelChannelClass { AgsTaskClass task; }; GType ags_cancel_channel_get_type(); AgsCancelChannel* ags_cancel_channel_new(AgsChannel *channel, AgsRecallID *recall_id, AgsDevoutPlay *play); #endif /*__AGS_CANCEL_CHANNEL_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_start_read_file.c0000644000175000017500000001131312633014206020416 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include void ags_start_read_file_class_init(AgsStartReadFileClass *start_read_file); void ags_start_read_file_connectable_interface_init(AgsConnectableInterface *connectable); void ags_start_read_file_init(AgsStartReadFile *start_read_file); void ags_start_read_file_connect(AgsConnectable *connectable); void ags_start_read_file_disconnect(AgsConnectable *connectable); void ags_start_read_file_finalize(GObject *gobject); void ags_start_read_file_launch(AgsTask *task); /** * SECTION:ags_start_read_file * @short_description: start devout object * @title: AgsStartReadFile * @section_id: * @include: ags/audio/task/ags_start_read_file.h * * The #AgsStartReadFile task starts devout. */ static gpointer ags_start_read_file_parent_class = NULL; static AgsConnectableInterface *ags_start_read_file_parent_connectable_interface; GType ags_start_read_file_get_type() { static GType ags_type_start_read_file = 0; if(!ags_type_start_read_file){ static const GTypeInfo ags_start_read_file_info = { sizeof (AgsStartReadFileClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_start_read_file_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsStartReadFile), 0, /* n_preallocs */ (GInstanceInitFunc) ags_start_read_file_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_start_read_file_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_start_read_file = g_type_register_static(AGS_TYPE_TASK, "AgsStartReadFile\0", &ags_start_read_file_info, 0); g_type_add_interface_static(ags_type_start_read_file, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_start_read_file); } void ags_start_read_file_class_init(AgsStartReadFileClass *start_read_file) { GObjectClass *gobject; AgsTaskClass *task; ags_start_read_file_parent_class = g_type_class_peek_parent(start_read_file); /* gobject */ gobject = (GObjectClass *) start_read_file; gobject->finalize = ags_start_read_file_finalize; /* task */ task = (AgsTaskClass *) start_read_file; task->launch = ags_start_read_file_launch; } void ags_start_read_file_connectable_interface_init(AgsConnectableInterface *connectable) { ags_start_read_file_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_start_read_file_connect; connectable->disconnect = ags_start_read_file_disconnect; } void ags_start_read_file_init(AgsStartReadFile *start_read_file) { start_read_file->file = NULL; } void ags_start_read_file_connect(AgsConnectable *connectable) { ags_start_read_file_parent_connectable_interface->connect(connectable); /* empty */ } void ags_start_read_file_disconnect(AgsConnectable *connectable) { ags_start_read_file_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_start_read_file_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_start_read_file_parent_class)->finalize(gobject); /* empty */ } void ags_start_read_file_launch(AgsTask *task) { AgsStartReadFile *start_read_file; start_read_file = AGS_START_READ_FILE(task); g_message("starting\0"); ags_file_read_start(start_read_file->file); g_message("started\0"); ags_file_close(start_read_file->file); g_object_unref(start_read_file->file); } /** * ags_start_read_file_new: * @file: the #AgsFile * * Creates an #AgsStartReadFile. * * Returns: an new #AgsStartReadFile. * * Since: 0.4 */ AgsStartReadFile* ags_start_read_file_new(AgsFile *file) { AgsStartReadFile *start_read_file; start_read_file = (AgsStartReadFile *) g_object_new(AGS_TYPE_START_READ_FILE, NULL); start_read_file->file = file; return(start_read_file); } gsequencer-0.6.37/src/ags/audio/task/ags_append_audio.c0000644000175000017500000001735712626272146017750 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include void ags_append_audio_class_init(AgsAppendAudioClass *append_audio); void ags_append_audio_connectable_interface_init(AgsConnectableInterface *connectable); void ags_append_audio_init(AgsAppendAudio *append_audio); void ags_append_audio_connect(AgsConnectable *connectable); void ags_append_audio_disconnect(AgsConnectable *connectable); void ags_append_audio_finalize(GObject *gobject); void ags_append_audio_launch(AgsTask *task); /** * SECTION:ags_append_audio * @short_description: append audio object to audio loop * @title: AgsAppendAudio * @section_id: * @include: ags/audio/task/ags_append_audio.h * * The #AgsAppendAudio task appends #AgsAudio to #AgsAudioLoop. */ static gpointer ags_append_audio_parent_class = NULL; static AgsConnectableInterface *ags_append_audio_parent_connectable_interface; extern AgsConfig *config; GType ags_append_audio_get_type() { static GType ags_type_append_audio = 0; if(!ags_type_append_audio){ static const GTypeInfo ags_append_audio_info = { sizeof (AgsAppendAudioClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_append_audio_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsAppendAudio), 0, /* n_preallocs */ (GInstanceInitFunc) ags_append_audio_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_append_audio_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_append_audio = g_type_register_static(AGS_TYPE_TASK, "AgsAppendAudio\0", &ags_append_audio_info, 0); g_type_add_interface_static(ags_type_append_audio, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_append_audio); } void ags_append_audio_class_init(AgsAppendAudioClass *append_audio) { GObjectClass *gobject; AgsTaskClass *task; ags_append_audio_parent_class = g_type_class_peek_parent(append_audio); /* gobject */ gobject = (GObjectClass *) append_audio; gobject->finalize = ags_append_audio_finalize; /* task */ task = (AgsTaskClass *) append_audio; task->launch = ags_append_audio_launch; } void ags_append_audio_connectable_interface_init(AgsConnectableInterface *connectable) { ags_append_audio_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_append_audio_connect; connectable->disconnect = ags_append_audio_disconnect; } void ags_append_audio_init(AgsAppendAudio *append_audio) { append_audio->audio_loop = NULL; append_audio->audio = NULL; } void ags_append_audio_connect(AgsConnectable *connectable) { ags_append_audio_parent_connectable_interface->connect(connectable); /* empty */ } void ags_append_audio_disconnect(AgsConnectable *connectable) { ags_append_audio_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_append_audio_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_append_audio_parent_class)->finalize(gobject); /* empty */ } void ags_append_audio_launch(AgsTask *task) { AgsAudio *audio; AgsAppendAudio *append_audio; AgsAudioLoop *audio_loop; AgsServer *server; gchar *str0, *str1; append_audio = AGS_APPEND_AUDIO(task); audio = append_audio->audio; audio_loop = AGS_AUDIO_LOOP(append_audio->audio_loop); /* append to AgsAudioLoop */ ags_audio_loop_add_audio(audio_loop, audio); /**/ str0 = ags_config_get(config, AGS_CONFIG_THREAD, "model\0"); str1 = ags_config_get(config, AGS_CONFIG_THREAD, "super-threaded-scope\0"); if(!g_ascii_strncasecmp(str0, "super-threaded\0", 15)){ if(!g_ascii_strncasecmp(str1, "audio\0", 6) || !g_ascii_strncasecmp(str1, "channel\0", 8)){ /* super threaded setup - audio */ if(AGS_DEVOUT_PLAY_DOMAIN(audio->devout_play_domain)->audio_thread[1]->parent == NULL && (AGS_DEVOUT_PLAY_DOMAIN_SEQUENCER & (g_atomic_int_get(&(AGS_DEVOUT_PLAY_DOMAIN(audio->devout_play_domain)->flags)))) != 0){ ags_thread_add_child_extended(audio_loop, AGS_DEVOUT_PLAY_DOMAIN(audio->devout_play_domain)->audio_thread[1], TRUE, TRUE); ags_connectable_connect(AGS_CONNECTABLE(AGS_DEVOUT_PLAY_DOMAIN(audio->devout_play_domain)->audio_thread[1])); } if(AGS_DEVOUT_PLAY_DOMAIN(audio->devout_play_domain)->audio_thread[2]->parent == NULL && (AGS_DEVOUT_PLAY_DOMAIN_NOTATION & (g_atomic_int_get(&(AGS_DEVOUT_PLAY_DOMAIN(audio->devout_play_domain)->flags)))) != 0){ ags_thread_add_child_extended(audio_loop, AGS_DEVOUT_PLAY_DOMAIN(audio->devout_play_domain)->audio_thread[2], TRUE, TRUE); ags_connectable_connect(AGS_CONNECTABLE(AGS_DEVOUT_PLAY_DOMAIN(audio->devout_play_domain)->audio_thread[2])); } /* super threaed setup - channel */ if(!g_ascii_strncasecmp(str1, "channel\0", 8)){ AgsChannel *output; output = audio->output; while(output != NULL){ if(AGS_DEVOUT_PLAY(output->devout_play)->channel_thread[1]->parent == NULL && (AGS_DEVOUT_PLAY_DOMAIN_SEQUENCER & (g_atomic_int_get(&(AGS_DEVOUT_PLAY_DOMAIN(audio->devout_play_domain)->flags)))) != 0){ ags_thread_add_child_extended(AGS_DEVOUT_PLAY_DOMAIN(audio->devout_play_domain)->audio_thread[1], AGS_DEVOUT_PLAY(output->devout_play)->channel_thread[1], TRUE, TRUE); ags_connectable_connect(AGS_CONNECTABLE(AGS_DEVOUT_PLAY(output->devout_play)->channel_thread[1])); } if(AGS_DEVOUT_PLAY(output->devout_play)->channel_thread[2]->parent == NULL && (AGS_DEVOUT_PLAY_DOMAIN_NOTATION & (g_atomic_int_get(&(AGS_DEVOUT_PLAY_DOMAIN(audio->devout_play_domain)->flags)))) != 0){ ags_thread_add_child_extended(AGS_DEVOUT_PLAY_DOMAIN(audio->devout_play_domain)->audio_thread[2], AGS_DEVOUT_PLAY(output->devout_play)->channel_thread[2], TRUE, TRUE); ags_connectable_connect(AGS_CONNECTABLE(AGS_DEVOUT_PLAY(output->devout_play)->channel_thread[2])); } output = output->next; } } } } free(str0); free(str1); /* add to server registry */ server = AGS_MAIN(audio_loop->ags_main)->server; if(server != NULL && (AGS_SERVER_RUNNING & (server->flags)) != 0){ ags_connectable_add_to_registry(AGS_CONNECTABLE(append_audio->audio)); } } /** * ags_append_audio_new: * @audio_loop: the #AgsAudioLoop * @audio: the #AgsAudio to append * * Creates an #AgsAppendAudio. * * Returns: an new #AgsAppendAudio. * * Since: 0.4 */ AgsAppendAudio* ags_append_audio_new(GObject *audio_loop, GObject *audio) { AgsAppendAudio *append_audio; append_audio = (AgsAppendAudio *) g_object_new(AGS_TYPE_APPEND_AUDIO, NULL); append_audio->audio_loop = audio_loop; append_audio->audio = audio; return(append_audio); } gsequencer-0.6.37/src/ags/audio/task/ags_open_file.h0000644000175000017500000000376012626272146017256 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_OPEN_FILE_H__ #define __AGS_OPEN_FILE_H__ #include #include #include #define AGS_TYPE_OPEN_FILE (ags_open_file_get_type()) #define AGS_OPEN_FILE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_OPEN_FILE, AgsOpenFile)) #define AGS_OPEN_FILE_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_OPEN_FILE, AgsOpenFileClass)) #define AGS_IS_OPEN_FILE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_OPEN_FILE)) #define AGS_IS_OPEN_FILE_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_OPEN_FILE)) #define AGS_OPEN_FILE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_OPEN_FILE, AgsOpenFileClass)) typedef struct _AgsOpenFile AgsOpenFile; typedef struct _AgsOpenFileClass AgsOpenFileClass; struct _AgsOpenFile { AgsTask task; AgsAudio *audio; GSList *filenames; gboolean overwrite_channels; gboolean create_channels; }; struct _AgsOpenFileClass { AgsTaskClass task; }; GType ags_open_file_get_type(); AgsOpenFile* ags_open_file_new(AgsAudio *audio, GSList *filenames, gboolean overwrite_channels, gboolean create_channels); #endif /*__AGS_OPEN_FILE_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_remove_note.h0000644000175000017500000000367512626272146017645 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_REMOVE_NOTE_H__ #define __AGS_REMOVE_NOTE_H__ #include #include #include #include #define AGS_TYPE_REMOVE_NOTE (ags_remove_note_get_type()) #define AGS_REMOVE_NOTE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_REMOVE_NOTE, AgsRemoveNote)) #define AGS_REMOVE_NOTE_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_REMOVE_NOTE, AgsRemoveNoteClass)) #define AGS_IS_REMOVE_NOTE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_REMOVE_NOTE)) #define AGS_IS_REMOVE_NOTE_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_REMOVE_NOTE)) #define AGS_REMOVE_NOTE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_REMOVE_NOTE, AgsRemoveNoteClass)) typedef struct _AgsRemoveNote AgsRemoveNote; typedef struct _AgsRemoveNoteClass AgsRemoveNoteClass; struct _AgsRemoveNote { AgsTask task; AgsNotation *notation; guint x; guint y; }; struct _AgsRemoveNoteClass { AgsTaskClass task; }; GType ags_remove_note_get_type(); AgsRemoveNote* ags_remove_note_new(AgsNotation *notation, guint x, guint y); #endif /*__AGS_REMOVE_NOTE_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_add_note.c0000644000175000017500000001073312626272146017064 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_add_note_class_init(AgsAddNoteClass *add_note); void ags_add_note_connectable_interface_init(AgsConnectableInterface *connectable); void ags_add_note_init(AgsAddNote *add_note); void ags_add_note_connect(AgsConnectable *connectable); void ags_add_note_disconnect(AgsConnectable *connectable); void ags_add_note_finalize(GObject *gobject); void ags_add_note_launch(AgsTask *task); /** * SECTION:ags_add_note * @short_description: add note object to notation * @title: AgsAddNote * @section_id: * @include: ags/audio/task/ags_add_note.h * * The #AgsAddNote task adds #AgsNote to #AgsNotation. */ static gpointer ags_add_note_parent_class = NULL; static AgsConnectableInterface *ags_add_note_parent_connectable_interface; GType ags_add_note_get_type() { static GType ags_type_add_note = 0; if(!ags_type_add_note){ static const GTypeInfo ags_add_note_info = { sizeof (AgsAddNoteClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_add_note_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsAddNote), 0, /* n_preallocs */ (GInstanceInitFunc) ags_add_note_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_add_note_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_add_note = g_type_register_static(AGS_TYPE_TASK, "AgsAddNote\0", &ags_add_note_info, 0); g_type_add_interface_static(ags_type_add_note, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_add_note); } void ags_add_note_class_init(AgsAddNoteClass *add_note) { GObjectClass *gobject; AgsTaskClass *task; ags_add_note_parent_class = g_type_class_peek_parent(add_note); /* gobject */ gobject = (GObjectClass *) add_note; gobject->finalize = ags_add_note_finalize; /* task */ task = (AgsTaskClass *) add_note; task->launch = ags_add_note_launch; } void ags_add_note_connectable_interface_init(AgsConnectableInterface *connectable) { ags_add_note_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_add_note_connect; connectable->disconnect = ags_add_note_disconnect; } void ags_add_note_init(AgsAddNote *add_note) { add_note->notation = NULL; add_note->note = NULL; add_note->use_selection_list = FALSE; } void ags_add_note_connect(AgsConnectable *connectable) { ags_add_note_parent_connectable_interface->connect(connectable); /* empty */ } void ags_add_note_disconnect(AgsConnectable *connectable) { ags_add_note_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_add_note_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_add_note_parent_class)->finalize(gobject); /* empty */ } void ags_add_note_launch(AgsTask *task) { AgsAddNote *add_note; add_note = AGS_ADD_NOTE(task); /* add note */ ags_notation_add_note(add_note->notation, add_note->note, add_note->use_selection_list); } /** * ags_add_note_new: * @notation: the #AgsNotation * @note: the #AgsNote to add * @use_selection_list: if %TRUE added to selection, otherwise to notation * * Creates an #AgsAddNote. * * Returns: an new #AgsAddNote. * * Since: 0.4 */ AgsAddNote* ags_add_note_new(AgsNotation *notation, AgsNote *note, gboolean use_selection_list) { AgsAddNote *add_note; add_note = (AgsAddNote *) g_object_new(AGS_TYPE_ADD_NOTE, NULL); add_note->notation = notation; add_note->note = note; add_note->use_selection_list = use_selection_list; return(add_note); } gsequencer-0.6.37/src/ags/audio/task/ags_remove_recall.c0000644000175000017500000001502412626272146020124 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include void ags_remove_recall_class_init(AgsRemoveRecallClass *remove_recall); void ags_remove_recall_connectable_interface_init(AgsConnectableInterface *connectable); void ags_remove_recall_init(AgsRemoveRecall *remove_recall); void ags_remove_recall_connect(AgsConnectable *connectable); void ags_remove_recall_disconnect(AgsConnectable *connectable); void ags_remove_recall_finalize(GObject *gobject); void ags_remove_recall_launch(AgsTask *task); /** * SECTION:ags_remove_recall * @short_description: remove recall object to context * @title: AgsRemoveRecall * @section_id: * @include: ags/audio/task/ags_remove_recall.h * * The #AgsRemoveRecall task removes #AgsRecall to context. */ static gpointer ags_remove_recall_parent_class = NULL; static AgsConnectableInterface *ags_remove_recall_parent_connectable_interface; GType ags_remove_recall_get_type() { static GType ags_type_remove_recall = 0; if(!ags_type_remove_recall){ static const GTypeInfo ags_remove_recall_info = { sizeof (AgsRemoveRecallClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_remove_recall_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsRemoveRecall), 0, /* n_preallocs */ (GInstanceInitFunc) ags_remove_recall_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_remove_recall_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_remove_recall = g_type_register_static(AGS_TYPE_TASK, "AgsRemoveRecall\0", &ags_remove_recall_info, 0); g_type_add_interface_static(ags_type_remove_recall, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_remove_recall); } void ags_remove_recall_class_init(AgsRemoveRecallClass *remove_recall) { GObjectClass *gobject; AgsTaskClass *task; ags_remove_recall_parent_class = g_type_class_peek_parent(remove_recall); /* GObjectClass */ gobject = (GObjectClass *) remove_recall; gobject->finalize = ags_remove_recall_finalize; /* AgsTaskClass */ task = (AgsTaskClass *) remove_recall; task->launch = ags_remove_recall_launch; } void ags_remove_recall_connectable_interface_init(AgsConnectableInterface *connectable) { ags_remove_recall_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_remove_recall_connect; connectable->disconnect = ags_remove_recall_disconnect; } void ags_remove_recall_init(AgsRemoveRecall *remove_recall) { remove_recall->context = NULL; remove_recall->recall = NULL; remove_recall->is_play = FALSE; remove_recall->remove_all = FALSE; } void ags_remove_recall_connect(AgsConnectable *connectable) { ags_remove_recall_parent_connectable_interface->connect(connectable); /* empty */ } void ags_remove_recall_disconnect(AgsConnectable *connectable) { ags_remove_recall_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_remove_recall_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_remove_recall_parent_class)->finalize(gobject); /* empty */ } void ags_remove_recall_launch(AgsTask *task) { AgsRemoveRecall *remove_recall; remove_recall = AGS_REMOVE_RECALL(task); if(AGS_IS_AUDIO(remove_recall->context)){ if(remove_recall->remove_all){ GList *list; if(AGS_IS_RECALL_AUDIO_RUN(remove_recall->recall)){ list = AGS_RECALL_CONTAINER(remove_recall->recall->container)->recall_audio_run; while(list != NULL){ if(list->data != remove_recall->recall){ ags_audio_remove_recall(AGS_AUDIO(remove_recall->context), (GObject *) list->data, remove_recall->is_play); } list = list->next; } } } ags_audio_remove_recall(AGS_AUDIO(remove_recall->context), (GObject *) remove_recall->recall, remove_recall->is_play); }else if(AGS_IS_CHANNEL(remove_recall->context)){ if(remove_recall->remove_all){ GList *list; if(AGS_IS_RECALL_CHANNEL_RUN(remove_recall->recall)){ list = AGS_RECALL_CONTAINER(remove_recall->recall->container)->recall_channel_run; while(list != NULL){ if(list->data != remove_recall->recall){ ags_channel_remove_recall(AGS_CHANNEL(remove_recall->context), (GObject *) list->data, remove_recall->is_play); } list = list->next; } } } ags_channel_remove_recall(AGS_CHANNEL(remove_recall->context), (GObject *) remove_recall->recall, remove_recall->is_play); }else if(AGS_IS_RECALL(remove_recall->context)){ ags_recall_remove_child(AGS_RECALL(remove_recall->context), remove_recall->recall); }else{ ags_recall_remove(remove_recall->recall); } } /** * ags_remove_recall_new: * @context: may be #AgsAudio, #AgsChannel or #AgsRecall * @recall: the #AgsRecall to remove * @is_play: if %TRUE non-complex recall * @remove_all: if %TRUE all related will be removed * * Creates an #AgsRemoveRecall. * * Returns: an new #AgsRemoveRecall. * * Since: 0.4 */ AgsRemoveRecall* ags_remove_recall_new(GObject *context, AgsRecall *recall, gboolean is_play, gboolean remove_all) { AgsRemoveRecall *remove_recall; remove_recall = (AgsRemoveRecall *) g_object_new(AGS_TYPE_REMOVE_RECALL, NULL); remove_recall->context = context; remove_recall->recall = recall; remove_recall->is_play = is_play; remove_recall->remove_all = remove_all; return(remove_recall); } gsequencer-0.6.37/src/ags/audio/task/ags_toggle_led.h0000644000175000017500000000360012626272146017414 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_TOGGLE_LED_H__ #define __AGS_TOGGLE_LED_H__ #include #include #define AGS_TYPE_TOGGLE_LED (ags_toggle_led_get_type()) #define AGS_TOGGLE_LED(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_TOGGLE_LED, AgsToggleLed)) #define AGS_TOGGLE_LED_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_TOGGLE_LED, AgsToggleLedClass)) #define AGS_IS_TOGGLE_LED(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_TOGGLE_LED)) #define AGS_IS_TOGGLE_LED_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_TOGGLE_LED)) #define AGS_TOGGLE_LED_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_TOGGLE_LED, AgsToggleLedClass)) typedef struct _AgsToggleLed AgsToggleLed; typedef struct _AgsToggleLedClass AgsToggleLedClass; struct _AgsToggleLed { AgsTask task; GList *led; guint set_active; guint unset_active; }; struct _AgsToggleLedClass { AgsTaskClass task; }; GType ags_toggle_led_get_type(); AgsToggleLed* ags_toggle_led_new(GList *led, guint set_active, guint unset_active); #endif /*__AGS_TOGGLE_LED_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_display_tact.c0000644000175000017500000001203412626272146017763 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include void ags_display_tact_class_init(AgsDisplayTactClass *display_tact); void ags_display_tact_connectable_interface_init(AgsConnectableInterface *connectable); void ags_display_tact_init(AgsDisplayTact *display_tact); void ags_display_tact_connect(AgsConnectable *connectable); void ags_display_tact_disconnect(AgsConnectable *connectable); void ags_display_tact_finalize(GObject *gobject); void ags_display_tact_launch(AgsTask *task); /** * SECTION:ags_display_tact * @short_description: display tact object * @title: AgsDisplayTact * @section_id: * @include: ags/audio/task/ags_display_tact.h * * The #AgsDisplayTact task displays #AgsTact and the GUI is updated. */ static gpointer ags_display_tact_parent_class = NULL; static AgsConnectableInterface *ags_display_tact_parent_connectable_interface; GType ags_display_tact_get_type() { static GType ags_type_display_tact = 0; if(!ags_type_display_tact){ static const GTypeInfo ags_display_tact_info = { sizeof (AgsDisplayTactClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_display_tact_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsDisplayTact), 0, /* n_preallocs */ (GInstanceInitFunc) ags_display_tact_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_display_tact_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_display_tact = g_type_register_static(AGS_TYPE_TASK, "AgsDisplayTact\0", &ags_display_tact_info, 0); g_type_add_interface_static(ags_type_display_tact, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_display_tact); } void ags_display_tact_class_init(AgsDisplayTactClass *display_tact) { GObjectClass *gobject; AgsTaskClass *task; ags_display_tact_parent_class = g_type_class_peek_parent(display_tact); /* gobject */ gobject = (GObjectClass *) display_tact; gobject->finalize = ags_display_tact_finalize; /* task */ task = (AgsTaskClass *) display_tact; task->launch = ags_display_tact_launch; } void ags_display_tact_connectable_interface_init(AgsConnectableInterface *connectable) { ags_display_tact_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_display_tact_connect; connectable->disconnect = ags_display_tact_disconnect; } void ags_display_tact_init(AgsDisplayTact *display_tact) { display_tact->navigation = NULL; } void ags_display_tact_connect(AgsConnectable *connectable) { ags_display_tact_parent_connectable_interface->connect(connectable); /* empty */ } void ags_display_tact_disconnect(AgsConnectable *connectable) { ags_display_tact_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_display_tact_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_display_tact_parent_class)->finalize(gobject); /* empty */ } void ags_display_tact_launch(AgsTask *task) { AgsDisplayTact *display_tact; AgsWindow *window; AgsNavigation *navigation; gchar *timestr; gdouble delay, tact; display_tact = AGS_DISPLAY_TACT(task); navigation = AGS_NAVIGATION(display_tact->navigation); window = gtk_widget_get_ancestor(navigation, AGS_TYPE_WINDOW); tact = window->devout->tact_counter - navigation->start_tact; gdk_window_flush(GTK_WIDGET(navigation->duration_time)->window); timestr = ags_navigation_absolute_tact_to_time_string(tact, window->devout->bpm, window->devout->delay_factor); gtk_label_set_label(navigation->duration_time, timestr); gtk_widget_queue_draw(navigation->duration_time); g_free(timestr); } /** * ags_display_tact_new: * @navigation: the #AgsNavigation to update * * Creates an #AgsDisplayTact. * * Returns: an new #AgsDisplayTact. * * Since: 0.4 */ AgsDisplayTact* ags_display_tact_new(GtkWidget *navigation) { AgsDisplayTact *display_tact; display_tact = (AgsDisplayTact *) g_object_new(AGS_TYPE_DISPLAY_TACT, NULL); display_tact->navigation = navigation; return(display_tact); } gsequencer-0.6.37/src/ags/audio/task/ags_init_channel.c0000644000175000017500000002365012626272146017744 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include void ags_init_channel_class_init(AgsInitChannelClass *init_channel); void ags_init_channel_connectable_interface_init(AgsConnectableInterface *connectable); void ags_init_channel_init(AgsInitChannel *init_channel); void ags_init_channel_connect(AgsConnectable *connectable); void ags_init_channel_disconnect(AgsConnectable *connectable); void ags_init_channel_finalize(GObject *gobject); void ags_init_channel_launch(AgsTask *task); /** * SECTION:ags_init_channel * @short_description: init channel object * @title: AgsInitChannel * @section_id: * @include: ags/audio/task/ags_init_channel.h * * The #AgsInitChannel task inits #AgsChannel. */ static gpointer ags_init_channel_parent_class = NULL; static AgsConnectableInterface *ags_init_channel_parent_connectable_interface; GType ags_init_channel_get_type() { static GType ags_type_init_channel = 0; if(!ags_type_init_channel){ static const GTypeInfo ags_init_channel_info = { sizeof (AgsInitChannelClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_init_channel_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsInitChannel), 0, /* n_preallocs */ (GInstanceInitFunc) ags_init_channel_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_init_channel_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_init_channel = g_type_register_static(AGS_TYPE_TASK, "AgsInitChannel\0", &ags_init_channel_info, 0); g_type_add_interface_static(ags_type_init_channel, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_init_channel); } void ags_init_channel_class_init(AgsInitChannelClass *init_channel) { GObjectClass *gobject; AgsTaskClass *task; ags_init_channel_parent_class = g_type_class_peek_parent(init_channel); /* GObjectClass */ gobject = (GObjectClass *) init_channel; gobject->finalize = ags_init_channel_finalize; /* AgsTaskClass */ task = (AgsTaskClass *) init_channel; task->launch = ags_init_channel_launch; } void ags_init_channel_connectable_interface_init(AgsConnectableInterface *connectable) { ags_init_channel_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_init_channel_connect; connectable->disconnect = ags_init_channel_disconnect; } void ags_init_channel_init(AgsInitChannel *init_channel) { init_channel->channel = NULL; init_channel->play_pad = FALSE; init_channel->playback = FALSE; init_channel->sequencer = FALSE; init_channel->notation = FALSE; } void ags_init_channel_connect(AgsConnectable *connectable) { ags_init_channel_parent_connectable_interface->connect(connectable); /* empty */ } void ags_init_channel_disconnect(AgsConnectable *connectable) { ags_init_channel_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_init_channel_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_init_channel_parent_class)->finalize(gobject); /* empty */ } void ags_init_channel_launch(AgsTask *task) { AgsChannel *channel; AgsRecallID *recall_id; AgsInitChannel *init_channel; GList *list, *list_start; gint stage; gboolean arrange_recall_id, duplicate_templates, resolve_dependencies; init_channel = AGS_INIT_CHANNEL(task); list = NULL; list_start = NULL; /* init channel */ if(init_channel->play_pad){ AgsChannel *next_pad; next_pad = init_channel->channel->next_pad; for(stage = 0; stage < 3; stage++){ channel = init_channel->channel; list = list_start; if(stage == 0){ arrange_recall_id = TRUE; duplicate_templates = TRUE; resolve_dependencies = TRUE; }else{ arrange_recall_id = FALSE; duplicate_templates = FALSE; resolve_dependencies = FALSE; } while(channel != next_pad){ if(stage == 0){ if(init_channel->playback){ g_atomic_int_or(&(AGS_DEVOUT_PLAY(channel->devout_play)->flags), AGS_DEVOUT_PLAY_PLAYBACK); recall_id = ags_channel_recursive_play_init(channel, stage, arrange_recall_id, duplicate_templates, TRUE, FALSE, FALSE, resolve_dependencies, NULL); AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[0] = recall_id; } if(init_channel->sequencer){ g_atomic_int_or(&(AGS_DEVOUT_PLAY(channel->devout_play)->flags), AGS_DEVOUT_PLAY_SEQUENCER); recall_id = ags_channel_recursive_play_init(channel, stage, arrange_recall_id, duplicate_templates, FALSE, TRUE, FALSE, resolve_dependencies, NULL); AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[1] = recall_id; } if(init_channel->notation){ g_atomic_int_or(&(AGS_DEVOUT_PLAY(channel->devout_play)->flags), AGS_DEVOUT_PLAY_NOTATION); recall_id = ags_channel_recursive_play_init(channel, stage, arrange_recall_id, duplicate_templates, FALSE, FALSE, TRUE, resolve_dependencies, NULL); AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[2] = recall_id; } list_start = g_list_append(list_start, recall_id); }else{ if(init_channel->playback){ ags_channel_recursive_play_init(channel, stage, arrange_recall_id, duplicate_templates, TRUE, FALSE, FALSE, resolve_dependencies, AGS_RECALL_ID(list->data)); } if(init_channel->sequencer){ ags_channel_recursive_play_init(channel, stage, arrange_recall_id, duplicate_templates, FALSE, TRUE, FALSE, resolve_dependencies, AGS_RECALL_ID(list->data)); } if(init_channel->notation){ ags_channel_recursive_play_init(channel, stage, arrange_recall_id, duplicate_templates, FALSE, FALSE, TRUE, resolve_dependencies, AGS_RECALL_ID(list->data)); } list = list->next; } channel = channel->next; } } }else{ AgsRecallID *recall_id; channel = init_channel->channel; for(stage = 0; stage < 3; stage++){ channel = init_channel->channel; list = list_start; if(stage == 0){ arrange_recall_id = TRUE; duplicate_templates = TRUE; resolve_dependencies = TRUE; }else{ arrange_recall_id = FALSE; duplicate_templates = FALSE; resolve_dependencies = FALSE; } if(stage == 0){ if(init_channel->playback){ g_atomic_int_or(&(AGS_DEVOUT_PLAY(channel->devout_play)->flags), AGS_DEVOUT_PLAY_PLAYBACK); recall_id = ags_channel_recursive_play_init(channel, stage, arrange_recall_id, duplicate_templates, TRUE, FALSE, FALSE, resolve_dependencies, NULL); AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[0] = recall_id; } if(init_channel->sequencer){ g_atomic_int_or(&(AGS_DEVOUT_PLAY(channel->devout_play)->flags), AGS_DEVOUT_PLAY_SEQUENCER); recall_id = ags_channel_recursive_play_init(channel, stage, arrange_recall_id, duplicate_templates, FALSE, TRUE, FALSE, resolve_dependencies, NULL); AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[1] = recall_id; } if(init_channel->notation){ g_atomic_int_or(&(AGS_DEVOUT_PLAY(channel->devout_play)->flags), AGS_DEVOUT_PLAY_NOTATION); recall_id = ags_channel_recursive_play_init(channel, stage, arrange_recall_id, duplicate_templates, FALSE, FALSE, TRUE, resolve_dependencies, NULL); AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[2] = recall_id; } list_start = g_list_append(list_start, recall_id); }else{ if(init_channel->playback){ ags_channel_recursive_play_init(channel, stage, arrange_recall_id, duplicate_templates, TRUE, FALSE, FALSE, resolve_dependencies, AGS_RECALL_ID(list->data)); } if(init_channel->sequencer){ ags_channel_recursive_play_init(channel, stage, arrange_recall_id, duplicate_templates, FALSE, TRUE, FALSE, resolve_dependencies, AGS_RECALL_ID(list->data)); } if(init_channel->notation){ ags_channel_recursive_play_init(channel, stage, arrange_recall_id, duplicate_templates, FALSE, FALSE, TRUE, resolve_dependencies, AGS_RECALL_ID(list->data)); } } } } } /** * ags_init_channel_new: * @channel: the #AgsChannel * @play_pad: %TRUE all channels of accordig pad are initialized * @playback: init playback * @sequencer: init sequencer * @notation: init notation * * Creates an #AgsInitChannel. * * Returns: an new #AgsInitChannel. * * Since: 0.4 */ AgsInitChannel* ags_init_channel_new(AgsChannel *channel, gboolean play_pad, gboolean playback, gboolean sequencer, gboolean notation) { AgsInitChannel *init_channel; init_channel = (AgsInitChannel *) g_object_new(AGS_TYPE_INIT_CHANNEL, NULL); init_channel->channel = channel; init_channel->play_pad = play_pad; init_channel->playback = playback; init_channel->sequencer = sequencer; init_channel->notation = notation; return(init_channel); } gsequencer-0.6.37/src/ags/audio/task/ags_scroll_on_play.h0000644000175000017500000000375312626272146020337 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_SCROLL_ON_PLAY_H__ #define __AGS_SCROLL_ON_PLAY_H__ #include #include #include #include #define AGS_TYPE_SCROLL_ON_PLAY (ags_scroll_on_play_get_type()) #define AGS_SCROLL_ON_PLAY(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_SCROLL_ON_PLAY, AgsScrollOnPlay)) #define AGS_SCROLL_ON_PLAY_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_SCROLL_ON_PLAY, AgsScrollOnPlayClass)) #define AGS_IS_SCROLL_ON_PLAY(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_SCROLL_ON_PLAY)) #define AGS_IS_SCROLL_ON_PLAY_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_SCROLL_ON_PLAY)) #define AGS_SCROLL_ON_PLAY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_SCROLL_ON_PLAY, AgsScrollOnPlayClass)) typedef struct _AgsScrollOnPlay AgsScrollOnPlay; typedef struct _AgsScrollOnPlayClass AgsScrollOnPlayClass; struct _AgsScrollOnPlay { AgsTask task; gdouble step; GtkWidget *editor; }; struct _AgsScrollOnPlayClass { AgsTaskClass task; }; GType ags_scroll_on_play_get_type(); AgsScrollOnPlay* ags_scroll_on_play_new(GtkWidget *editor, gdouble step); #endif /*__AGS_SCROLL_ON_PLAY_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_apply_wavetable.h0000644000175000017500000000364612626272146020500 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_APPLY_WAVETABLE_H__ #define __AGS_APPLY_WAVETABLE_H__ #include #include #include #define AGS_TYPE_APPLY_WAVETABLE (ags_apply_wavetable_get_type()) #define AGS_APPLY_WAVETABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_APPLY_WAVETABLE, AgsApplyWavetable)) #define AGS_APPLY_WAVETABLE_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_APPLY_WAVETABLE, AgsApplyWavetableClass)) #define AGS_IS_APPLY_WAVETABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_APPLY_WAVETABLE)) #define AGS_IS_APPLY_WAVETABLE_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_APPLY_WAVETABLE)) #define AGS_APPLY_WAVETABLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_APPLY_WAVETABLE, AgsApplyWavetableClass)) typedef struct _AgsApplyWavetable AgsApplyWavetable; typedef struct _AgsApplyWavetableClass AgsApplyWavetableClass; struct _AgsApplyWavetable { AgsTask task; }; struct _AgsApplyWavetableClass { AgsTaskClass task; }; GType ags_apply_wavetable_get_type(); AgsApplyWavetable* ags_apply_wavetable_new(); #endif /*__AGS_APPLY_WAVETABLE_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_apply_wavetable.c0000644000175000017500000000736712626272146020477 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_apply_wavetable_class_init(AgsApplyWavetableClass *apply_wavetable); void ags_apply_wavetable_connectable_interface_init(AgsConnectableInterface *connectable); void ags_apply_wavetable_init(AgsApplyWavetable *apply_wavetable); void ags_apply_wavetable_connect(AgsConnectable *connectable); void ags_apply_wavetable_disconnect(AgsConnectable *connectable); void ags_apply_wavetable_finalize(GObject *gobject); static gpointer ags_apply_wavetable_parent_class = NULL; static AgsConnectableInterface *ags_apply_wavetable_parent_connectable_interface; GType ags_apply_wavetable_get_type() { static GType ags_type_apply_wavetable = 0; if(!ags_type_apply_wavetable){ static const GTypeInfo ags_apply_wavetable_info = { sizeof (AgsApplyWavetableClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_apply_wavetable_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsApplyWavetable), 0, /* n_preallocs */ (GInstanceInitFunc) ags_apply_wavetable_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_apply_wavetable_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_apply_wavetable = g_type_register_static(AGS_TYPE_TASK, "AgsApplyWavetable\0", &ags_apply_wavetable_info, 0); g_type_add_interface_static(ags_type_apply_wavetable, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_apply_wavetable); } void ags_apply_wavetable_class_init(AgsApplyWavetableClass *apply_wavetable) { GObjectClass *gobject; ags_apply_wavetable_parent_class = g_type_class_peek_parent(apply_wavetable); gobject = (GObjectClass *) apply_wavetable; gobject->finalize = ags_apply_wavetable_finalize; } void ags_apply_wavetable_connectable_interface_init(AgsConnectableInterface *connectable) { ags_apply_wavetable_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_apply_wavetable_connect; connectable->disconnect = ags_apply_wavetable_disconnect; } void ags_apply_wavetable_init(AgsApplyWavetable *apply_wavetable) { } void ags_apply_wavetable_connect(AgsConnectable *connectable) { ags_apply_wavetable_parent_connectable_interface->connect(connectable); /* empty */ } void ags_apply_wavetable_disconnect(AgsConnectable *connectable) { ags_apply_wavetable_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_apply_wavetable_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_apply_wavetable_parent_class)->finalize(gobject); /* empty */ } AgsApplyWavetable* ags_apply_wavetable_new() { AgsApplyWavetable *apply_wavetable; apply_wavetable = (AgsApplyWavetable *) g_object_new(AGS_TYPE_APPLY_WAVETABLE, NULL); return(apply_wavetable); } gsequencer-0.6.37/src/ags/audio/task/ags_start_devout.h0000644000175000017500000000363712626272146020044 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_START_DEVOUT_H__ #define __AGS_START_DEVOUT_H__ #include #include #include #include #define AGS_TYPE_START_DEVOUT (ags_start_devout_get_type()) #define AGS_START_DEVOUT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_START_DEVOUT, AgsStartDevout)) #define AGS_START_DEVOUT_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_START_DEVOUT, AgsStartDevoutClass)) #define AGS_IS_START_DEVOUT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_START_DEVOUT)) #define AGS_IS_START_DEVOUT_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_START_DEVOUT)) #define AGS_START_DEVOUT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_START_DEVOUT, AgsStartDevoutClass)) typedef struct _AgsStartDevout AgsStartDevout; typedef struct _AgsStartDevoutClass AgsStartDevoutClass; struct _AgsStartDevout { AgsTask task; AgsDevout *devout; }; struct _AgsStartDevoutClass { AgsTaskClass task; }; GType ags_start_devout_get_type(); AgsStartDevout* ags_start_devout_new(AgsDevout *devout); #endif /*__AGS_START_DEVOUT_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_start_devout.c0000644000175000017500000001436612630024331020022 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include void ags_start_devout_class_init(AgsStartDevoutClass *start_devout); void ags_start_devout_connectable_interface_init(AgsConnectableInterface *connectable); void ags_start_devout_init(AgsStartDevout *start_devout); void ags_start_devout_connect(AgsConnectable *connectable); void ags_start_devout_disconnect(AgsConnectable *connectable); void ags_start_devout_finalize(GObject *gobject); void ags_start_devout_launch(AgsTask *task); /** * SECTION:ags_start_devout * @short_description: start devout object * @title: AgsStartDevout * @section_id: * @include: ags/audio/task/ags_start_devout.h * * The #AgsStartDevout task starts devout. */ static gpointer ags_start_devout_parent_class = NULL; static AgsConnectableInterface *ags_start_devout_parent_connectable_interface; GType ags_start_devout_get_type() { static GType ags_type_start_devout = 0; if(!ags_type_start_devout){ static const GTypeInfo ags_start_devout_info = { sizeof (AgsStartDevoutClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_start_devout_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsStartDevout), 0, /* n_preallocs */ (GInstanceInitFunc) ags_start_devout_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_start_devout_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_start_devout = g_type_register_static(AGS_TYPE_TASK, "AgsStartDevout\0", &ags_start_devout_info, 0); g_type_add_interface_static(ags_type_start_devout, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_start_devout); } void ags_start_devout_class_init(AgsStartDevoutClass *start_devout) { GObjectClass *gobject; AgsTaskClass *task; ags_start_devout_parent_class = g_type_class_peek_parent(start_devout); /* gobject */ gobject = (GObjectClass *) start_devout; gobject->finalize = ags_start_devout_finalize; /* task */ task = (AgsTaskClass *) start_devout; task->launch = ags_start_devout_launch; } void ags_start_devout_connectable_interface_init(AgsConnectableInterface *connectable) { ags_start_devout_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_start_devout_connect; connectable->disconnect = ags_start_devout_disconnect; } void ags_start_devout_init(AgsStartDevout *start_devout) { start_devout->devout = NULL; } void ags_start_devout_connect(AgsConnectable *connectable) { ags_start_devout_parent_connectable_interface->connect(connectable); /* empty */ } void ags_start_devout_disconnect(AgsConnectable *connectable) { ags_start_devout_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_start_devout_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_start_devout_parent_class)->finalize(gobject); /* empty */ } void ags_start_devout_launch(AgsTask *task) { AgsStartDevout *start_devout; AgsDevout *devout; AgsAudioLoop *audio_loop; AgsDevoutThread *devout_thread; guint val; GError *error; start_devout = AGS_START_DEVOUT(task); devout = start_devout->devout; audio_loop = AGS_AUDIO_LOOP(AGS_MAIN(devout->ags_main)->main_loop); if((AGS_DEVOUT_PLAY & (devout->flags)) != 0){ audio_loop->flags |= (AGS_AUDIO_LOOP_PLAY_AUDIO | AGS_AUDIO_LOOP_PLAY_CHANNEL | AGS_AUDIO_LOOP_PLAY_RECALL); return; } devout_thread = ags_thread_find_type(audio_loop, AGS_TYPE_DEVOUT_THREAD); /* append to AgsDevout */ audio_loop->flags |= (AGS_AUDIO_LOOP_PLAY_AUDIO | AGS_AUDIO_LOOP_PLAY_CHANNEL | AGS_AUDIO_LOOP_PLAY_RECALL); devout->flags |= (AGS_DEVOUT_START_PLAY | AGS_DEVOUT_PLAY); devout_thread->error = NULL; g_message("start devout\0"); ags_thread_start(AGS_THREAD(devout_thread)); if((AGS_THREAD_SINGLE_LOOP & (g_atomic_int_get(&(AGS_THREAD(devout_thread)->flags)))) == 0){ if(devout_thread->error != NULL){ error = devout_thread->error; devout->flags &= (~AGS_DEVOUT_START_PLAY); ags_task_failure(AGS_TASK(start_devout), error); g_message("starting devout failed\0"); }else{ /* wait thread */ pthread_mutex_lock(AGS_THREAD(devout_thread)->start_mutex); g_atomic_int_set(&(AGS_THREAD(devout_thread)->start_wait), TRUE); if(g_atomic_int_get(&(AGS_THREAD(devout_thread)->start_wait)) == TRUE && g_atomic_int_get(&(AGS_THREAD(devout_thread)->start_done)) == FALSE){ while(g_atomic_int_get(&(AGS_THREAD(devout_thread)->start_wait)) == TRUE && g_atomic_int_get(&(AGS_THREAD(devout_thread)->start_done)) == FALSE){ pthread_cond_wait(AGS_THREAD(devout_thread)->start_cond, AGS_THREAD(devout_thread)->start_mutex); } } pthread_mutex_unlock(AGS_THREAD(devout_thread)->start_mutex); g_message("started devout\0"); } } } /** * ags_start_devout_new: * @devout: the #AgsDevout * * Creates an #AgsStartDevout. * * Returns: an new #AgsStartDevout. * * Since: 0.4 */ AgsStartDevout* ags_start_devout_new(AgsDevout *devout) { AgsStartDevout *start_devout; start_devout = (AgsStartDevout *) g_object_new(AGS_TYPE_START_DEVOUT, NULL); start_devout->devout = devout; return(start_devout); } gsequencer-0.6.37/src/ags/audio/task/ags_add_recall.c0000644000175000017500000002233112626272146017356 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include void ags_add_recall_class_init(AgsAddRecallClass *add_recall); void ags_add_recall_connectable_interface_init(AgsConnectableInterface *connectable); void ags_add_recall_init(AgsAddRecall *add_recall); void ags_add_recall_connect(AgsConnectable *connectable); void ags_add_recall_disconnect(AgsConnectable *connectable); void ags_add_recall_finalize(GObject *gobject); void ags_add_recall_launch(AgsTask *task); /** * SECTION:ags_add_recall * @short_description: add recall object to context * @title: AgsAddRecall * @section_id: * @include: ags/audio/task/ags_add_recall.h * * The #AgsAddRecall task adds #AgsRecall to context. */ static gpointer ags_add_recall_parent_class = NULL; static AgsConnectableInterface *ags_add_recall_parent_connectable_interface; GType ags_add_recall_get_type() { static GType ags_type_add_recall = 0; if(!ags_type_add_recall){ static const GTypeInfo ags_add_recall_info = { sizeof (AgsAddRecallClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_add_recall_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsAddRecall), 0, /* n_preallocs */ (GInstanceInitFunc) ags_add_recall_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_add_recall_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_add_recall = g_type_register_static(AGS_TYPE_TASK, "AgsAddRecall\0", &ags_add_recall_info, 0); g_type_add_interface_static(ags_type_add_recall, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_add_recall); } void ags_add_recall_class_init(AgsAddRecallClass *add_recall) { GObjectClass *gobject; AgsTaskClass *task; ags_add_recall_parent_class = g_type_class_peek_parent(add_recall); /* gobject */ gobject = (GObjectClass *) add_recall; gobject->finalize = ags_add_recall_finalize; /* task */ task = (AgsTaskClass *) add_recall; task->launch = ags_add_recall_launch; } void ags_add_recall_connectable_interface_init(AgsConnectableInterface *connectable) { ags_add_recall_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_add_recall_connect; connectable->disconnect = ags_add_recall_disconnect; } void ags_add_recall_init(AgsAddRecall *add_recall) { add_recall->context = NULL; add_recall->recall = NULL; add_recall->is_play = FALSE; } void ags_add_recall_connect(AgsConnectable *connectable) { ags_add_recall_parent_connectable_interface->connect(connectable); /* empty */ } void ags_add_recall_disconnect(AgsConnectable *connectable) { ags_add_recall_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_add_recall_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_add_recall_parent_class)->finalize(gobject); /* empty */ } void ags_add_recall_launch(AgsTask *task) { AgsAddRecall *add_recall; add_recall = AGS_ADD_RECALL(task); if(AGS_IS_AUDIO(add_recall->context)){ AgsRecall *current; GList *recall_id; if(g_list_find(AGS_AUDIO(add_recall->context)->container, add_recall->recall->container) == NULL){ ags_audio_add_recall_container(AGS_AUDIO(add_recall->context), add_recall->recall->container); } ags_audio_add_recall(AGS_AUDIO(add_recall->context), (GObject *) add_recall->recall, add_recall->is_play); /* set up playback, sequencer or notation */ recall_id = AGS_AUDIO(add_recall->context)->recall_id; if(!AGS_IS_RECALL_AUDIO(add_recall->recall)){ while(recall_id != NULL){ if((!add_recall->is_play && AGS_RECALL_ID(recall_id->data)->recycling_container->parent == NULL) || (add_recall->is_play && AGS_RECALL_ID(recall_id->data)->recycling_container->parent != NULL)){ recall_id = recall_id->next; continue; } current = ags_recall_duplicate(add_recall->recall, recall_id->data); /* set appropriate flag */ if((AGS_RECALL_ID_PLAYBACK & (AGS_RECALL_ID(recall_id->data)->flags)) != 0){ ags_recall_set_flags(current, AGS_RECALL_PLAYBACK); }else if((AGS_RECALL_ID_SEQUENCER & (AGS_RECALL_ID(recall_id->data)->flags)) != 0){ ags_recall_set_flags(current, AGS_RECALL_SEQUENCER); }else if((AGS_RECALL_ID_NOTATION & (AGS_RECALL_ID(recall_id->data)->flags)) != 0){ ags_recall_set_flags(current, AGS_RECALL_NOTATION); } /* append to AgsAudio */ if(add_recall->is_play) AGS_AUDIO(add_recall->context)->play = g_list_append(AGS_AUDIO(add_recall->context)->play, current); else AGS_AUDIO(add_recall->context)->recall = g_list_append(AGS_AUDIO(add_recall->context)->recall, current); /* connect */ ags_connectable_connect(AGS_CONNECTABLE(current)); /* notify run */ ags_recall_notify_dependency(current, AGS_RECALL_NOTIFY_RUN, 1); /* resolve */ ags_recall_resolve_dependencies(current); /* init */ ags_dynamic_connectable_connect_dynamic(AGS_DYNAMIC_CONNECTABLE(current)); current->flags &= (~AGS_RECALL_HIDE); ags_recall_run_init_pre(current); current->flags &= (~AGS_RECALL_REMOVE); ags_recall_run_init_inter(current); ags_recall_run_init_post(current); /* iterate */ recall_id = recall_id->next; } } }else if(AGS_IS_CHANNEL(add_recall->context)){ AgsRecall *current; GList *recall_id; if(g_list_find(AGS_CHANNEL(add_recall->context)->container, add_recall->recall->container) == NULL){ ags_channel_add_recall_container(AGS_CHANNEL(add_recall->context), add_recall->recall->container); } ags_channel_add_recall(AGS_CHANNEL(add_recall->context), add_recall->recall, add_recall->is_play); /* set up playback, sequencer or notation */ recall_id = AGS_CHANNEL(add_recall->context)->recall_id; if(!AGS_IS_RECALL_CHANNEL(add_recall->recall)){ while(recall_id != NULL){ if((!add_recall->is_play && AGS_RECALL_ID(recall_id->data)->recycling_container->parent == NULL) || (add_recall->is_play && AGS_RECALL_ID(recall_id->data)->recycling_container->parent != NULL)){ recall_id = recall_id->next; continue; } current = ags_recall_duplicate(add_recall->recall, recall_id->data); /* set appropriate flag */ if((AGS_RECALL_ID_PLAYBACK & (AGS_RECALL_ID(recall_id->data)->flags)) != 0){ ags_recall_set_flags(current, AGS_RECALL_PLAYBACK); }else if((AGS_RECALL_ID_SEQUENCER & (AGS_RECALL_ID(recall_id->data)->flags)) != 0){ ags_recall_set_flags(current, AGS_RECALL_SEQUENCER); }else if((AGS_RECALL_ID_NOTATION & (AGS_RECALL_ID(recall_id->data)->flags)) != 0){ ags_recall_set_flags(current, AGS_RECALL_NOTATION); } /* append to AgsAudio */ if(add_recall->is_play) AGS_CHANNEL(add_recall->context)->play = g_list_append(AGS_CHANNEL(add_recall->context)->play, current); else AGS_CHANNEL(add_recall->context)->recall = g_list_append(AGS_CHANNEL(add_recall->context)->recall, current); /* connect */ ags_connectable_connect(AGS_CONNECTABLE(current)); /* notify run */ ags_recall_notify_dependency(current, AGS_RECALL_NOTIFY_RUN, 1); /* resolve */ ags_recall_resolve_dependencies(current); /* init */ ags_dynamic_connectable_connect_dynamic(AGS_DYNAMIC_CONNECTABLE(current)); current->flags &= (~AGS_RECALL_HIDE); ags_recall_run_init_pre(current); current->flags &= (~AGS_RECALL_REMOVE); ags_recall_run_init_inter(current); ags_recall_run_init_post(current); /* iterate */ recall_id = recall_id->next; } } }else if(AGS_IS_RECALL(add_recall->context)){ ags_recall_add_child(AGS_RECALL(add_recall->context), add_recall->recall); } ags_connectable_connect(AGS_CONNECTABLE(add_recall->recall)); } /** * ags_add_recall_new: * @context: may be #AgsAudio, #AgsChannel or #AgsRecall * @recall: the #AgsRecall to add * @is_play: if %TRUE non-complex recall * * Creates an #AgsAddRecall. * * Returns: an new #AgsAddRecall. * * Since: 0.4 */ AgsAddRecall* ags_add_recall_new(GObject *context, AgsRecall *recall, gboolean is_play) { AgsAddRecall *add_recall; add_recall = (AgsAddRecall *) g_object_new(AGS_TYPE_ADD_RECALL, NULL); add_recall->context = context; add_recall->recall = recall; add_recall->is_play = is_play; return(add_recall); } gsequencer-0.6.37/src/ags/audio/task/ags_start_read_file.h0000644000175000017500000000373412632675601020446 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_START_READ_FILE_H__ #define __AGS_START_READ_FILE_H__ #include #include #include #include #define AGS_TYPE_START_READ_FILE (ags_start_read_file_get_type()) #define AGS_START_READ_FILE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_START_READ_FILE, AgsStartReadFile)) #define AGS_START_READ_FILE_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_START_READ_FILE, AgsStartReadFileClass)) #define AGS_IS_START_READ_FILE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_START_READ_FILE)) #define AGS_IS_START_READ_FILE_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_START_READ_FILE)) #define AGS_START_READ_FILE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_START_READ_FILE, AgsStartReadFileClass)) typedef struct _AgsStartReadFile AgsStartReadFile; typedef struct _AgsStartReadFileClass AgsStartReadFileClass; struct _AgsStartReadFile { AgsTask task; AgsFile *file; }; struct _AgsStartReadFileClass { AgsTaskClass task; }; GType ags_start_read_file_get_type(); AgsStartReadFile* ags_start_read_file_new(AgsFile *file); #endif /*__AGS_START_READ_FILE_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_set_audio_channels.h0000644000175000017500000000414512626272146021143 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_SET_AUDIO_CHANNELS_H__ #define __AGS_SET_AUDIO_CHANNELS_H__ #include #include #include #include #define AGS_TYPE_SET_AUDIO_CHANNELS (ags_set_audio_channels_get_type()) #define AGS_SET_AUDIO_CHANNELS(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_SET_AUDIO_CHANNELS, AgsSetAudioChannels)) #define AGS_SET_AUDIO_CHANNELS_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_SET_AUDIO_CHANNELS, AgsSetAudioChannelsClass)) #define AGS_IS_SET_AUDIO_CHANNELS(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_SET_AUDIO_CHANNELS)) #define AGS_IS_SET_AUDIO_CHANNELS_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_SET_AUDIO_CHANNELS)) #define AGS_SET_AUDIO_CHANNELS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_SET_AUDIO_CHANNELS, AgsSetAudioChannelsClass)) typedef struct _AgsSetAudioChannels AgsSetAudioChannels; typedef struct _AgsSetAudioChannelsClass AgsSetAudioChannelsClass; struct _AgsSetAudioChannels { AgsTask task; AgsDevout *devout; guint audio_channels; }; struct _AgsSetAudioChannelsClass { AgsTaskClass task; }; GType ags_set_audio_channels_get_type(); AgsSetAudioChannels* ags_set_audio_channels_new(AgsDevout *devout, guint audio_channels); #endif /*__AGS_SET_AUDIO_CHANNELS_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_add_recall.h0000644000175000017500000000367712626272146017377 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_ADD_RECALL_H__ #define __AGS_ADD_RECALL_H__ #include #include #include #include #define AGS_TYPE_ADD_RECALL (ags_add_recall_get_type()) #define AGS_ADD_RECALL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_ADD_RECALL, AgsAddRecall)) #define AGS_ADD_RECALL_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_ADD_RECALL, AgsAddRecallClass)) #define AGS_IS_ADD_RECALL(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_ADD_RECALL)) #define AGS_IS_ADD_RECALL_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_ADD_RECALL)) #define AGS_ADD_RECALL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_ADD_RECALL, AgsAddRecallClass)) typedef struct _AgsAddRecall AgsAddRecall; typedef struct _AgsAddRecallClass AgsAddRecallClass; struct _AgsAddRecall { AgsTask task; GObject *context; AgsRecall *recall; gboolean is_play; }; struct _AgsAddRecallClass { AgsTaskClass task; }; GType ags_add_recall_get_type(); AgsAddRecall* ags_add_recall_new(GObject *context, AgsRecall *recall, gboolean is_play); #endif /*__AGS_ADD_RECALL_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_append_audio_threaded.h0000644000175000017500000000431212626272146021600 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_APPEND_AUDIO_THREADED_H__ #define __AGS_APPEND_AUDIO_THREADED_H__ #include #include #include #include #define AGS_TYPE_APPEND_AUDIO_THREADED (ags_append_audio_threaded_get_type()) #define AGS_APPEND_AUDIO_THREADED(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_APPEND_AUDIO_THREADED, AgsAppendAudioThreaded)) #define AGS_APPEND_AUDIO_THREADED_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_APPEND_AUDIO_THREADED, AgsAppendAudioThreadedClass)) #define AGS_IS_APPEND_AUDIO_THREADED(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_APPEND_AUDIO_THREADED)) #define AGS_IS_APPEND_AUDIO_THREADED_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_APPEND_AUDIO_THREADED)) #define AGS_APPEND_AUDIO_THREADED_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_APPEND_AUDIO_THREADED, AgsAppendAudioThreadedClass)) typedef struct _AgsAppendAudioThreaded AgsAppendAudioThreaded; typedef struct _AgsAppendAudioThreadedClass AgsAppendAudioThreadedClass; struct _AgsAppendAudioThreaded { AgsTask task; GObject *audio_loop; AgsDevoutPlay *devout_play; }; struct _AgsAppendAudioThreadedClass { AgsTaskClass task; }; GType ags_append_audio_threaded_get_type(); AgsAppendAudioThreaded* ags_append_audio_threaded_new(GObject *audio_loop, AgsDevoutPlay *play); #endif /*__AGS_APPEND_AUDIO_THREADED_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_save_file.h0000644000175000017500000000350212626272146017245 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_SAVE_FILE_H__ #define __AGS_SAVE_FILE_H__ #include #include #include #include #define AGS_TYPE_SAVE_FILE (ags_save_file_get_type()) #define AGS_SAVE_FILE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_SAVE_FILE, AgsSaveFile)) #define AGS_SAVE_FILE_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_SAVE_FILE, AgsSaveFileClass)) #define AGS_IS_SAVE_FILE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_SAVE_FILE)) #define AGS_IS_SAVE_FILE_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_SAVE_FILE)) #define AGS_SAVE_FILE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_SAVE_FILE, AgsSaveFileClass)) typedef struct _AgsSaveFile AgsSaveFile; typedef struct _AgsSaveFileClass AgsSaveFileClass; struct _AgsSaveFile { AgsTask task; AgsFile *file; }; struct _AgsSaveFileClass { AgsTaskClass task; }; GType ags_save_file_get_type(); AgsSaveFile* ags_save_file_new(AgsFile *file); #endif /*__AGS_SAVE_FILE_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_remove_audio_signal.h0000644000175000017500000000431712626272146021330 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_REMOVE_AUDIO_SIGNAL_H__ #define __AGS_REMOVE_AUDIO_SIGNAL_H__ #include #include #include #include #include #define AGS_TYPE_REMOVE_AUDIO_SIGNAL (ags_remove_audio_signal_get_type()) #define AGS_REMOVE_AUDIO_SIGNAL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_REMOVE_AUDIO_SIGNAL, AgsRemoveAudioSignal)) #define AGS_REMOVE_AUDIO_SIGNAL_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_REMOVE_AUDIO_SIGNAL, AgsRemoveAudioSignalClass)) #define AGS_IS_REMOVE_AUDIO_SIGNAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_REMOVE_AUDIO_SIGNAL)) #define AGS_IS_REMOVE_AUDIO_SIGNAL_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_REMOVE_AUDIO_SIGNAL)) #define AGS_REMOVE_AUDIO_SIGNAL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_REMOVE_AUDIO_SIGNAL, AgsRemoveAudioSignalClass)) typedef struct _AgsRemoveAudioSignal AgsRemoveAudioSignal; typedef struct _AgsRemoveAudioSignalClass AgsRemoveAudioSignalClass; struct _AgsRemoveAudioSignal { AgsTask task; AgsRecycling *recycling; AgsAudioSignal *audio_signal; }; struct _AgsRemoveAudioSignalClass { AgsTaskClass task; }; GType ags_remove_audio_signal_get_type(); AgsRemoveAudioSignal* ags_remove_audio_signal_new(AgsRecycling *recycling, AgsAudioSignal *audio_signal); #endif /*__AGS_REMOVE_AUDIO_SIGNAL_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_append_channel.h0000644000175000017500000000400512626272146020246 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_APPEND_CHANNEL_H__ #define __AGS_APPEND_CHANNEL_H__ #include #include #include #include #define AGS_TYPE_APPEND_CHANNEL (ags_append_channel_get_type()) #define AGS_APPEND_CHANNEL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_APPEND_CHANNEL, AgsAppendChannel)) #define AGS_APPEND_CHANNEL_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_APPEND_CHANNEL, AgsAppendChannelClass)) #define AGS_IS_APPEND_CHANNEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_APPEND_CHANNEL)) #define AGS_IS_APPEND_CHANNEL_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_APPEND_CHANNEL)) #define AGS_APPEND_CHANNEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_APPEND_CHANNEL, AgsAppendChannelClass)) typedef struct _AgsAppendChannel AgsAppendChannel; typedef struct _AgsAppendChannelClass AgsAppendChannelClass; struct _AgsAppendChannel { AgsTask task; GObject *audio_loop; GObject *channel; }; struct _AgsAppendChannelClass { AgsTaskClass task; }; GType ags_append_channel_get_type(); AgsAppendChannel* ags_append_channel_new(GObject *audio_loop, GObject *channel); #endif /*__AGS_APPEND_CHANNEL_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_remove_recall_container.c0000644000175000017500000001306012626272146022164 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include void ags_remove_recall_container_class_init(AgsRemoveRecallContainerClass *remove_recall_container); void ags_remove_recall_container_connectable_interface_init(AgsConnectableInterface *connectable); void ags_remove_recall_container_init(AgsRemoveRecallContainer *remove_recall_container); void ags_remove_recall_container_connect(AgsConnectable *connectable); void ags_remove_recall_container_disconnect(AgsConnectable *connectable); void ags_remove_recall_container_finalize(GObject *gobject); void ags_remove_recall_container_launch(AgsTask *task); /** * SECTION:ags_remove_recall_container * @short_description: remove recall object to context * @title: AgsRemoveRecallContainer * @section_id: * @include: ags/audio/task/ags_remove_recall_container.h * * The #AgsRemoveRecallContainer task removes #AgsRecallContainer of audio. */ static gpointer ags_remove_recall_container_parent_class = NULL; static AgsConnectableInterface *ags_remove_recall_container_parent_connectable_interface; GType ags_remove_recall_container_get_type() { static GType ags_type_remove_recall_container = 0; if(!ags_type_remove_recall_container){ static const GTypeInfo ags_remove_recall_container_info = { sizeof (AgsRemoveRecallContainerClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_remove_recall_container_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsRemoveRecallContainer), 0, /* n_preallocs */ (GInstanceInitFunc) ags_remove_recall_container_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_remove_recall_container_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_remove_recall_container = g_type_register_static(AGS_TYPE_TASK, "AgsRemoveRecallContainer\0", &ags_remove_recall_container_info, 0); g_type_add_interface_static(ags_type_remove_recall_container, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_remove_recall_container); } void ags_remove_recall_container_class_init(AgsRemoveRecallContainerClass *remove_recall_container) { GObjectClass *gobject; AgsTaskClass *task; ags_remove_recall_container_parent_class = g_type_class_peek_parent(remove_recall_container); /* GObjectClass */ gobject = (GObjectClass *) remove_recall_container; gobject->finalize = ags_remove_recall_container_finalize; /* AgsTaskClass */ task = (AgsTaskClass *) remove_recall_container; task->launch = ags_remove_recall_container_launch; } void ags_remove_recall_container_connectable_interface_init(AgsConnectableInterface *connectable) { ags_remove_recall_container_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_remove_recall_container_connect; connectable->disconnect = ags_remove_recall_container_disconnect; } void ags_remove_recall_container_init(AgsRemoveRecallContainer *remove_recall_container) { remove_recall_container->audio = NULL; remove_recall_container->recall_container = NULL; } void ags_remove_recall_container_connect(AgsConnectable *connectable) { ags_remove_recall_container_parent_connectable_interface->connect(connectable); /* empty */ } void ags_remove_recall_container_disconnect(AgsConnectable *connectable) { ags_remove_recall_container_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_remove_recall_container_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_remove_recall_container_parent_class)->finalize(gobject); /* empty */ } void ags_remove_recall_container_launch(AgsTask *task) { AgsRemoveRecallContainer *remove_recall_container; remove_recall_container = AGS_REMOVE_RECALL_CONTAINER(task); ags_audio_remove_recall_container((AgsAudio *) remove_recall_container->audio, (GObject *) remove_recall_container->recall_container); } /** * ags_remove_recall_container_new: * @context: the #AgsAudio * @recall: the #AgsRecallContainer to remove * * Creates an #AgsRemoveRecallContainer. * * Returns: an new #AgsRemoveRecallContainer. * * Since: 0.4 */ AgsRemoveRecallContainer* ags_remove_recall_container_new(GObject *audio, AgsRecallContainer *recall_container) { AgsRemoveRecallContainer *remove_recall_container; remove_recall_container = (AgsRemoveRecallContainer *) g_object_new(AGS_TYPE_REMOVE_RECALL_CONTAINER, NULL); remove_recall_container->audio = audio; remove_recall_container->recall_container = recall_container; return(remove_recall_container); } gsequencer-0.6.37/src/ags/audio/task/ags_cancel_audio.h0000644000175000017500000000410012626272146017711 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_CANCEL_AUDIO_H__ #define __AGS_CANCEL_AUDIO_H__ #include #include #include #include #include #define AGS_TYPE_CANCEL_AUDIO (ags_cancel_audio_get_type()) #define AGS_CANCEL_AUDIO(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_CANCEL_AUDIO, AgsCancelAudio)) #define AGS_CANCEL_AUDIO_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_CANCEL_AUDIO, AgsCancelAudioClass)) #define AGS_IS_CANCEL_AUDIO(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_CANCEL_AUDIO)) #define AGS_IS_CANCEL_AUDIO_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_CANCEL_AUDIO)) #define AGS_CANCEL_AUDIO_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_CANCEL_AUDIO, AgsCancelAudioClass)) typedef struct _AgsCancelAudio AgsCancelAudio; typedef struct _AgsCancelAudioClass AgsCancelAudioClass; struct _AgsCancelAudio { AgsTask task; AgsAudio *audio; gboolean playback; gboolean sequencer; gboolean notation; }; struct _AgsCancelAudioClass { AgsTaskClass task; }; GType ags_cancel_audio_get_type(); AgsCancelAudio* ags_cancel_audio_new(AgsAudio *audio, gboolean playback, gboolean sequencer, gboolean notation); #endif /*__AGS_CANCEL_AUDIO_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_append_audio.h0000644000175000017500000000371512626272146017746 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_APPEND_AUDIO_H__ #define __AGS_APPEND_AUDIO_H__ #include #include #include #include #define AGS_TYPE_APPEND_AUDIO (ags_append_audio_get_type()) #define AGS_APPEND_AUDIO(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_APPEND_AUDIO, AgsAppendAudio)) #define AGS_APPEND_AUDIO_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_APPEND_AUDIO, AgsAppendAudioClass)) #define AGS_IS_APPEND_AUDIO(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_APPEND_AUDIO)) #define AGS_IS_APPEND_AUDIO_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_APPEND_AUDIO)) #define AGS_APPEND_AUDIO_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_APPEND_AUDIO, AgsAppendAudioClass)) typedef struct _AgsAppendAudio AgsAppendAudio; typedef struct _AgsAppendAudioClass AgsAppendAudioClass; struct _AgsAppendAudio { AgsTask task; GObject *audio_loop; GObject *audio; }; struct _AgsAppendAudioClass { AgsTaskClass task; }; GType ags_append_audio_get_type(); AgsAppendAudio* ags_append_audio_new(GObject *audio_loop, GObject *audio); #endif /*__AGS_APPEND_AUDIO_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_toggle_pattern_bit.c0000644000175000017500000001431512626272146021163 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_toggle_pattern_bit_class_init(AgsTogglePatternBitClass *toggle_pattern_bit); void ags_toggle_pattern_bit_connectable_interface_init(AgsConnectableInterface *connectable); void ags_toggle_pattern_bit_init(AgsTogglePatternBit *toggle_pattern_bit); void ags_toggle_pattern_bit_connect(AgsConnectable *connectable); void ags_toggle_pattern_bit_disconnect(AgsConnectable *connectable); void ags_toggle_pattern_bit_finalize(GObject *gobject); void ags_toggle_pattern_bit_launch(AgsTask *task); /** * SECTION:ags_toggle_pattern_bit * @short_description: toggles the pattern * @title: AgsTogglePatternBit * @section_id: * @include: ags/audio/task/ags_toggle_pattern_bit.h * * The #AgsTogglePatternBit task toggles the specified #AgsPattern. */ enum{ REFRESH_GUI, LAST_SIGNAL, }; static gpointer ags_toggle_pattern_bit_parent_class = NULL; static AgsConnectableInterface *ags_toggle_pattern_bit_parent_connectable_interface; static guint toggle_pattern_bit_signals[LAST_SIGNAL]; GType ags_toggle_pattern_bit_get_type() { static GType ags_type_toggle_pattern_bit = 0; if(!ags_type_toggle_pattern_bit){ static const GTypeInfo ags_toggle_pattern_bit_info = { sizeof (AgsTogglePatternBitClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_toggle_pattern_bit_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsTogglePatternBit), 0, /* n_preallocs */ (GInstanceInitFunc) ags_toggle_pattern_bit_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_toggle_pattern_bit_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_toggle_pattern_bit = g_type_register_static(AGS_TYPE_TASK, "AgsTogglePatternBit\0", &ags_toggle_pattern_bit_info, 0); g_type_add_interface_static(ags_type_toggle_pattern_bit, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_toggle_pattern_bit); } void ags_toggle_pattern_bit_class_init(AgsTogglePatternBitClass *toggle_pattern_bit) { GObjectClass *gobject; AgsTaskClass *task; ags_toggle_pattern_bit_parent_class = g_type_class_peek_parent(toggle_pattern_bit); /* gobject */ gobject = (GObjectClass *) toggle_pattern_bit; gobject->finalize = ags_toggle_pattern_bit_finalize; /* signals */ toggle_pattern_bit_signals[REFRESH_GUI] = g_signal_new("refresh-gui\0", G_TYPE_FROM_CLASS (toggle_pattern_bit), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AgsTogglePatternBitClass, refresh_gui), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); /* task */ task = (AgsTaskClass *) toggle_pattern_bit; task->launch = ags_toggle_pattern_bit_launch; /* toggle pattern bit */ toggle_pattern_bit->refresh_gui = NULL; } void ags_toggle_pattern_bit_connectable_interface_init(AgsConnectableInterface *connectable) { ags_toggle_pattern_bit_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_toggle_pattern_bit_connect; connectable->disconnect = ags_toggle_pattern_bit_disconnect; } void ags_toggle_pattern_bit_init(AgsTogglePatternBit *toggle_pattern_bit) { toggle_pattern_bit->pattern = NULL; toggle_pattern_bit->line = 0; toggle_pattern_bit->index_i = 0; toggle_pattern_bit->index_j = 0; toggle_pattern_bit->bit = 0; } void ags_toggle_pattern_bit_connect(AgsConnectable *connectable) { ags_toggle_pattern_bit_parent_connectable_interface->connect(connectable); /* empty */ } void ags_toggle_pattern_bit_disconnect(AgsConnectable *connectable) { ags_toggle_pattern_bit_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_toggle_pattern_bit_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_toggle_pattern_bit_parent_class)->finalize(gobject); /* empty */ } void ags_toggle_pattern_bit_launch(AgsTask *task) { AgsTogglePatternBit *toggle_pattern_bit; toggle_pattern_bit = AGS_TOGGLE_PATTERN_BIT(task); g_message("toggle pattern\0"); ags_pattern_toggle_bit((AgsPattern *) toggle_pattern_bit->pattern, toggle_pattern_bit->index_i, toggle_pattern_bit->index_j, toggle_pattern_bit->bit); ags_toggle_pattern_bit_refresh_gui(toggle_pattern_bit); } void ags_toggle_pattern_bit_refresh_gui(AgsTogglePatternBit *toggle_pattern_bit) { g_return_if_fail(AGS_IS_TOGGLE_PATTERN_BIT(toggle_pattern_bit)); g_object_ref(G_OBJECT(toggle_pattern_bit)); g_signal_emit(G_OBJECT(toggle_pattern_bit), toggle_pattern_bit_signals[REFRESH_GUI], 0); g_object_unref(G_OBJECT(toggle_pattern_bit)); } /** * ags_toggle_pattern_bit_new: * @pattern: the #AgsPattern to toggle * @line: * @index_i: bank 0 * @index_j: bank 1 * @bit: the index within pattern * * Creates an #AgsTogglePatternBit. * * Returns: an new #AgsTogglePatternBit. * * Since: 0.4 */ AgsTogglePatternBit* ags_toggle_pattern_bit_new(AgsPattern *pattern, guint line, guint index_i, guint index_j, guint bit) { AgsTogglePatternBit *toggle_pattern_bit; toggle_pattern_bit = (AgsTogglePatternBit *) g_object_new(AGS_TYPE_TOGGLE_PATTERN_BIT, NULL); toggle_pattern_bit->pattern = pattern; toggle_pattern_bit->line = line; toggle_pattern_bit->index_i = index_i; toggle_pattern_bit->index_j = index_j; toggle_pattern_bit->bit = bit; return(toggle_pattern_bit); } gsequencer-0.6.37/src/ags/audio/task/ags_remove_audio.c0000644000175000017500000001161612626272146017766 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_remove_audio_class_init(AgsRemoveAudioClass *remove_audio); void ags_remove_audio_connectable_interface_init(AgsConnectableInterface *connectable); void ags_remove_audio_init(AgsRemoveAudio *remove_audio); void ags_remove_audio_connect(AgsConnectable *connectable); void ags_remove_audio_disconnect(AgsConnectable *connectable); void ags_remove_audio_finalize(GObject *gobject); void ags_remove_audio_launch(AgsTask *task); /** * SECTION:ags_remove_audio * @short_description: remove audio object of devout * @title: AgsRemoveAudio * @section_id: * @include: ags/audio/task/ags_remove_audio.h * * The #AgsRemoveAudio task removes #AgsAudio of #AgsDevout. */ static gpointer ags_remove_audio_parent_class = NULL; static AgsConnectableInterface *ags_remove_audio_parent_connectable_interface; GType ags_remove_audio_get_type() { static GType ags_type_remove_audio = 0; if(!ags_type_remove_audio){ static const GTypeInfo ags_remove_audio_info = { sizeof (AgsRemoveAudioClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_remove_audio_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsRemoveAudio), 0, /* n_preallocs */ (GInstanceInitFunc) ags_remove_audio_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_remove_audio_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_remove_audio = g_type_register_static(AGS_TYPE_TASK, "AgsRemoveAudio\0", &ags_remove_audio_info, 0); g_type_add_interface_static(ags_type_remove_audio, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_remove_audio); } void ags_remove_audio_class_init(AgsRemoveAudioClass *remove_audio) { GObjectClass *gobject; AgsTaskClass *task; ags_remove_audio_parent_class = g_type_class_peek_parent(remove_audio); /* gobject */ gobject = (GObjectClass *) remove_audio; gobject->finalize = ags_remove_audio_finalize; /* task */ task = (AgsTaskClass *) remove_audio; task->launch = ags_remove_audio_launch; } void ags_remove_audio_connectable_interface_init(AgsConnectableInterface *connectable) { ags_remove_audio_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_remove_audio_connect; connectable->disconnect = ags_remove_audio_disconnect; } void ags_remove_audio_init(AgsRemoveAudio *remove_audio) { remove_audio->devout = NULL; remove_audio->audio = NULL; } void ags_remove_audio_connect(AgsConnectable *connectable) { ags_remove_audio_parent_connectable_interface->connect(connectable); /* empty */ } void ags_remove_audio_disconnect(AgsConnectable *connectable) { ags_remove_audio_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_remove_audio_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_remove_audio_parent_class)->finalize(gobject); /* empty */ } void ags_remove_audio_launch(AgsTask *task) { AgsRemoveAudio *remove_audio; AgsChannel *current; remove_audio = AGS_REMOVE_AUDIO(task); current = remove_audio->audio->output; while(current != NULL){ ags_channel_set_link(current, NULL, NULL); current = current->next; } current = remove_audio->audio->input; while(current != NULL){ ags_channel_set_link(current, NULL, NULL); current = current->next; } /* remove audio */ ags_devout_remove_audio(remove_audio->devout, G_OBJECT(remove_audio->audio)); } /** * ags_remove_audio_new: * @devout: the #AgsDevout * @audio: the #AgsAudio to remove * * Creates an #AgsRemoveAudio. * * Returns: an new #AgsRemoveAudio. * * Since: 0.4 */ AgsRemoveAudio* ags_remove_audio_new(AgsDevout *devout, AgsAudio *audio) { AgsRemoveAudio *remove_audio; remove_audio = (AgsRemoveAudio *) g_object_new(AGS_TYPE_REMOVE_AUDIO, NULL); remove_audio->devout = devout; remove_audio->audio = audio; return(remove_audio); } gsequencer-0.6.37/src/ags/audio/task/ags_toggle_led.c0000644000175000017500000001151212626272146017410 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include void ags_toggle_led_class_init(AgsToggleLedClass *toggle_led); void ags_toggle_led_connectable_interface_init(AgsConnectableInterface *connectable); void ags_toggle_led_init(AgsToggleLed *toggle_led); void ags_toggle_led_connect(AgsConnectable *connectable); void ags_toggle_led_disconnect(AgsConnectable *connectable); void ags_toggle_led_finalize(GObject *gobject); void ags_toggle_led_launch(AgsTask *task); /** * SECTION:ags_toggle_led * @short_description: toggle led object * @title: AgsToggleLed * @section_id: * @include: ags/audio/task/ags_toggle_led.h * * The #AgsToggleLed task toggles #AgsLed and the GUI is updated. */ static gpointer ags_toggle_led_parent_class = NULL; static AgsConnectableInterface *ags_toggle_led_parent_connectable_interface; GType ags_toggle_led_get_type() { static GType ags_type_toggle_led = 0; if(!ags_type_toggle_led){ static const GTypeInfo ags_toggle_led_info = { sizeof (AgsToggleLedClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_toggle_led_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsToggleLed), 0, /* n_preallocs */ (GInstanceInitFunc) ags_toggle_led_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_toggle_led_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_toggle_led = g_type_register_static(AGS_TYPE_TASK, "AgsToggleLed\0", &ags_toggle_led_info, 0); g_type_add_interface_static(ags_type_toggle_led, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_toggle_led); } void ags_toggle_led_class_init(AgsToggleLedClass *toggle_led) { GObjectClass *gobject; AgsTaskClass *task; ags_toggle_led_parent_class = g_type_class_peek_parent(toggle_led); /* GObject */ gobject = (GObjectClass *) toggle_led; gobject->finalize = ags_toggle_led_finalize; /* AgsTask */ task = (AgsTaskClass *) toggle_led; task->launch = ags_toggle_led_launch; } void ags_toggle_led_connectable_interface_init(AgsConnectableInterface *connectable) { ags_toggle_led_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_toggle_led_connect; connectable->disconnect = ags_toggle_led_disconnect; } void ags_toggle_led_init(AgsToggleLed *toggle_led) { toggle_led->led = NULL; toggle_led->set_active = 0; toggle_led->unset_active = 0; } void ags_toggle_led_connect(AgsConnectable *connectable) { ags_toggle_led_parent_connectable_interface->connect(connectable); /* empty */ } void ags_toggle_led_disconnect(AgsConnectable *connectable) { ags_toggle_led_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_toggle_led_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_toggle_led_parent_class)->finalize(gobject); /* empty */ } void ags_toggle_led_launch(AgsTask *task) { AgsToggleLed *toggle_led; GList *list, *active; guint i; toggle_led = AGS_TOGGLE_LED(task); list = toggle_led->led; for(i = 0; list != NULL; i++){ if(i == toggle_led->set_active){ active = list; list = list->next; continue; } ags_led_unset_active(AGS_LED(list->data)); list = list->next; } ags_led_set_active(AGS_LED(active->data)); g_list_free(toggle_led->led); } /** * ags_toggle_led_new: * @led: the #AgsLed to toggle * @set_active: the nth led to activate * @unset_active: the nth led to deactivate * * Creates an #AgsToggleLed. * * Returns: an new #AgsToggleLed. * * Since: 0.4 */ AgsToggleLed* ags_toggle_led_new(GList *led, guint set_active, guint unset_active) { AgsToggleLed *toggle_led; toggle_led = (AgsToggleLed *) g_object_new(AGS_TYPE_TOGGLE_LED, NULL); toggle_led->led = led; toggle_led->set_active = set_active; toggle_led->unset_active = unset_active; return(toggle_led); } gsequencer-0.6.37/src/ags/audio/task/ags_add_line_member.c0000644000175000017500000001303512626272146020373 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include void ags_add_line_member_class_init(AgsAddLineMemberClass *add_line_member); void ags_add_line_member_connectable_interface_init(AgsConnectableInterface *connectable); void ags_add_line_member_init(AgsAddLineMember *add_line_member); void ags_add_line_member_connect(AgsConnectable *connectable); void ags_add_line_member_disconnect(AgsConnectable *connectable); void ags_add_line_member_finalize(GObject *gobject); void ags_add_line_member_launch(AgsTask *task); /** * SECTION:ags_add_line_member * @short_description: add line_member object to line * @title: AgsAddLineMember * @section_id: * @include: ags/audio/task/ags_add_line_member.h * * The #AgsAddLineMember task addspacks #AgsLineMember to #AgsLine. */ static gpointer ags_add_line_member_parent_class = NULL; static AgsConnectableInterface *ags_add_line_member_parent_connectable_interface; GType ags_add_line_member_get_type() { static GType ags_type_add_line_member = 0; if(!ags_type_add_line_member){ static const GTypeInfo ags_add_line_member_info = { sizeof (AgsAddLineMemberClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_add_line_member_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsAddLineMember), 0, /* n_preallocs */ (GInstanceInitFunc) ags_add_line_member_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_add_line_member_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_add_line_member = g_type_register_static(AGS_TYPE_TASK, "AgsAddLineMember\0", &ags_add_line_member_info, 0); g_type_add_interface_static(ags_type_add_line_member, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_add_line_member); } void ags_add_line_member_class_init(AgsAddLineMemberClass *add_line_member) { GObjectClass *gobject; AgsTaskClass *task; ags_add_line_member_parent_class = g_type_class_peek_parent(add_line_member); /* gobject */ gobject = (GObjectClass *) add_line_member; gobject->finalize = ags_add_line_member_finalize; /* task */ task = (AgsTaskClass *) add_line_member; task->launch = ags_add_line_member_launch; } void ags_add_line_member_connectable_interface_init(AgsConnectableInterface *connectable) { ags_add_line_member_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_add_line_member_connect; connectable->disconnect = ags_add_line_member_disconnect; } void ags_add_line_member_init(AgsAddLineMember *add_line_member) { add_line_member->line = NULL; add_line_member->line_member = NULL; add_line_member->x = 0; add_line_member->y = 0; add_line_member->width = 0; add_line_member->height = 0; } void ags_add_line_member_connect(AgsConnectable *connectable) { ags_add_line_member_parent_connectable_interface->connect(connectable); /* empty */ } void ags_add_line_member_disconnect(AgsConnectable *connectable) { ags_add_line_member_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_add_line_member_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_add_line_member_parent_class)->finalize(gobject); /* empty */ } void ags_add_line_member_launch(AgsTask *task) { AgsAddLineMember *add_line_member; add_line_member = AGS_ADD_LINE_MEMBER(task); ags_expander_add(add_line_member->line->expander, (GtkWidget *) add_line_member->line_member, add_line_member->x, add_line_member->y, add_line_member->width, add_line_member->height); ags_line_member_find_port(add_line_member->line_member); ags_connectable_connect(AGS_CONNECTABLE(add_line_member->line_member)); // gtk_widget_set_child_visible(GTK_BIN(add_line_member->line->expander)->child, // TRUE); } /** * ags_add_line_member_new: * @line: the #AgsLine * @line_member: the #AgsLineMember to add * @x: pack start x * @y: pack start y * @width: pack width * @height: pack height * * Creates an #AgsAddLineMember. * * Returns: an new #AgsAddLineMember. * * Since: 0.4 */ AgsAddLineMember* ags_add_line_member_new(AgsLine *line, AgsLineMember *line_member, guint x, guint y, guint width, guint height) { AgsAddLineMember *add_line_member; add_line_member = (AgsAddLineMember *) g_object_new(AGS_TYPE_ADD_LINE_MEMBER, NULL); add_line_member->line = line; add_line_member->line_member = line_member; add_line_member->x = x; add_line_member->y = y; add_line_member->width = width; add_line_member->height = height; return(add_line_member); } gsequencer-0.6.37/src/ags/audio/task/ags_add_audio_signal.c0000644000175000017500000001603012626272146020551 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_add_audio_signal_class_init(AgsAddAudioSignalClass *add_audio_signal); void ags_add_audio_signal_connectable_interface_init(AgsConnectableInterface *connectable); void ags_add_audio_signal_init(AgsAddAudioSignal *add_audio_signal); void ags_add_audio_signal_connect(AgsConnectable *connectable); void ags_add_audio_signal_disconnect(AgsConnectable *connectable); void ags_add_audio_signal_finalize(GObject *gobject); void ags_add_audio_signal_launch(AgsTask *task); /** * SECTION:ags_add_audio_signal * @short_description: add audio_signal object to recycling * @title: AgsAddAudioSignal * @section_id: * @include: ags/audio/task/ags_add_audio_signal.h * * The #AgsAddAudioSignal task adds #AgsAudioSignal to #AgsRecycling. */ static gpointer ags_add_audio_signal_parent_class = NULL; static AgsConnectableInterface *ags_add_audio_signal_parent_connectable_interface; GType ags_add_audio_signal_get_type() { static GType ags_type_add_audio_signal = 0; if(!ags_type_add_audio_signal){ static const GTypeInfo ags_add_audio_signal_info = { sizeof (AgsAddAudioSignalClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_add_audio_signal_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsAddAudioSignal), 0, /* n_preallocs */ (GInstanceInitFunc) ags_add_audio_signal_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_add_audio_signal_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_add_audio_signal = g_type_register_static(AGS_TYPE_TASK, "AgsAddAudioSignal\0", &ags_add_audio_signal_info, 0); g_type_add_interface_static(ags_type_add_audio_signal, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_add_audio_signal); } void ags_add_audio_signal_class_init(AgsAddAudioSignalClass *add_audio_signal) { GObjectClass *gobject; AgsTaskClass *task; ags_add_audio_signal_parent_class = g_type_class_peek_parent(add_audio_signal); /* gobject */ gobject = (GObjectClass *) add_audio_signal; gobject->finalize = ags_add_audio_signal_finalize; /* task */ task = (AgsTaskClass *) add_audio_signal; task->launch = ags_add_audio_signal_launch; } void ags_add_audio_signal_connectable_interface_init(AgsConnectableInterface *connectable) { ags_add_audio_signal_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_add_audio_signal_connect; connectable->disconnect = ags_add_audio_signal_disconnect; } void ags_add_audio_signal_init(AgsAddAudioSignal *add_audio_signal) { add_audio_signal->recycling = NULL; add_audio_signal->audio_signal = NULL; add_audio_signal->devout = NULL; add_audio_signal->recall_id = NULL; add_audio_signal->audio_signal_flags = 0; } void ags_add_audio_signal_connect(AgsConnectable *connectable) { ags_add_audio_signal_parent_connectable_interface->connect(connectable); /* empty */ } void ags_add_audio_signal_disconnect(AgsConnectable *connectable) { ags_add_audio_signal_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_add_audio_signal_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_add_audio_signal_parent_class)->finalize(gobject); /* empty */ } void ags_add_audio_signal_launch(AgsTask *task) { AgsDevout *devout; AgsAddAudioSignal *add_audio_signal; AgsAudioSignal *audio_signal, *old_template; AgsRecallID *recall_id; gdouble delay; guint attack; guint tic_counter_incr; add_audio_signal = AGS_ADD_AUDIO_SIGNAL(task); devout = AGS_DEVOUT(add_audio_signal->devout); /* check for template to remove */ if((AGS_AUDIO_SIGNAL_TEMPLATE & (add_audio_signal->audio_signal_flags)) != 0){ old_template = ags_audio_signal_get_template(add_audio_signal->recycling->audio_signal); }else{ old_template = NULL; } recall_id = add_audio_signal->recall_id; /* create audio signal */ if(add_audio_signal->audio_signal == NULL){ add_audio_signal->audio_signal = audio_signal = ags_audio_signal_new((GObject *) devout, (GObject *) add_audio_signal->recycling, (GObject *) recall_id); audio_signal->flags = add_audio_signal->audio_signal_flags; }else{ audio_signal = add_audio_signal->audio_signal; } /* delay and attack */ tic_counter_incr = devout->tic_counter + 1; //TODO:JK: unclear attack = 0; //devout->attack[((tic_counter_incr == AGS_NOTATION_TICS_PER_BEAT) ? // 0: // tic_counter_incr)]; delay = 0.0; //devout->delay[((tic_counter_incr == AGS_NOTATION_TICS_PER_BEAT) ? // 0: // tic_counter_incr)]; /* add audio signal */ ags_recycling_create_audio_signal_with_defaults(add_audio_signal->recycling, audio_signal, delay, attack); audio_signal->stream_current = audio_signal->stream_beginning; ags_audio_signal_connect(audio_signal); /* * emit add_audio_signal on AgsRecycling */ ags_recycling_add_audio_signal(add_audio_signal->recycling, audio_signal); /* remove template */ if(old_template != NULL){ ags_recycling_remove_audio_signal(add_audio_signal->recycling, old_template); } } /** * ags_add_audio_signal_new: * @recycling: the #AgsRecycling * @audio_signal: the #AgsAudioSignal to add * @devout: the #AgsDevout defaulting to * @recall_id: the #AgsRecallID, may be %NULL if %AGS_AUDIO_SIGNAL_TEMPLATE set * @audio_signal_flags: the flags to set * * Creates an #AgsAddAudioSignal. * * Returns: an new #AgsAddAudioSignal. * * Since: 0.4 */ AgsAddAudioSignal* ags_add_audio_signal_new(AgsRecycling *recycling, AgsAudioSignal *audio_signal, AgsDevout *devout, AgsRecallID *recall_id, guint audio_signal_flags) { AgsAddAudioSignal *add_audio_signal; add_audio_signal = (AgsAddAudioSignal *) g_object_new(AGS_TYPE_ADD_AUDIO_SIGNAL, NULL); add_audio_signal->recycling = recycling; add_audio_signal->audio_signal = audio_signal; add_audio_signal->devout = devout; add_audio_signal->recall_id = recall_id; add_audio_signal->audio_signal_flags = audio_signal_flags; return(add_audio_signal); } gsequencer-0.6.37/src/ags/audio/task/ags_add_line_member.h0000644000175000017500000000425412626272146020403 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_ADD_LINE_MEMBER_H__ #define __AGS_ADD_LINE_MEMBER_H__ #include #include #include #include #include #define AGS_TYPE_ADD_LINE_MEMBER (ags_add_line_member_get_type()) #define AGS_ADD_LINE_MEMBER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_ADD_LINE_MEMBER, AgsAddLineMember)) #define AGS_ADD_LINE_MEMBER_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_ADD_LINE_MEMBER, AgsAddLineMemberClass)) #define AGS_IS_ADD_LINE_MEMBER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_ADD_LINE_MEMBER)) #define AGS_IS_ADD_LINE_MEMBER_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_ADD_LINE_MEMBER)) #define AGS_ADD_LINE_MEMBER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_ADD_LINE_MEMBER, AgsAddLineMemberClass)) typedef struct _AgsAddLineMember AgsAddLineMember; typedef struct _AgsAddLineMemberClass AgsAddLineMemberClass; struct _AgsAddLineMember { AgsTask task; AgsLine *line; AgsLineMember *line_member; guint x; guint y; guint width; guint height; }; struct _AgsAddLineMemberClass { AgsTaskClass task; }; GType ags_add_line_member_get_type(); AgsAddLineMember* ags_add_line_member_new(AgsLine *line, AgsLineMember *line_member, guint x, guint y, guint width, guint height); #endif /*__AGS_ADD_LINE_MEMBER_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_open_file.c0000644000175000017500000001666212626272146017256 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include void ags_open_file_class_init(AgsOpenFileClass *open_file); void ags_open_file_connectable_interface_init(AgsConnectableInterface *connectable); void ags_open_file_init(AgsOpenFile *open_file); void ags_open_file_connect(AgsConnectable *connectable); void ags_open_file_disconnect(AgsConnectable *connectable); void ags_open_file_finalize(GObject *gobject); void ags_open_file_launch(AgsTask *task); /** * SECTION:ags_open_file * @short_description: open file object * @title: AgsOpenFile * @section_id: * @include: ags/audio/task/ags_open_file.h * * The #AgsOpenFile task opens files. */ static gpointer ags_open_file_parent_class = NULL; static AgsConnectableInterface *ags_open_file_parent_connectable_interface; GType ags_open_file_get_type() { static GType ags_type_open_file = 0; if(!ags_type_open_file){ static const GTypeInfo ags_open_file_info = { sizeof (AgsOpenFileClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_open_file_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsOpenFile), 0, /* n_preallocs */ (GInstanceInitFunc) ags_open_file_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_open_file_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_open_file = g_type_register_static(AGS_TYPE_TASK, "AgsOpenFile\0", &ags_open_file_info, 0); g_type_add_interface_static(ags_type_open_file, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_open_file); } void ags_open_file_class_init(AgsOpenFileClass *open_file) { GObjectClass *gobject; AgsTaskClass *task; ags_open_file_parent_class = g_type_class_peek_parent(open_file); /* GObject */ gobject = (GObjectClass *) open_file; gobject->finalize = ags_open_file_finalize; /* AgsTask */ task = (AgsTaskClass *) open_file; task->launch = ags_open_file_launch; } void ags_open_file_connectable_interface_init(AgsConnectableInterface *connectable) { ags_open_file_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_open_file_connect; connectable->disconnect = ags_open_file_disconnect; } void ags_open_file_init(AgsOpenFile *open_file) { open_file->audio = NULL; open_file->filenames = NULL; open_file->overwrite_channels = FALSE; open_file->create_channels = FALSE; } void ags_open_file_connect(AgsConnectable *connectable) { ags_open_file_parent_connectable_interface->connect(connectable); /* empty */ } void ags_open_file_disconnect(AgsConnectable *connectable) { ags_open_file_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_open_file_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_open_file_parent_class)->finalize(gobject); /* empty */ } void ags_open_file_launch(AgsTask *task) { AgsOpenFile *open_file; AgsAudio *audio; AgsChannel *channel, *iter; AgsAudioFile *audio_file; AgsFileLink *file_link; GSList *current; GList *audio_signal; gchar *current_filename; guint i, i_stop; guint j; GError *error; open_file = AGS_OPEN_FILE(task); audio = open_file->audio; current = open_file->filenames; i_stop = 0; if(open_file->overwrite_channels){ channel = audio->input; i_stop = audio->input_pads; } /* */ if(open_file->create_channels){ AgsMachine *machine; GList *list; guint pads_old; i_stop = g_slist_length(open_file->filenames); pads_old = audio->input_pads; if(open_file->overwrite_channels){ if(i_stop > audio->input_pads){ ags_audio_set_pads(audio, AGS_TYPE_INPUT, i_stop); } channel = audio->input; }else{ ags_audio_set_pads(audio, AGS_TYPE_INPUT, audio->input_pads + i_stop); channel = ags_channel_pad_nth(audio->input, pads_old); } iter = ags_channel_pad_nth(audio->input, pads_old); while(iter != NULL){ ags_connectable_connect(AGS_CONNECTABLE(iter)); iter = iter->next; } machine = (AgsMachine *) audio->machine; list = gtk_container_get_children(machine->input); list = g_list_nth(list, pads_old); while(list != NULL){ ags_connectable_connect(AGS_CONNECTABLE(list->data)); gtk_widget_show_all(list->data); list = list->next; } } for(i = 0; i < i_stop && current != NULL; i++){ current_filename = (gchar *) current->data; audio_file = ags_audio_file_new((gchar *) current_filename, AGS_DEVOUT(audio->devout), 0, open_file->audio->audio_channels); ags_audio_file_open(audio_file); ags_audio_file_read_audio_signal(audio_file); iter = channel; audio_signal = audio_file->audio_signal; j = 0; while(iter != channel->next_pad && audio_signal != NULL){ file_link = g_object_new(AGS_TYPE_FILE_LINK, "filename\0", current_filename, "audio-channel\0", j, NULL); g_object_set(G_OBJECT(iter), "file-link", file_link, NULL); AGS_AUDIO_SIGNAL(audio_signal->data)->flags |= AGS_AUDIO_SIGNAL_TEMPLATE; if(iter->link != NULL){ error = NULL; ags_channel_set_link(iter, NULL, &error); if(error != NULL){ g_warning("%s\0", error->message); } } //TODO:JK: add mutex ags_recycling_add_audio_signal(iter->first_recycling, AGS_AUDIO_SIGNAL(audio_signal->data)); audio_signal = audio_signal->next; iter = iter->next; j++; } channel = channel->next_pad; current = current->next; } } /** * ags_open_file_new: * @file: the #AgsFile * @filenames: the filenames to be opened * @overwrite_channels: reset existing #AgsInput * @create_channels: inistantiate new #AgsInput, if @overwrite_channell as needed * else for sure * * Creates an #AgsOpenFile. * * Returns: an new #AgsOpenFile. * * Since: 0.4 */ AgsOpenFile* ags_open_file_new(AgsAudio *audio, GSList *filenames, gboolean overwrite_channels, gboolean create_channels) { AgsOpenFile *open_file; open_file = (AgsOpenFile *) g_object_new(AGS_TYPE_OPEN_FILE, NULL); open_file->audio = audio; open_file->filenames = filenames; open_file->overwrite_channels = overwrite_channels; open_file->create_channels = create_channels; return(open_file); } gsequencer-0.6.37/src/ags/audio/task/ags_init_channel.h0000644000175000017500000000416112626272146017745 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_INIT_CHANNEL_H__ #define __AGS_INIT_CHANNEL_H__ #include #include #include #include #include #define AGS_TYPE_INIT_CHANNEL (ags_init_channel_get_type()) #define AGS_INIT_CHANNEL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_INIT_CHANNEL, AgsInitChannel)) #define AGS_INIT_CHANNEL_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_INIT_CHANNEL, AgsInitChannelClass)) #define AGS_IS_INIT_CHANNEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_INIT_CHANNEL)) #define AGS_IS_INIT_CHANNEL_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_INIT_CHANNEL)) #define AGS_INIT_CHANNEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_INIT_CHANNEL, AgsInitChannelClass)) typedef struct _AgsInitChannel AgsInitChannel; typedef struct _AgsInitChannelClass AgsInitChannelClass; struct _AgsInitChannel { AgsTask task; AgsChannel *channel; gboolean play_pad; gboolean playback; gboolean sequencer; gboolean notation; }; struct _AgsInitChannelClass { AgsTaskClass task; }; GType ags_init_channel_get_type(); AgsInitChannel* ags_init_channel_new(AgsChannel *channel, gboolean play_pad, gboolean playback, gboolean sequencer, gboolean notation); #endif /*__AGS_INIT_CHANNEL_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_change_tact.h0000644000175000017500000000362312626272146017554 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_CHANGE_TACT_H__ #define __AGS_CHANGE_TACT_H__ #include #include #include #include #define AGS_TYPE_CHANGE_TACT (ags_change_tact_get_type()) #define AGS_CHANGE_TACT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_CHANGE_TACT, AgsChangeTact)) #define AGS_CHANGE_TACT_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_CHANGE_TACT, AgsChangeTactClass)) #define AGS_IS_CHANGE_TACT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_CHANGE_TACT)) #define AGS_IS_CHANGE_TACT_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_CHANGE_TACT)) #define AGS_CHANGE_TACT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_CHANGE_TACT, AgsChangeTactClass)) typedef struct _AgsChangeTact AgsChangeTact; typedef struct _AgsChangeTactClass AgsChangeTactClass; struct _AgsChangeTact { AgsTask task; AgsNavigation *navigation; }; struct _AgsChangeTactClass { AgsTaskClass task; }; GType ags_change_tact_get_type(); AgsChangeTact* ags_change_tact_new(AgsNavigation *navigation); #endif /*__AGS_CHANGE_TACT_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_remove_audio_signal.c0000644000175000017500000001225112626272146021317 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include void ags_remove_audio_signal_class_init(AgsRemoveAudioSignalClass *remove_audio_signal); void ags_remove_audio_signal_connectable_interface_init(AgsConnectableInterface *connectable); void ags_remove_audio_signal_init(AgsRemoveAudioSignal *remove_audio_signal); void ags_remove_audio_signal_connect(AgsConnectable *connectable); void ags_remove_audio_signal_disconnect(AgsConnectable *connectable); void ags_remove_audio_signal_finalize(GObject *gobject); void ags_remove_audio_signal_launch(AgsTask *task); /** * SECTION:ags_remove_audio_signal * @short_description: remove audio_signal object to recycling * @title: AgsRemoveAudioSignal * @section_id: * @include: ags/audio/task/ags_remove_audio_signal.h * * The #AgsRemoveAudioSignal task removes #AgsAudioSignal to #AgsRecycling. */ static gpointer ags_remove_audio_signal_parent_class = NULL; static AgsConnectableInterface *ags_remove_audio_signal_parent_connectable_interface; GType ags_remove_audio_signal_get_type() { static GType ags_type_remove_audio_signal = 0; if(!ags_type_remove_audio_signal){ static const GTypeInfo ags_remove_audio_signal_info = { sizeof (AgsRemoveAudioSignalClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_remove_audio_signal_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsRemoveAudioSignal), 0, /* n_preallocs */ (GInstanceInitFunc) ags_remove_audio_signal_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_remove_audio_signal_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_remove_audio_signal = g_type_register_static(AGS_TYPE_TASK, "AgsRemoveAudioSignal\0", &ags_remove_audio_signal_info, 0); g_type_add_interface_static(ags_type_remove_audio_signal, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_remove_audio_signal); } void ags_remove_audio_signal_class_init(AgsRemoveAudioSignalClass *remove_audio_signal) { GObjectClass *gobject; AgsTaskClass *task; ags_remove_audio_signal_parent_class = g_type_class_peek_parent(remove_audio_signal); /* GObjectClass */ gobject = (GObjectClass *) remove_audio_signal; gobject->finalize = ags_remove_audio_signal_finalize; /* AgsTaskClass */ task = (AgsTaskClass *) remove_audio_signal; task->launch = ags_remove_audio_signal_launch; } void ags_remove_audio_signal_connectable_interface_init(AgsConnectableInterface *connectable) { ags_remove_audio_signal_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_remove_audio_signal_connect; connectable->disconnect = ags_remove_audio_signal_disconnect; } void ags_remove_audio_signal_init(AgsRemoveAudioSignal *remove_audio_signal) { remove_audio_signal->recycling = NULL; remove_audio_signal->audio_signal = NULL; } void ags_remove_audio_signal_connect(AgsConnectable *connectable) { ags_remove_audio_signal_parent_connectable_interface->connect(connectable); /* empty */ } void ags_remove_audio_signal_disconnect(AgsConnectable *connectable) { ags_remove_audio_signal_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_remove_audio_signal_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_remove_audio_signal_parent_class)->finalize(gobject); /* empty */ } void ags_remove_audio_signal_launch(AgsTask *task) { AgsRemoveAudioSignal *remove_audio_signal; remove_audio_signal = AGS_REMOVE_AUDIO_SIGNAL(task); ags_recycling_remove_audio_signal(remove_audio_signal->recycling, remove_audio_signal->audio_signal); } /** * ags_remove_audio_signal_new: * @recycling: the #AgsRecycling * @audio_signal: the #AgsAudioSignal to remove * * Creates an #AgsRemoveAudioSignal. * * Returns: an new #AgsRemoveAudioSignal. * * Since: 0.4 */ AgsRemoveAudioSignal* ags_remove_audio_signal_new(AgsRecycling *recycling, AgsAudioSignal *audio_signal) { AgsRemoveAudioSignal *remove_audio_signal; remove_audio_signal = (AgsRemoveAudioSignal *) g_object_new(AGS_TYPE_REMOVE_AUDIO_SIGNAL, NULL); remove_audio_signal->recycling = recycling; remove_audio_signal->audio_signal = audio_signal; return(remove_audio_signal); } gsequencer-0.6.37/src/ags/audio/task/ags_remove_point_from_selection.c0000644000175000017500000001346212626272146023107 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_remove_point_from_selection_class_init(AgsRemovePointFromSelectionClass *remove_point_from_selection); void ags_remove_point_from_selection_connectable_interface_init(AgsConnectableInterface *connectable); void ags_remove_point_from_selection_init(AgsRemovePointFromSelection *remove_point_from_selection); void ags_remove_point_from_selection_connect(AgsConnectable *connectable); void ags_remove_point_from_selection_disconnect(AgsConnectable *connectable); void ags_remove_point_from_selection_finalize(GObject *gobject); void ags_remove_point_from_selection_launch(AgsTask *task); /** * SECTION:ags_remove_point_to_selection * @short_description: remove point to notation selection * @title: AgsRemovePointToSelection * @section_id: * @include: ags/audio/task/ags_remove_point_to_selection.h * * The #AgsRemovePointToSelection task removes the specified #AgsNote to selection of #AgsNotation. */ static gpointer ags_remove_point_from_selection_parent_class = NULL; static AgsConnectableInterface *ags_remove_point_from_selection_parent_connectable_interface; GType ags_remove_point_from_selection_get_type() { static GType ags_type_remove_point_from_selection = 0; if(!ags_type_remove_point_from_selection){ static const GTypeInfo ags_remove_point_from_selection_info = { sizeof (AgsRemovePointFromSelectionClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_remove_point_from_selection_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsRemovePointFromSelection), 0, /* n_preallocs */ (GInstanceInitFunc) ags_remove_point_from_selection_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_remove_point_from_selection_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_remove_point_from_selection = g_type_register_static(AGS_TYPE_TASK, "AgsRemovePointFromSelection\0", &ags_remove_point_from_selection_info, 0); g_type_add_interface_static(ags_type_remove_point_from_selection, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_remove_point_from_selection); } void ags_remove_point_from_selection_class_init(AgsRemovePointFromSelectionClass *remove_point_from_selection) { GObjectClass *gobject; AgsTaskClass *task; ags_remove_point_from_selection_parent_class = g_type_class_peek_parent(remove_point_from_selection); /* gobject */ gobject = (GObjectClass *) remove_point_from_selection; gobject->finalize = ags_remove_point_from_selection_finalize; /* task */ task = (AgsTaskClass *) remove_point_from_selection; task->launch = ags_remove_point_from_selection_launch; } void ags_remove_point_from_selection_connectable_interface_init(AgsConnectableInterface *connectable) { ags_remove_point_from_selection_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_remove_point_from_selection_connect; connectable->disconnect = ags_remove_point_from_selection_disconnect; } void ags_remove_point_from_selection_init(AgsRemovePointFromSelection *remove_point_from_selection) { remove_point_from_selection->notation = NULL; remove_point_from_selection->x = 0; remove_point_from_selection->y = 0; } void ags_remove_point_from_selection_connect(AgsConnectable *connectable) { ags_remove_point_from_selection_parent_connectable_interface->connect(connectable); /* empty */ } void ags_remove_point_from_selection_disconnect(AgsConnectable *connectable) { ags_remove_point_from_selection_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_remove_point_from_selection_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_remove_point_from_selection_parent_class)->finalize(gobject); /* empty */ } void ags_remove_point_from_selection_launch(AgsTask *task) { AgsRemovePointFromSelection *remove_point_from_selection; remove_point_from_selection = AGS_REMOVE_POINT_FROM_SELECTION(task); /* add note */ ags_notation_remove_point_from_selection(remove_point_from_selection->notation, remove_point_from_selection->x, remove_point_from_selection->y); } /** * ags_remove_point_to_selection_new: * @notation: the #AgsNotation providing the selection * @x: x coordinate * @y: y coordinate * * Creates an #AgsRemovePointToSelection. * * Returns: an new #AgsRemovePointToSelection. * * Since: 0.4 */ AgsRemovePointFromSelection* ags_remove_point_from_selection_new(AgsNotation *notation, guint x, guint y) { AgsRemovePointFromSelection *remove_point_from_selection; remove_point_from_selection = (AgsRemovePointFromSelection *) g_object_new(AGS_TYPE_REMOVE_POINT_FROM_SELECTION, NULL); remove_point_from_selection->notation = notation; remove_point_from_selection->x = x; remove_point_from_selection->y = y; return(remove_point_from_selection); } gsequencer-0.6.37/src/ags/audio/task/ags_remove_region_from_selection.h0000644000175000017500000000466312626272146023251 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_REMOVE_REGION_FROM_SELECTION_H__ #define __AGS_REMOVE_REGION_FROM_SELECTION_H__ #include #include #include #include #define AGS_TYPE_REMOVE_REGION_FROM_SELECTION (ags_remove_region_from_selection_get_type()) #define AGS_REMOVE_REGION_FROM_SELECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_REMOVE_REGION_FROM_SELECTION, AgsRemoveRegionFromSelection)) #define AGS_REMOVE_REGION_FROM_SELECTION_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_REMOVE_REGION_FROM_SELECTION, AgsRemoveRegionFromSelectionClass)) #define AGS_IS_REMOVE_REGION_FROM_SELECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_REMOVE_REGION_FROM_SELECTION)) #define AGS_IS_REMOVE_REGION_FROM_SELECTION_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_REMOVE_REGION_FROM_SELECTION)) #define AGS_REMOVE_REGION_FROM_SELECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_REMOVE_REGION_FROM_SELECTION, AgsRemoveRegionFromSelectionClass)) typedef struct _AgsRemoveRegionFromSelection AgsRemoveRegionFromSelection; typedef struct _AgsRemoveRegionFromSelectionClass AgsRemoveRegionFromSelectionClass; struct _AgsRemoveRegionFromSelection { AgsTask task; AgsNotation *notation; guint x0; guint y0; guint x1; guint y1; }; struct _AgsRemoveRegionFromSelectionClass { AgsTaskClass task; }; GType ags_remove_region_from_selection_get_type(); AgsRemoveRegionFromSelection* ags_remove_region_from_selection_new(AgsNotation *notation, guint x0, guint y0, guint x1, guint y1); #endif /*__AGS_REMOVE_REGION_FROM_SELECTION_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_set_buffer_size.c0000644000175000017500000001677712626272146020503 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include void ags_set_buffer_size_class_init(AgsSetBufferSizeClass *set_buffer_size); void ags_set_buffer_size_connectable_interface_init(AgsConnectableInterface *connectable); void ags_set_buffer_size_init(AgsSetBufferSize *set_buffer_size); void ags_set_buffer_size_connect(AgsConnectable *connectable); void ags_set_buffer_size_disconnect(AgsConnectable *connectable); void ags_set_buffer_size_finalize(GObject *gobject); void ags_set_buffer_size_launch(AgsTask *task); void ags_set_buffer_size_audio_signal(AgsSetBufferSize *set_buffer_size, AgsAudioSignal *audio_signal); void ags_set_buffer_size_recycling(AgsSetBufferSize *set_buffer_size, AgsRecycling *recycling); void ags_set_buffer_size_channel(AgsSetBufferSize *set_buffer_size, AgsChannel *channel); void ags_set_buffer_size_audio(AgsSetBufferSize *set_buffer_size, AgsAudio *audio); void ags_set_buffer_size_devout(AgsSetBufferSize *set_buffer_size, AgsDevout *devout); /** * SECTION:ags_set_buffer_size * @short_description: resizes buffer size * @title: AgsSetAudioChannels * @section_id: * @include: ags/audio/task/ags_set_buffer_size.h * * The #AgsSetAudioChannels task resizes buffer size of #AgsDevout. */ static gpointer ags_set_buffer_size_parent_class = NULL; static AgsConnectableInterface *ags_set_buffer_size_parent_connectable_interface; GType ags_set_buffer_size_get_type() { static GType ags_type_set_buffer_size = 0; if(!ags_type_set_buffer_size){ static const GTypeInfo ags_set_buffer_size_info = { sizeof (AgsSetBufferSizeClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_set_buffer_size_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsSetBufferSize), 0, /* n_preallocs */ (GInstanceInitFunc) ags_set_buffer_size_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_set_buffer_size_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_set_buffer_size = g_type_register_static(AGS_TYPE_TASK, "AgsSetBufferSize\0", &ags_set_buffer_size_info, 0); g_type_add_interface_static(ags_type_set_buffer_size, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_set_buffer_size); } void ags_set_buffer_size_class_init(AgsSetBufferSizeClass *set_buffer_size) { GObjectClass *gobject; AgsTaskClass *task; ags_set_buffer_size_parent_class = g_type_class_peek_parent(set_buffer_size); /* gobject */ gobject = (GObjectClass *) set_buffer_size; gobject->finalize = ags_set_buffer_size_finalize; /* task */ task = (AgsTaskClass *) set_buffer_size; task->launch = ags_set_buffer_size_launch; } void ags_set_buffer_size_connectable_interface_init(AgsConnectableInterface *connectable) { ags_set_buffer_size_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_set_buffer_size_connect; connectable->disconnect = ags_set_buffer_size_disconnect; } void ags_set_buffer_size_init(AgsSetBufferSize *set_buffer_size) { set_buffer_size->gobject = NULL; set_buffer_size->buffer_size = 128; } void ags_set_buffer_size_connect(AgsConnectable *connectable) { ags_set_buffer_size_parent_connectable_interface->connect(connectable); /* empty */ } void ags_set_buffer_size_disconnect(AgsConnectable *connectable) { ags_set_buffer_size_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_set_buffer_size_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_set_buffer_size_parent_class)->finalize(gobject); /* empty */ } void ags_set_buffer_size_launch(AgsTask *task) { AgsSetBufferSize *set_buffer_size; GObject *gobject; set_buffer_size = AGS_SET_BUFFER_SIZE(task); gobject = set_buffer_size->gobject; if(AGS_IS_DEVOUT(gobject)){ ags_set_buffer_size_devout(set_buffer_size, AGS_DEVOUT(gobject)); }else if(AGS_IS_AUDIO(gobject)){ ags_set_buffer_size_audio(set_buffer_size, AGS_AUDIO(gobject)); }else if(AGS_IS_CHANNEL(gobject)){ ags_set_buffer_size_channel(set_buffer_size, AGS_CHANNEL(gobject)); }else if(AGS_IS_RECYCLING(gobject)){ ags_set_buffer_size_recycling(set_buffer_size, AGS_RECYCLING(gobject)); }else if(AGS_IS_AUDIO_SIGNAL(gobject)){ ags_set_buffer_size_audio_signal(set_buffer_size, AGS_AUDIO_SIGNAL(gobject)); } } void ags_set_buffer_size_audio_signal(AgsSetBufferSize *set_buffer_size, AgsAudioSignal *audio_signal) { ags_audio_signal_realloc_buffer_size(audio_signal, set_buffer_size->buffer_size); } void ags_set_buffer_size_recycling(AgsSetBufferSize *set_buffer_size, AgsRecycling *recycling) { GList *list; list = recycling->audio_signal; while(list != NULL){ ags_set_buffer_size_audio_signal(set_buffer_size, AGS_AUDIO_SIGNAL(list->data)); list = list->next; } } void ags_set_buffer_size_channel(AgsSetBufferSize *set_buffer_size, AgsChannel *channel) { AgsRecycling *recycling; recycling = channel->first_recycling; while(recycling != NULL){ ags_set_buffer_size_recycling(set_buffer_size, recycling); recycling = recycling->next; } } void ags_set_buffer_size_audio(AgsSetBufferSize *set_buffer_size, AgsAudio *audio) { AgsChannel *channel; /* AgsOutput */ channel = audio->output; while(channel != NULL){ ags_set_buffer_size_channel(set_buffer_size, channel); channel = channel->next; } /* AgsInput */ channel = audio->input; while(channel != NULL){ ags_set_buffer_size_channel(set_buffer_size, channel); channel = channel->next; } } void ags_set_buffer_size_devout(AgsSetBufferSize *set_buffer_size, AgsDevout *devout) { GList *list; /* */ g_object_set(G_OBJECT(devout), "buffer_size\0", set_buffer_size->buffer_size, NULL); /* AgsAudio */ list = devout->audio; while(list != NULL){ ags_set_buffer_size_audio(set_buffer_size, AGS_AUDIO(list->data)); list = list->next; } } /** * ags_set_buffer_size_new: * @devout: the #AgsDevout reset * @buffer_size: the new count of buffer size * * Creates an #AgsSetAudioChannels. * * Returns: an new #AgsSetAudioChannels. * * Since: 0.4 */ AgsSetBufferSize* ags_set_buffer_size_new(GObject *gobject, guint buffer_size) { AgsSetBufferSize *set_buffer_size; set_buffer_size = (AgsSetBufferSize *) g_object_new(AGS_TYPE_SET_BUFFER_SIZE, NULL); set_buffer_size->gobject = gobject; set_buffer_size->buffer_size = buffer_size; return(set_buffer_size); } gsequencer-0.6.37/src/ags/audio/task/ags_export_output.h0000644000175000017500000000424212626272146020253 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_EXPORT_OUTPUT_H__ #define __AGS_EXPORT_OUTPUT_H__ #include #include #include #include #define AGS_TYPE_EXPORT_OUTPUT (ags_export_output_get_type()) #define AGS_EXPORT_OUTPUT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_EXPORT_OUTPUT, AgsExportOutput)) #define AGS_EXPORT_OUTPUT_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_EXPORT_OUTPUT, AgsExportOutputClass)) #define AGS_IS_EXPORT_OUTPUT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_EXPORT_OUTPUT)) #define AGS_IS_EXPORT_OUTPUT_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_EXPORT_OUTPUT)) #define AGS_EXPORT_OUTPUT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_EXPORT_OUTPUT, AgsExportOutputClass)) typedef struct _AgsExportOutput AgsExportOutput; typedef struct _AgsExportOutputClass AgsExportOutputClass; struct _AgsExportOutput { AgsTask task; AgsExportThread *export_thread; AgsDevout *devout; gchar *filename; guint tic; gboolean live_performance; }; struct _AgsExportOutputClass { AgsTaskClass task; }; GType ags_export_output_get_type(); AgsExportOutput* ags_export_output_new(AgsExportThread *export_thread, AgsDevout *devout, gchar *filename, guint tic, gboolean live_performance); #endif /*__AGS_EXPORT_OUTPUT_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_display_tact.h0000644000175000017500000000364612626272146020001 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_DISPLAY_TACT_H__ #define __AGS_DISPLAY_TACT_H__ #include #include #include #include #define AGS_TYPE_DISPLAY_TACT (ags_display_tact_get_type()) #define AGS_DISPLAY_TACT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_DISPLAY_TACT, AgsDisplayTact)) #define AGS_DISPLAY_TACT_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_DISPLAY_TACT, AgsDisplayTactClass)) #define AGS_IS_DISPLAY_TACT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_DISPLAY_TACT)) #define AGS_IS_DISPLAY_TACT_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_DISPLAY_TACT)) #define AGS_DISPLAY_TACT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_DISPLAY_TACT, AgsDisplayTactClass)) typedef struct _AgsDisplayTact AgsDisplayTact; typedef struct _AgsDisplayTactClass AgsDisplayTactClass; struct _AgsDisplayTact { AgsTask task; GtkWidget *navigation; }; struct _AgsDisplayTactClass { AgsTaskClass task; }; GType ags_display_tact_get_type(); AgsDisplayTact* ags_display_tact_new(GtkWidget *navigation); #endif /*__AGS_DISPLAY_TACT_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_remove_recall.h0000644000175000017500000000412412626272146020130 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_REMOVE_RECALL_H__ #define __AGS_REMOVE_RECALL_H__ #include #include #include #include #define AGS_TYPE_REMOVE_RECALL (ags_remove_recall_get_type()) #define AGS_REMOVE_RECALL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_REMOVE_RECALL, AgsRemoveRecall)) #define AGS_REMOVE_RECALL_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_REMOVE_RECALL, AgsRemoveRecallClass)) #define AGS_IS_REMOVE_RECALL(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_REMOVE_RECALL)) #define AGS_IS_REMOVE_RECALL_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_REMOVE_RECALL)) #define AGS_REMOVE_RECALL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_REMOVE_RECALL, AgsRemoveRecallClass)) typedef struct _AgsRemoveRecall AgsRemoveRecall; typedef struct _AgsRemoveRecallClass AgsRemoveRecallClass; struct _AgsRemoveRecall { AgsTask task; GObject *context; AgsRecall *recall; gboolean is_play; gboolean remove_all; }; struct _AgsRemoveRecallClass { AgsTaskClass task; }; GType ags_remove_recall_get_type(); AgsRemoveRecall* ags_remove_recall_new(GObject *context, AgsRecall *recall, gboolean is_play, gboolean remove_all); #endif /*__AGS_REMOVE_RECALL_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_cancel_channel.c0000644000175000017500000001540712626272146020227 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_cancel_channel_class_init(AgsCancelChannelClass *cancel_channel); void ags_cancel_channel_connectable_interface_init(AgsConnectableInterface *connectable); void ags_cancel_channel_init(AgsCancelChannel *cancel_channel); void ags_cancel_channel_connect(AgsConnectable *connectable); void ags_cancel_channel_disconnect(AgsConnectable *connectable); void ags_cancel_channel_finalize(GObject *gobject); void ags_cancel_channel_launch(AgsTask *task); /** * SECTION:ags_cancel_channel * @short_description: cancel channel object * @title: AgsCancelChannel * @section_id: * @include: ags/audio/task/ags_cancel_channel.h * * The #AgsCancelChannel task cancels #AgsChannel playback. */ static gpointer ags_cancel_channel_parent_class = NULL; static AgsConnectableInterface *ags_cancel_channel_parent_connectable_interface; GType ags_cancel_channel_get_type() { static GType ags_type_cancel_channel = 0; if(!ags_type_cancel_channel){ static const GTypeInfo ags_cancel_channel_info = { sizeof (AgsCancelChannelClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_cancel_channel_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsCancelChannel), 0, /* n_preallocs */ (GInstanceInitFunc) ags_cancel_channel_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_cancel_channel_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_cancel_channel = g_type_register_static(AGS_TYPE_TASK, "AgsCancelChannel\0", &ags_cancel_channel_info, 0); g_type_add_interface_static(ags_type_cancel_channel, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_cancel_channel); } void ags_cancel_channel_class_init(AgsCancelChannelClass *cancel_channel) { GObjectClass *gobject; AgsTaskClass *task; ags_cancel_channel_parent_class = g_type_class_peek_parent(cancel_channel); /* gobject */ gobject = (GObjectClass *) cancel_channel; gobject->finalize = ags_cancel_channel_finalize; /* task */ task = (AgsTaskClass *) cancel_channel; task->launch = ags_cancel_channel_launch; } void ags_cancel_channel_connectable_interface_init(AgsConnectableInterface *connectable) { ags_cancel_channel_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_cancel_channel_connect; connectable->disconnect = ags_cancel_channel_disconnect; } void ags_cancel_channel_init(AgsCancelChannel *cancel_channel) { cancel_channel->channel = NULL; cancel_channel->recall_id = NULL; cancel_channel->play = NULL; } void ags_cancel_channel_connect(AgsConnectable *connectable) { ags_cancel_channel_parent_connectable_interface->connect(connectable); /* empty */ } void ags_cancel_channel_disconnect(AgsConnectable *connectable) { ags_cancel_channel_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_cancel_channel_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_cancel_channel_parent_class)->finalize(gobject); /* empty */ } void ags_cancel_channel_launch(AgsTask *task) { AgsDevoutPlay *devout_play; AgsChannel *channel; AgsCancelChannel *cancel_channel; cancel_channel = AGS_CANCEL_CHANNEL(task); channel = cancel_channel->channel; devout_play = AGS_DEVOUT_PLAY(channel->devout_play); /* cancel playback */ if(cancel_channel->recall_id == AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[0]){ g_atomic_int_and(&(devout_play->flags), (~AGS_DEVOUT_PLAY_PLAYBACK)); g_object_ref(AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[0]); ags_channel_tillrecycling_cancel(channel, AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[0]); AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[0] = NULL; if((AGS_DEVOUT_PLAY_SUPER_THREADED_CHANNEL & (g_atomic_int_get(&(devout_play->flags)))) != 0){ // ags_thread_stop(devout_play->channel_thread[0]); } } /* cancel sequencer */ if(cancel_channel->recall_id == AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[1]){ g_atomic_int_and(&(devout_play->flags), (~AGS_DEVOUT_PLAY_SEQUENCER)); g_object_ref(AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[1]); ags_channel_tillrecycling_cancel(channel, AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[1]); AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[1] = NULL; if((AGS_DEVOUT_PLAY_SUPER_THREADED_CHANNEL & (g_atomic_int_get(&(devout_play->flags)))) != 0){ // ags_thread_stop(devout_play->channel_thread[1]); } } /* cancel notation */ if(cancel_channel->recall_id == AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[2]){ g_atomic_int_and(&(devout_play->flags), (~AGS_DEVOUT_PLAY_NOTATION)); g_object_ref(AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[2]); ags_channel_tillrecycling_cancel(channel, AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[2]); AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[2] = NULL; if((AGS_DEVOUT_PLAY_SUPER_THREADED_CHANNEL & (g_atomic_int_get(&(devout_play->flags)))) != 0){ // ags_thread_stop(devout_play->channel_thread[2]); } } ags_channel_done(channel, cancel_channel->recall_id); } /** * ags_cancel_channel_new: * @channel: the #AgsChannel to cancel * @recall_id: the #AgsRecallID to cancel * @play: the #AgsDevoutPlay-struct * * Creates an #AgsCancelChannel. * * Returns: an new #AgsCancelChannel. * * Since: 0.4 */ AgsCancelChannel* ags_cancel_channel_new(AgsChannel *channel, AgsRecallID *recall_id, AgsDevoutPlay *play) { AgsCancelChannel *cancel_channel; cancel_channel = (AgsCancelChannel *) g_object_new(AGS_TYPE_CANCEL_CHANNEL, NULL); cancel_channel->channel = channel; cancel_channel->recall_id = recall_id; cancel_channel->play = play; return(cancel_channel); } gsequencer-0.6.37/src/ags/audio/task/ags_open_single_file.c0000644000175000017500000001466512626272146020620 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include void ags_open_single_file_class_init(AgsOpenSingleFileClass *open_single_file); void ags_open_single_file_connectable_interface_init(AgsConnectableInterface *connectable); void ags_open_single_file_init(AgsOpenSingleFile *open_single_file); void ags_open_single_file_connect(AgsConnectable *connectable); void ags_open_single_file_disconnect(AgsConnectable *connectable); void ags_open_single_file_finalize(GObject *gobject); void ags_open_single_file_launch(AgsTask *task); static gpointer ags_open_single_file_parent_class = NULL; static AgsConnectableInterface *ags_open_single_file_parent_connectable_interface; GType ags_open_single_file_get_type() { static GType ags_type_open_single_file = 0; if(!ags_type_open_single_file){ static const GTypeInfo ags_open_single_file_info = { sizeof (AgsOpenSingleFileClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_open_single_file_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsOpenSingleFile), 0, /* n_preallocs */ (GInstanceInitFunc) ags_open_single_file_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_open_single_file_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_open_single_file = g_type_register_static(AGS_TYPE_TASK, "AgsOpenSingleFile\0", &ags_open_single_file_info, 0); g_type_add_interface_static(ags_type_open_single_file, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_open_single_file); } void ags_open_single_file_class_init(AgsOpenSingleFileClass *open_single_file) { GObjectClass *gobject; AgsTaskClass *task; ags_open_single_file_parent_class = g_type_class_peek_parent(open_single_file); /* GObject */ gobject = (GObjectClass *) open_single_file; gobject->finalize = ags_open_single_file_finalize; /* AgsTask */ task = (AgsTaskClass *) open_single_file; task->launch = ags_open_single_file_launch; } void ags_open_single_file_connectable_interface_init(AgsConnectableInterface *connectable) { ags_open_single_file_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_open_single_file_connect; connectable->disconnect = ags_open_single_file_disconnect; } void ags_open_single_file_init(AgsOpenSingleFile *open_single_file) { open_single_file->channel = NULL; open_single_file->devout = NULL; open_single_file->filename = NULL; open_single_file->start_channel = 0; open_single_file->audio_channels = 0; } void ags_open_single_file_connect(AgsConnectable *connectable) { ags_open_single_file_parent_connectable_interface->connect(connectable); /* empty */ } void ags_open_single_file_disconnect(AgsConnectable *connectable) { ags_open_single_file_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_open_single_file_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_open_single_file_parent_class)->finalize(gobject); /* empty */ } void ags_open_single_file_launch(AgsTask *task) { AgsOpenSingleFile *open_single_file; AgsChannel *channel; AgsFileLink *file_link; AgsAudioSignal *old_template; AgsAudioFile *audio_file; GList *audio_signal; guint i; GError *error; open_single_file = AGS_OPEN_SINGLE_FILE(task); /* open audio file and read audio signal */ audio_file = ags_audio_file_new(open_single_file->filename, open_single_file->devout, open_single_file->start_channel, open_single_file->audio_channels); ags_audio_file_open(audio_file); ags_audio_file_read_audio_signal(audio_file); /* iterate channels */ channel = open_single_file->channel; audio_signal = audio_file->audio_signal; for(i = 0; i < open_single_file->audio_channels && audio_signal != NULL; i++){ /* unset link */ if(channel->link != NULL){ error = NULL; ags_channel_set_link(channel, NULL, &error); if(error != NULL){ g_warning("%s\0", error->message); } } file_link = g_object_new(AGS_TYPE_FILE_LINK, "filename\0", open_single_file->filename, "audio-channel\0", i, NULL); g_object_set(channel, "file-link\0", file_link, NULL); /* mark as template */ AGS_AUDIO_SIGNAL(audio_signal->data)->flags |= AGS_AUDIO_SIGNAL_TEMPLATE; /* old source */ old_template = ags_audio_signal_get_template(channel->first_recycling->audio_signal); /* add as template */ ags_recycling_add_audio_signal(channel->first_recycling, AGS_AUDIO_SIGNAL(audio_signal->data)); /* remove old template */ ags_recycling_remove_audio_signal(channel->first_recycling, old_template); /* iterate */ channel = channel->next; audio_signal = audio_signal->next; } g_object_unref(audio_file); } AgsOpenSingleFile* ags_open_single_file_new(AgsChannel *channel, AgsDevout *devout, gchar *filename, guint start_channel, guint audio_channels) { AgsOpenSingleFile *open_single_file; open_single_file = (AgsOpenSingleFile *) g_object_new(AGS_TYPE_OPEN_SINGLE_FILE, NULL); open_single_file->channel = channel; open_single_file->devout = devout; open_single_file->filename = filename; open_single_file->start_channel = start_channel; open_single_file->audio_channels = audio_channels; return(open_single_file); } gsequencer-0.6.37/src/ags/audio/task/ags_init_audio.h0000644000175000017500000000374212626272146017442 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_INIT_AUDIO_H__ #define __AGS_INIT_AUDIO_H__ #include #include #include #include #define AGS_TYPE_INIT_AUDIO (ags_init_audio_get_type()) #define AGS_INIT_AUDIO(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_INIT_AUDIO, AgsInitAudio)) #define AGS_INIT_AUDIO_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_INIT_AUDIO, AgsInitAudioClass)) #define AGS_IS_INIT_AUDIO(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_INIT_AUDIO)) #define AGS_IS_INIT_AUDIO_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_INIT_AUDIO)) #define AGS_INIT_AUDIO_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_INIT_AUDIO, AgsInitAudioClass)) typedef struct _AgsInitAudio AgsInitAudio; typedef struct _AgsInitAudioClass AgsInitAudioClass; struct _AgsInitAudio { AgsTask task; AgsAudio *audio; gboolean playback; gboolean sequencer; gboolean notation; }; struct _AgsInitAudioClass { AgsTaskClass task; }; GType ags_init_audio_get_type(); AgsInitAudio* ags_init_audio_new(AgsAudio *audio, gboolean playback, gboolean sequencer, gboolean notation); #endif /*__AGS_INIT_AUDIO_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_remove_audio.h0000644000175000017500000000375412626272146017777 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_REMOVE_AUDIO_H__ #define __AGS_REMOVE_AUDIO_H__ #include #include #include #include #include #define AGS_TYPE_REMOVE_AUDIO (ags_remove_audio_get_type()) #define AGS_REMOVE_AUDIO(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_REMOVE_AUDIO, AgsRemoveAudio)) #define AGS_REMOVE_AUDIO_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_REMOVE_AUDIO, AgsRemoveAudioClass)) #define AGS_IS_REMOVE_AUDIO(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_REMOVE_AUDIO)) #define AGS_IS_REMOVE_AUDIO_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_REMOVE_AUDIO)) #define AGS_REMOVE_AUDIO_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_REMOVE_AUDIO, AgsRemoveAudioClass)) typedef struct _AgsRemoveAudio AgsRemoveAudio; typedef struct _AgsRemoveAudioClass AgsRemoveAudioClass; struct _AgsRemoveAudio { AgsTask task; AgsDevout *devout; AgsAudio *audio; }; struct _AgsRemoveAudioClass { AgsTaskClass task; }; GType ags_remove_audio_get_type(); AgsRemoveAudio* ags_remove_audio_new(AgsDevout *devout, AgsAudio *audio); #endif /*__AGS_REMOVE_AUDIO_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_remove_recall_container.h0000644000175000017500000000443212626272146022174 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_REMOVE_RECALL_CONTAINER_H__ #define __AGS_REMOVE_RECALL_CONTAINER_H__ #include #include #include #include #define AGS_TYPE_REMOVE_RECALL_CONTAINER (ags_remove_recall_container_get_type()) #define AGS_REMOVE_RECALL_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_REMOVE_RECALL_CONTAINER, AgsRemoveRecallContainer)) #define AGS_REMOVE_RECALL_CONTAINER_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_REMOVE_RECALL_CONTAINER, AgsRemoveRecallContainerClass)) #define AGS_IS_REMOVE_RECALL_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_REMOVE_RECALL_CONTAINER)) #define AGS_IS_REMOVE_RECALL_CONTAINER_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_REMOVE_RECALL_CONTAINER)) #define AGS_REMOVE_RECALL_CONTAINER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_REMOVE_RECALL_CONTAINER, AgsRemoveRecallContainerClass)) typedef struct _AgsRemoveRecallContainer AgsRemoveRecallContainer; typedef struct _AgsRemoveRecallContainerClass AgsRemoveRecallContainerClass; struct _AgsRemoveRecallContainer { AgsTask task; GObject *audio; AgsRecallContainer *recall_container; }; struct _AgsRemoveRecallContainerClass { AgsTaskClass task; }; GType ags_remove_recall_container_get_type(); AgsRemoveRecallContainer* ags_remove_recall_container_new(GObject *audio, AgsRecallContainer *recall_container); #endif /*__AGS_REMOVE_RECALL_CONTAINER_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_link_channel.c0000644000175000017500000001141312626272146017730 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_link_channel_class_init(AgsLinkChannelClass *link_channel); void ags_link_channel_connectable_interface_init(AgsConnectableInterface *connectable); void ags_link_channel_init(AgsLinkChannel *link_channel); void ags_link_channel_connect(AgsConnectable *connectable); void ags_link_channel_disconnect(AgsConnectable *connectable); void ags_link_channel_finalize(GObject *gobject); void ags_link_channel_launch(AgsTask *task); /** * SECTION:ags_link_channel * @short_description: link channel object * @title: AgsLinkChannel * @section_id: * @include: ags/audio/task/ags_link_channel.h * * The #AgsLinkChannel task links #AgsChannel. */ static gpointer ags_link_channel_parent_class = NULL; static AgsConnectableInterface *ags_link_channel_parent_connectable_interface; GType ags_link_channel_get_type() { static GType ags_type_link_channel = 0; if(!ags_type_link_channel){ static const GTypeInfo ags_link_channel_info = { sizeof (AgsLinkChannelClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_link_channel_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsLinkChannel), 0, /* n_preallocs */ (GInstanceInitFunc) ags_link_channel_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_link_channel_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_link_channel = g_type_register_static(AGS_TYPE_TASK, "AgsLinkChannel\0", &ags_link_channel_info, 0); g_type_add_interface_static(ags_type_link_channel, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_link_channel); } void ags_link_channel_class_init(AgsLinkChannelClass *link_channel) { GObjectClass *gobject; AgsTaskClass *task; ags_link_channel_parent_class = g_type_class_peek_parent(link_channel); /* GObject */ gobject = (GObjectClass *) link_channel; gobject->finalize = ags_link_channel_finalize; /* AgsTask */ task = (AgsTaskClass *) link_channel; task->launch = ags_link_channel_launch; } void ags_link_channel_connectable_interface_init(AgsConnectableInterface *connectable) { ags_link_channel_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_link_channel_connect; connectable->disconnect = ags_link_channel_disconnect; } void ags_link_channel_init(AgsLinkChannel *link_channel) { link_channel->channel = NULL; link_channel->link = NULL; link_channel->error = NULL; } void ags_link_channel_connect(AgsConnectable *connectable) { ags_link_channel_parent_connectable_interface->connect(connectable); /* empty */ } void ags_link_channel_disconnect(AgsConnectable *connectable) { ags_link_channel_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_link_channel_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_link_channel_parent_class)->finalize(gobject); /* empty */ } void ags_link_channel_launch(AgsTask *task) { AgsLinkChannel *link_channel; link_channel = AGS_LINK_CHANNEL(task); /* link channel */ g_object_set(link_channel->channel, "file-link", NULL, NULL); ags_channel_set_link(link_channel->channel, link_channel->link, &(link_channel->error)); if(link_channel->error != NULL){ g_message("%s\0", link_channel->error->message); } } /** * ags_link_channel_new: * @channel: the #AgsChannel * @play_pad: the #AgsChannel to be linked, may be %NULL * * Creates an #AgsLinkChannel. * * Returns: an new #AgsLinkChannel. * * Since: 0.4 */ AgsLinkChannel* ags_link_channel_new(AgsChannel *channel, AgsChannel *link) { AgsLinkChannel *link_channel; link_channel = (AgsLinkChannel *) g_object_new(AGS_TYPE_LINK_CHANNEL, NULL); link_channel->channel = channel; link_channel->link = link; return(link_channel); } gsequencer-0.6.37/src/ags/audio/task/ags_append_audio_threaded.c0000644000175000017500000001216112626272146021574 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_append_audio_threaded_class_init(AgsAppendAudioThreadedClass *append_audio_threaded); void ags_append_audio_threaded_connectable_interface_init(AgsConnectableInterface *connectable); void ags_append_audio_threaded_init(AgsAppendAudioThreaded *append_audio_threaded); void ags_append_audio_threaded_connect(AgsConnectable *connectable); void ags_append_audio_threaded_disconnect(AgsConnectable *connectable); void ags_append_audio_threaded_finalize(GObject *gobject); void ags_append_audio_threaded_launch(AgsTask *task); static gpointer ags_append_audio_threaded_parent_class = NULL; static AgsConnectableInterface *ags_append_audio_threaded_parent_connectable_interface; GType ags_append_audio_threaded_get_type() { static GType ags_type_append_audio_threaded = 0; if(!ags_type_append_audio_threaded){ static const GTypeInfo ags_append_audio_threaded_info = { sizeof (AgsAppendAudioThreadedClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_append_audio_threaded_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsAppendAudioThreaded), 0, /* n_preallocs */ (GInstanceInitFunc) ags_append_audio_threaded_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_append_audio_threaded_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_append_audio_threaded = g_type_register_static(AGS_TYPE_TASK, "AgsAppendAudioThreaded\0", &ags_append_audio_threaded_info, 0); g_type_add_interface_static(ags_type_append_audio_threaded, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_append_audio_threaded); } void ags_append_audio_threaded_class_init(AgsAppendAudioThreadedClass *append_audio_threaded) { GObjectClass *gobject; AgsTaskClass *task; ags_append_audio_threaded_parent_class = g_type_class_peek_parent(append_audio_threaded); /* gobject */ gobject = (GObjectClass *) append_audio_threaded; gobject->finalize = ags_append_audio_threaded_finalize; /* task */ task = (AgsTaskClass *) append_audio_threaded; task->launch = ags_append_audio_threaded_launch; } void ags_append_audio_threaded_connectable_interface_init(AgsConnectableInterface *connectable) { ags_append_audio_threaded_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_append_audio_threaded_connect; connectable->disconnect = ags_append_audio_threaded_disconnect; } void ags_append_audio_threaded_init(AgsAppendAudioThreaded *append_audio_threaded) { append_audio_threaded->audio_loop = NULL; append_audio_threaded->devout_play = NULL; } void ags_append_audio_threaded_connect(AgsConnectable *connectable) { ags_append_audio_threaded_parent_connectable_interface->connect(connectable); /* empty */ } void ags_append_audio_threaded_disconnect(AgsConnectable *connectable) { ags_append_audio_threaded_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_append_audio_threaded_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_append_audio_threaded_parent_class)->finalize(gobject); /* empty */ } void ags_append_audio_threaded_launch(AgsTask *task) { AgsAppendAudioThreaded *append_audio_threaded; AgsAudioLoop *audio_loop; append_audio_threaded = AGS_APPEND_AUDIO_THREADED(task); audio_loop = AGS_AUDIO_LOOP(append_audio_threaded->audio_loop); /* append to AgsDevout */ append_audio_threaded->devout_play->flags &= (~AGS_DEVOUT_PLAY_REMOVE); //FIXME:JK: not applicable anymore // append_audio_threaded->devout_play->flags |= AGS_DEVOUT_PLAY_SUPER_THREADED; audio_loop->play_audio = g_list_append(audio_loop->play_audio, append_audio_threaded->devout_play); audio_loop->play_audio_ref += 1; } AgsAppendAudioThreaded* ags_append_audio_threaded_new(GObject *audio_loop, AgsDevoutPlay *devout_play) { AgsAppendAudioThreaded *append_audio_threaded; append_audio_threaded = (AgsAppendAudioThreaded *) g_object_new(AGS_TYPE_APPEND_AUDIO_THREADED, NULL); append_audio_threaded->audio_loop = audio_loop; append_audio_threaded->devout_play = devout_play; return(append_audio_threaded); } gsequencer-0.6.37/src/ags/audio/task/ags_cancel_recall.h0000644000175000017500000000402412626272146020057 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_CANCEL_RECALL_H__ #define __AGS_CANCEL_RECALL_H__ #include #include #include #include #include #define AGS_TYPE_CANCEL_RECALL (ags_cancel_recall_get_type()) #define AGS_CANCEL_RECALL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_CANCEL_RECALL, AgsCancelRecall)) #define AGS_CANCEL_RECALL_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_CANCEL_RECALL, AgsCancelRecallClass)) #define AGS_IS_CANCEL_RECALL(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_CANCEL_RECALL)) #define AGS_IS_CANCEL_RECALL_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_CANCEL_RECALL)) #define AGS_CANCEL_RECALL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_CANCEL_RECALL, AgsCancelRecallClass)) typedef struct _AgsCancelRecall AgsCancelRecall; typedef struct _AgsCancelRecallClass AgsCancelRecallClass; struct _AgsCancelRecall { AgsTask task; AgsRecall *recall; AgsDevoutPlay *play; }; struct _AgsCancelRecallClass { AgsTaskClass task; }; GType ags_cancel_recall_get_type(); AgsCancelRecall* ags_cancel_recall_new(AgsRecall *recall, AgsDevoutPlay *play); #endif /*__AGS_CANCEL_RECALL_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_append_recall.h0000644000175000017500000000400312626272146020076 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_APPEND_RECALL_H__ #define __AGS_APPEND_RECALL_H__ #include #include #include #include #define AGS_TYPE_APPEND_RECALL (ags_append_recall_get_type()) #define AGS_APPEND_RECALL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_APPEND_RECALL, AgsAppendRecall)) #define AGS_APPEND_RECALL_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_APPEND_RECALL, AgsAppendRecallClass)) #define AGS_IS_APPEND_RECALL(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_APPEND_RECALL)) #define AGS_IS_APPEND_RECALL_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_APPEND_RECALL)) #define AGS_APPEND_RECALL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_APPEND_RECALL, AgsAppendRecallClass)) typedef struct _AgsAppendRecall AgsAppendRecall; typedef struct _AgsAppendRecallClass AgsAppendRecallClass; struct _AgsAppendRecall { AgsTask task; GObject *audio_loop; AgsDevoutPlay *devout_play; }; struct _AgsAppendRecallClass { AgsTaskClass task; }; GType ags_append_recall_get_type(); AgsAppendRecall* ags_append_recall_new(GObject *audio_loop, AgsDevoutPlay *devout_play); #endif /*__AGS_APPEND_RECALL_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_apply_synth.h0000644000175000017500000000464012626272146017666 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_APPLY_SYNTH_H__ #define __AGS_APPLY_SYNTH_H__ #include #include #include #include #define AGS_TYPE_APPLY_SYNTH (ags_apply_synth_get_type()) #define AGS_APPLY_SYNTH(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_APPLY_SYNTH, AgsApplySynth)) #define AGS_APPLY_SYNTH_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_APPLY_SYNTH, AgsApplySynthClass)) #define AGS_IS_APPLY_SYNTH(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_APPLY_SYNTH)) #define AGS_IS_APPLY_SYNTH_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_APPLY_SYNTH)) #define AGS_APPLY_SYNTH_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_APPLY_SYNTH, AgsApplySynthClass)) typedef struct _AgsApplySynth AgsApplySynth; typedef struct _AgsApplySynthClass AgsApplySynthClass; typedef enum{ AGS_APPLY_SYNTH_INVALID, AGS_APPLY_SYNTH_SIN, AGS_APPLY_SYNTH_SAW, AGS_APPLY_SYNTH_SQUARE, AGS_APPLY_SYNTH_TRIANGLE, }AgsApplySynthWave; struct _AgsApplySynth { AgsTask task; AgsChannel *start_channel; guint count; guint wave; guint attack; guint frame_count; guint frequency; guint phase; guint start; gdouble volume; guint loop_start; guint loop_end; }; struct _AgsApplySynthClass { AgsTaskClass task; }; GType ags_apply_synth_get_type(); AgsApplySynth* ags_apply_synth_new(AgsChannel *start_channel, guint count, guint wave, guint attack, guint frame_count, guint frequency, guint phase, guint start, gdouble volume, guint loop_start, guint loop_end); #endif /*__AGS_APPLY_SYNTH_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_add_region_to_selection.c0000644000175000017500000001421012626272146022143 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_add_region_to_selection_class_init(AgsAddRegionToSelectionClass *add_region_to_selection); void ags_add_region_to_selection_connectable_interface_init(AgsConnectableInterface *connectable); void ags_add_region_to_selection_init(AgsAddRegionToSelection *add_region_to_selection); void ags_add_region_to_selection_connect(AgsConnectable *connectable); void ags_add_region_to_selection_disconnect(AgsConnectable *connectable); void ags_add_region_to_selection_finalize(GObject *gobject); void ags_add_region_to_selection_launch(AgsTask *task); /** * SECTION:ags_add_region_to_selection * @short_description: add region to notation selection * @title: AgsAddRegionToSelection * @section_id: * @include: ags/audio/task/ags_add_region_to_selection.h * * The #AgsAddRegionToSelection task adds the specified #AgsNote to selection of #AgsNotation. */ static gpointer ags_add_region_to_selection_parent_class = NULL; static AgsConnectableInterface *ags_add_region_to_selection_parent_connectable_interface; GType ags_add_region_to_selection_get_type() { static GType ags_type_add_region_to_selection = 0; if(!ags_type_add_region_to_selection){ static const GTypeInfo ags_add_region_to_selection_info = { sizeof (AgsAddRegionToSelectionClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_add_region_to_selection_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsAddRegionToSelection), 0, /* n_preallocs */ (GInstanceInitFunc) ags_add_region_to_selection_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_add_region_to_selection_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_add_region_to_selection = g_type_register_static(AGS_TYPE_TASK, "AgsAddRegionToSelection\0", &ags_add_region_to_selection_info, 0); g_type_add_interface_static(ags_type_add_region_to_selection, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_add_region_to_selection); } void ags_add_region_to_selection_class_init(AgsAddRegionToSelectionClass *add_region_to_selection) { GObjectClass *gobject; AgsTaskClass *task; ags_add_region_to_selection_parent_class = g_type_class_peek_parent(add_region_to_selection); /* gobject */ gobject = (GObjectClass *) add_region_to_selection; gobject->finalize = ags_add_region_to_selection_finalize; /* task */ task = (AgsTaskClass *) add_region_to_selection; task->launch = ags_add_region_to_selection_launch; } void ags_add_region_to_selection_connectable_interface_init(AgsConnectableInterface *connectable) { ags_add_region_to_selection_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_add_region_to_selection_connect; connectable->disconnect = ags_add_region_to_selection_disconnect; } void ags_add_region_to_selection_init(AgsAddRegionToSelection *add_region_to_selection) { add_region_to_selection->notation = NULL; add_region_to_selection->x0 = 0; add_region_to_selection->y0 = 0; add_region_to_selection->x1 = 0; add_region_to_selection->y1 = 0; add_region_to_selection->replace_current_selection = TRUE; } void ags_add_region_to_selection_connect(AgsConnectable *connectable) { ags_add_region_to_selection_parent_connectable_interface->connect(connectable); /* empty */ } void ags_add_region_to_selection_disconnect(AgsConnectable *connectable) { ags_add_region_to_selection_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_add_region_to_selection_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_add_region_to_selection_parent_class)->finalize(gobject); /* empty */ } void ags_add_region_to_selection_launch(AgsTask *task) { AgsAddRegionToSelection *add_region_to_selection; add_region_to_selection = AGS_ADD_REGION_TO_SELECTION(task); /* add note */ ags_notation_add_region_to_selection(add_region_to_selection->notation, add_region_to_selection->x0, add_region_to_selection->y0, add_region_to_selection->x1, add_region_to_selection->y1, add_region_to_selection->replace_current_selection); } /** * ags_add_region_to_selection_new: * @notation: the #AgsNotation providing the selection * @x0: start x coordinate * @y0: start y coordinate * @x1: end x coordinate * @y1: end y coordinate * @replace_current_selection: if %TRUE new selection is created, otherwise added to current * * Creates an #AgsAddRegionToSelection. * * Returns: an new #AgsAddRegionToSelection. * * Since: 0.4 */ AgsAddRegionToSelection* ags_add_region_to_selection_new(AgsNotation *notation, guint x0, guint y0, guint x1, guint y1, gboolean replace_current_selection) { AgsAddRegionToSelection *add_region_to_selection; add_region_to_selection = (AgsAddRegionToSelection *) g_object_new(AGS_TYPE_ADD_REGION_TO_SELECTION, NULL); add_region_to_selection->notation = notation; add_region_to_selection->x0 = x0; add_region_to_selection->y0 = y0; add_region_to_selection->x1 = x1; add_region_to_selection->y1 = y1; add_region_to_selection->replace_current_selection = replace_current_selection; return(add_region_to_selection); } gsequencer-0.6.37/src/ags/audio/task/ags_add_point_to_selection.h0000644000175000017500000000446012626272146022024 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_ADD_POINT_TO_SELECTION_H__ #define __AGS_ADD_POINT_TO_SELECTION_H__ #include #include #include #include #define AGS_TYPE_ADD_POINT_TO_SELECTION (ags_add_point_to_selection_get_type()) #define AGS_ADD_POINT_TO_SELECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_ADD_POINT_TO_SELECTION, AgsAddPointToSelection)) #define AGS_ADD_POINT_TO_SELECTION_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_ADD_POINT_TO_SELECTION, AgsAddPointToSelectionClass)) #define AGS_IS_ADD_POINT_TO_SELECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_ADD_POINT_TO_SELECTION)) #define AGS_IS_ADD_POINT_TO_SELECTION_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_ADD_POINT_TO_SELECTION)) #define AGS_ADD_POINT_TO_SELECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_ADD_POINT_TO_SELECTION, AgsAddPointToSelectionClass)) typedef struct _AgsAddPointToSelection AgsAddPointToSelection; typedef struct _AgsAddPointToSelectionClass AgsAddPointToSelectionClass; struct _AgsAddPointToSelection { AgsTask task; AgsNotation *notation; guint x; guint y; gboolean replace_current_selection; }; struct _AgsAddPointToSelectionClass { AgsTaskClass task; }; GType ags_add_point_to_selection_get_type(); AgsAddPointToSelection* ags_add_point_to_selection_new(AgsNotation *notation, guint x, guint y, gboolean replace_current_selection); #endif /*__AGS_ADD_POINT_TO_SELECTION_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_add_audio_signal.h0000644000175000017500000000451012626272146020556 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_ADD_AUDIO_SIGNAL_H__ #define __AGS_ADD_AUDIO_SIGNAL_H__ #include #include #include #include #include #include #define AGS_TYPE_ADD_AUDIO_SIGNAL (ags_add_audio_signal_get_type()) #define AGS_ADD_AUDIO_SIGNAL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_ADD_AUDIO_SIGNAL, AgsAddAudioSignal)) #define AGS_ADD_AUDIO_SIGNAL_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_ADD_AUDIO_SIGNAL, AgsAddAudioSignalClass)) #define AGS_IS_ADD_AUDIO_SIGNAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_ADD_AUDIO_SIGNAL)) #define AGS_IS_ADD_AUDIO_SIGNAL_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_ADD_AUDIO_SIGNAL)) #define AGS_ADD_AUDIO_SIGNAL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_ADD_AUDIO_SIGNAL, AgsAddAudioSignalClass)) typedef struct _AgsAddAudioSignal AgsAddAudioSignal; typedef struct _AgsAddAudioSignalClass AgsAddAudioSignalClass; struct _AgsAddAudioSignal { AgsTask task; AgsRecycling *recycling; AgsAudioSignal *audio_signal; AgsDevout *devout; AgsRecallID *recall_id; guint audio_signal_flags; }; struct _AgsAddAudioSignalClass { AgsTaskClass task; }; GType ags_add_audio_signal_get_type(); AgsAddAudioSignal* ags_add_audio_signal_new(AgsRecycling *recycling, AgsAudioSignal *audio_signal, AgsDevout *devout, AgsRecallID *recall_id, guint audio_signal_flags); #endif /*__AGS_ADD_AUDIO_SIGNAL_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_channel_set_recycling.h0000644000175000017500000000444512626272146021641 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_CHANNEL_SET_RECYCLING_H__ #define __AGS_CHANNEL_SET_RECYCLING_H__ #include #include #include #include #define AGS_TYPE_CHANNEL_SET_RECYCLING (ags_channel_set_recycling_get_type()) #define AGS_CHANNEL_SET_RECYCLING(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_CHANNEL_SET_RECYCLING, AgsChannelSetRecycling)) #define AGS_CHANNEL_SET_RECYCLING_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_CHANNEL_SET_RECYCLING, AgsChannelSetRecyclingClass)) #define AGS_IS_CHANNEL_SET_RECYCLING(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_CHANNEL_SET_RECYCLING)) #define AGS_IS_CHANNEL_SET_RECYCLING_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_CHANNEL_SET_RECYCLING)) #define AGS_CHANNEL_SET_RECYCLING_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_CHANNEL_SET_RECYCLING, AgsChannelSetRecyclingClass)) typedef struct _AgsChannelSetRecycling AgsChannelSetRecycling; typedef struct _AgsChannelSetRecyclingClass AgsChannelSetRecyclingClass; struct _AgsChannelSetRecycling { AgsTask task; AgsChannel *channel; AgsRecycling *first_recycling; AgsRecycling *last_recycling; }; struct _AgsChannelSetRecyclingClass { AgsTaskClass task; }; GType ags_channel_set_recycling_get_type(); AgsChannelSetRecycling* ags_channel_set_recycling_new(AgsChannel *channel, AgsRecycling *first_recycling, AgsRecycling *last_recycling); #endif /*__AGS_CHANNEL_SET_RECYCLING_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_free_selection.c0000644000175000017500000001107312626272146020273 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_free_selection_class_init(AgsFreeSelectionClass *free_selection); void ags_free_selection_connectable_interface_init(AgsConnectableInterface *connectable); void ags_free_selection_init(AgsFreeSelection *free_selection); void ags_free_selection_connect(AgsConnectable *connectable); void ags_free_selection_disconnect(AgsConnectable *connectable); void ags_free_selection_finalize(GObject *gobject); void ags_free_selection_launch(AgsTask *task); /** * SECTION:ags_free_selection * @short_description: free selection object * @title: AgsFreeSelection * @section_id: * @include: ags/audio/task/ags_free_selection.h * * The #AgsFreeSelection task frees selection of #AgsNotation. */ static gpointer ags_free_selection_parent_class = NULL; static AgsConnectableInterface *ags_free_selection_parent_connectable_interface; GType ags_free_selection_get_type() { static GType ags_type_free_selection = 0; if(!ags_type_free_selection){ static const GTypeInfo ags_free_selection_info = { sizeof (AgsFreeSelectionClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_free_selection_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsFreeSelection), 0, /* n_preallocs */ (GInstanceInitFunc) ags_free_selection_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_free_selection_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_free_selection = g_type_register_static(AGS_TYPE_TASK, "AgsFreeSelection\0", &ags_free_selection_info, 0); g_type_add_interface_static(ags_type_free_selection, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_free_selection); } void ags_free_selection_class_init(AgsFreeSelectionClass *free_selection) { GObjectClass *gobject; AgsTaskClass *task; ags_free_selection_parent_class = g_type_class_peek_parent(free_selection); /* gobject */ gobject = (GObjectClass *) free_selection; gobject->finalize = ags_free_selection_finalize; /* task */ task = (AgsTaskClass *) free_selection; task->launch = ags_free_selection_launch; } void ags_free_selection_connectable_interface_init(AgsConnectableInterface *connectable) { ags_free_selection_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_free_selection_connect; connectable->disconnect = ags_free_selection_disconnect; } void ags_free_selection_init(AgsFreeSelection *free_selection) { free_selection->notation = NULL; } void ags_free_selection_connect(AgsConnectable *connectable) { ags_free_selection_parent_connectable_interface->connect(connectable); /* empty */ } void ags_free_selection_disconnect(AgsConnectable *connectable) { ags_free_selection_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_free_selection_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_free_selection_parent_class)->finalize(gobject); /* empty */ } void ags_free_selection_launch(AgsTask *task) { AgsFreeSelection *free_selection; free_selection = AGS_FREE_SELECTION(task); /* add note */ ags_notation_free_selection(free_selection->notation); } /** * ags_free_selection_new: * @navigation: the #AgsNavigation * * Creates an #AgsFreeSelection. * * Returns: an new #AgsFreeSelection. * * Since: 0.4 */ AgsFreeSelection* ags_free_selection_new(AgsNotation *notation) { AgsFreeSelection *free_selection; free_selection = (AgsFreeSelection *) g_object_new(AGS_TYPE_FREE_SELECTION, NULL); free_selection->notation = notation; return(free_selection); } gsequencer-0.6.37/src/ags/audio/task/ags_open_single_file.h0000644000175000017500000000434012626272146020612 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_OPEN_SINGLE_FILE_H__ #define __AGS_OPEN_SINGLE_FILE_H__ #include #include #include #include #define AGS_TYPE_OPEN_SINGLE_FILE (ags_open_single_file_get_type()) #define AGS_OPEN_SINGLE_FILE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_OPEN_SINGLE_FILE, AgsOpenSingleFile)) #define AGS_OPEN_SINGLE_FILE_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_OPEN_SINGLE_FILE, AgsOpenSingleFileClass)) #define AGS_IS_OPEN_SINGLE_FILE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_OPEN_SINGLE_FILE)) #define AGS_IS_OPEN_SINGLE_FILE_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_OPEN_SINGLE_FILE)) #define AGS_OPEN_SINGLE_FILE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_OPEN_SINGLE_FILE, AgsOpenSingleFileClass)) typedef struct _AgsOpenSingleFile AgsOpenSingleFile; typedef struct _AgsOpenSingleFileClass AgsOpenSingleFileClass; struct _AgsOpenSingleFile { AgsTask task; AgsChannel *channel; AgsDevout *devout; gchar *filename; guint start_channel; guint audio_channels; }; struct _AgsOpenSingleFileClass { AgsTaskClass task; }; GType ags_open_single_file_get_type(); AgsOpenSingleFile* ags_open_single_file_new(AgsChannel *channel, AgsDevout *devout, gchar *filename, guint start_channel, guint audio_channels); #endif /*__AGS_OPEN_SINGLE_FILE_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_append_recall.c0000644000175000017500000001143712626272146020102 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include void ags_append_recall_class_init(AgsAppendRecallClass *append_recall); void ags_append_recall_connectable_interface_init(AgsConnectableInterface *connectable); void ags_append_recall_init(AgsAppendRecall *append_recall); void ags_append_recall_connect(AgsConnectable *connectable); void ags_append_recall_disconnect(AgsConnectable *connectable); void ags_append_recall_finalize(GObject *gobject); void ags_append_recall_launch(AgsTask *task); /** * SECTION:ags_append_recall * @short_description: append recall object to audio loop * @title: AgsAppendRecall * @section_id: * @include: ags/recall/task/ags_append_recall.h * * The #AgsAppendRecall task appends #AgsRecall to #AgsAudioLoop. */ static gpointer ags_append_recall_parent_class = NULL; static AgsConnectableInterface *ags_append_recall_parent_connectable_interface; GType ags_append_recall_get_type() { static GType ags_type_append_recall = 0; if(!ags_type_append_recall){ static const GTypeInfo ags_append_recall_info = { sizeof (AgsAppendRecallClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_append_recall_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsAppendRecall), 0, /* n_preallocs */ (GInstanceInitFunc) ags_append_recall_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_append_recall_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_append_recall = g_type_register_static(AGS_TYPE_TASK, "AgsAppendRecall\0", &ags_append_recall_info, 0); g_type_add_interface_static(ags_type_append_recall, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_append_recall); } void ags_append_recall_class_init(AgsAppendRecallClass *append_recall) { GObjectClass *gobject; AgsTaskClass *task; ags_append_recall_parent_class = g_type_class_peek_parent(append_recall); /* GObjectClass */ gobject = (GObjectClass *) append_recall; gobject->finalize = ags_append_recall_finalize; /* AgsTaskClass */ task = (AgsTaskClass *) append_recall; task->launch = ags_append_recall_launch; } void ags_append_recall_connectable_interface_init(AgsConnectableInterface *connectable) { ags_append_recall_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_append_recall_connect; connectable->disconnect = ags_append_recall_disconnect; } void ags_append_recall_init(AgsAppendRecall *append_recall) { append_recall->audio_loop = NULL; append_recall->devout_play = NULL; } void ags_append_recall_connect(AgsConnectable *connectable) { ags_append_recall_parent_connectable_interface->connect(connectable); /* empty */ } void ags_append_recall_disconnect(AgsConnectable *connectable) { ags_append_recall_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_append_recall_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_append_recall_parent_class)->finalize(gobject); /* empty */ } void ags_append_recall_launch(AgsTask *task) { AgsAppendRecall *append_recall; AgsAudioLoop *audio_loop; append_recall = AGS_APPEND_RECALL(task); audio_loop = AGS_AUDIO_LOOP(append_recall->audio_loop); ags_audio_loop_add_recall(audio_loop, append_recall->devout_play); } /** * ags_append_recall_new: * @audio_loop: the #AgsAudioLoop * @recall: the #AgsRecall to append * * Creates an #AgsAppendRecall. * * Returns: an new #AgsAppendRecall. * * Since: 0.4 */ AgsAppendRecall* ags_append_recall_new(GObject *audio_loop, AgsDevoutPlay *devout_play) { AgsAppendRecall *append_recall; append_recall = (AgsAppendRecall *) g_object_new(AGS_TYPE_APPEND_RECALL, NULL); append_recall->audio_loop = audio_loop; append_recall->devout_play = devout_play; return(append_recall); } gsequencer-0.6.37/src/ags/audio/task/ags_unref_audio_signal.h0000644000175000017500000000412312626272146021145 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_UNREF_AUDIO_SIGNAL_H__ #define __AGS_UNREF_AUDIO_SIGNAL_H__ #include #include #include #include #define AGS_TYPE_UNREF_AUDIO_SIGNAL (ags_unref_audio_signal_get_type()) #define AGS_UNREF_AUDIO_SIGNAL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_UNREF_AUDIO_SIGNAL, AgsUnrefAudioSignal)) #define AGS_UNREF_AUDIO_SIGNAL_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_UNREF_AUDIO_SIGNAL, AgsUnrefAudioSignalClass)) #define AGS_IS_UNREF_AUDIO_SIGNAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_UNREF_AUDIO_SIGNAL)) #define AGS_IS_UNREF_AUDIO_SIGNAL_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_UNREF_AUDIO_SIGNAL)) #define AGS_UNREF_AUDIO_SIGNAL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_UNREF_AUDIO_SIGNAL, AgsUnrefAudioSignalClass)) typedef struct _AgsUnrefAudioSignal AgsUnrefAudioSignal; typedef struct _AgsUnrefAudioSignalClass AgsUnrefAudioSignalClass; struct _AgsUnrefAudioSignal { AgsTask task; AgsAudioSignal *audio_signal; }; struct _AgsUnrefAudioSignalClass { AgsTaskClass task; }; GType ags_unref_audio_signal_get_type(); AgsUnrefAudioSignal* ags_unref_audio_signal_new(AgsAudioSignal *audio_signal); #endif /*__AGS_UNREF_AUDIO_SIGNAL_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_resize_audio.h0000644000175000017500000000403612626272146017775 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_RESIZE_AUDIO_H__ #define __AGS_RESIZE_AUDIO_H__ #include #include #include #define AGS_TYPE_RESIZE_AUDIO (ags_resize_audio_get_type()) #define AGS_RESIZE_AUDIO(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_RESIZE_AUDIO, AgsResizeAudio)) #define AGS_RESIZE_AUDIO_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_RESIZE_AUDIO, AgsResizeAudioClass)) #define AGS_IS_RESIZE_AUDIO(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_RESIZE_AUDIO)) #define AGS_IS_RESIZE_AUDIO_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_RESIZE_AUDIO)) #define AGS_RESIZE_AUDIO_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_RESIZE_AUDIO, AgsResizeAudioClass)) typedef struct _AgsResizeAudio AgsResizeAudio; typedef struct _AgsResizeAudioClass AgsResizeAudioClass; struct _AgsResizeAudio { AgsTask task; AgsAudio *audio; guint output_pads; guint input_pads; guint audio_channels; }; struct _AgsResizeAudioClass { AgsTaskClass task; }; GType ags_resize_audio_get_type(); AgsResizeAudio* ags_resize_audio_new(AgsAudio *audio, guint output_pads, guint input_pads, guint audio_channels); #endif /*__AGS_RESIZE_AUDIO_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_save_file.c0000644000175000017500000001040312626272146017236 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_save_file_class_init(AgsSaveFileClass *save_file); void ags_save_file_connectable_interface_init(AgsConnectableInterface *connectable); void ags_save_file_init(AgsSaveFile *save_file); void ags_save_file_connect(AgsConnectable *connectable); void ags_save_file_disconnect(AgsConnectable *connectable); void ags_save_file_finalize(GObject *gobject); void ags_save_file_launch(AgsTask *task); /** * SECTION:ags_save_file * @short_description: save file object * @title: AgsSaveFile * @section_id: * @include: ags/audio/task/ags_save_file.h * * The #AgsSaveFile task saves files. */ static gpointer ags_save_file_parent_class = NULL; static AgsConnectableInterface *ags_save_file_parent_connectable_interface; GType ags_save_file_get_type() { static GType ags_type_save_file = 0; if(!ags_type_save_file){ static const GTypeInfo ags_save_file_info = { sizeof (AgsSaveFileClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_save_file_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsSaveFile), 0, /* n_preallocs */ (GInstanceInitFunc) ags_save_file_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_save_file_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_save_file = g_type_register_static(AGS_TYPE_TASK, "AgsSaveFile\0", &ags_save_file_info, 0); g_type_add_interface_static(ags_type_save_file, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_save_file); } void ags_save_file_class_init(AgsSaveFileClass *save_file) { GObjectClass *gobject; AgsTaskClass *task; ags_save_file_parent_class = g_type_class_peek_parent(save_file); /* gobject */ gobject = (GObjectClass *) save_file; gobject->finalize = ags_save_file_finalize; /* task */ task = (AgsTaskClass *) save_file; task->launch = ags_save_file_launch; } void ags_save_file_connectable_interface_init(AgsConnectableInterface *connectable) { ags_save_file_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_save_file_connect; connectable->disconnect = ags_save_file_disconnect; } void ags_save_file_init(AgsSaveFile *save_file) { save_file->file = NULL; } void ags_save_file_connect(AgsConnectable *connectable) { ags_save_file_parent_connectable_interface->connect(connectable); /* empty */ } void ags_save_file_disconnect(AgsConnectable *connectable) { ags_save_file_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_save_file_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_save_file_parent_class)->finalize(gobject); /* empty */ } void ags_save_file_launch(AgsTask *task) { AgsSaveFile *save_file; save_file = AGS_SAVE_FILE(task); g_message("Saving to: %s", save_file->file->filename); ags_file_rw_open(save_file->file, TRUE); ags_file_write(save_file->file); ags_file_close(save_file->file); } /** * ags_save_file_new: * @file: the #AgsFile * * Creates an #AgsSaveFile. * * Returns: an new #AgsSaveFile. * * Since: 0.4 */ AgsSaveFile* ags_save_file_new(AgsFile *file) { AgsSaveFile *save_file; save_file = (AgsSaveFile *) g_object_new(AGS_TYPE_SAVE_FILE, NULL); g_object_ref(file); save_file->file = file; return(save_file); } gsequencer-0.6.37/src/ags/audio/task/ags_set_output_device.h0000644000175000017500000000404012626272146021040 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_SET_OUTPUT_DEVICE_H__ #define __AGS_SET_OUTPUT_DEVICE_H__ #include #include #include #define AGS_TYPE_SET_OUTPUT_DEVICE (ags_set_output_device_get_type()) #define AGS_SET_OUTPUT_DEVICE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_SET_OUTPUT_DEVICE, AgsSetOutputDevice)) #define AGS_SET_OUTPUT_DEVICE_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_SET_OUTPUT_DEVICE, AgsSetOutputDeviceClass)) #define AGS_IS_SET_OUTPUT_DEVICE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_SET_OUTPUT_DEVICE)) #define AGS_IS_SET_OUTPUT_DEVICE_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_SET_OUTPUT_DEVICE)) #define AGS_SET_OUTPUT_DEVICE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_SET_OUTPUT_DEVICE, AgsSetOutputDeviceClass)) typedef struct _AgsSetOutputDevice AgsSetOutputDevice; typedef struct _AgsSetOutputDeviceClass AgsSetOutputDeviceClass; struct _AgsSetOutputDevice { AgsTask task; GObject *devout; char *card_id; }; struct _AgsSetOutputDeviceClass { AgsTaskClass task; }; GType ags_set_output_device_get_type(); AgsSetOutputDevice* ags_set_output_device_new(GObject *devout, char *card_id); #endif /*__AGS_SET_OUTPUT_DEVICE_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_set_devout_play_flags.h0000644000175000017500000000430712626272146021676 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_SET_DEVOUT_PLAY_FLAGS_H__ #define __AGS_SET_DEVOUT_PLAY_FLAGS_H__ #include #include #include #include #define AGS_TYPE_SET_DEVOUT_PLAY_FLAGS (ags_set_devout_play_flags_get_type()) #define AGS_SET_DEVOUT_PLAY_FLAGS(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_SET_DEVOUT_PLAY_FLAGS, AgsSetDevoutPlayFlags)) #define AGS_SET_DEVOUT_PLAY_FLAGS_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_SET_DEVOUT_PLAY_FLAGS, AgsSetDevoutPlayFlagsClass)) #define AGS_IS_SET_DEVOUT_PLAY_FLAGS(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_SET_DEVOUT_PLAY_FLAGS)) #define AGS_IS_SET_DEVOUT_PLAY_FLAGS_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_SET_DEVOUT_PLAY_FLAGS)) #define AGS_SET_DEVOUT_PLAY_FLAGS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_SET_DEVOUT_PLAY_FLAGS, AgsSetDevoutPlayFlagsClass)) typedef struct _AgsSetDevoutPlayFlags AgsSetDevoutPlayFlags; typedef struct _AgsSetDevoutPlayFlagsClass AgsSetDevoutPlayFlagsClass; struct _AgsSetDevoutPlayFlags { AgsTask task; AgsDevoutPlay *devout_play; guint devout_play_flags; }; struct _AgsSetDevoutPlayFlagsClass { AgsTaskClass task; }; GType ags_set_devout_play_flags_get_type(); AgsSetDevoutPlayFlags* ags_set_devout_play_flags_new(AgsDevoutPlay *play, guint devout_play_flags); #endif /*__AGS_SET_DEVOUT_PLAY_FLAGS_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_append_channel.c0000644000175000017500000001415312626272146020246 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include void ags_append_channel_class_init(AgsAppendChannelClass *append_channel); void ags_append_channel_connectable_interface_init(AgsConnectableInterface *connectable); void ags_append_channel_init(AgsAppendChannel *append_channel); void ags_append_channel_connect(AgsConnectable *connectable); void ags_append_channel_disconnect(AgsConnectable *connectable); void ags_append_channel_finalize(GObject *gobject); void ags_append_channel_launch(AgsTask *task); /** * SECTION:ags_append_channel * @short_description: append channel object to audio loop * @title: AgsAppendChannel * @section_id: * @include: ags/channel/task/ags_append_channel.h * * The #AgsAppendChannel task appends #AgsChannel to #AgsAudioLoop. */ static gpointer ags_append_channel_parent_class = NULL; static AgsConnectableInterface *ags_append_channel_parent_connectable_interface; extern AgsConfig *config; GType ags_append_channel_get_type() { static GType ags_type_append_channel = 0; if(!ags_type_append_channel){ static const GTypeInfo ags_append_channel_info = { sizeof (AgsAppendChannelClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_append_channel_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsAppendChannel), 0, /* n_preallocs */ (GInstanceInitFunc) ags_append_channel_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_append_channel_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_append_channel = g_type_register_static(AGS_TYPE_TASK, "AgsAppendChannel\0", &ags_append_channel_info, 0); g_type_add_interface_static(ags_type_append_channel, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_append_channel); } void ags_append_channel_class_init(AgsAppendChannelClass *append_channel) { GObjectClass *gobject; AgsTaskClass *task; ags_append_channel_parent_class = g_type_class_peek_parent(append_channel); /* GObjectClass */ gobject = (GObjectClass *) append_channel; gobject->finalize = ags_append_channel_finalize; /* AgsTaskClass */ task = (AgsTaskClass *) append_channel; task->launch = ags_append_channel_launch; } void ags_append_channel_connectable_interface_init(AgsConnectableInterface *connectable) { ags_append_channel_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_append_channel_connect; connectable->disconnect = ags_append_channel_disconnect; } void ags_append_channel_init(AgsAppendChannel *append_channel) { append_channel->audio_loop = NULL; append_channel->channel = NULL; } void ags_append_channel_connect(AgsConnectable *connectable) { ags_append_channel_parent_connectable_interface->connect(connectable); /* empty */ } void ags_append_channel_disconnect(AgsConnectable *connectable) { ags_append_channel_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_append_channel_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_append_channel_parent_class)->finalize(gobject); /* empty */ } void ags_append_channel_launch(AgsTask *task) { AgsChannel *channel; AgsAppendChannel *append_channel; AgsAudioLoop *audio_loop; AgsServer *server; gchar *str0, *str1; append_channel = AGS_APPEND_CHANNEL(task); audio_loop = AGS_AUDIO_LOOP(append_channel->audio_loop); channel = append_channel->channel; /* append to AgsDevout */ ags_audio_loop_add_channel(audio_loop, channel); /**/ str0 = ags_config_get(config, AGS_CONFIG_THREAD, "model\0"); str1 = ags_config_get(config, AGS_CONFIG_THREAD, "super-threaded-scope\0"); if(!g_ascii_strncasecmp(str0, "super-threaded\0", 15)){ /* super threaed setup */ if(!g_ascii_strncasecmp(str1, "channel\0", 8)){ if(AGS_DEVOUT_PLAY(channel->devout_play)->channel_thread[0]->parent == NULL && (AGS_DEVOUT_PLAY_PLAYBACK & (g_atomic_int_get(&(AGS_DEVOUT_PLAY(channel->devout_play)->flags)))) != 0){ ags_thread_add_child_extended(audio_loop, AGS_DEVOUT_PLAY(channel->devout_play)->channel_thread[0], TRUE, TRUE); ags_connectable_connect(AGS_CONNECTABLE(AGS_DEVOUT_PLAY(channel->devout_play)->channel_thread[0])); } } } free(str0); free(str1); /* add to server registry */ server = AGS_MAIN(audio_loop->ags_main)->server; if(server != NULL && (AGS_SERVER_RUNNING & (server->flags)) != 0){ ags_connectable_add_to_registry(AGS_CONNECTABLE(append_channel->channel)); } } /** * ags_append_channel_new: * @audio_loop: the #AgsAudioLoop * @channel: the #AgsChannel to append * * Creates an #AgsAppendChannel. * * Returns: an new #AgsAppendChannel. * * Since: 0.4 */ AgsAppendChannel* ags_append_channel_new(GObject *audio_loop, GObject *channel) { AgsAppendChannel *append_channel; append_channel = (AgsAppendChannel *) g_object_new(AGS_TYPE_APPEND_CHANNEL, NULL); append_channel->audio_loop = audio_loop; append_channel->channel = channel; return(append_channel); } gsequencer-0.6.37/src/ags/audio/task/ags_toggle_pattern_bit.h0000644000175000017500000000453112626272146021167 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_TOGGLE_PATTERN_BIT_H__ #define __AGS_TOGGLE_PATTERN_BIT_H__ #include #include #include #include #define AGS_TYPE_TOGGLE_PATTERN_BIT (ags_toggle_pattern_bit_get_type()) #define AGS_TOGGLE_PATTERN_BIT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_TOGGLE_PATTERN_BIT, AgsTogglePatternBit)) #define AGS_TOGGLE_PATTERN_BIT_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_TOGGLE_PATTERN_BIT, AgsTogglePatternBitClass)) #define AGS_IS_TOGGLE_PATTERN_BIT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_TOGGLE_PATTERN_BIT)) #define AGS_IS_TOGGLE_PATTERN_BIT_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_TOGGLE_PATTERN_BIT)) #define AGS_TOGGLE_PATTERN_BIT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_TOGGLE_PATTERN_BIT, AgsTogglePatternBitClass)) typedef struct _AgsTogglePatternBit AgsTogglePatternBit; typedef struct _AgsTogglePatternBitClass AgsTogglePatternBitClass; struct _AgsTogglePatternBit { AgsTask task; AgsPattern *pattern; guint line; guint index_i; guint index_j; guint bit; }; struct _AgsTogglePatternBitClass { AgsTaskClass task; void (*refresh_gui)(AgsTogglePatternBit *toggle_pattern_bit); }; GType ags_toggle_pattern_bit_get_type(); void ags_toggle_pattern_bit_refresh_gui(AgsTogglePatternBit *toggle_pattern_bit); AgsTogglePatternBit* ags_toggle_pattern_bit_new(AgsPattern *pattern, guint line, guint index_i, guint index_j, guint bit); #endif /*__AGS_TOGGLE_PATTERN_BIT_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_add_audio.c0000644000175000017500000001061512626272146017217 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_add_audio_class_init(AgsAddAudioClass *add_audio); void ags_add_audio_connectable_interface_init(AgsConnectableInterface *connectable); void ags_add_audio_init(AgsAddAudio *add_audio); void ags_add_audio_connect(AgsConnectable *connectable); void ags_add_audio_disconnect(AgsConnectable *connectable); void ags_add_audio_finalize(GObject *gobject); void ags_add_audio_launch(AgsTask *task); /** * SECTION:ags_add_audio * @short_description: add audio object to devout * @title: AgsAddAudio * @section_id: * @include: ags/audio/task/ags_add_audio.h * * The #AgsAddAudio task adds #AgsAudio to #AgsDevout. */ static gpointer ags_add_audio_parent_class = NULL; static AgsConnectableInterface *ags_add_audio_parent_connectable_interface; GType ags_add_audio_get_type() { static GType ags_type_add_audio = 0; if(!ags_type_add_audio){ static const GTypeInfo ags_add_audio_info = { sizeof (AgsAddAudioClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_add_audio_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsAddAudio), 0, /* n_preallocs */ (GInstanceInitFunc) ags_add_audio_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_add_audio_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_add_audio = g_type_register_static(AGS_TYPE_TASK, "AgsAddAudio\0", &ags_add_audio_info, 0); g_type_add_interface_static(ags_type_add_audio, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_add_audio); } void ags_add_audio_class_init(AgsAddAudioClass *add_audio) { GObjectClass *gobject; AgsTaskClass *task; ags_add_audio_parent_class = g_type_class_peek_parent(add_audio); /* gobject */ gobject = (GObjectClass *) add_audio; gobject->finalize = ags_add_audio_finalize; /* task */ task = (AgsTaskClass *) add_audio; task->launch = ags_add_audio_launch; } void ags_add_audio_connectable_interface_init(AgsConnectableInterface *connectable) { ags_add_audio_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_add_audio_connect; connectable->disconnect = ags_add_audio_disconnect; } void ags_add_audio_init(AgsAddAudio *add_audio) { add_audio->devout = NULL; add_audio->audio = NULL; } void ags_add_audio_connect(AgsConnectable *connectable) { ags_add_audio_parent_connectable_interface->connect(connectable); /* empty */ } void ags_add_audio_disconnect(AgsConnectable *connectable) { ags_add_audio_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_add_audio_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_add_audio_parent_class)->finalize(gobject); /* empty */ } void ags_add_audio_launch(AgsTask *task) { AgsAddAudio *add_audio; add_audio = AGS_ADD_AUDIO(task); /* add audio */ ags_devout_add_audio(add_audio->devout, G_OBJECT(add_audio->audio)); /* AgsAudio */ ags_connectable_connect(AGS_CONNECTABLE(add_audio->audio)); } /** * ags_add_audio_new: * @devout: the #AgsDevout * @audio: the #AgsAudio to add * * Creates an #AgsAddAudio. * * Returns: an new #AgsAddAudio. * * Since: 0.4 */ AgsAddAudio* ags_add_audio_new(AgsDevout *devout, AgsAudio *audio) { AgsAddAudio *add_audio; add_audio = (AgsAddAudio *) g_object_new(AGS_TYPE_ADD_AUDIO, NULL); add_audio->devout = devout; add_audio->audio = audio; return(add_audio); } gsequencer-0.6.37/src/ags/audio/task/ags_add_note.h0000644000175000017500000000371112626272146017067 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_ADD_NOTE_H__ #define __AGS_ADD_NOTE_H__ #include #include #include #include #include #define AGS_TYPE_ADD_NOTE (ags_add_note_get_type()) #define AGS_ADD_NOTE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_ADD_NOTE, AgsAddNote)) #define AGS_ADD_NOTE_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_ADD_NOTE, AgsAddNoteClass)) #define AGS_IS_ADD_NOTE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_ADD_NOTE)) #define AGS_IS_ADD_NOTE_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_ADD_NOTE)) #define AGS_ADD_NOTE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_ADD_NOTE, AgsAddNoteClass)) typedef struct _AgsAddNote AgsAddNote; typedef struct _AgsAddNoteClass AgsAddNoteClass; struct _AgsAddNote { AgsTask task; AgsNotation *notation; AgsNote *note; gboolean use_selection_list; }; struct _AgsAddNoteClass { AgsTaskClass task; }; GType ags_add_note_get_type(); AgsAddNote* ags_add_note_new(AgsNotation *notation, AgsNote *note, gboolean use_selection_list); #endif /*__AGS_ADD_NOTE_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_cancel_audio.c0000644000175000017500000001664112626272146017721 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include void ags_cancel_audio_class_init(AgsCancelAudioClass *cancel_audio); void ags_cancel_audio_connectable_interface_init(AgsConnectableInterface *connectable); void ags_cancel_audio_init(AgsCancelAudio *cancel_audio); void ags_cancel_audio_connect(AgsConnectable *connectable); void ags_cancel_audio_disconnect(AgsConnectable *connectable); void ags_cancel_audio_finalize(GObject *gobject); void ags_cancel_audio_launch(AgsTask *task); /** * SECTION:ags_cancel_audio * @short_description: cancel audio object in audio loop * @title: AgsCancelAudio * @section_id: * @include: ags/audio/task/ags_cancel_audio.h * * The #AgsCancelAudio task cancels #AgsAudio playback. */ static gpointer ags_cancel_audio_parent_class = NULL; static AgsConnectableInterface *ags_cancel_audio_parent_connectable_interface; GType ags_cancel_audio_get_type() { static GType ags_type_cancel_audio = 0; if(!ags_type_cancel_audio){ static const GTypeInfo ags_cancel_audio_info = { sizeof (AgsCancelAudioClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_cancel_audio_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsCancelAudio), 0, /* n_preallocs */ (GInstanceInitFunc) ags_cancel_audio_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_cancel_audio_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_cancel_audio = g_type_register_static(AGS_TYPE_TASK, "AgsCancelAudio\0", &ags_cancel_audio_info, 0); g_type_add_interface_static(ags_type_cancel_audio, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_cancel_audio); } void ags_cancel_audio_class_init(AgsCancelAudioClass *cancel_audio) { GObjectClass *gobject; AgsTaskClass *task; ags_cancel_audio_parent_class = g_type_class_peek_parent(cancel_audio); /* gobject */ gobject = (GObjectClass *) cancel_audio; gobject->finalize = ags_cancel_audio_finalize; /* task */ task = (AgsTaskClass *) cancel_audio; task->launch = ags_cancel_audio_launch; } void ags_cancel_audio_connectable_interface_init(AgsConnectableInterface *connectable) { ags_cancel_audio_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_cancel_audio_connect; connectable->disconnect = ags_cancel_audio_disconnect; } void ags_cancel_audio_init(AgsCancelAudio *cancel_audio) { cancel_audio->audio = NULL; cancel_audio->playback = FALSE; cancel_audio->sequencer = FALSE; cancel_audio->notation = FALSE; } void ags_cancel_audio_connect(AgsConnectable *connectable) { ags_cancel_audio_parent_connectable_interface->connect(connectable); /* empty */ } void ags_cancel_audio_disconnect(AgsConnectable *connectable) { ags_cancel_audio_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_cancel_audio_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_cancel_audio_parent_class)->finalize(gobject); /* empty */ } void ags_cancel_audio_launch(AgsTask *task) { AgsDevoutPlayDomain *devout_play_domain; AgsAudio *audio; AgsChannel *channel; AgsCancelAudio *cancel_audio; cancel_audio = AGS_CANCEL_AUDIO(task); audio = cancel_audio->audio; devout_play_domain = AGS_DEVOUT_PLAY_DOMAIN(audio->devout_play_domain); /* cancel playback */ if(cancel_audio->playback){ g_atomic_int_and(&(devout_play_domain->flags), (~AGS_DEVOUT_PLAY_DOMAIN_PLAYBACK)); channel = audio->output; while(channel != NULL){ if(AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[0] == NULL){ channel = channel->next; continue; } g_object_ref(AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[0]); ags_channel_tillrecycling_cancel(channel, AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[0]); AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[0] = NULL; channel = channel->next; } if((AGS_DEVOUT_PLAY_DOMAIN_SUPER_THREADED_AUDIO & (g_atomic_int_get(&(devout_play_domain->flags)))) != 0){ // ags_thread_stop(devout_play_domain->audio_thread[0]); } } /* cancel sequencer */ if(cancel_audio->sequencer){ g_atomic_int_and(&(devout_play_domain->flags), (~AGS_DEVOUT_PLAY_DOMAIN_SEQUENCER)); channel = audio->output; while(channel != NULL){ if(AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[1] == NULL){ channel = channel->next; continue; } g_object_ref(AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[1]); ags_channel_tillrecycling_cancel(channel, AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[1]); AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[1] = NULL; channel = channel->next; } if((AGS_DEVOUT_PLAY_DOMAIN_SUPER_THREADED_AUDIO & (g_atomic_int_get(&(devout_play_domain->flags)))) != 0){ // ags_thread_stop(devout_play_domain->audio_thread[1]); } } /* cancel notation */ if(cancel_audio->notation){ g_atomic_int_and(&(devout_play_domain->flags), (~AGS_DEVOUT_PLAY_DOMAIN_NOTATION)); channel = audio->output; while(channel != NULL){ if(AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[2] == NULL){ channel = channel->next; continue; } g_object_ref(AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[2]); ags_channel_tillrecycling_cancel(channel, AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[2]); AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[2] = NULL; channel = channel->next; } if((AGS_DEVOUT_PLAY_DOMAIN_SUPER_THREADED_AUDIO & (g_atomic_int_get(&(devout_play_domain->flags)))) != 0){ // ags_thread_stop(devout_play_domain->audio_thread[2]); } } } /** * ags_cancel_audio_new: * @audio: the #AgsAudio to cancel * @playback: if %TRUE playback is canceld * @sequencer: if %TRUE sequencer is canceld * @notation: if %TRUE notation is canceld * * Creates an #AgsCancelAudio. * * Returns: an new #AgsCancelAudio. * * Since: 0.4 */ AgsCancelAudio* ags_cancel_audio_new(AgsAudio *audio, gboolean playback, gboolean sequencer, gboolean notation) { AgsCancelAudio *cancel_audio; cancel_audio = (AgsCancelAudio *) g_object_new(AGS_TYPE_CANCEL_AUDIO, NULL); cancel_audio->audio = audio; cancel_audio->playback = playback; cancel_audio->sequencer = sequencer; cancel_audio->notation = notation; return(cancel_audio); } gsequencer-0.6.37/src/ags/audio/task/ags_add_recall_container.h0000644000175000017500000000431212626272146021424 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_ADD_RECALL_CONTAINER_H__ #define __AGS_ADD_RECALL_CONTAINER_H__ #include #include #include #include #define AGS_TYPE_ADD_RECALL_CONTAINER (ags_add_recall_container_get_type()) #define AGS_ADD_RECALL_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_ADD_RECALL_CONTAINER, AgsAddRecallContainer)) #define AGS_ADD_RECALL_CONTAINER_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_ADD_RECALL_CONTAINER, AgsAddRecallContainerClass)) #define AGS_IS_ADD_RECALL_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_ADD_RECALL_CONTAINER)) #define AGS_IS_ADD_RECALL_CONTAINER_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_ADD_RECALL_CONTAINER)) #define AGS_ADD_RECALL_CONTAINER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_ADD_RECALL_CONTAINER, AgsAddRecallContainerClass)) typedef struct _AgsAddRecallContainer AgsAddRecallContainer; typedef struct _AgsAddRecallContainerClass AgsAddRecallContainerClass; struct _AgsAddRecallContainer { AgsTask task; GObject *audio; AgsRecallContainer *recall_container; }; struct _AgsAddRecallContainerClass { AgsTaskClass task; }; GType ags_add_recall_container_get_type(); AgsAddRecallContainer* ags_add_recall_container_new(GObject *audio, AgsRecallContainer *recall_container); #endif /*__AGS_ADD_RECALL_CONTAINER_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_channel_set_recycling.c0000644000175000017500000001300112626272146021620 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include void ags_channel_set_recycling_class_init(AgsChannelSetRecyclingClass *channel_set_recycling); void ags_channel_set_recycling_connectable_interface_init(AgsConnectableInterface *connectable); void ags_channel_set_recycling_init(AgsChannelSetRecycling *channel_set_recycling); void ags_channel_set_recycling_connect(AgsConnectable *connectable); void ags_channel_set_recycling_disconnect(AgsConnectable *connectable); void ags_channel_set_recycling_finalize(GObject *gobject); void ags_channel_set_recycling_launch(AgsTask *task); static gpointer ags_channel_set_recycling_parent_class = NULL; static AgsConnectableInterface *ags_channel_set_recycling_parent_connectable_interface; GType ags_channel_set_recycling_get_type() { static GType ags_type_channel_set_recycling = 0; if(!ags_type_channel_set_recycling){ static const GTypeInfo ags_channel_set_recycling_info = { sizeof (AgsChannelSetRecyclingClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_channel_set_recycling_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsChannelSetRecycling), 0, /* n_preallocs */ (GInstanceInitFunc) ags_channel_set_recycling_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_channel_set_recycling_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_channel_set_recycling = g_type_register_static(AGS_TYPE_TASK, "AgsChannelSetRecycling\0", &ags_channel_set_recycling_info, 0); g_type_add_interface_static(ags_type_channel_set_recycling, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_channel_set_recycling); } void ags_channel_set_recycling_class_init(AgsChannelSetRecyclingClass *channel_set_recycling) { GObjectClass *gobject; AgsTaskClass *task; ags_channel_set_recycling_parent_class = g_type_class_peek_parent(channel_set_recycling); /* GObjectClass */ gobject = (GObjectClass *) channel_set_recycling; gobject->finalize = ags_channel_set_recycling_finalize; /* AgsTaskClass */ task = (AgsTaskClass *) channel_set_recycling; task->launch = ags_channel_set_recycling_launch; } void ags_channel_set_recycling_connectable_interface_init(AgsConnectableInterface *connectable) { ags_channel_set_recycling_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_channel_set_recycling_connect; connectable->disconnect = ags_channel_set_recycling_disconnect; } void ags_channel_set_recycling_init(AgsChannelSetRecycling *channel_set_recycling) { channel_set_recycling->channel = NULL; channel_set_recycling->first_recycling = NULL; channel_set_recycling->last_recycling = NULL; } void ags_channel_set_recycling_connect(AgsConnectable *connectable) { ags_channel_set_recycling_parent_connectable_interface->connect(connectable); /* empty */ } void ags_channel_set_recycling_disconnect(AgsConnectable *connectable) { ags_channel_set_recycling_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_channel_set_recycling_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_channel_set_recycling_parent_class)->finalize(gobject); /* empty */ } void ags_channel_set_recycling_launch(AgsTask *task) { AgsChannelSetRecycling *channel_set_recycling; AgsChannel *link; GError *error; channel_set_recycling = AGS_CHANNEL_SET_RECYCLING(task); link = channel_set_recycling->channel; error = NULL; ags_channel_set_link(channel_set_recycling->channel, NULL, &error); if(error != NULL){ g_error("%s\0", error->message); } ags_channel_set_recycling(channel_set_recycling->channel, channel_set_recycling->first_recycling, channel_set_recycling->last_recycling, TRUE, TRUE); ags_channel_set_link(channel_set_recycling->channel, link, &error); if(error != NULL){ g_error("%s\0", error->message); } } AgsChannelSetRecycling* ags_channel_set_recycling_new(AgsChannel *channel, AgsRecycling *first_recycling, AgsRecycling *last_recycling) { AgsChannelSetRecycling *channel_set_recycling; channel_set_recycling = (AgsChannelSetRecycling *) g_object_new(AGS_TYPE_CHANNEL_SET_RECYCLING, NULL); channel_set_recycling->channel = channel; channel_set_recycling->first_recycling = first_recycling; channel_set_recycling->last_recycling = last_recycling; return(channel_set_recycling); } gsequencer-0.6.37/src/ags/audio/task/ags_set_buffer_size.h0000644000175000017500000000376012626272146020474 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_SET_BUFFER_SIZE_H__ #define __AGS_SET_BUFFER_SIZE_H__ #include #include #include #define AGS_TYPE_SET_BUFFER_SIZE (ags_set_buffer_size_get_type()) #define AGS_SET_BUFFER_SIZE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_SET_BUFFER_SIZE, AgsSetBufferSize)) #define AGS_SET_BUFFER_SIZE_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_SET_BUFFER_SIZE, AgsSetBufferSizeClass)) #define AGS_IS_SET_BUFFER_SIZE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_SET_BUFFER_SIZE)) #define AGS_IS_SET_BUFFER_SIZE_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_SET_BUFFER_SIZE)) #define AGS_SET_BUFFER_SIZE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_SET_BUFFER_SIZE, AgsSetBufferSizeClass)) typedef struct _AgsSetBufferSize AgsSetBufferSize; typedef struct _AgsSetBufferSizeClass AgsSetBufferSizeClass; struct _AgsSetBufferSize { AgsTask task; GObject *gobject; guint buffer_size; }; struct _AgsSetBufferSizeClass { AgsTaskClass task; }; GType ags_set_buffer_size_get_type(); AgsSetBufferSize* ags_set_buffer_size_new(GObject *gobject, guint buffer_size); #endif /*__AGS_SET_BUFFER_SIZE_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_init_audio.c0000644000175000017500000001465512626272146017442 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include void ags_init_audio_class_init(AgsInitAudioClass *init_audio); void ags_init_audio_connectable_interface_init(AgsConnectableInterface *connectable); void ags_init_audio_init(AgsInitAudio *init_audio); void ags_init_audio_connect(AgsConnectable *connectable); void ags_init_audio_disconnect(AgsConnectable *connectable); void ags_init_audio_finalize(GObject *gobject); void ags_init_audio_launch(AgsTask *task); /** * SECTION:ags_init_audio * @short_description: init audio object * @title: AgsInitAudio * @section_id: * @include: ags/audio/task/ags_init_audio.h * * The #AgsInitAudio task inits #AgsAudio. */ static gpointer ags_init_audio_parent_class = NULL; static AgsConnectableInterface *ags_init_audio_parent_connectable_interface; GType ags_init_audio_get_type() { static GType ags_type_init_audio = 0; if(!ags_type_init_audio){ static const GTypeInfo ags_init_audio_info = { sizeof (AgsInitAudioClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_init_audio_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsInitAudio), 0, /* n_preallocs */ (GInstanceInitFunc) ags_init_audio_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_init_audio_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_init_audio = g_type_register_static(AGS_TYPE_TASK, "AgsInitAudio\0", &ags_init_audio_info, 0); g_type_add_interface_static(ags_type_init_audio, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_init_audio); } void ags_init_audio_class_init(AgsInitAudioClass *init_audio) { GObjectClass *gobject; AgsTaskClass *task; ags_init_audio_parent_class = g_type_class_peek_parent(init_audio); /* gobject */ gobject = (GObjectClass *) init_audio; gobject->finalize = ags_init_audio_finalize; /* task */ task = (AgsTaskClass *) init_audio; task->launch = ags_init_audio_launch; } void ags_init_audio_connectable_interface_init(AgsConnectableInterface *connectable) { ags_init_audio_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_init_audio_connect; connectable->disconnect = ags_init_audio_disconnect; } void ags_init_audio_init(AgsInitAudio *init_audio) { init_audio->audio = NULL; init_audio->playback = FALSE; init_audio->sequencer = FALSE; init_audio->notation = FALSE; } void ags_init_audio_connect(AgsConnectable *connectable) { ags_init_audio_parent_connectable_interface->connect(connectable); /* empty */ } void ags_init_audio_disconnect(AgsConnectable *connectable) { ags_init_audio_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_init_audio_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_init_audio_parent_class)->finalize(gobject); /* empty */ } void ags_init_audio_launch(AgsTask *task) { AgsInitAudio *init_audio; AgsAudio *audio; AgsRecallID *recall_id; GList *devout_play; GList *list; init_audio = AGS_INIT_AUDIO(task); audio = init_audio->audio; g_message("init\0"); /* init audio */ if(init_audio->playback){ g_atomic_int_or(&(AGS_DEVOUT_PLAY_DOMAIN(audio->devout_play_domain)->flags), AGS_DEVOUT_PLAY_DOMAIN_PLAYBACK); devout_play = AGS_DEVOUT_PLAY_DOMAIN(audio->devout_play_domain)->devout_play; list = ags_audio_recursive_play_init(audio, TRUE, FALSE, FALSE); while(list != NULL){ // AGS_DEVOUT_PLAY(devout_play->data)->recall_id[0] = list->data; g_atomic_int_or(&(AGS_DEVOUT_PLAY(devout_play->data)->flags), AGS_DEVOUT_PLAY_PLAYBACK); devout_play = devout_play->next; list = list->next; } } if(init_audio->sequencer){ g_atomic_int_or(&(AGS_DEVOUT_PLAY_DOMAIN(audio->devout_play_domain)->flags), AGS_DEVOUT_PLAY_DOMAIN_SEQUENCER); devout_play = AGS_DEVOUT_PLAY_DOMAIN(audio->devout_play_domain)->devout_play; list = ags_audio_recursive_play_init(audio, FALSE, TRUE, FALSE); while(list != NULL){ // AGS_DEVOUT_PLAY(devout_play->data)->recall_id[1] = list->data; g_atomic_int_or(&(AGS_DEVOUT_PLAY(devout_play->data)->flags), AGS_DEVOUT_PLAY_SEQUENCER); devout_play = devout_play->next; list = list->next; } } if(init_audio->notation){ g_atomic_int_or(&(AGS_DEVOUT_PLAY_DOMAIN(audio->devout_play_domain)->flags), AGS_DEVOUT_PLAY_DOMAIN_NOTATION); devout_play = AGS_DEVOUT_PLAY_DOMAIN(audio->devout_play_domain)->devout_play; list = ags_audio_recursive_play_init(audio, FALSE, FALSE, TRUE); while(list != NULL){ // AGS_DEVOUT_PLAY(devout_play->data)->recall_id[2] = list->data; g_atomic_int_or(&(AGS_DEVOUT_PLAY(devout_play->data)->flags), AGS_DEVOUT_PLAY_NOTATION); devout_play = devout_play->next; list = list->next; } } } /** * ags_init_audio_new: * @audio: the #AgsAudio * @playback: init playback * @sequencer: init sequencer * @notation: init notation * * Creates an #AgsInitAudio. * * Returns: an new #AgsInitAudio. * * Since: 0.4 */ AgsInitAudio* ags_init_audio_new(AgsAudio *audio, gboolean playback, gboolean sequencer, gboolean notation) { AgsInitAudio *init_audio; init_audio = (AgsInitAudio *) g_object_new(AGS_TYPE_INIT_AUDIO, NULL); init_audio->audio = audio; init_audio->playback = playback; init_audio->sequencer = sequencer; init_audio->notation = notation; return(init_audio); } gsequencer-0.6.37/src/ags/audio/task/ags_blink_cell_pattern_cursor.c0000644000175000017500000001342112626272146022534 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include void ags_blink_cell_pattern_cursor_class_init(AgsBlinkCellPatternCursorClass *blink_cell_pattern_cursor); void ags_blink_cell_pattern_cursor_connectable_interface_init(AgsConnectableInterface *connectable); void ags_blink_cell_pattern_cursor_init(AgsBlinkCellPatternCursor *blink_cell_pattern_cursor); void ags_blink_cell_pattern_cursor_connect(AgsConnectable *connectable); void ags_blink_cell_pattern_cursor_disconnect(AgsConnectable *connectable); void ags_blink_cell_pattern_cursor_finalize(GObject *gobject); void ags_blink_cell_pattern_cursor_launch(AgsTask *task); /** * SECTION:ags_blink_cell_pattern_cursor * @short_description: toggle led object * @title: AgsBlinkCellPatternCursor * @section_id: * @include: ags/audio/task/ags_blink_cell_pattern_cursor.h * * The #AgsBlinkCellPatternCursor task blinks the cell pattern cursor. */ static gpointer ags_blink_cell_pattern_cursor_parent_class = NULL; static AgsConnectableInterface *ags_blink_cell_pattern_cursor_parent_connectable_interface; GType ags_blink_cell_pattern_cursor_get_type() { static GType ags_type_blink_cell_pattern_cursor = 0; if(!ags_type_blink_cell_pattern_cursor){ static const GTypeInfo ags_blink_cell_pattern_cursor_info = { sizeof (AgsBlinkCellPatternCursorClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_blink_cell_pattern_cursor_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsBlinkCellPatternCursor), 0, /* n_preallocs */ (GInstanceInitFunc) ags_blink_cell_pattern_cursor_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_blink_cell_pattern_cursor_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_blink_cell_pattern_cursor = g_type_register_static(AGS_TYPE_TASK, "AgsBlinkCellPatternCursor\0", &ags_blink_cell_pattern_cursor_info, 0); g_type_add_interface_static(ags_type_blink_cell_pattern_cursor, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_blink_cell_pattern_cursor); } void ags_blink_cell_pattern_cursor_class_init(AgsBlinkCellPatternCursorClass *blink_cell_pattern_cursor) { GObjectClass *gobject; AgsTaskClass *task; ags_blink_cell_pattern_cursor_parent_class = g_type_class_peek_parent(blink_cell_pattern_cursor); /* GObject */ gobject = (GObjectClass *) blink_cell_pattern_cursor; gobject->finalize = ags_blink_cell_pattern_cursor_finalize; /* AgsTask */ task = (AgsTaskClass *) blink_cell_pattern_cursor; task->launch = ags_blink_cell_pattern_cursor_launch; } void ags_blink_cell_pattern_cursor_connectable_interface_init(AgsConnectableInterface *connectable) { ags_blink_cell_pattern_cursor_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_blink_cell_pattern_cursor_connect; connectable->disconnect = ags_blink_cell_pattern_cursor_disconnect; } void ags_blink_cell_pattern_cursor_init(AgsBlinkCellPatternCursor *blink_cell_pattern_cursor) { blink_cell_pattern_cursor->cell_pattern = NULL; blink_cell_pattern_cursor->highlight_cursor = FALSE; } void ags_blink_cell_pattern_cursor_connect(AgsConnectable *connectable) { ags_blink_cell_pattern_cursor_parent_connectable_interface->connect(connectable); /* empty */ } void ags_blink_cell_pattern_cursor_disconnect(AgsConnectable *connectable) { ags_blink_cell_pattern_cursor_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_blink_cell_pattern_cursor_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_blink_cell_pattern_cursor_parent_class)->finalize(gobject); /* empty */ } void ags_blink_cell_pattern_cursor_launch(AgsTask *task) { AgsBlinkCellPatternCursor *blink_cell_pattern_cursor; blink_cell_pattern_cursor = AGS_BLINK_CELL_PATTERN_CURSOR(task); if(blink_cell_pattern_cursor->highlight_cursor){ blink_cell_pattern_cursor->cell_pattern->flags |= AGS_CELL_PATTERN_CURSOR_ON; }else{ blink_cell_pattern_cursor->cell_pattern->flags &= (~AGS_CELL_PATTERN_CURSOR_ON); } gtk_widget_queue_draw(blink_cell_pattern_cursor->cell_pattern); } /** * ags_blink_cell_pattern_cursor_new: * @cell_pattern: the #AgsCellPattern to blink * @highlight_cursor: %TRUE if highlighted * * Creates an #AgsBlinkCellPatternCursor. * * Returns: an new #AgsBlinkCellPatternCursor. * * Since: 0.4 */ AgsBlinkCellPatternCursor* ags_blink_cell_pattern_cursor_new(AgsCellPattern *cell_pattern, gboolean highlight_cursor) { AgsBlinkCellPatternCursor *blink_cell_pattern_cursor; blink_cell_pattern_cursor = (AgsBlinkCellPatternCursor *) g_object_new(AGS_TYPE_BLINK_CELL_PATTERN_CURSOR, NULL); blink_cell_pattern_cursor->cell_pattern = cell_pattern; blink_cell_pattern_cursor->highlight_cursor = highlight_cursor; return(blink_cell_pattern_cursor); } gsequencer-0.6.37/src/ags/audio/task/ags_add_region_to_selection.h0000644000175000017500000000457212626272146022162 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_ADD_REGION_TO_SELECTION_H__ #define __AGS_ADD_REGION_TO_SELECTION_H__ #include #include #include #include #define AGS_TYPE_ADD_REGION_TO_SELECTION (ags_add_region_to_selection_get_type()) #define AGS_ADD_REGION_TO_SELECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_ADD_REGION_TO_SELECTION, AgsAddRegionToSelection)) #define AGS_ADD_REGION_TO_SELECTION_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_ADD_REGION_TO_SELECTION, AgsAddRegionToSelectionClass)) #define AGS_IS_ADD_REGION_TO_SELECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_ADD_REGION_TO_SELECTION)) #define AGS_IS_ADD_REGION_TO_SELECTION_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_ADD_REGION_TO_SELECTION)) #define AGS_ADD_REGION_TO_SELECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_ADD_REGION_TO_SELECTION, AgsAddRegionToSelectionClass)) typedef struct _AgsAddRegionToSelection AgsAddRegionToSelection; typedef struct _AgsAddRegionToSelectionClass AgsAddRegionToSelectionClass; struct _AgsAddRegionToSelection { AgsTask task; AgsNotation *notation; guint x0; guint y0; guint x1; guint y1; gboolean replace_current_selection; }; struct _AgsAddRegionToSelectionClass { AgsTaskClass task; }; GType ags_add_region_to_selection_get_type(); AgsAddRegionToSelection* ags_add_region_to_selection_new(AgsNotation *notation, guint x0, guint y0, guint x1, guint y1, gboolean replace_current_selection); #endif /*__AGS_ADD_REGION_TO_SELECTION_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_scroll_on_play.c0000644000175000017500000003073312626272146020330 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void ags_scroll_on_play_class_init(AgsScrollOnPlayClass *scroll_on_play); void ags_scroll_on_play_connectable_interface_init(AgsConnectableInterface *connectable); void ags_scroll_on_play_init(AgsScrollOnPlay *scroll_on_play); void ags_scroll_on_play_connect(AgsConnectable *connectable); void ags_scroll_on_play_disconnect(AgsConnectable *connectable); void ags_scroll_on_play_finalize(GObject *gobject); void ags_scroll_on_play_launch(AgsTask *task); /** * SECTION:ags_scroll_on_play * @short_description: scrolls the editor * @title: AgsScrollOnPlay * @section_id: * @include: ags/audio/task/ags_scroll_on_play.h * * The #AgsScrollOnPlay task scrolls the specified #AgsEditor. */ static gpointer ags_scroll_on_play_parent_class = NULL; static AgsConnectableInterface *ags_scroll_on_play_parent_connectable_interface; GType ags_scroll_on_play_get_type() { static GType ags_type_scroll_on_play = 0; if(!ags_type_scroll_on_play){ static const GTypeInfo ags_scroll_on_play_info = { sizeof (AgsScrollOnPlayClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_scroll_on_play_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsScrollOnPlay), 0, /* n_preallocs */ (GInstanceInitFunc) ags_scroll_on_play_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_scroll_on_play_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_scroll_on_play = g_type_register_static(AGS_TYPE_TASK, "AgsScrollOnPlay\0", &ags_scroll_on_play_info, 0); g_type_add_interface_static(ags_type_scroll_on_play, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_scroll_on_play); } void ags_scroll_on_play_class_init(AgsScrollOnPlayClass *scroll_on_play) { GObjectClass *gobject; AgsTaskClass *task; ags_scroll_on_play_parent_class = g_type_class_peek_parent(scroll_on_play); /* gobject */ gobject = (GObjectClass *) scroll_on_play; gobject->finalize = ags_scroll_on_play_finalize; /* task */ task = (AgsTaskClass *) scroll_on_play; task->launch = ags_scroll_on_play_launch; } void ags_scroll_on_play_connectable_interface_init(AgsConnectableInterface *connectable) { ags_scroll_on_play_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_scroll_on_play_connect; connectable->disconnect = ags_scroll_on_play_disconnect; } void ags_scroll_on_play_init(AgsScrollOnPlay *scroll_on_play) { scroll_on_play->editor = NULL; } void ags_scroll_on_play_connect(AgsConnectable *connectable) { ags_scroll_on_play_parent_connectable_interface->connect(connectable); /* empty */ } void ags_scroll_on_play_disconnect(AgsConnectable *connectable) { ags_scroll_on_play_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_scroll_on_play_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_scroll_on_play_parent_class)->finalize(gobject); /* empty */ } void ags_scroll_on_play_launch(AgsTask *task) { AgsWindow *window; AgsMachine *machine; AgsEditor *editor; AgsCountBeatsAudio *count_beats_audio; AgsCountBeatsAudioRun *count_beats_audio_run; AgsScrollOnPlay *scroll_on_play; cairo_t *cr; GList *editor_child, *recall; gdouble tact_factor; gdouble position, value; guint control_width, width; scroll_on_play = AGS_SCROLL_ON_PLAY(task); editor = AGS_EDITOR(scroll_on_play->editor); window = (AgsWindow *) gtk_widget_get_toplevel(GTK_WIDGET(editor)); editor_child = editor->editor_child; tact_factor = exp2(6.0 - (double) gtk_combo_box_get_active((GtkComboBox *) editor->toolbar->zoom)); while(editor_child != NULL){ machine = AGS_EDITOR_CHILD(editor_child->data)->machine; if(machine == NULL){ editor_child = editor_child->next; continue; } recall = machine->audio->play; while((recall = ags_recall_find_type(recall, AGS_TYPE_COUNT_BEATS_AUDIO_RUN)) != NULL){ if(AGS_RECALL(recall->data)->recall_id != NULL && (AGS_RECALL_ID_NOTATION & (AGS_RECALL(recall->data)->recall_id->flags)) != 0){ break; } recall = recall->next; } if(recall == NULL){ editor_child = editor_child->next; continue; } count_beats_audio_run = AGS_COUNT_BEATS_AUDIO_RUN(recall->data); count_beats_audio = AGS_RECALL_AUDIO_RUN(count_beats_audio_run)->recall_audio; if(AGS_IS_NOTE_EDIT(AGS_EDITOR_CHILD(editor_child->data)->edit_widget)){ AgsNoteEdit *note_edit; note_edit = AGS_NOTE_EDIT(AGS_EDITOR_CHILD(editor_child->data)->edit_widget); width = GTK_WIDGET(note_edit->drawing_area)->allocation.width; control_width = note_edit->control_unit.control_width; position = count_beats_audio_run->notation_counter * note_edit->control_unit.control_width; /* scroll */ note_edit->flags |= AGS_NOTE_EDIT_RESETING_HORIZONTALLY; if(position - control_width > 0){ value = (position - control_width); }else{ value = 0.0; } if(position - control_width > 0){ gtk_range_set_value(GTK_RANGE(note_edit->hscrollbar), value); gtk_adjustment_set_value(note_edit->ruler->adjustment, (value) / note_edit->control_current.control_width); gtk_widget_queue_draw((GtkWidget *) note_edit->ruler); } /* */ if(position - control_width > 0){ note_edit->control_current.x0 = ((guint) round((double) value)) % note_edit->control_current.control_width; if(note_edit->control_current.x0 != 0){ note_edit->control_current.x0 = note_edit->control_current.control_width - note_edit->control_current.x0; } note_edit->control_current.x1 = (note_edit->width - note_edit->control_current.x0) % note_edit->control_current.control_width; note_edit->control_current.nth_x = (guint) ceil((double)(value) / (double)(note_edit->control_current.control_width)); note_edit->control_unit.x0 = ((guint)round((double) value)) % note_edit->control_unit.control_width; if(note_edit->control_unit.x0 != 0){ note_edit->control_unit.x0 = note_edit->control_unit.control_width - note_edit->control_unit.x0; } note_edit->control_unit.x1 = (note_edit->width - note_edit->control_unit.x0) % note_edit->control_unit.control_width; note_edit->control_unit.nth_x = (guint) ceil(round((double) value) / (double) (note_edit->control_unit.control_width)); note_edit->control_unit.stop_x = note_edit->control_unit.nth_x + (note_edit->width - note_edit->control_unit.x0 - note_edit->control_unit.x1) / note_edit->control_unit.control_width; } note_edit->flags &= (~AGS_NOTE_EDIT_RESETING_HORIZONTALLY); /* */ if(GTK_WIDGET_VISIBLE(AGS_EDITOR_CHILD(editor_child->data)->edit_widget)){ cr = gdk_cairo_create(GTK_WIDGET(note_edit->drawing_area)->window); cairo_surface_flush(cairo_get_target(cr)); cairo_push_group(cr); ags_note_edit_draw_segment(AGS_EDITOR_CHILD(editor_child->data)->edit_widget, cr); ags_note_edit_draw_notation(AGS_EDITOR_CHILD(editor_child->data)->edit_widget, cr); cairo_pop_group_to_source(cr); cairo_paint(cr); /* draw fader */ cairo_push_group(cr); cr = gdk_cairo_create(GTK_WIDGET(note_edit->drawing_area)->window); ags_note_edit_draw_scroll(note_edit, cr, position); cairo_pop_group_to_source(cr); cairo_paint(cr); cairo_surface_mark_dirty(cairo_get_target(cr)); cairo_destroy(cr); } }else if(AGS_IS_PATTERN_EDIT(AGS_EDITOR_CHILD(editor_child->data)->edit_widget)){ AgsPatternEdit *pattern_edit; pattern_edit = AGS_PATTERN_EDIT(AGS_EDITOR_CHILD(editor_child->data)->edit_widget); position = (count_beats_audio_run->notation_counter) * (pattern_edit->control_unit.control_width); width = GTK_WIDGET(pattern_edit->drawing_area)->allocation.width; control_width = pattern_edit->control_unit.control_width; /* scroll */ pattern_edit->flags |= AGS_PATTERN_EDIT_RESETING_HORIZONTALLY; if(position - control_width > 0){ value = (position - control_width); }else{ value = 0.0; } if(position - control_width > 0){ gtk_range_set_value(GTK_RANGE(pattern_edit->hscrollbar), value); gtk_adjustment_set_value(pattern_edit->ruler->adjustment, (value) / pattern_edit->control_current.control_width); gtk_widget_queue_draw((GtkWidget *) pattern_edit->ruler); } /* */ if(position - control_width > 0){ pattern_edit->control_current.x0 = ((guint) round((double) value)) % pattern_edit->control_current.control_width; if(pattern_edit->control_current.x0 != 0){ pattern_edit->control_current.x0 = pattern_edit->control_current.control_width - pattern_edit->control_current.x0; } pattern_edit->control_current.x1 = (pattern_edit->width - pattern_edit->control_current.x0) % pattern_edit->control_current.control_width; pattern_edit->control_current.nth_x = (guint) ceil((double)(value) / (double)(pattern_edit->control_current.control_width)); pattern_edit->control_unit.x0 = ((guint)round((double) value)) % pattern_edit->control_unit.control_width; if(pattern_edit->control_unit.x0 != 0){ pattern_edit->control_unit.x0 = pattern_edit->control_unit.control_width - pattern_edit->control_unit.x0; } pattern_edit->control_unit.x1 = (pattern_edit->width - pattern_edit->control_unit.x0) % pattern_edit->control_unit.control_width; pattern_edit->control_unit.nth_x = (guint) ceil(round((double) value) / (double) (pattern_edit->control_unit.control_width)); pattern_edit->control_unit.stop_x = pattern_edit->control_unit.nth_x + (pattern_edit->width - pattern_edit->control_unit.x0 - pattern_edit->control_unit.x1) / pattern_edit->control_unit.control_width; } pattern_edit->flags &= (~AGS_PATTERN_EDIT_RESETING_HORIZONTALLY); /* */ if(GTK_WIDGET_VISIBLE(AGS_EDITOR_CHILD(editor_child->data)->edit_widget)){ cr = gdk_cairo_create(GTK_WIDGET(pattern_edit->drawing_area)->window); cairo_surface_flush(cairo_get_target(cr)); cairo_push_group(cr); ags_pattern_edit_draw_segment(AGS_EDITOR_CHILD(editor_child->data)->edit_widget, cr); ags_pattern_edit_draw_notation(AGS_EDITOR_CHILD(editor_child->data)->edit_widget, cr); cairo_pop_group_to_source(cr); cairo_paint(cr); /* draw fader */ cairo_push_group(cr); cr = gdk_cairo_create(GTK_WIDGET(pattern_edit->drawing_area)->window); ags_pattern_edit_draw_scroll(pattern_edit, cr, position); cairo_pop_group_to_source(cr); cairo_paint(cr); cairo_surface_mark_dirty(cairo_get_target(cr)); cairo_destroy(cr); } } editor_child = editor_child->next; } } /** * ags_scroll_on_play_new: * @editor: the #AgsEditor to scroll * @step: the amount to increment in pixel per control width * * Creates an #AgsScrollOnPlay. * * Returns: an new #AgsScrollOnPlay. * * Since: 0.4 */ AgsScrollOnPlay* ags_scroll_on_play_new(GtkWidget *editor, gdouble step) { AgsScrollOnPlay *scroll_on_play; scroll_on_play = (AgsScrollOnPlay *) g_object_new(AGS_TYPE_SCROLL_ON_PLAY, NULL); scroll_on_play->editor = editor; scroll_on_play->step = step; return(scroll_on_play); } gsequencer-0.6.37/src/ags/audio/task/ags_set_devout_play_flags.c0000644000175000017500000001236512626272146021674 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_set_devout_play_flags_class_init(AgsSetDevoutPlayFlagsClass *set_devout_play_flags); void ags_set_devout_play_flags_connectable_interface_init(AgsConnectableInterface *connectable); void ags_set_devout_play_flags_init(AgsSetDevoutPlayFlags *set_devout_play_flags); void ags_set_devout_play_flags_connect(AgsConnectable *connectable); void ags_set_devout_play_flags_disconnect(AgsConnectable *connectable); void ags_set_devout_play_flags_finalize(GObject *gobject); void ags_set_devout_play_flags_launch(AgsTask *task); /** * SECTION:ags_set_devout_play_flags * @short_description: modifies devout play flags * @title: AgsSetAudioChannels * @section_id: * @include: ags/audio/task/ags_set_devout_play_flags.h * * The #AgsSetAudioChannels task modifies devout play flags of #AgsDevout. */ static gpointer ags_set_devout_play_flags_parent_class = NULL; static AgsConnectableInterface *ags_set_devout_play_flags_parent_connectable_interface; GType ags_set_devout_play_flags_get_type() { static GType ags_type_set_devout_play_flags = 0; if(!ags_type_set_devout_play_flags){ static const GTypeInfo ags_set_devout_play_flags_info = { sizeof (AgsSetDevoutPlayFlagsClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_set_devout_play_flags_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsSetDevoutPlayFlags), 0, /* n_preallocs */ (GInstanceInitFunc) ags_set_devout_play_flags_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_set_devout_play_flags_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_set_devout_play_flags = g_type_register_static(AGS_TYPE_TASK, "AgsSetDevoutPlayFlags\0", &ags_set_devout_play_flags_info, 0); g_type_add_interface_static(ags_type_set_devout_play_flags, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_set_devout_play_flags); } void ags_set_devout_play_flags_class_init(AgsSetDevoutPlayFlagsClass *set_devout_play_flags) { GObjectClass *gobject; AgsTaskClass *task; ags_set_devout_play_flags_parent_class = g_type_class_peek_parent(set_devout_play_flags); /* gobject */ gobject = (GObjectClass *) set_devout_play_flags; gobject->finalize = ags_set_devout_play_flags_finalize; /* task */ task = (AgsTaskClass *) set_devout_play_flags; task->launch = ags_set_devout_play_flags_launch; } void ags_set_devout_play_flags_connectable_interface_init(AgsConnectableInterface *connectable) { ags_set_devout_play_flags_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_set_devout_play_flags_connect; connectable->disconnect = ags_set_devout_play_flags_disconnect; } void ags_set_devout_play_flags_init(AgsSetDevoutPlayFlags *set_devout_play_flags) { set_devout_play_flags->devout_play = NULL; set_devout_play_flags->devout_play_flags = 0; } void ags_set_devout_play_flags_connect(AgsConnectable *connectable) { ags_set_devout_play_flags_parent_connectable_interface->connect(connectable); /* empty */ } void ags_set_devout_play_flags_disconnect(AgsConnectable *connectable) { ags_set_devout_play_flags_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_set_devout_play_flags_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_set_devout_play_flags_parent_class)->finalize(gobject); /* empty */ } void ags_set_devout_play_flags_launch(AgsTask *task) { AgsSetDevoutPlayFlags *set_devout_play_flags; set_devout_play_flags = AGS_SET_DEVOUT_PLAY_FLAGS(task); /* append to AgsDevout */ set_devout_play_flags->devout_play->flags |= (set_devout_play_flags->devout_play_flags); } /** * ags_set_devout_play_flags_new: * @devout_play: the #AgsDevoutPlay-struct * @flags: the new devout play flags * * Creates an #AgsSetAudioChannels. * * Returns: an new #AgsSetAudioChannels. * * Since: 0.4 */ AgsSetDevoutPlayFlags* ags_set_devout_play_flags_new(AgsDevoutPlay *devout_play, guint flags) { AgsSetDevoutPlayFlags *set_devout_play_flags; set_devout_play_flags = (AgsSetDevoutPlayFlags *) g_object_new(AGS_TYPE_SET_DEVOUT_PLAY_FLAGS, NULL); set_devout_play_flags->devout_play = devout_play; set_devout_play_flags->devout_play_flags = flags; return(set_devout_play_flags); } gsequencer-0.6.37/src/ags/audio/task/ags_seek_devout.c0000644000175000017500000001302612626272146017622 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include void ags_seek_devout_class_init(AgsSeekDevoutClass *seek_devout); void ags_seek_devout_connectable_interface_init(AgsConnectableInterface *connectable); void ags_seek_devout_init(AgsSeekDevout *seek_devout); void ags_seek_devout_connect(AgsConnectable *connectable); void ags_seek_devout_disconnect(AgsConnectable *connectable); void ags_seek_devout_finalize(GObject *gobject); void ags_seek_devout_launch(AgsTask *task); /** * SECTION:ags_seek_devout * @short_description: seek devout object to devout loop * @title: AgsSeekDevout * @section_id: * @include: ags/devout/task/ags_seek_devout.h * * The #AgsSeekDevout task seeks #AgsDevout to #AgsDevoutLoop. */ static gpointer ags_seek_devout_parent_class = NULL; static AgsConnectableInterface *ags_seek_devout_parent_connectable_interface; GType ags_seek_devout_get_type() { static GType ags_type_seek_devout = 0; if(!ags_type_seek_devout){ static const GTypeInfo ags_seek_devout_info = { sizeof (AgsSeekDevoutClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_seek_devout_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsSeekDevout), 0, /* n_preallocs */ (GInstanceInitFunc) ags_seek_devout_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_seek_devout_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_seek_devout = g_type_register_static(AGS_TYPE_TASK, "AgsSeekDevout\0", &ags_seek_devout_info, 0); g_type_add_interface_static(ags_type_seek_devout, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_seek_devout); } void ags_seek_devout_class_init(AgsSeekDevoutClass *seek_devout) { GObjectClass *gobject; AgsTaskClass *task; ags_seek_devout_parent_class = g_type_class_peek_parent(seek_devout); /* gobject */ gobject = (GObjectClass *) seek_devout; gobject->finalize = ags_seek_devout_finalize; /* task */ task = (AgsTaskClass *) seek_devout; task->launch = ags_seek_devout_launch; } void ags_seek_devout_connectable_interface_init(AgsConnectableInterface *connectable) { ags_seek_devout_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_seek_devout_connect; connectable->disconnect = ags_seek_devout_disconnect; } void ags_seek_devout_init(AgsSeekDevout *seek_devout) { seek_devout->devout = NULL; seek_devout->steps = 0; seek_devout->move_forward = FALSE; } void ags_seek_devout_connect(AgsConnectable *connectable) { ags_seek_devout_parent_connectable_interface->connect(connectable); /* empty */ } void ags_seek_devout_disconnect(AgsConnectable *connectable) { ags_seek_devout_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_seek_devout_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_seek_devout_parent_class)->finalize(gobject); /* empty */ } void ags_seek_devout_launch(AgsTask *task) { AgsSeekDevout *seek_devout; GList *audio, *recall; seek_devout = AGS_SEEK_DEVOUT(task); audio = AGS_DEVOUT(seek_devout->devout)->audio; while(audio != NULL){ recall = AGS_AUDIO(audio->data)->play; while(recall != NULL){ if(AGS_IS_SEEKABLE(recall->data)){ ags_seekable_seek(AGS_SEEKABLE(recall->data), seek_devout->steps, seek_devout->move_forward); } recall = recall->next; } audio = audio->next; } if(seek_devout->move_forward){ AGS_DEVOUT(seek_devout->devout)->tact_counter += (seek_devout->steps / AGS_DEVOUT(seek_devout->devout)->delay[AGS_DEVOUT(seek_devout->devout)->tic_counter]); }else{ if( AGS_DEVOUT(seek_devout->devout)->tact_counter > (seek_devout->steps / AGS_DEVOUT(seek_devout->devout)->delay[AGS_DEVOUT(seek_devout->devout)->tic_counter])){ AGS_DEVOUT(seek_devout->devout)->tact_counter -= (seek_devout->steps / AGS_DEVOUT(seek_devout->devout)->delay[AGS_DEVOUT(seek_devout->devout)->tic_counter]); }else{ AGS_DEVOUT(seek_devout->devout)->tact_counter = 0.0; } } } /** * ags_seek_devout_new: * @devout: the #AgsDevout to seek * @steps: * @move_forward: * * Creates an #AgsSeekDevout. * * Returns: an new #AgsSeekDevout. * * Since: 0.4 */ AgsSeekDevout* ags_seek_devout_new(GObject *devout, guint steps, gboolean move_forward) { AgsSeekDevout *seek_devout; seek_devout = (AgsSeekDevout *) g_object_new(AGS_TYPE_SEEK_DEVOUT, NULL); seek_devout->devout = devout; seek_devout->steps = steps; seek_devout->move_forward = move_forward; return(seek_devout); } gsequencer-0.6.37/src/ags/audio/task/ags_export_output.c0000644000175000017500000001536412626272146020255 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include void ags_export_output_class_init(AgsExportOutputClass *export_output); void ags_export_output_connectable_interface_init(AgsConnectableInterface *connectable); void ags_export_output_init(AgsExportOutput *export_output); void ags_export_output_connect(AgsConnectable *connectable); void ags_export_output_disconnect(AgsConnectable *connectable); void ags_export_output_finalize(GObject *gobject); void ags_export_output_launch(AgsTask *task); /** * SECTION:ags_export_output * @short_description: export output object * @title: AgsExportOutput * @section_id: * @include: ags/audio/task/ags_export_output.h * * The #AgsExportOutput task exports #AgsDevout to file. */ static gpointer ags_export_output_parent_class = NULL; static AgsConnectableInterface *ags_export_output_parent_connectable_interface; GType ags_export_output_get_type() { static GType ags_type_export_output = 0; if(!ags_type_export_output){ static const GTypeInfo ags_export_output_info = { sizeof (AgsExportOutputClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_export_output_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsExportOutput), 0, /* n_preallocs */ (GInstanceInitFunc) ags_export_output_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_export_output_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_export_output = g_type_register_static(AGS_TYPE_TASK, "AgsExportOutput\0", &ags_export_output_info, 0); g_type_add_interface_static(ags_type_export_output, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_export_output); } void ags_export_output_class_init(AgsExportOutputClass *export_output) { GObjectClass *gobject; AgsTaskClass *task; ags_export_output_parent_class = g_type_class_peek_parent(export_output); /* gobject */ gobject = (GObjectClass *) export_output; gobject->finalize = ags_export_output_finalize; /* task */ task = (AgsTaskClass *) export_output; task->launch = ags_export_output_launch; } void ags_export_output_connectable_interface_init(AgsConnectableInterface *connectable) { ags_export_output_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_export_output_connect; connectable->disconnect = ags_export_output_disconnect; } void ags_export_output_init(AgsExportOutput *export_output) { export_output->export_thread = NULL; export_output->devout = NULL; export_output->filename = NULL; export_output->tic = 0; export_output->live_performance = TRUE; } void ags_export_output_connect(AgsConnectable *connectable) { ags_export_output_parent_connectable_interface->connect(connectable); /* empty */ } void ags_export_output_disconnect(AgsConnectable *connectable) { ags_export_output_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_export_output_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_export_output_parent_class)->finalize(gobject); /* empty */ } void ags_export_output_launch(AgsTask *task) { AgsExportOutput *export_output; AgsExportThread *export_thread; AgsDevout *devout; AgsAudioFile *audio_file; gchar *filename; guint tic; guint val; export_output = AGS_EXPORT_OUTPUT(task); devout = export_output->devout; export_thread = export_output->export_thread; filename = export_output->filename; tic = export_output->tic; /* open read/write audio file */ audio_file = ags_audio_file_new(filename, devout, 0, devout->dsp_channels); audio_file->samplerate = (int) devout->frequency; audio_file->channels = devout->dsp_channels; ags_audio_file_rw_open(audio_file, TRUE); g_message("export output\0"); /* start export thread */ export_thread->tic = tic; g_object_set(G_OBJECT(export_thread), "devout\0", devout, "audio-file\0", audio_file, NULL); ags_thread_start((AgsThread *) export_thread); if((AGS_THREAD_SINGLE_LOOP & (AGS_THREAD(export_thread)->flags)) == 0){ /* wait thread */ pthread_mutex_lock(AGS_THREAD(export_thread)->start_mutex); g_atomic_int_set(&(AGS_THREAD(export_thread)->start_wait), TRUE); if(g_atomic_int_get(&(AGS_THREAD(export_thread)->start_wait)) == TRUE && g_atomic_int_get(&(AGS_THREAD(export_thread)->start_done)) == FALSE){ while(g_atomic_int_get(&(AGS_THREAD(export_thread)->start_wait)) == TRUE && g_atomic_int_get(&(AGS_THREAD(export_thread)->start_done)) == FALSE){ pthread_cond_wait(AGS_THREAD(export_thread)->start_cond, AGS_THREAD(export_thread)->start_mutex); } } pthread_mutex_unlock(AGS_THREAD(export_thread)->start_mutex); }else{ g_atomic_int_or(&(AGS_THREAD(export_thread)->flags), AGS_THREAD_RUNNING); } } /** * ags_export_output_new: * @export_thread: the #AgsExportThread to start * @devout: the #AgsDevout to export * @filename: the filename to save * @tic: stream duration in tact * @live_performance: if %TRUE export is done during real-time * * Creates an #AgsExportOutput. * * Returns: an new #AgsExportOutput. * * Since: 0.4 */ AgsExportOutput* ags_export_output_new(AgsExportThread *export_thread, AgsDevout *devout, gchar *filename, guint tic, gboolean live_performance) { AgsExportOutput *export_output; export_output = (AgsExportOutput *) g_object_new(AGS_TYPE_EXPORT_OUTPUT, NULL); export_output->export_thread = export_thread; export_output->devout = devout; export_output->filename = filename; export_output->tic = tic; export_output->live_performance = live_performance; return(export_output); } gsequencer-0.6.37/src/ags/audio/task/ags_blink_cell_pattern_cursor.h0000644000175000017500000000447412626272146022551 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_BLINK_CELL_PATTERN_CURSOR_H__ #define __AGS_BLINK_CELL_PATTERN_CURSOR_H__ #include #include #include #define AGS_TYPE_BLINK_CELL_PATTERN_CURSOR (ags_blink_cell_pattern_cursor_get_type()) #define AGS_BLINK_CELL_PATTERN_CURSOR(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_BLINK_CELL_PATTERN_CURSOR, AgsBlinkCellPatternCursor)) #define AGS_BLINK_CELL_PATTERN_CURSOR_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_BLINK_CELL_PATTERN_CURSOR, AgsBlinkCellPatternCursorClass)) #define AGS_IS_BLINK_CELL_PATTERN_CURSOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_BLINK_CELL_PATTERN_CURSOR)) #define AGS_IS_BLINK_CELL_PATTERN_CURSOR_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_BLINK_CELL_PATTERN_CURSOR)) #define AGS_BLINK_CELL_PATTERN_CURSOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_BLINK_CELL_PATTERN_CURSOR, AgsBlinkCellPatternCursorClass)) typedef struct _AgsBlinkCellPatternCursor AgsBlinkCellPatternCursor; typedef struct _AgsBlinkCellPatternCursorClass AgsBlinkCellPatternCursorClass; struct _AgsBlinkCellPatternCursor { AgsTask task; AgsCellPattern *cell_pattern; gboolean highlight_cursor; }; struct _AgsBlinkCellPatternCursorClass { AgsTaskClass task; }; GType ags_blink_cell_pattern_cursor_get_type(); AgsBlinkCellPatternCursor* ags_blink_cell_pattern_cursor_new(AgsCellPattern *cell_pattern, gboolean highlight_cursor); #endif /*__AGS_BLINK_CELL_PATTERN_CURSOR_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_remove_point_from_selection.h0000644000175000017500000000453312626272146023113 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_REMOVE_POINT_FROM_SELECTION_H__ #define __AGS_REMOVE_POINT_FROM_SELECTION_H__ #include #include #include #include #define AGS_TYPE_REMOVE_POINT_FROM_SELECTION (ags_remove_point_from_selection_get_type()) #define AGS_REMOVE_POINT_FROM_SELECTION(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_REMOVE_POINT_FROM_SELECTION, AgsRemovePointFromSelection)) #define AGS_REMOVE_POINT_FROM_SELECTION_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_REMOVE_POINT_FROM_SELECTION, AgsRemovePointFromSelectionClass)) #define AGS_IS_REMOVE_POINT_FROM_SELECTION(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_REMOVE_POINT_FROM_SELECTION)) #define AGS_IS_REMOVE_POINT_FROM_SELECTION_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_REMOVE_POINT_FROM_SELECTION)) #define AGS_REMOVE_POINT_FROM_SELECTION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_REMOVE_POINT_FROM_SELECTION, AgsRemovePointFromSelectionClass)) typedef struct _AgsRemovePointFromSelection AgsRemovePointFromSelection; typedef struct _AgsRemovePointFromSelectionClass AgsRemovePointFromSelectionClass; struct _AgsRemovePointFromSelection { AgsTask task; AgsNotation *notation; guint x; guint y; }; struct _AgsRemovePointFromSelectionClass { AgsTaskClass task; }; GType ags_remove_point_from_selection_get_type(); AgsRemovePointFromSelection* ags_remove_point_from_selection_new(AgsNotation *notation, guint x, guint y); #endif /*__AGS_REMOVE_POINT_FROM_SELECTION_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_add_point_to_selection.c0000644000175000017500000001340412626272146022015 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_add_point_to_selection_class_init(AgsAddPointToSelectionClass *add_point_to_selection); void ags_add_point_to_selection_connectable_interface_init(AgsConnectableInterface *connectable); void ags_add_point_to_selection_init(AgsAddPointToSelection *add_point_to_selection); void ags_add_point_to_selection_connect(AgsConnectable *connectable); void ags_add_point_to_selection_disconnect(AgsConnectable *connectable); void ags_add_point_to_selection_finalize(GObject *gobject); void ags_add_point_to_selection_launch(AgsTask *task); /** * SECTION:ags_add_point_to_selection * @short_description: add point to notation selection * @title: AgsAddPointToSelection * @section_id: * @include: ags/audio/task/ags_add_point_to_selection.h * * The #AgsAddPointToSelection task adds the specified #AgsNote to selection of #AgsNotation. */ static gpointer ags_add_point_to_selection_parent_class = NULL; static AgsConnectableInterface *ags_add_point_to_selection_parent_connectable_interface; GType ags_add_point_to_selection_get_type() { static GType ags_type_add_point_to_selection = 0; if(!ags_type_add_point_to_selection){ static const GTypeInfo ags_add_point_to_selection_info = { sizeof (AgsAddPointToSelectionClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_add_point_to_selection_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsAddPointToSelection), 0, /* n_preallocs */ (GInstanceInitFunc) ags_add_point_to_selection_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_add_point_to_selection_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_add_point_to_selection = g_type_register_static(AGS_TYPE_TASK, "AgsAddPointToSelection\0", &ags_add_point_to_selection_info, 0); g_type_add_interface_static(ags_type_add_point_to_selection, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_add_point_to_selection); } void ags_add_point_to_selection_class_init(AgsAddPointToSelectionClass *add_point_to_selection) { GObjectClass *gobject; AgsTaskClass *task; ags_add_point_to_selection_parent_class = g_type_class_peek_parent(add_point_to_selection); /* gobject */ gobject = (GObjectClass *) add_point_to_selection; gobject->finalize = ags_add_point_to_selection_finalize; /* task */ task = (AgsTaskClass *) add_point_to_selection; task->launch = ags_add_point_to_selection_launch; } void ags_add_point_to_selection_connectable_interface_init(AgsConnectableInterface *connectable) { ags_add_point_to_selection_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_add_point_to_selection_connect; connectable->disconnect = ags_add_point_to_selection_disconnect; } void ags_add_point_to_selection_init(AgsAddPointToSelection *add_point_to_selection) { add_point_to_selection->notation = NULL; add_point_to_selection->x = 0; add_point_to_selection->y = 0; add_point_to_selection->replace_current_selection = TRUE; } void ags_add_point_to_selection_connect(AgsConnectable *connectable) { ags_add_point_to_selection_parent_connectable_interface->connect(connectable); /* empty */ } void ags_add_point_to_selection_disconnect(AgsConnectable *connectable) { ags_add_point_to_selection_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_add_point_to_selection_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_add_point_to_selection_parent_class)->finalize(gobject); /* empty */ } void ags_add_point_to_selection_launch(AgsTask *task) { AgsAddPointToSelection *add_point_to_selection; add_point_to_selection = AGS_ADD_POINT_TO_SELECTION(task); /* add note */ ags_notation_add_point_to_selection(add_point_to_selection->notation, add_point_to_selection->x, add_point_to_selection->y, add_point_to_selection->replace_current_selection); } /** * ags_add_point_to_selection_new: * @notation: the #AgsNotation providing the selection * @x: x coordinate * @y: y coordinate * @replace_current_selection: if %TRUE new selection is created, otherwise added to current * * Creates an #AgsAddPointToSelection. * * Returns: an new #AgsAddPointToSelection. * * Since: 0.4 */ AgsAddPointToSelection* ags_add_point_to_selection_new(AgsNotation *notation, guint x, guint y, gboolean replace_current_selection) { AgsAddPointToSelection *add_point_to_selection; add_point_to_selection = (AgsAddPointToSelection *) g_object_new(AGS_TYPE_ADD_POINT_TO_SELECTION, NULL); add_point_to_selection->notation = notation; add_point_to_selection->x = x; add_point_to_selection->y = y; add_point_to_selection->replace_current_selection = replace_current_selection; return(add_point_to_selection); } gsequencer-0.6.37/src/ags/audio/task/ags_cancel_recall.c0000644000175000017500000001144312626272146020055 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_cancel_recall_class_init(AgsCancelRecallClass *cancel_recall); void ags_cancel_recall_connectable_interface_init(AgsConnectableInterface *connectable); void ags_cancel_recall_init(AgsCancelRecall *cancel_recall); void ags_cancel_recall_connect(AgsConnectable *connectable); void ags_cancel_recall_disconnect(AgsConnectable *connectable); void ags_cancel_recall_finalize(GObject *gobject); void ags_cancel_recall_launch(AgsTask *task); /** * SECTION:ags_cancel_recall * @short_description: cancel recall object * @title: AgsCancelRecall * @section_id: * @include: ags/audio/task/ags_cancel_recall.h * * The #AgsCancelRecall task cancels #AgsRecall playback. */ static gpointer ags_cancel_recall_parent_class = NULL; static AgsConnectableInterface *ags_cancel_recall_parent_connectable_interface; GType ags_cancel_recall_get_type() { static GType ags_type_cancel_recall = 0; if(!ags_type_cancel_recall){ static const GTypeInfo ags_cancel_recall_info = { sizeof (AgsCancelRecallClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_cancel_recall_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsCancelRecall), 0, /* n_preallocs */ (GInstanceInitFunc) ags_cancel_recall_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_cancel_recall_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_cancel_recall = g_type_register_static(AGS_TYPE_TASK, "AgsCancelRecall\0", &ags_cancel_recall_info, 0); g_type_add_interface_static(ags_type_cancel_recall, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_cancel_recall); } void ags_cancel_recall_class_init(AgsCancelRecallClass *cancel_recall) { GObjectClass *gobject; AgsTaskClass *task; ags_cancel_recall_parent_class = g_type_class_peek_parent(cancel_recall); /* gobject */ gobject = (GObjectClass *) cancel_recall; gobject->finalize = ags_cancel_recall_finalize; /* task */ task = (AgsTaskClass *) cancel_recall; task->launch = ags_cancel_recall_launch; } void ags_cancel_recall_connectable_interface_init(AgsConnectableInterface *connectable) { ags_cancel_recall_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_cancel_recall_connect; connectable->disconnect = ags_cancel_recall_disconnect; } void ags_cancel_recall_init(AgsCancelRecall *cancel_recall) { cancel_recall->recall = NULL; cancel_recall->play = NULL; } void ags_cancel_recall_connect(AgsConnectable *connectable) { ags_cancel_recall_parent_connectable_interface->connect(connectable); /* empty */ } void ags_cancel_recall_disconnect(AgsConnectable *connectable) { ags_cancel_recall_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_cancel_recall_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_cancel_recall_parent_class)->finalize(gobject); /* empty */ } void ags_cancel_recall_launch(AgsTask *task) { AgsRecall *recall; AgsCancelRecall *cancel_recall; cancel_recall = AGS_CANCEL_RECALL(task); recall = cancel_recall->recall; recall->flags |= AGS_RECALL_REMOVE; /* cancel AgsRecall */ ags_recall_cancel(recall); /* set remove flag */ if(cancel_recall->play != NULL) cancel_recall->play->flags |= AGS_DEVOUT_PLAY_REMOVE; } /** * ags_cancel_recall_new: * @recall: the #AgsRecall to cancel * @play: the #AgsDevoutPlay-struct * * Creates an #AgsCancelRecall. * * Returns: an new #AgsCancelRecall. * * Since: 0.4 */ AgsCancelRecall* ags_cancel_recall_new(AgsRecall *recall, AgsDevoutPlay *play) { AgsCancelRecall *cancel_recall; cancel_recall = (AgsCancelRecall *) g_object_new(AGS_TYPE_CANCEL_RECALL, NULL); cancel_recall->recall = recall; cancel_recall->play = play; return(cancel_recall); } gsequencer-0.6.37/src/ags/audio/task/ags_change_indicator.c0000644000175000017500000001204512626272146020566 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_change_indicator_class_init(AgsChangeIndicatorClass *change_indicator); void ags_change_indicator_connectable_interface_init(AgsConnectableInterface *connectable); void ags_change_indicator_init(AgsChangeIndicator *change_indicator); void ags_change_indicator_connect(AgsConnectable *connectable); void ags_change_indicator_disconnect(AgsConnectable *connectable); void ags_change_indicator_finalize(GObject *gobject); void ags_change_indicator_launch(AgsTask *task); /** * SECTION:ags_change_indicator * @short_description: change indicator object * @title: AgsChangeIndicator * @section_id: * @include: ags/audio/task/ags_change_indicator.h * * The #AgsChangeIndicator task changes #AgsIndicator and the GUI is updated. */ static gpointer ags_change_indicator_parent_class = NULL; static AgsConnectableInterface *ags_change_indicator_parent_connectable_interface; GType ags_change_indicator_get_type() { static GType ags_type_change_indicator = 0; if(!ags_type_change_indicator){ static const GTypeInfo ags_change_indicator_info = { sizeof (AgsChangeIndicatorClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_change_indicator_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsChangeIndicator), 0, /* n_preallocs */ (GInstanceInitFunc) ags_change_indicator_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_change_indicator_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_change_indicator = g_type_register_static(AGS_TYPE_TASK, "AgsChangeIndicator\0", &ags_change_indicator_info, 0); g_type_add_interface_static(ags_type_change_indicator, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_change_indicator); } void ags_change_indicator_class_init(AgsChangeIndicatorClass *change_indicator) { GObjectClass *gobject; AgsTaskClass *task; ags_change_indicator_parent_class = g_type_class_peek_parent(change_indicator); /* GObject */ gobject = (GObjectClass *) change_indicator; gobject->finalize = ags_change_indicator_finalize; /* AgsTask */ task = (AgsTaskClass *) change_indicator; task->launch = ags_change_indicator_launch; } void ags_change_indicator_connectable_interface_init(AgsConnectableInterface *connectable) { ags_change_indicator_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_change_indicator_connect; connectable->disconnect = ags_change_indicator_disconnect; } void ags_change_indicator_init(AgsChangeIndicator *change_indicator) { change_indicator->indicator = NULL; change_indicator->value = 0.0; } void ags_change_indicator_connect(AgsConnectable *connectable) { ags_change_indicator_parent_connectable_interface->connect(connectable); /* empty */ } void ags_change_indicator_disconnect(AgsConnectable *connectable) { ags_change_indicator_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_change_indicator_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_change_indicator_parent_class)->finalize(gobject); /* empty */ } void ags_change_indicator_launch(AgsTask *task) { AgsChangeIndicator *change_indicator; GtkAdjustment *adjustment; change_indicator = AGS_CHANGE_INDICATOR(task); g_object_get(change_indicator->indicator, "adjustment\0", &adjustment, NULL); gtk_adjustment_set_value(adjustment, change_indicator->value); gtk_widget_queue_draw((GtkWidget *) change_indicator->indicator); } /** * ags_change_indicator_new: * @indicator: the #AgsIndicator to change * @value: the value to apply * * Creates an #AgsChangeIndicator. * * Returns: an new #AgsChangeIndicator. * * Since: 0.4 */ AgsChangeIndicator* ags_change_indicator_new(AgsIndicator *indicator, gdouble value) { AgsChangeIndicator *change_indicator; change_indicator = (AgsChangeIndicator *) g_object_new(AGS_TYPE_CHANGE_INDICATOR, NULL); change_indicator->indicator = indicator; change_indicator->value = value; return(change_indicator); } gsequencer-0.6.37/src/ags/audio/task/ags_link_channel.h0000644000175000017500000000373412626272146017744 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_LINK_CHANNEL_H__ #define __AGS_LINK_CHANNEL_H__ #include #include #include #include #define AGS_TYPE_LINK_CHANNEL (ags_link_channel_get_type()) #define AGS_LINK_CHANNEL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_LINK_CHANNEL, AgsLinkChannel)) #define AGS_LINK_CHANNEL_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_LINK_CHANNEL, AgsLinkChannelClass)) #define AGS_IS_LINK_CHANNEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_LINK_CHANNEL)) #define AGS_IS_LINK_CHANNEL_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_LINK_CHANNEL)) #define AGS_LINK_CHANNEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_LINK_CHANNEL, AgsLinkChannelClass)) typedef struct _AgsLinkChannel AgsLinkChannel; typedef struct _AgsLinkChannelClass AgsLinkChannelClass; struct _AgsLinkChannel { AgsTask task; AgsChannel *channel; AgsChannel *link; GError *error; }; struct _AgsLinkChannelClass { AgsTaskClass task; }; GType ags_link_channel_get_type(); AgsLinkChannel* ags_link_channel_new(AgsChannel *channel, AgsChannel *link); #endif /*__AGS_LINK_CHANNEL_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_add_recall_container.c0000644000175000017500000001244512626272146021425 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include void ags_add_recall_container_class_init(AgsAddRecallContainerClass *add_recall_container); void ags_add_recall_container_connectable_interface_init(AgsConnectableInterface *connectable); void ags_add_recall_container_init(AgsAddRecallContainer *add_recall_container); void ags_add_recall_container_connect(AgsConnectable *connectable); void ags_add_recall_container_disconnect(AgsConnectable *connectable); void ags_add_recall_container_finalize(GObject *gobject); void ags_add_recall_container_launch(AgsTask *task); /** * SECTION:ags_add_recall_container * @short_description: add recall object to context * @title: AgsAddRecallContainer * @section_id: * @include: ags/audio/task/ags_add_recall_container.h * * The #AgsAddRecallContainer task adds #AgsRecallContainer of audio. */ static gpointer ags_add_recall_container_parent_class = NULL; static AgsConnectableInterface *ags_add_recall_container_parent_connectable_interface; GType ags_add_recall_container_get_type() { static GType ags_type_add_recall_container = 0; if(!ags_type_add_recall_container){ static const GTypeInfo ags_add_recall_container_info = { sizeof (AgsAddRecallContainerClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_add_recall_container_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsAddRecallContainer), 0, /* n_preallocs */ (GInstanceInitFunc) ags_add_recall_container_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_add_recall_container_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_add_recall_container = g_type_register_static(AGS_TYPE_TASK, "AgsAddRecallContainer\0", &ags_add_recall_container_info, 0); g_type_add_interface_static(ags_type_add_recall_container, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_add_recall_container); } void ags_add_recall_container_class_init(AgsAddRecallContainerClass *add_recall_container) { GObjectClass *gobject; AgsTaskClass *task; ags_add_recall_container_parent_class = g_type_class_peek_parent(add_recall_container); /* GObjectClass */ gobject = (GObjectClass *) add_recall_container; gobject->finalize = ags_add_recall_container_finalize; /* AgsTaskClass */ task = (AgsTaskClass *) add_recall_container; task->launch = ags_add_recall_container_launch; } void ags_add_recall_container_connectable_interface_init(AgsConnectableInterface *connectable) { ags_add_recall_container_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_add_recall_container_connect; connectable->disconnect = ags_add_recall_container_disconnect; } void ags_add_recall_container_init(AgsAddRecallContainer *add_recall_container) { add_recall_container->audio = NULL; add_recall_container->recall_container = NULL; } void ags_add_recall_container_connect(AgsConnectable *connectable) { ags_add_recall_container_parent_connectable_interface->connect(connectable); /* empty */ } void ags_add_recall_container_disconnect(AgsConnectable *connectable) { ags_add_recall_container_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_add_recall_container_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_add_recall_container_parent_class)->finalize(gobject); /* empty */ } void ags_add_recall_container_launch(AgsTask *task) { AgsAddRecallContainer *add_recall_container; add_recall_container = AGS_ADD_RECALL_CONTAINER(task); ags_audio_add_recall_container(add_recall_container->audio, (GObject *) add_recall_container->recall_container); } /** * ags_add_recall_container_new: * @context: the #AgsAudio * @recall: the #AgsRecallContainer to add * * Creates an #AgsAddRecallContainer. * * Returns: an new #AgsAddRecallContainer. * * Since: 0.4 */ AgsAddRecallContainer* ags_add_recall_container_new(GObject *audio, AgsRecallContainer *recall_container) { AgsAddRecallContainer *add_recall_container; add_recall_container = (AgsAddRecallContainer *) g_object_new(AGS_TYPE_ADD_RECALL_CONTAINER, NULL); add_recall_container->audio = audio; add_recall_container->recall_container = recall_container; return(add_recall_container); } gsequencer-0.6.37/src/ags/audio/task/ags_change_indicator.h0000644000175000017500000000406312626272146020574 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_CHANGE_INDICATOR_H__ #define __AGS_CHANGE_INDICATOR_H__ #include #include #include #define AGS_TYPE_CHANGE_INDICATOR (ags_change_indicator_get_type()) #define AGS_CHANGE_INDICATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_CHANGE_INDICATOR, AgsChangeIndicator)) #define AGS_CHANGE_INDICATOR_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_CHANGE_INDICATOR, AgsChangeIndicatorClass)) #define AGS_IS_CHANGE_INDICATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_CHANGE_INDICATOR)) #define AGS_IS_CHANGE_INDICATOR_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_CHANGE_INDICATOR)) #define AGS_CHANGE_INDICATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_CHANGE_INDICATOR, AgsChangeIndicatorClass)) typedef struct _AgsChangeIndicator AgsChangeIndicator; typedef struct _AgsChangeIndicatorClass AgsChangeIndicatorClass; struct _AgsChangeIndicator { AgsTask task; AgsIndicator *indicator; gdouble value; }; struct _AgsChangeIndicatorClass { AgsTaskClass task; }; GType ags_change_indicator_get_type(); AgsChangeIndicator* ags_change_indicator_new(AgsIndicator *indicator, gdouble value); #endif /*__AGS_CHANGE_INDICATOR_H__*/ gsequencer-0.6.37/src/ags/audio/task/recall/0000755000175000017500000000000012633241335015621 500000000000000gsequencer-0.6.37/src/ags/audio/task/recall/ags_apply_bpm.h0000644000175000017500000000352012626272146020535 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_APPLY_BPM_H__ #define __AGS_APPLY_BPM_H__ #include #include #include #define AGS_TYPE_APPLY_BPM (ags_apply_bpm_get_type()) #define AGS_APPLY_BPM(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_APPLY_BPM, AgsApplyBpm)) #define AGS_APPLY_BPM_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_APPLY_BPM, AgsApplyBpmClass)) #define AGS_IS_APPLY_BPM(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_APPLY_BPM)) #define AGS_IS_APPLY_BPM_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_APPLY_BPM)) #define AGS_APPLY_BPM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_APPLY_BPM, AgsApplyBpmClass)) typedef struct _AgsApplyBpm AgsApplyBpm; typedef struct _AgsApplyBpmClass AgsApplyBpmClass; struct _AgsApplyBpm { AgsTask task; GObject *gobject; gdouble bpm; }; struct _AgsApplyBpmClass { AgsTaskClass task; }; GType ags_apply_bpm_get_type(); AgsApplyBpm* ags_apply_bpm_new(GObject *gobject, gdouble bpm); #endif /*__AGS_APPLY_BPM_H__*/ gsequencer-0.6.37/src/ags/audio/task/recall/ags_apply_sequencer_length.c0000644000175000017500000001770512626272146023317 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include void ags_apply_sequencer_length_class_init(AgsApplySequencerLengthClass *apply_sequencer_length); void ags_apply_sequencer_length_connectable_interface_init(AgsConnectableInterface *connectable); void ags_apply_sequencer_length_init(AgsApplySequencerLength *apply_sequencer_length); void ags_apply_sequencer_length_connect(AgsConnectable *connectable); void ags_apply_sequencer_length_disconnect(AgsConnectable *connectable); void ags_apply_sequencer_length_finalize(GObject *gobject); void ags_apply_sequencer_length_recall(AgsApplySequencerLength *apply_sequencer_length, AgsRecall *recall); void ags_apply_sequencer_length_channel(AgsApplySequencerLength *apply_sequencer_length, AgsChannel *channel); void ags_apply_sequencer_length_audio(AgsApplySequencerLength *apply_sequencer_length, AgsAudio *audio); void ags_apply_sequencer_length_launch(AgsTask *task); /** * SECTION:ags_apply_sequencer_length * @short_description: apply sequencer length to delay audio * @title: AgsApplySequencerLength * @section_id: * @include: ags/audio/task/recall/ags_apply_sequencer_length.h * * The #AgsApplySequencerLength task applys sequencer length to #AgsDelayAudio. */ static gpointer ags_apply_sequencer_length_parent_class = NULL; static AgsConnectableInterface *ags_apply_sequencer_length_parent_connectable_interface; GType ags_apply_sequencer_length_get_type() { static GType ags_type_apply_sequencer_length = 0; if(!ags_type_apply_sequencer_length){ static const GTypeInfo ags_apply_sequencer_length_info = { sizeof (AgsApplySequencerLengthClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_apply_sequencer_length_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsApplySequencerLength), 0, /* n_preallocs */ (GInstanceInitFunc) ags_apply_sequencer_length_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_apply_sequencer_length_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_apply_sequencer_length = g_type_register_static(AGS_TYPE_TASK, "AgsApplySequencerLength\0", &ags_apply_sequencer_length_info, 0); g_type_add_interface_static(ags_type_apply_sequencer_length, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_apply_sequencer_length); } void ags_apply_sequencer_length_class_init(AgsApplySequencerLengthClass *apply_sequencer_length) { GObjectClass *gobject; AgsTaskClass *task; ags_apply_sequencer_length_parent_class = g_type_class_peek_parent(apply_sequencer_length); /* GObjectClass */ gobject = (GObjectClass *) apply_sequencer_length; gobject->finalize = ags_apply_sequencer_length_finalize; /* AgsTaskClass */ task = (AgsTaskClass *) apply_sequencer_length; task->launch = ags_apply_sequencer_length_launch; } void ags_apply_sequencer_length_connectable_interface_init(AgsConnectableInterface *connectable) { ags_apply_sequencer_length_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_apply_sequencer_length_connect; connectable->disconnect = ags_apply_sequencer_length_disconnect; } void ags_apply_sequencer_length_init(AgsApplySequencerLength *apply_sequencer_length) { apply_sequencer_length->gobject = NULL; apply_sequencer_length->length = 0.0; } void ags_apply_sequencer_length_connect(AgsConnectable *connectable) { ags_apply_sequencer_length_parent_connectable_interface->connect(connectable); /* empty */ } void ags_apply_sequencer_length_disconnect(AgsConnectable *connectable) { ags_apply_sequencer_length_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_apply_sequencer_length_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_apply_sequencer_length_parent_class)->finalize(gobject); /* empty */ } void ags_apply_sequencer_length_launch(AgsTask *task) { AgsApplySequencerLength *apply_sequencer_length; apply_sequencer_length = AGS_APPLY_SEQUENCER_LENGTH(task); if(AGS_IS_AUDIO(apply_sequencer_length->gobject)){ AgsAudio *audio; audio = AGS_AUDIO(apply_sequencer_length->gobject); ags_apply_sequencer_length_audio(apply_sequencer_length, audio); }else if(AGS_IS_CHANNEL(apply_sequencer_length->gobject)){ AgsChannel *channel; channel = AGS_CHANNEL(apply_sequencer_length->gobject); ags_apply_sequencer_length_channel(apply_sequencer_length, channel); }else if(AGS_IS_RECALL(apply_sequencer_length->gobject)){ AgsRecall *recall; recall = AGS_RECALL(apply_sequencer_length->gobject); ags_apply_sequencer_length_recall(apply_sequencer_length, recall); }else{ g_warning("AgsApplySequencerLength: Not supported gobject\0"); } } void ags_apply_sequencer_length_recall(AgsApplySequencerLength *apply_sequencer_length, AgsRecall *recall) { if(AGS_IS_TACTABLE(recall)){ ags_tactable_change_sequencer_duration(AGS_TACTABLE(recall), apply_sequencer_length->length); } } void ags_apply_sequencer_length_channel(AgsApplySequencerLength *apply_sequencer_length, AgsChannel *channel) { GList *list; list = channel->play; while(list != NULL){ ags_apply_sequencer_length_recall(apply_sequencer_length, AGS_RECALL(list->data)); list = list->next; } list = channel->recall; while(list != NULL){ ags_apply_sequencer_length_recall(apply_sequencer_length, AGS_RECALL(list->data)); list = list->next; } } void ags_apply_sequencer_length_audio(AgsApplySequencerLength *apply_sequencer_length, AgsAudio *audio) { AgsChannel *channel; GList *list; /* AgsRecall */ list = audio->play; while(list != NULL){ ags_apply_sequencer_length_recall(apply_sequencer_length, AGS_RECALL(list->data)); list = list->next; } list = audio->recall; while(list != NULL){ ags_apply_sequencer_length_recall(apply_sequencer_length, AGS_RECALL(list->data)); list = list->next; } /* AgsChannel */ channel = audio->output; while(channel != NULL){ ags_apply_sequencer_length_channel(apply_sequencer_length, channel); channel = channel->next; } channel = audio->input; while(channel != NULL){ ags_apply_sequencer_length_channel(apply_sequencer_length, channel); channel = channel->next; } } /** * ags_apply_sequencer_length_new: * @gobject: the #GObject * @sequencer_length: the sequencer length to apply * * Creates an #AgsApplySequencerLength. * * Returns: an new #AgsApplySequencerLength. * * Since: 0.4 */ AgsApplySequencerLength* ags_apply_sequencer_length_new(GObject *gobject, gdouble length) { AgsApplySequencerLength *apply_sequencer_length; apply_sequencer_length = (AgsApplySequencerLength *) g_object_new(AGS_TYPE_APPLY_SEQUENCER_LENGTH, NULL); apply_sequencer_length->gobject = gobject; apply_sequencer_length->length = length; return(apply_sequencer_length); } gsequencer-0.6.37/src/ags/audio/task/recall/ags_set_muted.c0000644000175000017500000001457112626272146020546 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include void ags_set_muted_class_init(AgsSetMutedClass *set_muted); void ags_set_muted_connectable_interface_init(AgsConnectableInterface *connectable); void ags_set_muted_init(AgsSetMuted *set_muted); void ags_set_muted_connect(AgsConnectable *connectable); void ags_set_muted_disconnect(AgsConnectable *connectable); void ags_set_muted_finalize(GObject *gobject); void ags_set_muted_launch(AgsTask *task); void ags_set_muted_recall(AgsSetMuted *set_muted, AgsRecall *recall); void ags_set_muted_channel(AgsSetMuted *set_muted, AgsChannel *channel); void ags_set_muted_audio(AgsSetMuted *set_muted, AgsAudio *audio); /** * SECTION:ags_set_muted * @short_description: set muted to delay audio * @title: AgsSetMuted * @section_id: * @include: ags/audio/task/recall/ags_set_muted.h * * The #AgsSetMuted task sets muted to #AgsMutable. */ static gpointer ags_set_muted_parent_class = NULL; static AgsConnectableInterface *ags_set_muted_parent_connectable_interface; GType ags_set_muted_get_type() { static GType ags_type_set_muted = 0; if(!ags_type_set_muted){ static const GTypeInfo ags_set_muted_info = { sizeof (AgsSetMutedClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_set_muted_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsSetMuted), 0, /* n_preallocs */ (GInstanceInitFunc) ags_set_muted_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_set_muted_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_set_muted = g_type_register_static(AGS_TYPE_TASK, "AgsSetMuted\0", &ags_set_muted_info, 0); g_type_add_interface_static(ags_type_set_muted, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_set_muted); } void ags_set_muted_class_init(AgsSetMutedClass *set_muted) { GObjectClass *gobject; AgsTaskClass *task; ags_set_muted_parent_class = g_type_class_peek_parent(set_muted); /* GObjectClass */ gobject = (GObjectClass *) set_muted; gobject->finalize = ags_set_muted_finalize; /* AgsTaskClass */ task = (AgsTaskClass *) set_muted; task->launch = ags_set_muted_launch; } void ags_set_muted_connectable_interface_init(AgsConnectableInterface *connectable) { ags_set_muted_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_set_muted_connect; connectable->disconnect = ags_set_muted_disconnect; } void ags_set_muted_init(AgsSetMuted *set_muted) { set_muted->gobject = NULL; set_muted->muted = FALSE; } void ags_set_muted_connect(AgsConnectable *connectable) { ags_set_muted_parent_connectable_interface->connect(connectable); /* empty */ } void ags_set_muted_disconnect(AgsConnectable *connectable) { ags_set_muted_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_set_muted_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_set_muted_parent_class)->finalize(gobject); /* empty */ } void ags_set_muted_launch(AgsTask *task) { AgsSetMuted *set_muted; set_muted = AGS_SET_MUTED(task); if(AGS_IS_AUDIO(set_muted->gobject)){ AgsAudio *audio; audio = AGS_AUDIO(set_muted->gobject); ags_set_muted_audio(set_muted, audio); }else if(AGS_IS_CHANNEL(set_muted->gobject)){ AgsChannel *channel; channel = AGS_CHANNEL(set_muted->gobject); ags_set_muted_channel(set_muted, channel); }else if(AGS_IS_RECALL(set_muted->gobject)){ AgsRecall *recall; recall = AGS_RECALL(set_muted->gobject); ags_set_muted_recall(set_muted, recall); }else{ g_warning("AgsSetMuted: Not supported gobject\0"); } } void ags_set_muted_recall(AgsSetMuted *set_muted, AgsRecall *recall) { if(AGS_IS_MUTABLE(recall)){ ags_mutable_set_muted(AGS_MUTABLE(recall), set_muted->muted); } } void ags_set_muted_channel(AgsSetMuted *set_muted, AgsChannel *channel) { GList *list; list = channel->play; while(list != NULL){ ags_set_muted_recall(set_muted, AGS_RECALL(list->data)); list = list->next; } list = channel->recall; while(list != NULL){ ags_set_muted_recall(set_muted, AGS_RECALL(list->data)); list = list->next; } } void ags_set_muted_audio(AgsSetMuted *set_muted, AgsAudio *audio) { AgsChannel *channel; GList *list; /* AgsRecall */ list = audio->play; while(list != NULL){ ags_set_muted_recall(set_muted, AGS_RECALL(list->data)); list = list->next; } list = audio->recall; while(list != NULL){ ags_set_muted_recall(set_muted, AGS_RECALL(list->data)); list = list->next; } /* AgsChannel */ channel = audio->output; while(channel != NULL){ ags_set_muted_channel(set_muted, channel); channel = channel->next; } channel = audio->input; while(channel != NULL){ ags_set_muted_channel(set_muted, channel); channel = channel->next; } } /** * ags_set_muted_new: * @gobject: the #GObject * @muted: muted to set * * Creates an #AgsSetMuted. * * Returns: an new #AgsSetMuted. * * Since: 0.4 */ AgsSetMuted* ags_set_muted_new(GObject *gobject, gboolean muted) { AgsSetMuted *set_muted; set_muted = (AgsSetMuted *) g_object_new(AGS_TYPE_SET_MUTED, NULL); set_muted->gobject = gobject; set_muted->muted = muted; return(set_muted); } gsequencer-0.6.37/src/ags/audio/task/recall/ags_apply_tact.h0000644000175000017500000000355012626272146020715 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_APPLY_TACT_H__ #define __AGS_APPLY_TACT_H__ #include #include #include #define AGS_TYPE_APPLY_TACT (ags_apply_tact_get_type()) #define AGS_APPLY_TACT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_APPLY_TACT, AgsApplyTact)) #define AGS_APPLY_TACT_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_APPLY_TACT, AgsApplyTactClass)) #define AGS_IS_APPLY_TACT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_APPLY_TACT)) #define AGS_IS_APPLY_TACT_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_APPLY_TACT)) #define AGS_APPLY_TACT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_APPLY_TACT, AgsApplyTactClass)) typedef struct _AgsApplyTact AgsApplyTact; typedef struct _AgsApplyTactClass AgsApplyTactClass; struct _AgsApplyTact { AgsTask task; GObject *gobject; gdouble tact; }; struct _AgsApplyTactClass { AgsTaskClass task; }; GType ags_apply_tact_get_type(); AgsApplyTact* ags_apply_tact_new(GObject *gobject, gdouble tact); #endif /*__AGS_APPLY_TACT_H__*/ gsequencer-0.6.37/src/ags/audio/task/recall/ags_apply_bpm.c0000644000175000017500000001573212626272146020540 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include void ags_apply_bpm_class_init(AgsApplyBpmClass *apply_bpm); void ags_apply_bpm_connectable_interface_init(AgsConnectableInterface *connectable); void ags_apply_bpm_init(AgsApplyBpm *apply_bpm); void ags_apply_bpm_connect(AgsConnectable *connectable); void ags_apply_bpm_disconnect(AgsConnectable *connectable); void ags_apply_bpm_finalize(GObject *gobject); void ags_apply_bpm_launch(AgsTask *task); void ags_apply_bpm_recall(AgsApplyBpm *apply_bpm, AgsRecall *recall); void ags_apply_bpm_channel(AgsApplyBpm *apply_bpm, AgsChannel *channel); void ags_apply_bpm_audio(AgsApplyBpm *apply_bpm, AgsAudio *audio); void ags_apply_bpm_devout(AgsApplyBpm *apply_bpm, AgsDevout *devout); /** * SECTION:ags_apply_bpm * @short_description: apply bpm to delay audio * @title: AgsApplyBpm * @section_id: * @include: ags/audio/task/recall/ags_apply_bpm.h * * The #AgsApplyBpm task applys bpm to #AgsDelayAudio. */ static gpointer ags_apply_bpm_parent_class = NULL; static AgsConnectableInterface *ags_apply_bpm_parent_connectable_interface; GType ags_apply_bpm_get_type() { static GType ags_type_apply_bpm = 0; if(!ags_type_apply_bpm){ static const GTypeInfo ags_apply_bpm_info = { sizeof (AgsApplyBpmClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_apply_bpm_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsApplyBpm), 0, /* n_preallocs */ (GInstanceInitFunc) ags_apply_bpm_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_apply_bpm_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_apply_bpm = g_type_register_static(AGS_TYPE_TASK, "AgsApplyBpm\0", &ags_apply_bpm_info, 0); g_type_add_interface_static(ags_type_apply_bpm, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_apply_bpm); } void ags_apply_bpm_class_init(AgsApplyBpmClass *apply_bpm) { GObjectClass *gobject; AgsTaskClass *task; ags_apply_bpm_parent_class = g_type_class_peek_parent(apply_bpm); /* GObjectClass */ gobject = (GObjectClass *) apply_bpm; gobject->finalize = ags_apply_bpm_finalize; /* AgsTaskClass */ task = (AgsTaskClass *) apply_bpm; task->launch = ags_apply_bpm_launch; } void ags_apply_bpm_connectable_interface_init(AgsConnectableInterface *connectable) { ags_apply_bpm_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_apply_bpm_connect; connectable->disconnect = ags_apply_bpm_disconnect; } void ags_apply_bpm_init(AgsApplyBpm *apply_bpm) { apply_bpm->gobject = NULL; apply_bpm->bpm = 0.0; } void ags_apply_bpm_connect(AgsConnectable *connectable) { ags_apply_bpm_parent_connectable_interface->connect(connectable); /* empty */ } void ags_apply_bpm_disconnect(AgsConnectable *connectable) { ags_apply_bpm_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_apply_bpm_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_apply_bpm_parent_class)->finalize(gobject); /* empty */ } void ags_apply_bpm_launch(AgsTask *task) { AgsApplyBpm *apply_bpm; apply_bpm = AGS_APPLY_BPM(task); if(AGS_IS_DEVOUT(apply_bpm->gobject)){ AgsDevout *devout; devout = AGS_DEVOUT(apply_bpm->gobject); ags_apply_bpm_devout(apply_bpm, devout); }else if(AGS_IS_AUDIO(apply_bpm->gobject)){ AgsAudio *audio; audio = AGS_AUDIO(apply_bpm->gobject); ags_apply_bpm_audio(apply_bpm, audio); }else if(AGS_IS_CHANNEL(apply_bpm->gobject)){ AgsChannel *channel; channel = AGS_CHANNEL(apply_bpm->gobject); ags_apply_bpm_channel(apply_bpm, channel); }else if(AGS_IS_RECALL(apply_bpm->gobject)){ AgsRecall *recall; recall = AGS_RECALL(apply_bpm->gobject); ags_apply_bpm_recall(apply_bpm, recall); }else{ g_warning("AgsApplyBpm: Not supported gobject\0"); } } void ags_apply_bpm_recall(AgsApplyBpm *apply_bpm, AgsRecall *recall) { if(AGS_IS_TACTABLE(recall)){ ags_tactable_change_bpm(AGS_TACTABLE(recall), apply_bpm->bpm); } } void ags_apply_bpm_channel(AgsApplyBpm *apply_bpm, AgsChannel *channel) { GList *list; list = channel->play; while(list != NULL){ ags_apply_bpm_recall(apply_bpm, AGS_RECALL(list->data)); list = list->next; } list = channel->recall; while(list != NULL){ ags_apply_bpm_recall(apply_bpm, AGS_RECALL(list->data)); list = list->next; } } void ags_apply_bpm_audio(AgsApplyBpm *apply_bpm, AgsAudio *audio) { AgsChannel *channel; GList *list; /* AgsRecall */ list = audio->play; while(list != NULL){ ags_apply_bpm_recall(apply_bpm, AGS_RECALL(list->data)); list = list->next; } list = audio->recall; while(list != NULL){ ags_apply_bpm_recall(apply_bpm, AGS_RECALL(list->data)); list = list->next; } /* AgsChannel */ channel = audio->output; while(channel != NULL){ ags_apply_bpm_channel(apply_bpm, channel); channel = channel->next; } channel = audio->input; while(channel != NULL){ ags_apply_bpm_channel(apply_bpm, channel); channel = channel->next; } } void ags_apply_bpm_devout(AgsApplyBpm *apply_bpm, AgsDevout *devout) { GList *list; g_object_set(devout, "bpm\0", apply_bpm->bpm, NULL); //TODO:JK: implement me /* AgsAudio */ list = devout->audio; while(list != NULL){ ags_apply_bpm_audio(apply_bpm, AGS_AUDIO(list->data)); list = list->next; } } /** * ags_apply_bpm_new: * @gobject: the #GObject * @bpm: the bpm to apply * * Creates an #AgsApplyBpm. * * Returns: an new #AgsApplyBpm. * * Since: 0.4 */ AgsApplyBpm* ags_apply_bpm_new(GObject *gobject, gdouble bpm) { AgsApplyBpm *apply_bpm; apply_bpm = (AgsApplyBpm *) g_object_new(AGS_TYPE_APPLY_BPM, NULL); apply_bpm->gobject = gobject; apply_bpm->bpm = bpm; return(apply_bpm); } gsequencer-0.6.37/src/ags/audio/task/recall/ags_apply_tact.c0000644000175000017500000001476712626272146020724 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include void ags_apply_tact_class_init(AgsApplyTactClass *apply_tact); void ags_apply_tact_connectable_interface_init(AgsConnectableInterface *connectable); void ags_apply_tact_init(AgsApplyTact *apply_tact); void ags_apply_tact_connect(AgsConnectable *connectable); void ags_apply_tact_disconnect(AgsConnectable *connectable); void ags_apply_tact_finalize(GObject *gobject); void ags_apply_tact_launch(AgsTask *task); void ags_apply_tact_recall(AgsApplyTact *apply_tact, AgsRecall *recall); void ags_apply_tact_channel(AgsApplyTact *apply_tact, AgsChannel *channel); void ags_apply_tact_audio(AgsApplyTact *apply_tact, AgsAudio *audio); /** * SECTION:ags_apply_tact * @short_description: apply tact to delay audio * @title: AgsApplyTact * @section_id: * @include: ags/audio/task/recall/ags_apply_tact.h * * The #AgsApplyTact task applys tact to #AgsTactable. */ static gpointer ags_apply_tact_parent_class = NULL; static AgsConnectableInterface *ags_apply_tact_parent_connectable_interface; GType ags_apply_tact_get_type() { static GType ags_type_apply_tact = 0; if(!ags_type_apply_tact){ static const GTypeInfo ags_apply_tact_info = { sizeof (AgsApplyTactClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_apply_tact_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsApplyTact), 0, /* n_preallocs */ (GInstanceInitFunc) ags_apply_tact_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_apply_tact_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_apply_tact = g_type_register_static(AGS_TYPE_TASK, "AgsApplyTact\0", &ags_apply_tact_info, 0); g_type_add_interface_static(ags_type_apply_tact, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_apply_tact); } void ags_apply_tact_class_init(AgsApplyTactClass *apply_tact) { GObjectClass *gobject; AgsTaskClass *task; ags_apply_tact_parent_class = g_type_class_peek_parent(apply_tact); /* GObjectClass */ gobject = (GObjectClass *) apply_tact; gobject->finalize = ags_apply_tact_finalize; /* AgsTaskClass */ task = (AgsTaskClass *) apply_tact; task->launch = ags_apply_tact_launch; } void ags_apply_tact_connectable_interface_init(AgsConnectableInterface *connectable) { ags_apply_tact_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_apply_tact_connect; connectable->disconnect = ags_apply_tact_disconnect; } void ags_apply_tact_init(AgsApplyTact *apply_tact) { apply_tact->gobject = NULL; apply_tact->tact = 0.0; } void ags_apply_tact_connect(AgsConnectable *connectable) { ags_apply_tact_parent_connectable_interface->connect(connectable); /* empty */ } void ags_apply_tact_disconnect(AgsConnectable *connectable) { ags_apply_tact_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_apply_tact_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_apply_tact_parent_class)->finalize(gobject); /* empty */ } void ags_apply_tact_launch(AgsTask *task) { AgsApplyTact *apply_tact; apply_tact = AGS_APPLY_TACT(task); if(AGS_IS_AUDIO(apply_tact->gobject)){ AgsAudio *audio; audio = AGS_AUDIO(apply_tact->gobject); ags_apply_tact_audio(apply_tact, audio); }else if(AGS_IS_CHANNEL(apply_tact->gobject)){ AgsChannel *channel; channel = AGS_CHANNEL(apply_tact->gobject); ags_apply_tact_channel(apply_tact, channel); }else if(AGS_IS_RECALL(apply_tact->gobject)){ AgsRecall *recall; recall = AGS_RECALL(apply_tact->gobject); ags_apply_tact_recall(apply_tact, recall); }else{ g_warning("AgsApplyTact: Not supported gobject\0"); } } void ags_apply_tact_recall(AgsApplyTact *apply_tact, AgsRecall *recall) { if(AGS_IS_TACTABLE(recall)){ ags_tactable_change_tact(AGS_TACTABLE(recall), apply_tact->tact); } } void ags_apply_tact_channel(AgsApplyTact *apply_tact, AgsChannel *channel) { GList *list; list = channel->play; while(list != NULL){ ags_apply_tact_recall(apply_tact, AGS_RECALL(list->data)); list = list->next; } list = channel->recall; while(list != NULL){ ags_apply_tact_recall(apply_tact, AGS_RECALL(list->data)); list = list->next; } } void ags_apply_tact_audio(AgsApplyTact *apply_tact, AgsAudio *audio) { AgsChannel *channel; GList *list; /* AgsRecall */ list = audio->play; while(list != NULL){ ags_apply_tact_recall(apply_tact, AGS_RECALL(list->data)); list = list->next; } list = audio->recall; while(list != NULL){ ags_apply_tact_recall(apply_tact, AGS_RECALL(list->data)); list = list->next; } /* AgsChannel */ channel = audio->output; while(channel != NULL){ ags_apply_tact_channel(apply_tact, channel); channel = channel->next; } channel = audio->input; while(channel != NULL){ ags_apply_tact_channel(apply_tact, channel); channel = channel->next; } } /** * ags_apply_tact_new: * @gobject: the #GObject * @tact: the tact to apply * * Creates an #AgsApplyTact. * * Returns: an new #AgsApplyTact. * * Since: 0.4 */ AgsApplyTact* ags_apply_tact_new(GObject *gobject, gdouble tact) { AgsApplyTact *apply_tact; apply_tact = (AgsApplyTact *) g_object_new(AGS_TYPE_APPLY_TACT, NULL); apply_tact->gobject = gobject; apply_tact->tact = tact; return(apply_tact); } gsequencer-0.6.37/src/ags/audio/task/recall/ags_apply_sequencer_length.h0000644000175000017500000000425012626272146023313 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_APPLY_SEQUENCER_LENGTH_H__ #define __AGS_APPLY_SEQUENCER_LENGTH_H__ #include #include #include #define AGS_TYPE_APPLY_SEQUENCER_LENGTH (ags_apply_sequencer_length_get_type()) #define AGS_APPLY_SEQUENCER_LENGTH(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_APPLY_SEQUENCER_LENGTH, AgsApplySequencerLength)) #define AGS_APPLY_SEQUENCER_LENGTH_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_APPLY_SEQUENCER_LENGTH, AgsApplySequencerLengthClass)) #define AGS_IS_APPLY_SEQUENCER_LENGTH(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_APPLY_SEQUENCER_LENGTH)) #define AGS_IS_APPLY_SEQUENCER_LENGTH_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_APPLY_SEQUENCER_LENGTH)) #define AGS_APPLY_SEQUENCER_LENGTH_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_APPLY_SEQUENCER_LENGTH, AgsApplySequencerLengthClass)) typedef struct _AgsApplySequencerLength AgsApplySequencerLength; typedef struct _AgsApplySequencerLengthClass AgsApplySequencerLengthClass; struct _AgsApplySequencerLength { AgsTask task; GObject *gobject; gdouble length; }; struct _AgsApplySequencerLengthClass { AgsTaskClass task; }; GType ags_apply_sequencer_length_get_type(); AgsApplySequencerLength* ags_apply_sequencer_length_new(GObject *gobject, gdouble length); #endif /*__AGS_APPLY_SEQUENCER_LENGTH_H__*/ gsequencer-0.6.37/src/ags/audio/task/recall/ags_set_muted.h0000644000175000017500000000352612626272146020551 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_SET_MUTED_H__ #define __AGS_SET_MUTED_H__ #include #include #include #define AGS_TYPE_SET_MUTED (ags_set_muted_get_type()) #define AGS_SET_MUTED(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_SET_MUTED, AgsSetMuted)) #define AGS_SET_MUTED_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_SET_MUTED, AgsSetMutedClass)) #define AGS_IS_SET_MUTED(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_SET_MUTED)) #define AGS_IS_SET_MUTED_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_SET_MUTED)) #define AGS_SET_MUTED_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_SET_MUTED, AgsSetMutedClass)) typedef struct _AgsSetMuted AgsSetMuted; typedef struct _AgsSetMutedClass AgsSetMutedClass; struct _AgsSetMuted { AgsTask task; GObject *gobject; gboolean muted; }; struct _AgsSetMutedClass { AgsTaskClass task; }; GType ags_set_muted_get_type(); AgsSetMuted* ags_set_muted_new(GObject *gobject, gboolean muted); #endif /*__AGS_SET_MUTED_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_set_samplerate.h0000644000175000017500000000373412626272146020327 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_SET_SAMPLERATE_H__ #define __AGS_SET_SAMPLERATE_H__ #include #include #include #define AGS_TYPE_SET_SAMPLERATE (ags_set_samplerate_get_type()) #define AGS_SET_SAMPLERATE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_SET_SAMPLERATE, AgsSetSamplerate)) #define AGS_SET_SAMPLERATE_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_SET_SAMPLERATE, AgsSetSamplerateClass)) #define AGS_IS_SET_SAMPLERATE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_SET_SAMPLERATE)) #define AGS_IS_SET_SAMPLERATE_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_SET_SAMPLERATE)) #define AGS_SET_SAMPLERATE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_SET_SAMPLERATE, AgsSetSamplerateClass)) typedef struct _AgsSetSamplerate AgsSetSamplerate; typedef struct _AgsSetSamplerateClass AgsSetSamplerateClass; struct _AgsSetSamplerate { AgsTask task; GObject *gobject; guint samplerate; }; struct _AgsSetSamplerateClass { AgsTaskClass task; }; GType ags_set_samplerate_get_type(); AgsSetSamplerate* ags_set_samplerate_new(GObject *gobject, guint samplerate); #endif /*__AGS_SET_SAMPLERATE_H__*/ gsequencer-0.6.37/src/ags/audio/task/ags_set_audio_channels.c0000644000175000017500000001205012626272146021130 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_set_audio_channels_class_init(AgsSetAudioChannelsClass *set_audio_channels); void ags_set_audio_channels_connectable_interface_init(AgsConnectableInterface *connectable); void ags_set_audio_channels_init(AgsSetAudioChannels *set_audio_channels); void ags_set_audio_channels_connect(AgsConnectable *connectable); void ags_set_audio_channels_disconnect(AgsConnectable *connectable); void ags_set_audio_channels_finalize(GObject *gobject); void ags_set_audio_channels_launch(AgsTask *task); /** * SECTION:ags_set_audio_channels * @short_description: resizes audio channels * @title: AgsSetAudioChannels * @section_id: * @include: ags/audio/task/ags_set_audio_channels.h * * The #AgsSetAudioChannels task resizes audio channels of #AgsDevout. */ static gpointer ags_set_audio_channels_parent_class = NULL; static AgsConnectableInterface *ags_set_audio_channels_parent_connectable_interface; GType ags_set_audio_channels_get_type() { static GType ags_type_set_audio_channels = 0; if(!ags_type_set_audio_channels){ static const GTypeInfo ags_set_audio_channels_info = { sizeof (AgsSetAudioChannelsClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_set_audio_channels_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsSetAudioChannels), 0, /* n_preallocs */ (GInstanceInitFunc) ags_set_audio_channels_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_set_audio_channels_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_set_audio_channels = g_type_register_static(AGS_TYPE_TASK, "AgsSetAudioChannels\0", &ags_set_audio_channels_info, 0); g_type_add_interface_static(ags_type_set_audio_channels, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_set_audio_channels); } void ags_set_audio_channels_class_init(AgsSetAudioChannelsClass *set_audio_channels) { GObjectClass *gobject; AgsTaskClass *task; ags_set_audio_channels_parent_class = g_type_class_peek_parent(set_audio_channels); /* gobject */ gobject = (GObjectClass *) set_audio_channels; gobject->finalize = ags_set_audio_channels_finalize; /* task */ task = (AgsTaskClass *) set_audio_channels; task->launch = ags_set_audio_channels_launch; } void ags_set_audio_channels_connectable_interface_init(AgsConnectableInterface *connectable) { ags_set_audio_channels_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_set_audio_channels_connect; connectable->disconnect = ags_set_audio_channels_disconnect; } void ags_set_audio_channels_init(AgsSetAudioChannels *set_audio_channels) { set_audio_channels->devout = NULL; set_audio_channels->audio_channels = 0; } void ags_set_audio_channels_connect(AgsConnectable *connectable) { ags_set_audio_channels_parent_connectable_interface->connect(connectable); /* empty */ } void ags_set_audio_channels_disconnect(AgsConnectable *connectable) { ags_set_audio_channels_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_set_audio_channels_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_set_audio_channels_parent_class)->finalize(gobject); /* empty */ } void ags_set_audio_channels_launch(AgsTask *task) { AgsSetAudioChannels *set_audio_channels; set_audio_channels = AGS_SET_AUDIO_CHANNELS(task); g_object_set(G_OBJECT(set_audio_channels->devout), "pcm_channels\0", set_audio_channels->audio_channels, NULL); } /** * ags_set_audio_channels_new: * @devout: the #AgsDevout to reset * @audio_channels: the new count of audio channels * * Creates an #AgsSetAudioChannels. * * Returns: an new #AgsSetAudioChannels. * * Since: 0.4 */ AgsSetAudioChannels* ags_set_audio_channels_new(AgsDevout *devout, guint audio_channels) { AgsSetAudioChannels *set_audio_channels; set_audio_channels = (AgsSetAudioChannels *) g_object_new(AGS_TYPE_SET_AUDIO_CHANNELS, NULL); set_audio_channels->devout = devout; set_audio_channels->audio_channels = audio_channels; return(set_audio_channels); } gsequencer-0.6.37/src/ags/audio/task/ags_set_output_device.c0000644000175000017500000001204512626272146021037 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include void ags_set_output_device_class_init(AgsSetOutputDeviceClass *set_output_device); void ags_set_output_device_connectable_interface_init(AgsConnectableInterface *connectable); void ags_set_output_device_init(AgsSetOutputDevice *set_output_device); void ags_set_output_device_connect(AgsConnectable *connectable); void ags_set_output_device_disconnect(AgsConnectable *connectable); void ags_set_output_device_finalize(GObject *gobject); void ags_set_output_device_launch(AgsTask *task); /** * SECTION:ags_set_output_device * @short_description: resets soundcard * @title: AgsSetOutputDevice * @section_id: * @include: ags/audio/task/ags_set_output_device.h * * The #AgsSetOutputDevice task resets soundcard of #AgsDevout. */ static gpointer ags_set_output_device_parent_class = NULL; static AgsConnectableInterface *ags_set_output_device_parent_connectable_interface; GType ags_set_output_device_get_type() { static GType ags_type_set_output_device = 0; if(!ags_type_set_output_device){ static const GTypeInfo ags_set_output_device_info = { sizeof (AgsSetOutputDeviceClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_set_output_device_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsSetOutputDevice), 0, /* n_preallocs */ (GInstanceInitFunc) ags_set_output_device_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_set_output_device_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_set_output_device = g_type_register_static(AGS_TYPE_TASK, "AgsSetOutputDevice\0", &ags_set_output_device_info, 0); g_type_add_interface_static(ags_type_set_output_device, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_set_output_device); } void ags_set_output_device_class_init(AgsSetOutputDeviceClass *set_output_device) { GObjectClass *gobject; AgsTaskClass *task; ags_set_output_device_parent_class = g_type_class_peek_parent(set_output_device); /* gobject */ gobject = (GObjectClass *) set_output_device; gobject->finalize = ags_set_output_device_finalize; /* task */ task = (AgsTaskClass *) set_output_device; task->launch = ags_set_output_device_launch; } void ags_set_output_device_connectable_interface_init(AgsConnectableInterface *connectable) { ags_set_output_device_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_set_output_device_connect; connectable->disconnect = ags_set_output_device_disconnect; } void ags_set_output_device_init(AgsSetOutputDevice *set_output_device) { set_output_device->devout = NULL; set_output_device->card_id = NULL; } void ags_set_output_device_connect(AgsConnectable *connectable) { ags_set_output_device_parent_connectable_interface->connect(connectable); /* empty */ } void ags_set_output_device_disconnect(AgsConnectable *connectable) { ags_set_output_device_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_set_output_device_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_set_output_device_parent_class)->finalize(gobject); /* empty */ } void ags_set_output_device_launch(AgsTask *task) { AgsDevout *devout; AgsSetOutputDevice *set_output_device; char *card_id; set_output_device = AGS_SET_OUTPUT_DEVICE(task); devout = AGS_DEVOUT(set_output_device->devout); card_id = set_output_device->card_id; /* perform task */ g_object_set(G_OBJECT(devout), "device\0", card_id, NULL); } /** * ags_set_output_device_new: * @devout: the #AgsDevout to reset * @card_id: the new soundcard * * Creates an #AgsSetOutputDevice. * * Returns: an new #AgsSetOutputDevice. * * Since: 0.4 */ AgsSetOutputDevice* ags_set_output_device_new(GObject *devout, char *card_id) { AgsSetOutputDevice *set_output_device; set_output_device = (AgsSetOutputDevice *) g_object_new(AGS_TYPE_SET_OUTPUT_DEVICE, NULL); set_output_device->devout = devout; set_output_device->card_id = card_id; return(set_output_device); } gsequencer-0.6.37/src/ags/audio/ags_recall_channel_run_dummy.c0000644000175000017500000002717012626272146021401 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void ags_recall_channel_run_dummy_class_init(AgsRecallChannelRunDummyClass *recall_channel_run_dummy); void ags_recall_channel_run_dummy_connectable_interface_init(AgsConnectableInterface *connectable); void ags_recall_channel_run_dummy_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable); void ags_recall_channel_run_dummy_plugin_interface_init(AgsPluginInterface *plugin); void ags_recall_channel_run_dummy_init(AgsRecallChannelRunDummy *recall_channel_run_dummy); void ags_recall_channel_run_dummy_connect(AgsConnectable *connectable); void ags_recall_channel_run_dummy_disconnect(AgsConnectable *connectable); void ags_recall_channel_run_dummy_connect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_recall_channel_run_dummy_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_recall_channel_run_dummy_finalize(GObject *gobject); void ags_recall_channel_run_dummy_read(AgsFile *file, xmlNode *node, AgsPlugin *plugin); xmlNode* ags_recall_channel_run_dummy_write(AgsFile *file, xmlNode *parent, AgsPlugin *plugin); AgsRecall* ags_recall_channel_run_dummy_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter); /** * SECTION:ags_recall_channel_run_dummy * @short_description: channel dummy dynamic context of recall * @title: AgsRecallChannelRunDummy * @section_id: * @include: ags/audio/ags_recall_channel_run_dummy.h * * #AgsRecallChannelRunDummy acts as channel dummy dynamic recall. */ static gpointer ags_recall_channel_run_dummy_parent_class = NULL; static AgsConnectableInterface *ags_recall_channel_run_dummy_parent_connectable_interface; static AgsDynamicConnectableInterface *ags_recall_channel_run_dummy_parent_dynamic_connectable_interface; static AgsPluginInterface *ags_recall_channel_run_dummy_parent_plugin_interface; GType ags_recall_channel_run_dummy_get_type() { static GType ags_type_recall_channel_run_dummy = 0; if(!ags_type_recall_channel_run_dummy){ static const GTypeInfo ags_recall_channel_run_dummy_info = { sizeof (AgsRecallChannelRunDummyClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_recall_channel_run_dummy_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsRecallChannelRunDummy), 0, /* n_preallocs */ (GInstanceInitFunc) ags_recall_channel_run_dummy_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_recall_channel_run_dummy_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_dynamic_connectable_interface_info = { (GInterfaceInitFunc) ags_recall_channel_run_dummy_dynamic_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_plugin_interface_info = { (GInterfaceInitFunc) ags_recall_channel_run_dummy_plugin_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_recall_channel_run_dummy = g_type_register_static(AGS_TYPE_RECALL_CHANNEL_RUN, "AgsRecallChannelRunDummy\0", &ags_recall_channel_run_dummy_info, 0); g_type_add_interface_static(ags_type_recall_channel_run_dummy, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_recall_channel_run_dummy, AGS_TYPE_DYNAMIC_CONNECTABLE, &ags_dynamic_connectable_interface_info); g_type_add_interface_static(ags_type_recall_channel_run_dummy, AGS_TYPE_PLUGIN, &ags_plugin_interface_info); } return (ags_type_recall_channel_run_dummy); } void ags_recall_channel_run_dummy_class_init(AgsRecallChannelRunDummyClass *recall_channel_run_dummy) { GObjectClass *gobject; AgsRecallClass *recall; ags_recall_channel_run_dummy_parent_class = g_type_class_peek_parent(recall_channel_run_dummy); /* GObjectClass */ gobject = (GObjectClass *) recall_channel_run_dummy; gobject->finalize = ags_recall_channel_run_dummy_finalize; /* AgsRecallClass */ recall = (AgsRecallClass *) recall_channel_run_dummy; recall->duplicate = ags_recall_channel_run_dummy_duplicate; } void ags_recall_channel_run_dummy_connectable_interface_init(AgsConnectableInterface *connectable) { ags_recall_channel_run_dummy_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_recall_channel_run_dummy_connect; connectable->disconnect = ags_recall_channel_run_dummy_disconnect; } void ags_recall_channel_run_dummy_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable) { ags_recall_channel_run_dummy_parent_dynamic_connectable_interface = g_type_interface_peek_parent(dynamic_connectable); dynamic_connectable->connect_dynamic = ags_recall_channel_run_dummy_connect_dynamic; dynamic_connectable->disconnect_dynamic = ags_recall_channel_run_dummy_disconnect_dynamic; } void ags_recall_channel_run_dummy_plugin_interface_init(AgsPluginInterface *plugin) { ags_recall_channel_run_dummy_parent_plugin_interface = g_type_interface_peek_parent(plugin); plugin->read = ags_recall_channel_run_dummy_read; plugin->write = ags_recall_channel_run_dummy_write; } void ags_recall_channel_run_dummy_init(AgsRecallChannelRunDummy *recall_channel_run_dummy) { AGS_RECALL(recall_channel_run_dummy)->name = "ags-dummy"; AGS_RECALL(recall_channel_run_dummy)->version = AGS_EFFECTS_DEFAULT_VERSION; AGS_RECALL(recall_channel_run_dummy)->build_id = AGS_BUILD_ID; AGS_RECALL(recall_channel_run_dummy)->xml_type = "ags-recall-channel-run-dummy\0"; AGS_RECALL(recall_channel_run_dummy)->port = NULL; AGS_RECALL(recall_channel_run_dummy)->flags |= (AGS_RECALL_INPUT_ORIENTATED | AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION); AGS_RECALL(recall_channel_run_dummy)->child_type = AGS_TYPE_RECALL_RECYCLING_DUMMY; } void ags_recall_channel_run_dummy_finalize(GObject *gobject) { /* empty */ /* call parent */ G_OBJECT_CLASS(ags_recall_channel_run_dummy_parent_class)->finalize(gobject); } void ags_recall_channel_run_dummy_connect(AgsConnectable *connectable) { AgsRecallChannelRun *recall_channel_run; GObject *gobject; /* call parent */ ags_recall_channel_run_dummy_parent_connectable_interface->connect(connectable); /* empty */ } void ags_recall_channel_run_dummy_disconnect(AgsConnectable *connectable) { /* call parent */ ags_recall_channel_run_dummy_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_recall_channel_run_dummy_connect_dynamic(AgsDynamicConnectable *dynamic_connectable) { /* call parent */ ags_recall_channel_run_dummy_parent_dynamic_connectable_interface->connect_dynamic(dynamic_connectable); /* empty */ } void ags_recall_channel_run_dummy_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable) { AgsChannel *channel; AgsRecallChannelRunDummy *recall_channel_run_dummy; ags_recall_channel_run_dummy_parent_dynamic_connectable_interface->disconnect_dynamic(dynamic_connectable); /* empty */ } AgsRecall* ags_recall_channel_run_dummy_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter) { AgsRecallChannelRunDummy *recall_channel_run_dummy, *copy; GList *recycling_dummy; recall_channel_run_dummy = (AgsRecallChannelRunDummy *) recall; copy = (AgsRecallChannelRunDummy *) AGS_RECALL_CLASS(ags_recall_channel_run_dummy_parent_class)->duplicate(recall, recall_id, n_params, parameter); AGS_RECALL(copy)->child_type = recall->child_type; copy->recycling_dummy_child_type = recall_channel_run_dummy->recycling_dummy_child_type; recycling_dummy = AGS_RECALL(copy)->children; while(recycling_dummy != NULL){ AGS_RECALL(recycling_dummy->data)->child_type = recall_channel_run_dummy->recycling_dummy_child_type; recycling_dummy = recycling_dummy->next; } return((AgsRecall *) copy); } void ags_recall_channel_run_dummy_read(AgsFile *file, xmlNode *node, AgsPlugin *plugin) { AgsRecallChannelRunDummy *gobject; gobject = AGS_RECALL_CHANNEL_RUN_DUMMY(plugin); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", gobject, NULL)); gobject->recycling_dummy_child_type = g_type_from_name(xmlGetProp(node, "recycling-child-type\0")); } xmlNode* ags_recall_channel_run_dummy_write(AgsFile *file, xmlNode *parent, AgsPlugin *plugin) { AgsRecallChannelRunDummy *recall_channel_run_dummy; xmlNode *node; gchar *id; recall_channel_run_dummy = AGS_RECALL_CHANNEL_RUN_DUMMY(plugin); id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-recall-channel-run-dummy\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", recall_channel_run_dummy, NULL)); xmlNewProp(node, "recycling-child-type\0", g_strdup(g_type_name(recall_channel_run_dummy->recycling_dummy_child_type))); xmlAddChild(parent, node); return(node); } /** * ags_recall_channel_run_dummy_new: * @source: the source #AgsChannel * @child_type: child type * @recycling_dummy_child_type: recycling child type * * Creates an #AgsRecallChannelRunDummy. * * Returns: a new #AgsRecallChannelRunDummy. * * Since: 0.4 */ AgsRecallChannelRunDummy* ags_recall_channel_run_dummy_new(AgsChannel *source, GType child_type, GType recycling_dummy_child_type) { AgsRecallChannelRunDummy *recall_channel_run_dummy; recall_channel_run_dummy = (AgsRecallChannelRunDummy *) g_object_new(AGS_TYPE_RECALL_CHANNEL_RUN_DUMMY, "source\0", source, NULL); AGS_RECALL(recall_channel_run_dummy)->child_type = child_type; recall_channel_run_dummy->recycling_dummy_child_type = recycling_dummy_child_type; return(recall_channel_run_dummy); } gsequencer-0.6.37/src/ags/audio/ags_synths.h0000644000175000017500000000275212626272146015704 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_SYNTH_H__ #define __AGS_SYNTH_H__ #include #include #include #include void ags_synth_sin(AgsDevout *devout, signed short *buffer, guint offset, guint freq, guint phase, guint length, double volume); void ags_synth_saw(AgsDevout *devout, signed short *buffer, guint offset, guint freq, guint phase, guint length, double volume); void ags_synth_triangle(AgsDevout *devout, signed short *buffer, guint offset, guint freq, guint phase, guint length, double volume); void ags_synth_square(AgsDevout *devout, signed short *buffer, guint offset, guint freq, guint phase, guint length, double volume); #endif /*__AGS_SYNTH_H__*/ gsequencer-0.6.37/src/ags/audio/ags_channel_iter.h0000644000175000017500000000316612612232537017002 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_CHANNEL_ITER_H__ #define __AGS_CHANNEL_ITER_H__ #include #include #include typedef struct _AgsChannelIter AgsChannelIter; typedef enum{ AGS_CHANNEL_ITER_LEVEL_STRICT, AGS_CHANNEL_ITER_DIRECTION_AXIS_TO_LEAFES, AGS_CHANNEL_ITER_DIRECTION_AXIS_TO_ROOT, AGS_CHANNEL_ITER_DIRECTION_LEAFES_TO_ROOT, AGS_CHANNEL_ITER_DIRECTION_ROOT_TO_LEAFES, }AgsChannelIterFlags; struct _AgsChannelIter { AgsChannel *current_start; AgsChannelIter *parent; GList *children; AgsChannelIter *current_iter; AgsChannel *current; }; AgsChannelIter* ags_channel_iter_alloc(AgsChannel *start); void ags_channel_iter_free(AgsChannelIter *iter); AgsChannel* ags_channel_iter_prev(AgsChannelIter *iter, guint mode); AgsChannel* ags_channel_iter_next(AgsChannelIter *iter, guint mode); #endif /*__AGS_CHANNEL_ITER_H__*/ gsequencer-0.6.37/src/ags/audio/ags_notation.c0000644000175000017500000010341612633236026016174 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include void ags_notation_class_init(AgsNotationClass *notation); void ags_notation_connectable_interface_init(AgsConnectableInterface *connectable); void ags_notation_tactable_interface_init(AgsTactableInterface *tactable); void ags_notation_portlet_interface_init(AgsPortletInterface *portlet); void ags_notation_init(AgsNotation *notation); void ags_notation_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_notation_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_notation_connect(AgsConnectable *connectable); void ags_notation_disconnect(AgsConnectable *connectable); void ags_notation_finalize(GObject *object); void ags_notation_change_bpm(AgsTactable *tactable, gdouble bpm); void ags_notation_set_port(AgsPortlet *portlet, AgsPort *port); AgsPort* ags_notation_get_port(AgsPortlet *portlet); GList* ags_notation_list_safe_properties(AgsPortlet *portlet); void ags_notation_safe_set_property(AgsPortlet *portlet, gchar *property_name, GValue *value); void ags_notation_safe_get_property(AgsPortlet *portlet, gchar *property_name, GValue *value); void ags_notation_insert_native_piano_from_clipboard(AgsNotation *notation, xmlNodePtr root_node, char *version, char *base_frequency, char *x_boundary, char *y_boundary, gboolean from_x_offset, guint x_offset, gboolean from_y_offset, guint y_offset); /** * SECTION:ags_notation * @short_description: Notation class supporting selection and clipboard. * @title: AgsNotation * @section_id: * @include: ags/audio/ags_notation.h * * #AgsNotation acts as a container of #AgsNote. */ enum{ PROP_0, PROP_PORT, PROP_CURRENT_NOTES, PROP_NEXT_NOTES, }; static gpointer ags_notation_parent_class = NULL; GType ags_notation_get_type() { static GType ags_type_notation = 0; if(!ags_type_notation){ static const GTypeInfo ags_notation_info = { sizeof(AgsNotationClass), NULL, NULL, (GClassInitFunc) ags_notation_class_init, NULL, NULL, sizeof(AgsNotation), 0, (GInstanceInitFunc) ags_notation_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_notation_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_tactable_interface_info = { (GInterfaceInitFunc) ags_notation_tactable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_portlet_interface_info = { (GInterfaceInitFunc) ags_notation_portlet_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_notation = g_type_register_static(G_TYPE_OBJECT, "AgsNotation\0", &ags_notation_info, 0); g_type_add_interface_static(ags_type_notation, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_notation, AGS_TYPE_TACTABLE, &ags_tactable_interface_info); g_type_add_interface_static(ags_type_notation, AGS_TYPE_PORTLET, &ags_portlet_interface_info); } return(ags_type_notation); } void ags_notation_class_init(AgsNotationClass *notation) { GObjectClass *gobject; GParamSpec *param_spec; ags_notation_parent_class = g_type_class_peek_parent(notation); gobject = (GObjectClass *) notation; gobject->set_property = ags_notation_set_property; gobject->get_property = ags_notation_get_property; gobject->finalize = ags_notation_finalize; /* properties */ /** * AgsNotation:port: * * The assigned #AgsPort * * Since: 0.4.0 */ param_spec = g_param_spec_object("port\0", "port of notation\0", "The port of notation\0", AGS_TYPE_PORT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_PORT, param_spec); /** * AgsNotation:current-notes: * * Offset of current position. * * Since: 0.4.0 */ param_spec = g_param_spec_pointer("current-notes\0", "current notes for offset\0", "The current notes for offset\0", G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_CURRENT_NOTES, param_spec); /** * AgsNotation:next-notes: * * Offset of next position. * * Since: 0.4.0 */ param_spec = g_param_spec_pointer("next-notes\0", "next notes for offset\0", "The next notes for offset\0", G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_NEXT_NOTES, param_spec); } void ags_notation_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->is_ready = NULL; connectable->is_connected = NULL; connectable->connect = ags_notation_connect; connectable->disconnect = ags_notation_disconnect; } void ags_notation_tactable_interface_init(AgsTactableInterface *tactable) { tactable->change_bpm = ags_notation_change_bpm; } void ags_notation_portlet_interface_init(AgsPortletInterface *portlet) { portlet->set_port = ags_notation_set_port; portlet->get_port = ags_notation_get_port; portlet->list_safe_properties = ags_notation_list_safe_properties; portlet->safe_set_property = ags_notation_safe_set_property; portlet->safe_get_property = ags_notation_safe_get_property; } void ags_notation_init(AgsNotation *notation) { notation->flags = 0; //TODO:JK: define timestamp notation->timestamp = NULL; notation->audio_channel = 0; notation->audio = NULL; notation->key = g_strdup("violine\0"); notation->base_note = g_strdup("A"); notation->base_frequency = 440.0; notation->tact = AGS_NOTATION_MINIMUM_NOTE_LENGTH; notation->bpm = 120.0; notation->maximum_note_length = AGS_NOTATION_MAXIMUM_NOTE_LENGTH; notation->notes = NULL; notation->start_loop = 0.0; notation->end_loop = 0.0; notation->offset = 0.0; notation->selection = NULL; notation->port = NULL; notation->current_notes = NULL; notation->next_notes = NULL; } void ags_notation_connect(AgsConnectable *connectable) { /* empty */ } void ags_notation_disconnect(AgsConnectable *connectable) { /* empty */ } void ags_notation_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsNotation *notation; notation = AGS_NOTATION(gobject); switch(prop_id){ case PROP_PORT: { AgsPort *port; port = (AgsPort *) g_value_get_object(value); if(port == (AgsPort *) notation->port){ return; } if(notation->port != NULL){ g_object_unref(G_OBJECT(notation->port)); } if(port != NULL){ g_object_ref(G_OBJECT(port)); } notation->port = (GObject *) port; } break; case PROP_CURRENT_NOTES: { AgsPort *port; GList *current_notes, *list; current_notes = (GList *) g_value_get_pointer(value); port = AGS_PORT(notation->port); pthread_mutex_lock(&(port->mutex)); if(notation->current_notes != NULL){ ags_list_free_and_unref_link(notation->current_notes); } if(current_notes != NULL){ list = current_notes; while(list != NULL){ g_object_ref(G_OBJECT(list->data)); list = list->next; } } notation->current_notes = current_notes; pthread_mutex_unlock(&(port->mutex)); } break; case PROP_NEXT_NOTES: { AgsPort *port; GList *next_notes, *list; next_notes = (GList *) g_value_get_pointer(value); port = AGS_PORT(notation->port); pthread_mutex_lock(&(port->mutex)); if(notation->next_notes != NULL){ ags_list_free_and_unref_link(notation->next_notes); } if(next_notes != NULL){ list = next_notes; while(list != NULL){ g_object_ref(G_OBJECT(list->data)); list = list->next; } } notation->next_notes = next_notes; pthread_mutex_unlock(&(port->mutex)); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_notation_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsNotation *notation; notation = AGS_NOTATION(gobject); switch(prop_id){ case PROP_PORT: g_value_set_object(value, notation->port); break; case PROP_CURRENT_NOTES: { AgsPort *port; GList *start, *list; port = AGS_PORT(notation->port); pthread_mutex_lock(&(port->mutex)); start = list = g_list_copy(notation->current_notes); while(list != NULL){ g_object_ref(G_OBJECT(list->data)); list = list->next; } pthread_mutex_unlock(&(port->mutex)); g_value_set_pointer(value, (gpointer) start); } break; case PROP_NEXT_NOTES: { AgsPort *port; GList *start, *list; port = AGS_PORT(notation->port); pthread_mutex_lock(&(port->mutex)); start = list = g_list_copy(notation->next_notes); while(list != NULL){ g_object_ref(G_OBJECT(list->data)); list = list->next; } pthread_mutex_unlock(&(port->mutex)); g_value_set_pointer(value, (gpointer) start); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_notation_finalize(GObject *gobject) { AgsNotation *notation; GList *list, *list_next; notation = AGS_NOTATION(gobject); ags_list_free_and_unref_link(notation->notes); G_OBJECT_CLASS(ags_notation_parent_class)->finalize(gobject); } void ags_notation_change_bpm(AgsTactable *tactable, gdouble bpm) { //TODO:JK: implement me } void ags_notation_set_port(AgsPortlet *portlet, AgsPort *port) { g_object_set(G_OBJECT(portlet), "port\0", port, NULL); } AgsPort* ags_notation_get_port(AgsPortlet *portlet) { AgsPort *port; g_object_get(G_OBJECT(portlet), "port\0", &port, NULL); return(port); } GList* ags_notation_list_safe_properties(AgsPortlet *portlet) { static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; static GList *list = NULL; pthread_mutex_lock(&mutex); if(list == NULL){ list = g_list_prepend(list, "current-notes\0"); list = g_list_prepend(list, "next-notes\0"); } pthread_mutex_unlock(&mutex); return(list); } void ags_notation_safe_set_property(AgsPortlet *portlet, gchar *property_name, GValue *value) { //TODO:JK: add check for safe property g_object_set_property(G_OBJECT(portlet), property_name, value); } void ags_notation_safe_get_property(AgsPortlet *portlet, gchar *property_name, GValue *value) { //TODO:JK: add check for safe property g_object_get_property(G_OBJECT(portlet), property_name, value); } /** * ags_notation_find_near_timestamp: * @notation: a #GList containing #AgsNotation * @audio_channel: the matching audio channel * @timestamp: the matching timestamp * * Retrieve appropriate notation for timestamp. * * Returns: Next match. * * Since: 0.4 */ GList* ags_notation_find_near_timestamp(GList *notation, guint audio_channel, GObject *gobject) { AgsTimestamp *timestamp, *current_timestamp; if(gobject == NULL){ return(NULL); } timestamp = AGS_TIMESTAMP(gobject); while(notation != NULL){ if(AGS_NOTATION(notation->data)->audio_channel != audio_channel){ notation = notation->next; continue; } current_timestamp = (AgsTimestamp *) AGS_NOTATION(notation->data)->timestamp; if((AGS_TIMESTAMP_UNIX & (timestamp->flags)) != 0){ if((AGS_TIMESTAMP_UNIX & (current_timestamp->flags)) != 0){ if(current_timestamp->timer.unix_time.time_val >= timestamp->timer.unix_time.time_val && current_timestamp->timer.unix_time.time_val < timestamp->timer.unix_time.time_val + AGS_NOTATION_DEFAULT_DURATION){ return(notation); } } } notation = notation->next; } return(NULL); } /** * ags_notation_add_note: * @notation: an #AgsNotation * @note: the #AgsNote to add * @use_selection_list: if %TRUE add to selection, else to default notation * * Adds a note to notation. * * Since: 0.4 */ void ags_notation_add_note(AgsNotation *notation, AgsNote *note, gboolean use_selection_list) { GList *list, *list_new; void ags_notation_add_note_add1(){ list_new = (GList *) malloc(sizeof(GList)); list_new->data = (gpointer) note; if(list->prev == NULL){ list_new->prev = NULL; list_new->next = list; list->prev = list_new; if(use_selection_list) notation->selection = list_new; else notation->notes = list_new; }else{ list_new->prev = list->prev; list_new->next = list; list->prev = list_new; list_new->prev->next = list_new; } } if(use_selection_list) list = notation->selection; else list = notation->notes; if(list == NULL){ list_new = g_list_alloc(); list_new->data = (gpointer) note; if(use_selection_list) notation->selection = list_new; else notation->notes = list_new; return; } while(list->next != NULL){ if((AGS_NOTE(list->data))->x[0] >= note->x[0]){ while(list->next != NULL){ if((AGS_NOTE(list->data))->x[0] > note->x[0] || (AGS_NOTE(list->data))->y >= note->y){ ags_notation_add_note_add1(); return; } list = list->next; } break; } list = list->next; } if((AGS_NOTE(list->data))->x[0] >= note->x[0]) ags_notation_add_note_add1(); else{ list_new = g_list_alloc(); list_new->data = (gpointer) note; list_new->prev = list; list_new->next = list->next; if(list->next != NULL){ list->next->prev = list_new; } list->next = list_new; } } /** * ags_notation_remove_note_at_position: * @notation: an #AgsNotation * @x: offset * @y: note * * Removes one #AgsNote of notation. * * Returns: %TRUE if successfully removed note. * * Since: 0.4 */ gboolean ags_notation_remove_note_at_position(AgsNotation *notation, guint x, guint y) { AgsNote *note; GList *notes, *notes_next, *notes_prev; GList *notes_end_region, *reverse_start; guint x_start, i; notes = notation->notes; if(notes == NULL){ return(FALSE); } /* get entry point */ while(notes->next != NULL && (note = AGS_NOTE(notes->data))->x[0] < x){ notes = notes->next; } notes_end_region = notes; /* search in y region for appropriate note */ if(notes != NULL && (note = AGS_NOTE(notes->data))->x[0] == x){ do{ notes_next = notes->next; if(note->y == y){ #ifdef AGS_DEBUG g_message("remove\0"); #endif //TODO:JK: work-around // notation->notes = g_list_delete_link(notation->notes, notes); if(notes->prev != NULL){ notes->prev->next = notes->next; } if(notes->next != NULL){ notes->next->prev = notes->prev; } if(notation->notes == notes){ notation->notes = notes->next; } notes->prev = NULL; notes->next = NULL; g_list_free_1(notes); g_object_unref(note); return(TRUE); } notes = notes_next; }while(notes != NULL && (note = AGS_NOTE(notes->data))->x[0] == x && note->y <= y); notes = notes_end_region->prev; }else{ notes = notes_end_region; } /* search backward until x_start */ while(notes != NULL && (note = AGS_NOTE(notes->data))->x[0] >= x - (notation->maximum_note_length / notation->tact)){ if(note->y == y){ if(note->x[0] < x){ #ifdef AGS_DEBUG g_message("remove\0"); #endif //TODO:JK: work-around // notation->notes = g_list_delete_link(notation->notes, notes); if(notes->prev != NULL){ notes->prev->next = notes->next; } if(notes->next != NULL){ notes->next->prev = notes->prev; } if(notation->notes == notes){ notation->notes = notes->next; } notes->prev = NULL; notes->next = NULL; g_list_free_1(notes); g_object_unref(note); return(TRUE); } } notes = notes->prev; } return(FALSE); } /** * ags_notation_get_selection: * @notation: the #AgsNotation * * Retrieve selection. * * Returns: the selection. * * Since: 0.4 */ GList* ags_notation_get_selection(AgsNotation *notation) { return(notation->selection); } /** * ags_notation_is_note_selected: * @notation: the #AgsNotation * @note: the #AgsNote to check for * * Check selection for note. * * Returns: %TRUE if selected * * Since: 0.4 */ gboolean ags_notation_is_note_selected(AgsNotation *notation, AgsNote *note) { GList *selection; selection = notation->selection; while(selection != NULL && AGS_NOTE(selection->data)->x[0] <= note->x[0]){ if(selection->data == note) return(TRUE); selection = selection->next; } return(FALSE); } /** * ags_notation_find_point: * @notation: an #AgsNotation * @x: offset * @y: note * @use_selection_list: if %TRUE selection is searched * * Find note by offset and tone. * * Returns: the matching note. * * Since: 0.4 */ AgsNote* ags_notation_find_point(AgsNotation *notation, guint x, guint y, gboolean use_selection_list) { AgsNote *note, *prev_note; GList *notes; if(use_selection_list){ notes = notation->selection; }else{ notes = notation->notes; } while(notes != NULL && AGS_NOTE(notes->data)->x[0] < x){ notes = notes->next; } if(notes == NULL) return(NULL); prev_note = NULL; while(notes != NULL && (note = AGS_NOTE(notes->data))->x[0] == x){ if(note->y == y){ /* find last match for point */ do{ prev_note = note; notes = notes->next; }while(notes != NULL && (note = AGS_NOTE(notes->data))->x[0] == x && note->y == y); break; } notes = notes->next; } return(prev_note); } /** * ags_notation_find_region: * @notation: an #AgsNotation * @x0: start offset * @y0: start tone * @x1: end offset * @y1: end tone * @use_selection:_list if %TRUE selection is searched * * Find notes by offset and tone region. * * Returns: the matching notes as #GList. * * Since: 0.4 */ GList* ags_notation_find_region(AgsNotation *notation, guint x0, guint y0, guint x1, guint y1, gboolean use_selection_list) { AgsNote *note; GList *notes; GList *region; if(x0 > x1){ guint tmp; tmp = x1; x1 = x0; x0 = x1; } if(y0 > y1){ guint tmp; tmp = y1; y1 = y0; y0 = y1; } if(use_selection_list){ notes = notation->selection; }else{ notes = notation->notes; } while(notes != NULL && AGS_NOTE(notes->data)->x[0] < x0){ notes = notes->next; } region = NULL; while(notes != NULL && (note = AGS_NOTE(notes->data))->x[0] < x1){ if(note->y >= y0 && note->y < y1){ region = g_list_prepend(region, note); } notes = notes->next; } region = g_list_reverse(region); return(region); } /** * ags_notation_free_selection: * @notation: an #AgsNotation * * Clear selection. * * Since: 0.4 */ void ags_notation_free_selection(AgsNotation *notation) { AgsNote *note; GList *list; list = notation->selection; while(list != NULL){ note = AGS_NOTE(list->data); note->flags &= (~AGS_NOTE_IS_SELECTED); g_object_unref(G_OBJECT(note)); list = list->next; } list = notation->selection; notation->selection = NULL; g_list_free(list); } /** * ags_notation_add_all_to_selection: * @notation: an #AgsNotation * * Select all. * * Since: 0.4.2 */ void ags_notation_add_all_to_selection(AgsNotation *notation) { AgsNote *note; GList *region, *list; ags_notation_free_selection(notation); list = notation->notes; while(list != NULL){ AGS_NOTE(list->data)->flags |= AGS_NOTE_IS_SELECTED; g_object_ref(G_OBJECT(list->data)); list = list->next; } notation->selection = g_list_copy(notation->notes); } /** * ags_notation_add_point_to_selection: * @notation: an #AgsNotation * @x: offset * @y: tone * @replace_current_selection: if %TRUE selection is replaced * * Select notes at position. * * Since: 0.4 */ void ags_notation_add_point_to_selection(AgsNotation *notation, guint x, guint y, gboolean replace_current_selection) { AgsNote *note; note = ags_notation_find_point(notation, x, y, FALSE); if(note == NULL){ /* there is nothing to be selected */ if(replace_current_selection){ ags_notation_free_selection(notation); } }else{ /* add to or replace selection */ note->flags |= AGS_NOTE_IS_SELECTED; g_object_ref(note); if(replace_current_selection){ GList *list; list = g_list_alloc(); list->data = note; ags_notation_free_selection(notation); notation->selection = list; }else{ if(!ags_notation_is_note_selected(notation, note)){ ags_notation_add_note(notation, note, TRUE); } } } } /** * ags_notation_remove_point_from_selection: * @notation: an #AgsNotation * @x: offset * @y: tone * * Remove notes at position of selection. * * Since: 0.4 */ void ags_notation_remove_point_from_selection(AgsNotation *notation, guint x, guint y) { AgsNote *note; note = ags_notation_find_point(notation, x, y, FALSE); if(note != NULL){ note->flags &= (~AGS_NOTE_IS_SELECTED); /* remove note from selection */ notation->selection = g_list_remove(notation->selection, note); g_object_unref(note); } } /** * ags_notation_add_region_to_selection: * @notation: an #AgsNotation * @x0: start offset * @y0: start tone * @x1: end offset * @y1: end tone * @replace_current_selection: if %TRUE selection is replaced * * Select notes within region. * * Since: 0.4 */ void ags_notation_add_region_to_selection(AgsNotation *notation, guint x0, guint y0, guint x1, guint y1, gboolean replace_current_selection) { AgsNote *note; GList *region, *list; region = ags_notation_find_region(notation, x0, y0, x1, y1, FALSE); if(replace_current_selection){ ags_notation_free_selection(notation); list = region; while(list != NULL){ AGS_NOTE(list->data)->flags |= AGS_NOTE_IS_SELECTED; g_object_ref(G_OBJECT(list->data)); list = list->next; } notation->selection = region; }else{ while(region != NULL){ note = AGS_NOTE(region->data); if(!ags_notation_is_note_selected(notation, note)){ note->flags |= AGS_NOTE_IS_SELECTED; g_object_ref(G_OBJECT(note)); ags_notation_add_note(notation, note, TRUE); } region = region->next; } g_list_free(region); } } /** * ags_notation_remove_region_from_selection: * @notation: an #AgsNotation * @x0: start offset * @y0: start tone * @x1: end offset * @y1: end tone * * Remove notes within region of selection. * * Since: 0.4 */ void ags_notation_remove_region_from_selection(AgsNotation *notation, guint x0, guint y0, guint x1, guint y1) { AgsNote *note; GList *region; region = ags_notation_find_region(notation, x0, y0, x1, y1, TRUE); while(region != NULL){ note = AGS_NOTE(region->data); note->flags &= (~AGS_NOTE_IS_SELECTED); notation->selection = g_list_remove(notation->selection, note); g_object_unref(G_OBJECT(note)); region = region->next; } g_list_free(region); } /** * ags_notation_copy_selection: * @notation: an #AgsNotation * * Copy selection to clipboard. * * Returns: the selection as XML. * * Since: 0.4 */ xmlNodePtr ags_notation_copy_selection(AgsNotation *notation) { AgsNote *note; xmlNodePtr notation_node, current_note; GList *selection; guint x_boundary, y_boundary; selection = notation->selection; /* create root node */ notation_node = xmlNewNode(NULL, BAD_CAST "notation\0"); xmlNewProp(notation_node, BAD_CAST "program\0", BAD_CAST "ags\0"); xmlNewProp(notation_node, BAD_CAST "type\0", BAD_CAST AGS_NOTATION_CLIPBOARD_TYPE); xmlNewProp(notation_node, BAD_CAST "version\0", BAD_CAST AGS_NOTATION_CLIPBOARD_VERSION); xmlNewProp(notation_node, BAD_CAST "format\0", BAD_CAST AGS_NOTATION_CLIPBOARD_FORMAT); xmlNewProp(notation_node, BAD_CAST "base_frequency\0", BAD_CAST g_strdup_printf("%u\0", notation->base_frequency)); xmlNewProp(notation_node, BAD_CAST "audio-channel\0", BAD_CAST g_strdup_printf("%u\0", notation->audio_channel)); selection = notation->selection; if(selection != NULL){ x_boundary = AGS_NOTE(selection->data)->x[0]; y_boundary = G_MAXUINT; }else{ x_boundary = 0; y_boundary = 0; } while(selection != NULL){ note = AGS_NOTE(selection->data); current_note = xmlNewChild(notation_node, NULL, BAD_CAST "note\0", NULL); xmlNewProp(current_note, BAD_CAST "x\0", BAD_CAST g_strdup_printf("%u\0", note->x[0])); xmlNewProp(current_note, BAD_CAST "x1\0", BAD_CAST g_strdup_printf("%u\0", note->x[1])); xmlNewProp(current_note, BAD_CAST "y\0", BAD_CAST g_strdup_printf("%u\0", note->y)); if(y_boundary > note->y) y_boundary = note->y; selection = selection->next; } xmlNewProp(notation_node, BAD_CAST "x_boundary\0", BAD_CAST g_strdup_printf("%u\0", x_boundary)); xmlNewProp(notation_node, BAD_CAST "y_boundary\0", BAD_CAST g_strdup_printf("%u\0", y_boundary)); return(notation_node); } /** * ags_notation_cut_selection: * @notation: an #AgsNotation * * Cut selection to clipboard. * * Returns: the selection as XML. * * Since: 0.4 */ xmlNodePtr ags_notation_cut_selection(AgsNotation *notation) { xmlNodePtr notation_node; GList *selection, *selection_next, *notes; notation_node = ags_notation_copy_selection(notation); selection = notation->selection; notes = notation->notes; while(selection != NULL){ notes = g_list_find(notes, selection->data); selection_next = selection->next; if(notes->prev == NULL){ notation->notes = g_list_remove_link(notes, notes); notes = notation->notes; }else{ GList *next_note; next_note = notes->next; notes->prev->next = next_note; if(next_note != NULL) next_note->prev = notes->prev; g_list_free_1(notes); notes = next_note; } AGS_NOTE(selection->data)->flags &= (~AGS_NOTE_IS_SELECTED); g_object_unref(selection->data); selection = selection_next; } ags_notation_free_selection(notation); return(notation_node); } /** * ags_notation_insert_native_piano_from_clipboard: * @notation: an #AgsNotation * @notation_node: the clipboard XML data * @version: clipboard version * @base_frequency: lowest frequency of notation * @x_boundary: region start offset * @y_boundary: region start tone * @reset_x_offset: if %TRUE @x_offset used as cursor * @x_offset: region start cursor offset * @reset_y_offset: if %TRUE @y_offset used as cursor * @y_offset: region start cursor tone * * Paste previously copied notes. * * Since: 0.4 */ void ags_notation_insert_native_piano_from_clipboard(AgsNotation *notation, xmlNodePtr root_node, char *version, char *base_frequency, char *x_boundary, char *y_boundary, gboolean reset_x_offset, guint x_offset, gboolean reset_y_offset, guint y_offset) { void ags_notation_insert_native_piano_from_clipboard_version_0_3_12(){ AgsNote *note; xmlNodePtr node; char *endptr; guint x_boundary_val, y_boundary_val; char *x0, *x1, *y; guint x0_val, x1_val, y_val; guint base_x_difference, base_y_difference; gboolean subtract_x, subtract_y; node = root_node->children; /* retrieve x values for resetting */ if(reset_x_offset){ if(x_boundary != NULL){ errno = 0; x_boundary_val = strtoul(x_boundary, &endptr, 10); if(errno == ERANGE){ goto dont_reset_x_offset; } if(x_boundary == endptr){ goto dont_reset_x_offset; } if(x_boundary_val < x_offset){ base_x_difference = x_offset - x_boundary_val; subtract_x = FALSE; }else{ base_x_difference = x_boundary_val - x_offset; subtract_x = TRUE; } }else{ dont_reset_x_offset: reset_x_offset = FALSE; } } /* retrieve y values for resetting */ if(reset_y_offset){ if(y_boundary != NULL){ errno = 0; y_boundary_val = strtoul(y_boundary, &endptr, 10); if(errno == ERANGE){ goto dont_reset_y_offset; } if(y_boundary == endptr){ goto dont_reset_y_offset; } if(y_boundary_val < y_offset){ base_y_difference = y_offset - y_boundary_val; subtract_y = FALSE; }else{ base_y_difference = y_boundary_val - y_offset; subtract_y = TRUE; } }else{ dont_reset_y_offset: reset_y_offset = FALSE; } } for(; node != NULL; ){ if(node->type == XML_ELEMENT_NODE && !xmlStrncmp("note\0", node->name, 5)){ /* retrieve x0 offset */ x0 = xmlGetProp(node, "x\0"); if(x0 == NULL){ node = node->next; continue; } errno = 0; x0_val = strtoul(x0, &endptr, 10); if(errno == ERANGE){ node = node->next; continue; } if(x0 == endptr){ node = node->next; continue; } /* retrieve x1 offset */ x1 = xmlGetProp(node, "x1\0"); if(x1 == NULL){ node = node->next; continue; } errno = 0; x1_val = strtoul(x1, &endptr, 10); if(errno == ERANGE){ node = node->next; continue; } if(x1 == endptr){ node = node->next; continue; } /* retrieve y offset */ y = xmlGetProp(node, "y\0"); if(y == NULL){ node = node->next; continue; } errno = 0; y_val = strtoul(y, &endptr, 10); if(errno == ERANGE){ node = node->next; continue; } if(y == endptr){ node = node->next; continue; } /* switch x values if necessary */ if(x0_val > x1_val){ guint tmp; tmp = x0_val; x0_val = x1_val; x1_val = tmp; } /* calculate new offset */ if(reset_x_offset){ errno = 0; if(subtract_x){ x0_val -= base_x_difference; if(errno != 0){ node = node->next; continue; } x1_val -= base_x_difference; }else{ x0_val += base_x_difference; x1_val += base_x_difference; if(errno != 0){ node = node->next; continue; } } } if(reset_y_offset){ errno = 0; if(subtract_y){ y_val -= base_y_difference; }else{ y_val += base_y_difference; } if(errno != 0){ node = node->next; continue; } } /* check if max length wasn't exceeded */ if(x1_val - x0_val > notation->maximum_note_length){ node = node->next; continue; } /* add note */ note = ags_note_new(); note->x[0] = x0_val; note->x[1] = x1_val; note->y = y_val; g_message("adding note at: [%u,%u|%u]\n\0", x0_val, x1_val, y_val); ags_notation_add_note(notation, note, FALSE); } node = node->next; } } if(!xmlStrncmp("0.3.12\0", version, 7)){ ags_notation_insert_native_piano_from_clipboard_version_0_3_12(); }else if(!xmlStrncmp("0.4.2\0", version, 7)){ /* changes contain only for UI relevant new informations */ ags_notation_insert_native_piano_from_clipboard_version_0_3_12(); } } /** * ags_notation_insert_from_clipboard: * @notation: an #AgsNotation * @notation_node: the clipboard XML data * @reset_x_offset: if %TRUE @x_offset used as cursor * @x_offset: region start cursor offset * @reset_y_offset: if %TRUE @y_offset used as cursor * @y_offset: region start cursor tone * * Paste previously copied notes. * * Since: 0.4 */ void ags_notation_insert_from_clipboard(AgsNotation *notation, xmlNodePtr notation_node, gboolean reset_x_offset, guint x_offset, gboolean reset_y_offset, guint y_offset) { char *program, *version, *type, *format; char *base_frequency; char *x_boundary, *y_boundary; while(notation_node != NULL){ if(notation_node->type == XML_ELEMENT_NODE && !xmlStrncmp("notation\0", notation_node->name, 9)) break; notation_node = notation_node->next; } if(notation_node != NULL){ program = xmlGetProp(notation_node, "program\0"); if(!xmlStrncmp("ags\0", program, 4)){ version = xmlGetProp(notation_node, "version\0"); type = xmlGetProp(notation_node, "type\0"); format = xmlGetProp(notation_node, "format\0"); if(!xmlStrncmp("AgsNotationNativePiano\0", format, 22)){ base_frequency = xmlGetProp(notation_node, "base_frequency\0"); x_boundary = xmlGetProp(notation_node, "x_boundary\0"); y_boundary = xmlGetProp(notation_node, "y_boundary\0"); ags_notation_insert_native_piano_from_clipboard(notation, notation_node, version, base_frequency, x_boundary, y_boundary, reset_x_offset, x_offset, reset_y_offset, y_offset); } } } } GList* ags_notation_get_current(AgsNotation *notation) { GList *list; list = NULL; //TODO:JK: get current return(list); } /** * ags_notation_new: * @audio_channel: the audio channel to be used * * Creates a #AgsNotation, assigned to @audio_channel. * * Returns: a new #AgsNotation * * Since: 0.4 */ AgsNotation* ags_notation_new(guint audio_channel) { AgsNotation *notation; notation = (AgsNotation *) g_object_new(AGS_TYPE_NOTATION, NULL); notation->audio_channel = audio_channel; return(notation); } gsequencer-0.6.37/src/ags/audio/ags_timestamp_factory.h0000644000175000017500000000457312626272146020111 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_TIMESTAMP_FACTORY_H__ #define __AGS_TIMESTAMP_FACTORY_H__ #include #include #include #define AGS_TYPE_TIMESTAMP_FACTORY (ags_timestamp_factory_get_type()) #define AGS_TIMESTAMP_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_TIMESTAMP_FACTORY, AgsTimestampFactory)) #define AGS_TIMESTAMP_FACTORY_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_TIMESTAMP_FACTORY, AgsTimestampFactoryClass)) #define AGS_IS_TIMESTAMP_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_TIMESTAMP_FACTORY)) #define AGS_IS_TIMESTAMP_FACTORY_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_TIMESTAMP_FACTORY)) #define AGS_TIMESTAMP_FACTORY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_TIMESTAMP_FACTORY, AgsTimestampFactoryClass)) typedef struct _AgsTimestampFactory AgsTimestampFactory; typedef struct _AgsTimestampFactoryClass AgsTimestampFactoryClass; typedef enum{ AGS_TIMESTAMP_FACTORY_UNIX = 1, }AgsTimestampFactoryFlags; struct _AgsTimestampFactory { GObject object; guint flags; GList *timestamp; }; struct _AgsTimestampFactoryClass { GObjectClass object; AgsTimestamp* (*create)(AgsTimestampFactory *timestamp_factory, AgsTimestamp *predecor); }; GType ags_timestamp_factory_get_type(void); AgsTimestamp* ags_timestamp_factory_create(AgsTimestampFactory *timestamp_factory, AgsTimestamp *predecor); /* */ AgsTimestampFactory* ags_timestamp_factory_get_instance(); AgsTimestampFactory* ags_timestamp_factory_new(); #endif /*__AGS_TIMESTAMP_FACTORY_H__*/ gsequencer-0.6.37/src/ags/audio/ags_pattern.h0000644000175000017500000000415612612232537016024 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_PATTERN_H__ #define __AGS_PATTERN_H__ #include #include #define AGS_TYPE_PATTERN (ags_pattern_get_type()) #define AGS_PATTERN(obj) (G_TYPE_CHECK_INSTANCE_CAST(obj, AGS_TYPE_PATTERN, AgsPattern)) #define AGS_PATTERN_CLASS(class) (G_TYPE_CHECK_CLASS_CAST(class, AGS_TYPE_PATTERN, AgsPatternClass)) #define AGS_IS_PATTERN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_PATTERN)) #define AGS_IS_PATTERN_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_PATTERN)) #define AGS_PATTERN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_PATTERN, AgsPatternClass)) typedef struct _AgsPattern AgsPattern; typedef struct _AgsPatternClass AgsPatternClass; struct _AgsPattern { GObject object; GObject *timestamp; guint dim[3]; guint ***pattern; GObject *port; guint i; guint j; guint bit; }; struct _AgsPatternClass { GObjectClass object; }; GType ags_pattern_get_type(); AgsPattern* ags_pattern_get_by_timestamp(GList *list, GObject *timestamp); void ags_pattern_set_dim(AgsPattern *pattern, guint dim0, guint dim1, guint lenght); gboolean ags_pattern_get_bit(AgsPattern *pattern, guint i, guint j, guint bit); void ags_pattern_toggle_bit(AgsPattern *pattern, guint i, guint j, guint bit); AgsPattern* ags_pattern_new(); #endif /*__AGS_PATTERN_H__*/ gsequencer-0.6.37/src/ags/audio/ags_recall_channel_run.h0000644000175000017500000000533612626272146020173 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_RECALL_CHANNEL_RUN_H__ #define __AGS_RECALL_CHANNEL_RUN_H__ #include #include #include #include #include #include #include #define AGS_TYPE_RECALL_CHANNEL_RUN (ags_recall_channel_run_get_type()) #define AGS_RECALL_CHANNEL_RUN(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_RECALL_CHANNEL_RUN, AgsRecallChannelRun)) #define AGS_RECALL_CHANNEL_RUN_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_RECALL_CHANNEL_RUN, AgsRecallChannelRunClass)) #define AGS_IS_RECALL_CHANNEL_RUN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_RECALL_CHANNEL_RUN)) #define AGS_IS_RECALL_CHANNEL_RUN_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_RECALL_CHANNEL_RUN)) #define AGS_RECALL_CHANNEL_RUN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_RECALL_CHANNEL_RUN, AgsRecallChannelRunClass)) typedef struct _AgsRecallChannelRun AgsRecallChannelRun; typedef struct _AgsRecallChannelRunClass AgsRecallChannelRunClass; struct _AgsRecallChannelRun { AgsRecall recall; guint audio_channel; AgsRecallChannel *recall_channel; AgsRecallAudioRun *recall_audio_run; AgsChannel *destination; gulong destination_recycling_changed_handler; gulong changed_output_handler; AgsChannel *source; gulong source_recycling_changed_handler; guint run_order; }; struct _AgsRecallChannelRunClass { AgsRecallClass recall; void (*run_order_changed)(AgsRecallChannelRun *recall_channel_run, guint nth_run); }; GType ags_recall_channel_run_get_type(); void ags_recall_channel_run_run_order_changed(AgsRecallChannelRun *recall_channel_run, guint run_order); guint ags_recall_channel_run_get_run_order(AgsRecallChannelRun *recall_channel_run); AgsRecallChannelRun* ags_recall_channel_run_new(); #endif /*__AGS_RECALL_CHANNEL_RUN_H__*/ gsequencer-0.6.37/src/ags/audio/ags_timestamp_factory.c0000644000175000017500000001056412626272146020101 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_timestamp_factory_class_init(AgsTimestampFactoryClass *timestamp_factory); void ags_timestamp_factory_init (AgsTimestampFactory *timestamp_factory); void ags_timestamp_factory_finalize(GObject *gobject); /** * SECTION:ags_timestamp_factory * @short_description: Factory pattern * @title: AgsTimestampFactory * @section_id: * @include: ags/audio/ags_timestamp_factory.h * * #AgsTimestampFactory pattern. */ AgsTimestamp* ags_timestamp_factory_real_create(AgsTimestampFactory *timestamp_factory, AgsTimestamp *predecor); enum{ CREATE, LAST_SIGNAL, }; static gpointer ags_timestamp_factory_parent_class = NULL; static guint timestamp_factory_signals[LAST_SIGNAL]; static AgsTimestampFactory *ags_timestamp_factory = NULL; GType ags_timestamp_factory_get_type (void) { static GType ags_type_timestamp_factory = 0; if(!ags_type_timestamp_factory){ static const GTypeInfo ags_timestamp_factory_info = { sizeof (AgsTimestampFactoryClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_timestamp_factory_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsTimestampFactory), 0, /* n_preallocs */ (GInstanceInitFunc) ags_timestamp_factory_init, }; ags_type_timestamp_factory = g_type_register_static(G_TYPE_OBJECT, "AgsTimestampFactory\0", &ags_timestamp_factory_info, 0); } return (ags_type_timestamp_factory); } void ags_timestamp_factory_class_init(AgsTimestampFactoryClass *timestamp_factory) { GObjectClass *gobject; ags_timestamp_factory_parent_class = g_type_class_peek_parent(timestamp_factory); /* GObjectClass */ gobject = (GObjectClass *) timestamp_factory; gobject->finalize = ags_timestamp_factory_finalize; /* */ timestamp_factory->create = ags_timestamp_factory_real_create; timestamp_factory_signals[CREATE] = g_signal_new("create\0", G_TYPE_FROM_CLASS (timestamp_factory), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AgsTimestampFactoryClass, create), NULL, NULL, g_cclosure_user_marshal_OBJECT__OBJECT_OBJECT, G_TYPE_OBJECT, 2, G_TYPE_OBJECT, G_TYPE_OBJECT); } void ags_timestamp_factory_init(AgsTimestampFactory *timestamp_factory) { timestamp_factory->flags = 0; timestamp_factory->timestamp = NULL; } void ags_timestamp_factory_finalize(GObject *gobject) { //TODO:JK: implement me } AgsTimestamp* ags_timestamp_factory_real_create(AgsTimestampFactory *timestamp_factory, AgsTimestamp *predecor) { AgsTimestamp *timestamp; timestamp = ags_timestamp_new(); timestamp_factory->timestamp = g_list_prepend(timestamp_factory->timestamp, timestamp); if(predecor != NULL){ //TODO:JK: implement me } return(timestamp); } AgsTimestamp* ags_timestamp_factory_create(AgsTimestampFactory *timestamp_factory, AgsTimestamp *predecor) { //TODO:JK: implement me } AgsTimestampFactory* ags_timestamp_factory_get_instance() { pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_lock(&(mutex)); if(ags_timestamp_factory == NULL){ ags_timestamp_factory = ags_timestamp_factory_new(); } pthread_mutex_unlock(&(mutex)); return(ags_timestamp_factory); } /** * ags_timestamp_factory_new: * * Creates an #AgsTimestampFactory * * Returns: a new #AgsTimestampFactory * * Since: 0.4 */ AgsTimestampFactory* ags_timestamp_factory_new() { AgsTimestampFactory *timestamp_factory; timestamp_factory = (AgsTimestampFactory *) g_object_new(AGS_TYPE_TIMESTAMP_FACTORY, NULL); return(timestamp_factory); } gsequencer-0.6.37/src/ags/audio/ags_recall_ladspa_run.c0000644000175000017500000002753212626272146020024 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include void ags_recall_ladspa_run_class_init(AgsRecallLadspaRunClass *recall_ladspa_run_class); void ags_recall_ladspa_run_connectable_interface_init(AgsConnectableInterface *connectable); void ags_recall_ladspa_run_plugin_interface_init(AgsPluginInterface *plugin); void ags_recall_ladspa_run_init(AgsRecallLadspaRun *recall_ladspa_run); void ags_recall_ladspa_run_connect(AgsConnectable *connectable); void ags_recall_ladspa_run_disconnect(AgsConnectable *connectable); void ags_recall_ladspa_run_finalize(GObject *gobject); void ags_recall_ladspa_run_run_init_pre(AgsRecall *recall); void ags_recall_ladspa_run_run_pre(AgsRecall *recall); void ags_recall_ladspa_run_run_inter(AgsRecall *recall); void ags_recall_ladspa_run_load_ports(AgsRecallLadspaRun *recall_ladspa_run); /** * SECTION:ags_recall_ladspa_run * @Short_description: The object interfacing with LADSPA * @Title: AgsRecallLadspaRun * * #AgsRecallLadspaRun provides LADSPA support. */ static gpointer ags_recall_ladspa_run_parent_class = NULL; static AgsConnectableInterface* ags_recall_ladspa_run_parent_connectable_interface; extern AgsConfig *config; GType ags_recall_ladspa_run_get_type (void) { static GType ags_type_recall_ladspa_run = 0; if(!ags_type_recall_ladspa_run){ static const GTypeInfo ags_recall_ladspa_run_info = { sizeof (AgsRecallLadspaRunClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_recall_ladspa_run_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsRecallLadspaRun), 0, /* n_preallocs */ (GInstanceInitFunc) ags_recall_ladspa_run_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_recall_ladspa_run_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_plugin_interface_info = { (GInterfaceInitFunc) ags_recall_ladspa_run_plugin_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_recall_ladspa_run = g_type_register_static(AGS_TYPE_RECALL_AUDIO_SIGNAL, "AgsRecallLadspaRun\0", &ags_recall_ladspa_run_info, 0); g_type_add_interface_static(ags_type_recall_ladspa_run, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_recall_ladspa_run, AGS_TYPE_PLUGIN, &ags_plugin_interface_info); } return(ags_type_recall_ladspa_run); } void ags_recall_ladspa_run_class_init(AgsRecallLadspaRunClass *recall_ladspa_run) { GObjectClass *gobject; AgsRecallClass *recall; GParamSpec *param_spec; ags_recall_ladspa_run_parent_class = g_type_class_peek_parent(recall_ladspa_run); /* GObjectClass */ gobject = (GObjectClass *) recall_ladspa_run; gobject->finalize = ags_recall_ladspa_run_finalize; /* AgsRecallClass */ recall = (AgsRecallClass *) recall_ladspa_run; recall->run_init_pre = ags_recall_ladspa_run_run_init_pre; recall->run_pre = ags_recall_ladspa_run_run_pre; recall->run_inter = ags_recall_ladspa_run_run_inter; } void ags_recall_ladspa_run_connectable_interface_init(AgsConnectableInterface *connectable) { ags_recall_ladspa_run_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_recall_ladspa_run_connect; connectable->disconnect = ags_recall_ladspa_run_disconnect; } void ags_recall_ladspa_run_plugin_interface_init(AgsPluginInterface *plugin) { //TODO:JK: implement me } void ags_recall_ladspa_run_init(AgsRecallLadspaRun *recall_ladspa_run) { recall_ladspa_run->input = NULL; recall_ladspa_run->output = NULL; } void ags_recall_ladspa_run_connect(AgsConnectable *connectable) { ags_recall_ladspa_run_parent_connectable_interface->connect(connectable); } void ags_recall_ladspa_run_disconnect(AgsConnectable *connectable) { ags_recall_ladspa_run_parent_connectable_interface->disconnect(connectable); } void ags_recall_ladspa_run_finalize(GObject *gobject) { AgsRecallLadspa *recall_ladspa; AgsRecallLadspaRun *recall_ladspa_run; unsigned long i; recall_ladspa_run = AGS_RECALL_LADSPA_RUN(gobject); free(recall_ladspa_run->output); free(recall_ladspa_run->input); /* call parent */ G_OBJECT_CLASS(ags_recall_ladspa_run_parent_class)->finalize(gobject); } void ags_recall_ladspa_run_run_init_pre(AgsRecall *recall) { AgsRecallLadspa *recall_ladspa; AgsRecallLadspaRun *recall_ladspa_run; AgsAudioSignal *audio_signal; AgsConfig *config; unsigned long samplerate; unsigned long buffer_size; unsigned long i; /* call parent */ AGS_RECALL_CLASS(ags_recall_ladspa_run_parent_class)->run_init_pre(recall); recall_ladspa_run = AGS_RECALL_LADSPA_RUN(recall); recall_ladspa = AGS_RECALL_LADSPA(AGS_RECALL_CHANNEL_RUN(recall->parent->parent)->recall_channel); /* set up buffer */ audio_signal = AGS_RECALL_AUDIO_SIGNAL(recall_ladspa_run)->source; /* set up buffer */ samplerate = audio_signal->samplerate; buffer_size = audio_signal->buffer_size; recall_ladspa_run->input = (LADSPA_Data *) malloc(recall_ladspa->input_lines * buffer_size * sizeof(LADSPA_Data)); recall_ladspa_run->output = (LADSPA_Data *) malloc(recall_ladspa->output_lines * buffer_size * sizeof(LADSPA_Data)); recall_ladspa_run->ladspa_handle = (LADSPA_Handle *) malloc(recall_ladspa->input_lines * sizeof(LADSPA_Handle)); for(i = 0; i < recall_ladspa->input_lines; i++){ /* instantiate ladspa */ recall_ladspa_run->ladspa_handle[i] = (LADSPA_Handle *) recall_ladspa->plugin_descriptor->instantiate(recall_ladspa->plugin_descriptor, samplerate); #ifdef AGS_DEBUG g_message("instantiate LADSPA handle\0"); #endif } ags_recall_ladspa_run_load_ports(recall_ladspa_run); /* can't be done in ags_recall_ladspa_run_run_init_inter since possebility of overlapping buffers */ /* connect audio port */ for(i = 0; i < recall_ladspa->input_lines; i++){ recall_ladspa->plugin_descriptor->connect_port(recall_ladspa_run->ladspa_handle[i], recall_ladspa->input_port[i], &(recall_ladspa_run->input[i])); } for(i = 0; i < recall_ladspa->output_lines; i++){ recall_ladspa->plugin_descriptor->connect_port(recall_ladspa_run->ladspa_handle[i], recall_ladspa->output_port[i], &(recall_ladspa_run->output[i])); } for(i = 0; i < recall_ladspa->input_lines; i++){ if(recall_ladspa->plugin_descriptor->activate != NULL){ recall_ladspa->plugin_descriptor->activate(recall_ladspa_run->ladspa_handle[i]); } #ifdef AGS_DEBUG g_message("instantiate LADSPA handle\0"); #endif } } void ags_recall_ladspa_run_run_pre(AgsRecall *recall) { //empty } void ags_recall_ladspa_run_run_inter(AgsRecall *recall) { AgsRecallLadspa *recall_ladspa; AgsRecallLadspaRun *recall_ladspa_run; AgsAudioSignal *audio_signal; unsigned long buffer_size; unsigned long i; /* call parent */ AGS_RECALL_CLASS(ags_recall_ladspa_run_parent_class)->run_inter(recall); recall_ladspa = AGS_RECALL_LADSPA(AGS_RECALL_CHANNEL_RUN(recall->parent->parent)->recall_channel); recall_ladspa_run = AGS_RECALL_LADSPA_RUN(recall); /* set up buffer */ audio_signal = AGS_RECALL_AUDIO_SIGNAL(recall_ladspa_run)->source; buffer_size = audio_signal->buffer_size; memset(recall_ladspa_run->output, 0, recall_ladspa->output_lines * buffer_size * sizeof(LADSPA_Data)); memset(recall_ladspa_run->input, 0, recall_ladspa->input_lines * buffer_size * sizeof(LADSPA_Data)); if(audio_signal->stream_current == NULL){ for(i = 0; i < recall_ladspa->input_lines; i++){ /* deactivate */ //TODO:JK: fix-me if(recall_ladspa->plugin_descriptor->deactivate != NULL){ recall_ladspa->plugin_descriptor->deactivate(recall_ladspa_run->ladspa_handle[i]); } recall_ladspa->plugin_descriptor->cleanup(recall_ladspa_run->ladspa_handle[i]); } ags_recall_done(recall); return; } ags_recall_ladspa_short_to_float(audio_signal->stream_current->data, recall_ladspa_run->input, (guint) audio_signal->buffer_size, (guint) recall_ladspa->input_lines); /* process data */ for(i = 0; i < recall_ladspa->input_lines; i++){ recall_ladspa->plugin_descriptor->run(recall_ladspa_run->ladspa_handle[i], buffer_size); } /* copy data */ memset((signed short *) audio_signal->stream_current->data, 0, buffer_size * sizeof(signed short)); ags_recall_ladspa_float_to_short(recall_ladspa_run->output, audio_signal->stream_current->data, (guint) audio_signal->buffer_size, (guint) recall_ladspa->output_lines); } /** * ags_recall_ladspa_run_load_ports: * @recall_ladspa_run: an #AgsRecallLadspaRun * * Set up LADSPA ports. * * Since: 0.4.2 */ void ags_recall_ladspa_run_load_ports(AgsRecallLadspaRun *recall_ladspa_run) { AgsRecallLadspa *recall_ladspa; AgsLadspaPlugin *ladspa_plugin; AgsPort *current; GList *port; gchar *path; unsigned long port_count; unsigned long i, j; LADSPA_Descriptor *plugin_descriptor; LADSPA_PortDescriptor *port_descriptor; LADSPA_PortRangeHintDescriptor hint_descriptor; recall_ladspa = AGS_RECALL_LADSPA(AGS_RECALL_CHANNEL_RUN(AGS_RECALL(recall_ladspa_run)->parent->parent)->recall_channel); port = AGS_RECALL(recall_ladspa)->port; plugin_descriptor = recall_ladspa->plugin_descriptor; port_count = plugin_descriptor->PortCount; port_descriptor = plugin_descriptor->PortDescriptors; for(i = 0; i < port_count; i++){ if(LADSPA_IS_PORT_CONTROL(port_descriptor[i])){ if(LADSPA_IS_PORT_INPUT(port_descriptor[i]) || LADSPA_IS_PORT_OUTPUT(port_descriptor[i])){ GList *list; LADSPA_Data *port_data; gchar *plugin_name; gchar *specifier; hint_descriptor = plugin_descriptor->PortRangeHints[i].HintDescriptor; specifier = plugin_descriptor->PortNames[i]; list = port; while(list != NULL){ current = port->data; if(!g_strcmp0(specifier, current->specifier)){ break; } list = list->next; } for(j = 0; j < recall_ladspa->input_lines; j++){ g_message("connecting port[%d]: %d/%d\0", j, i, port_count); port_data = (LADSPA_Data *) &(current->port_value.ags_port_ladspa); recall_ladspa->plugin_descriptor->connect_port(recall_ladspa_run->ladspa_handle[j], i, port_data); } } } } } /** * ags_recall_ladspa_run_new: * @audio_signal: the source * * Creates a #AgsRecallLadspaRun * * Returns: a new #AgsRecallLadspaRun * * Since: 0.4.2 */ AgsRecallLadspaRun* ags_recall_ladspa_run_new(AgsAudioSignal *audio_signal) { AgsRecallLadspaRun *recall_ladspa_run; recall_ladspa_run = (AgsRecallLadspaRun *) g_object_new(AGS_TYPE_RECALL_LADSPA_RUN, "source\0", audio_signal, NULL); return(recall_ladspa_run); } gsequencer-0.6.37/src/ags/audio/ags_recall_ladspa_run.h0000644000175000017500000000427312612232540020013 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_RECALL_LADSPA_RUN_H__ #define __AGS_RECALL_LADSPA_RUN_H__ #include #include #include #include #include #define AGS_TYPE_RECALL_LADSPA_RUN (ags_recall_ladspa_run_get_type()) #define AGS_RECALL_LADSPA_RUN(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_RECALL_LADSPA_RUN, AgsRecallLadspaRun)) #define AGS_RECALL_LADSPA_RUN_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_RECALL_LADSPA_RUN, AgsRecallLadspaRunClass)) #define AGS_IS_RECALL_LADSPA_RUN(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_RECALL_LADSPA_RUN)) #define AGS_IS_RECALL_LADSPA_RUN_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_RECALL_LADSPA_RUN)) #define AGS_RECALL_LADSPA_RUN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_RECALL_LADSPA_RUN, AgsRecallLadspaRunClass)) typedef struct _AgsRecallLadspaRun AgsRecallLadspaRun; typedef struct _AgsRecallLadspaRunClass AgsRecallLadspaRunClass; struct _AgsRecallLadspaRun { AgsRecallAudioSignal recall_audio_signal; LADSPA_Handle *ladspa_handle; LADSPA_Data *input; LADSPA_Data *output; }; struct _AgsRecallLadspaRunClass { AgsRecallAudioSignalClass recall_audio_signal; }; GType ags_recall_ladspa_run_get_type(); AgsRecallLadspaRun* ags_recall_ladspa_run_new(AgsAudioSignal *audio_signal); #endif /*__AGS_RECALL_LADSPA_RUN_H__*/ gsequencer-0.6.37/src/ags/audio/ags_recall_audio_signal.h0000644000175000017500000000456612626272146020341 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_RECALL_AUDIO_SIGNAL_H__ #define __AGS_RECALL_AUDIO_SIGNAL_H__ #include #include #include #include #include #define AGS_TYPE_RECALL_AUDIO_SIGNAL (ags_recall_audio_signal_get_type()) #define AGS_RECALL_AUDIO_SIGNAL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_RECALL_AUDIO_SIGNAL, AgsRecallAudioSignal)) #define AGS_RECALL_AUDIO_SIGNAL_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_RECALL_AUDIO_SIGNAL, AgsRecallAudioSignalClass)) #define AGS_IS_RECALL_AUDIO_SIGNAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_RECALL_AUDIO_SIGNAL)) #define AGS_IS_RECALL_AUDIO_SIGNAL_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_RECALL_AUDIO_SIGNAL)) #define AGS_RECALL_AUDIO_SIGNAL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_RECALL_AUDIO_SIGNAL, AgsRecallAudioSignalClass)) typedef struct _AgsRecallAudioSignal AgsRecallAudioSignal; typedef struct _AgsRecallAudioSignalClass AgsRecallAudioSignalClass; typedef enum{ AGS_RECALL_AUDIO_SIGNAL_INITIAL_RUN = 1, }AgsRecallAudioSignalFlags; struct _AgsRecallAudioSignal { AgsRecall recall; guint flags; guint audio_channel; AgsAudioSignal *destination; AgsAudioSignal *source; }; struct _AgsRecallAudioSignalClass { AgsRecallClass recall; }; GType ags_recall_audio_signal_get_type(); AgsRecallAudioSignal* ags_recall_audio_signal_new(AgsAudioSignal *destination, AgsAudioSignal *source, AgsDevout *devout); #endif /*__AGS_RECALL_AUDIO_SIGNAL_H__*/ gsequencer-0.6.37/src/ags/audio/ags_audio_signal.c0000644000175000017500000013002412632326243016772 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include //TODO:JK: do vector optimization //#include #include #include #include /** * SECTION:ags_audio_signal * @short_description: Contains the audio data and its alignment * @title: AgsAudioSignal * @section_id: * @include: ags/audio/ags_audio_signal.h * * #AgsAudioSignal organizes audio data within a #GList whereby data * pointing to the buffer. */ void ags_audio_signal_class_init(AgsAudioSignalClass *audio_signal_class); void ags_audio_signal_connectable_interface_init(AgsConnectableInterface *connectable); void ags_audio_signal_init(AgsAudioSignal *audio_signal); void ags_audio_signal_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_audio_signal_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_audio_signal_finalize(GObject *gobject); void ags_audio_signal_connect(AgsConnectable *connectable); void ags_audio_signal_disconnect(AgsConnectable *connectable); void ags_audio_signal_real_realloc_buffer_size(AgsAudioSignal *audio_signal, guint buffer_size); void ags_audio_signal_real_morph_samplerate(AgsAudioSignal *audio_signal, guint samplerate, double k_morph); enum{ PROP_0, PROP_DEVOUT, PROP_RECYCLING, PROP_RECALL_ID, }; enum{ REALLOC_BUFFER_SIZE, MORPH_SAMPLERATE, LAST_SIGNAL, }; extern AgsConfig *config; static gpointer ags_audio_signal_parent_class = NULL; static guint audio_signal_signals[LAST_SIGNAL]; GType ags_audio_signal_get_type(void) { static GType ags_type_audio_signal = 0; if(!ags_type_audio_signal){ static const GTypeInfo ags_audio_signal_info = { sizeof (AgsAudioSignalClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_audio_signal_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsAudioSignal), 0, /* n_preallocs */ (GInstanceInitFunc) ags_audio_signal_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_audio_signal_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_audio_signal = g_type_register_static(G_TYPE_OBJECT, "AgsAudioSignal\0", &ags_audio_signal_info, 0); g_type_add_interface_static(ags_type_audio_signal, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return(ags_type_audio_signal); } void ags_audio_signal_class_init(AgsAudioSignalClass *audio_signal) { GObjectClass *gobject; GParamSpec *param_spec; ags_audio_signal_parent_class = g_type_class_peek_parent(audio_signal); /* GObjectClass */ gobject = (GObjectClass *) audio_signal; gobject->set_property = ags_audio_signal_set_property; gobject->get_property = ags_audio_signal_get_property; gobject->finalize = ags_audio_signal_finalize; /* properties */ /** * AgsAudioSignal:devout: * * The assigned #AgsDevout providing default settings. * * Since: 0.4.0 */ param_spec = g_param_spec_object("devout\0", "assigned devout\0", "The devout it is assigned with\0", AGS_TYPE_DEVOUT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_DEVOUT, param_spec); /** * AgsAudioSignal:recycling: * * The assigned #AgsRecycling linking tree. * * Since: 0.4.0 */ param_spec = g_param_spec_object("recycling\0", "assigned recycling\0", "The recycling it is assigned with\0", AGS_TYPE_RECYCLING, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_RECYCLING, param_spec); /** * AgsAudioSignal:recall-id: * * The assigned #AgsRecallID providing context. * * Since: 0.4.0 */ param_spec = g_param_spec_object("recall_id\0", "assigned recall id\0", "The recall id it is assigned with\0", AGS_TYPE_RECALL_ID, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_RECALL_ID, param_spec); /* AgsAudioSignalClass */ audio_signal->realloc_buffer_size = ags_audio_signal_real_realloc_buffer_size; audio_signal->morph_samplerate = ags_audio_signal_real_morph_samplerate; /* signals */ /** * AgsAudioSignal::realloc-buffer-size: * @audio_signal: the object to realloc buffer size * @buffer_size: new buffer size * * The ::reallloc-buffer-size signal is invoked to notify modified buffer size. */ audio_signal_signals[REALLOC_BUFFER_SIZE] = g_signal_new("realloc-buffer-size\0", G_TYPE_FROM_CLASS (audio_signal), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AgsAudioSignalClass, realloc_buffer_size), NULL, NULL, g_cclosure_marshal_VOID__UINT, G_TYPE_NONE, 1, G_TYPE_UINT); /** * AgsAudioSignal::morph-samplerate: * @audio_signal: the object to morph samplerate * @samplerate: new samplerate * * The ::morph-samplerate signal is invoked to notify modified samplerate. */ audio_signal_signals[MORPH_SAMPLERATE] = g_signal_new("morph-samplerate\0", G_TYPE_FROM_CLASS (audio_signal), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AgsAudioSignalClass, morph_samplerate), NULL, NULL, g_cclosure_user_marshal_VOID__UINT_DOUBLE, G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_DOUBLE); } void ags_audio_signal_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->is_ready = NULL; connectable->is_connected = NULL; connectable->connect = ags_audio_signal_connect; connectable->disconnect = ags_audio_signal_disconnect; } void ags_audio_signal_init(AgsAudioSignal *audio_signal) { gchar *str; audio_signal->flags = 0; audio_signal->devout = NULL; audio_signal->recycling = NULL; audio_signal->recall_id = NULL; str = ags_config_get(config, AGS_CONFIG_DEVOUT, "samplerate\0"); audio_signal->samplerate = g_ascii_strtoull(str, NULL, 10); free(str); str = ags_config_get(config, AGS_CONFIG_DEVOUT, "buffer-size\0"); audio_signal->buffer_size = g_ascii_strtoull(str, NULL, 10); free(str); audio_signal->resolution = AGS_DEVOUT_RESOLUTION_16_BIT; audio_signal->length = 0; audio_signal->last_frame = 0; audio_signal->loop_start = 0; audio_signal->loop_end = 0; audio_signal->delay = 0.0; audio_signal->attack = 0; audio_signal->lock_attack = 0; audio_signal->stream_beginning = NULL; audio_signal->stream_current = NULL; audio_signal->stream_end = NULL; } void ags_audio_signal_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsAudioSignal *audio_signal; audio_signal = AGS_AUDIO_SIGNAL(gobject); switch(prop_id){ case PROP_DEVOUT: { GObject *devout; devout = g_value_get_object(value); if(audio_signal->devout == devout) return; if(audio_signal->devout != NULL) g_object_unref(audio_signal->devout); if(devout != NULL) g_object_ref(devout); audio_signal->devout = devout; } break; case PROP_RECYCLING: { GObject *recycling; recycling = g_value_get_object(value); if(audio_signal->recycling == recycling) return; if(audio_signal->recycling != NULL) g_object_unref(audio_signal->recycling); if(recycling != NULL) g_object_ref(recycling); audio_signal->recycling = recycling; } break; case PROP_RECALL_ID: { GObject *recall_id; recall_id = g_value_get_object(value); if(audio_signal->recall_id == recall_id) return; if(audio_signal->recall_id != NULL) g_object_unref(audio_signal->recall_id); if(recall_id != NULL) g_object_ref(recall_id); audio_signal->recall_id = recall_id; } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_audio_signal_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsAudioSignal *audio_signal; audio_signal = AGS_AUDIO_SIGNAL(gobject); switch(prop_id){ case PROP_DEVOUT: g_value_set_object(value, audio_signal->devout); break; case PROP_RECYCLING: g_value_set_object(value, audio_signal->recycling); break; case PROP_RECALL_ID: g_value_set_object(value, audio_signal->recall_id); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_audio_signal_finalize(GObject *gobject) { AgsAudioSignal *audio_signal; audio_signal = AGS_AUDIO_SIGNAL(gobject); #ifdef AGS_DEBUG g_message("finalize AgsAudioSignal\0"); #endif if((AGS_AUDIO_SIGNAL_TEMPLATE & (audio_signal->flags)) != 0) g_warning("AGS_AUDIO_SIGNAL_TEMPLATE: destroying\n\0"); if(audio_signal->devout != NULL) g_object_unref(audio_signal->devout); if(audio_signal->recycling != NULL) g_object_unref(audio_signal->recycling); if(audio_signal->recall_id != NULL) g_object_unref(audio_signal->recall_id); if(audio_signal->stream_beginning != NULL){ g_list_free_full(audio_signal->stream_beginning, g_free); } /* call parent */ G_OBJECT_CLASS(ags_audio_signal_parent_class)->finalize(gobject); } void ags_audio_signal_connect(AgsConnectable *connectable) { // empty } void ags_audio_signal_disconnect(AgsConnectable *connectable) { // empty } /** * ags_stream_alloc: * @buffer_size: the buffer size * * Allocs an audio buffer. * * Returns: the audio data array * * Since: 0.3 */ signed short* ags_stream_alloc(guint buffer_size) { signed short *buffer; buffer = (signed short *) malloc(buffer_size * sizeof(signed short)); memset(buffer, 0, buffer_size * sizeof(signed short)); return(buffer); } /** * ags_audio_signal_get_length_till_current: * @audio_signal: an #AgsAudioSignal * * Counts the buffers from stream_beginning upto stream_current. * * Returns: the counted length. * * Since: 0.4 */ guint ags_audio_signal_get_length_till_current(AgsAudioSignal *audio_signal) { GList *list, *stop; guint length; if(audio_signal == NULL){ return(0); } list = audio_signal->stream_beginning; length = 0; if(audio_signal->stream_current != NULL){ stop = audio_signal->stream_current->next; }else{ return(0); } while(list != stop){ length++; list = list->next; } return(length); } /** * ags_audio_signal_add_stream: * @audio_signal: an #AgsAudioSignal * * Adds a buffer at the end of the stream. * * Since: 0.3 */ void ags_audio_signal_add_stream(AgsAudioSignal *audio_signal) { GList *stream, *end_old; signed short *buffer; stream = g_list_alloc(); buffer = ags_stream_alloc(audio_signal->buffer_size); stream->data = buffer; if(audio_signal->stream_end != NULL){ end_old = audio_signal->stream_end; stream->prev = end_old; end_old->next = stream; }else{ audio_signal->stream_beginning = stream; audio_signal->stream_current = stream; } audio_signal->stream_end = stream; audio_signal->length += 1; } /** * ags_audio_signal_stream_resize: * @audio_signal: an #AgsAudioSignal to resize. * @length: a guint as the new length. * * Resizes an #AgsAudioSignal's stream but be carefull with shrinking. * This function may crash the application. * * Since: 0.3 */ void ags_audio_signal_stream_resize(AgsAudioSignal *audio_signal, guint length) { guint i; if(audio_signal->length < length){ GList *stream, *end_old; signed short *buffer; stream = NULL; for(i = audio_signal->length; i < length; i++){ buffer = ags_stream_alloc(audio_signal->buffer_size); stream = g_list_prepend(stream, buffer); } stream = g_list_reverse(stream); if(audio_signal->stream_end != NULL){ end_old = audio_signal->stream_end; audio_signal->stream_end = g_list_last(stream); stream->prev = end_old; end_old->next = stream; }else{ audio_signal->stream_beginning = stream; audio_signal->stream_end = g_list_last(stream); audio_signal->stream_current = stream; } }else if(audio_signal->length > length){ GList *stream, *stream_end, *stream_next; gboolean check_current; stream = audio_signal->stream_beginning; check_current = TRUE; for(i = 0; i < length; i++){ if(check_current && stream == audio_signal->stream_current){ audio_signal->stream_current = NULL; check_current = FALSE; } stream = stream->next; } if(length != 0){ stream_end = stream->prev; stream_end->next = NULL; audio_signal->stream_end = stream_end; }else{ audio_signal->stream_beginning = NULL; audio_signal->stream_current = NULL; audio_signal->stream_end = NULL; } stream->prev = NULL; g_list_free_full(stream, g_free); } audio_signal->length = length; } /** * ags_audio_signal_stream_safe_resize: * @audio_signal: an #AgsAudioSignal * @length: a guint * * Resizes an #AgsAudioSignal's stream but doesn't shrink more than the * current stream position. * * Since: 0.4 */ void ags_audio_signal_stream_safe_resize(AgsAudioSignal *audio_signal, guint length) { guint length_till_current; length_till_current = ags_audio_signal_get_length_till_current(audio_signal); if(length_till_current < length){ ags_audio_signal_stream_resize(audio_signal, length); }else{ ags_audio_signal_stream_resize(audio_signal, length_till_current); } } void ags_audio_signal_real_realloc_buffer_size(AgsAudioSignal *audio_signal, guint buffer_size) { GList *current, *old; guint old_buffer_size; guint counter; guint i_old, i_current; old = audio_signal->stream_beginning; old_buffer_size = audio_signal->buffer_size; current = NULL; current = g_list_prepend(current, ags_stream_alloc(buffer_size)); counter = 0; i_old = 0; i_current = 0; while(old != NULL){ ((signed short *) current->data)[i_current] = ((signed short *) old->data)[i_old]; if(i_current == buffer_size){ current = g_list_prepend(current, ags_stream_alloc(buffer_size)); i_current = 0; counter++; } if(i_old == old_buffer_size){ old = old->next; i_old = 0; } i_current++; i_old++; } memset(((signed short *) current->data), 0, (buffer_size - i_current) * sizeof(signed short)); /* */ audio_signal->length = counter; audio_signal->last_frame = i_current; audio_signal->stream_end = current; audio_signal->stream_beginning = g_list_reverse(current); } /** * ags_audio_signal_realloc_buffer_size: * @audio_signal: an #AgsAudioSignal * @buffer_size: the buffer size * * Realloc the stream to the new buffer size. * * Since: 0.4 */ void ags_audio_signal_realloc_buffer_size(AgsAudioSignal *audio_signal, guint buffer_size) { g_return_if_fail(AGS_IS_AUDIO_SIGNAL(audio_signal)); g_object_ref(G_OBJECT(audio_signal)); g_signal_emit(G_OBJECT(audio_signal), audio_signal_signals[REALLOC_BUFFER_SIZE], 0, buffer_size); g_object_unref(G_OBJECT(audio_signal)); } void ags_audio_signal_real_morph_samplerate(AgsAudioSignal *audio_signal, guint samplerate, double k_morph) { GList *current, *old, *tmp; guint old_samplerate; guint counter; guint i_old, i_current; guint j_old, j_current; double k_old, k_current; guint frame; double factor, value, preview; old = audio_signal->stream_beginning; old_samplerate = audio_signal->samplerate; current = NULL; current = g_list_prepend(current, ags_stream_alloc(audio_signal->buffer_size)); counter = 0; i_old = 0; i_current = 0; factor = samplerate / old_samplerate; if(k_morph == 0.0){ k_morph = (samplerate < old_samplerate) ? 2.0 * factor: 0.5 * factor; } while(old != NULL){ value = (double) (((signed short *) old->data)[i_old]); for(j_old = 0, j_current = 0; (((samplerate < old_samplerate) && (j_old < ceil(1.0 / factor))) || (j_current < ceil(factor))); j_old++, j_current++){ preview = 0.0; for(frame = 0; frame < ceil(factor); frame++){ // preview += ; } for(frame = 0; frame < ceil(factor); frame++){ // preview += ; } for(k_old = 0.0, k_current = 0.0; (((k_morph < 1.0) && (k_old < ceil(1.0 / k_morph))) || (k_current < ceil(k_morph))); k_old++, k_current++){ // value = value * ( / ); } } ((signed short *) current->data)[i_current] = value; if(i_current == samplerate){ current = g_list_prepend(current, ags_stream_alloc(audio_signal->buffer_size)); i_current = 0; counter++; } if(i_old == old_samplerate){ old = old->next; i_old = 0; } i_current++; i_old++; } /* */ audio_signal->length = counter; audio_signal->last_frame = i_current; audio_signal->stream_end = current; audio_signal->stream_beginning = g_list_reverse(current); } /** * ags_audio_signal_morph_samplerate: * @audio_signal: an #AgsAudioSignal * @samplerate: the new samplerate * @k_morph: reserved for future usage * * Morph audio quality to new samplerate. * * Since: 0.4 */ void ags_audio_signal_morph_samplerate(AgsAudioSignal *audio_signal, guint samplerate, double k_morph) { g_return_if_fail(AGS_IS_AUDIO_SIGNAL(audio_signal)); g_object_ref(G_OBJECT(audio_signal)); g_signal_emit(G_OBJECT(audio_signal), audio_signal_signals[MORPH_SAMPLERATE], 0, samplerate, k_morph); g_object_unref(G_OBJECT(audio_signal)); } /** * ags_audio_signal_copy_buffer_to_buffer: * @destination: destination buffer * @dchannels: destination audio channels * @source: source buffer * @schannels: source audio channels * @size: frame count to copy * * Copy a buffer to an other buffer. * * Since: 0.3 */ void ags_audio_signal_copy_buffer_to_buffer(signed short *destination, guint dchannels, signed short *source, guint schannels, guint size) { guint limit; guint i; /* unrolled function */ if(size > 8){ limit = size - 8; for(i = 0; i < limit; i += 8){ *destination = 0xffff & ((signed long) ((*destination) + (*source))); destination[1 * dchannels] = 0xffff & ((signed long) (destination[1 * dchannels] + source[1 * schannels])); destination[2 * dchannels] = 0xffff & ((signed long) (destination[2 * dchannels] + source[2 * schannels])); destination[3 * dchannels] = 0xffff & ((signed long) (destination[3 * dchannels] + source[3 * schannels])); destination[4 * dchannels] = 0xffff & ((signed long) (destination[4 * dchannels] + source[4 * schannels])); destination[5 * dchannels] = 0xffff & ((signed long) (destination[5 * dchannels] + source[5 * schannels])); destination[6 * dchannels] = 0xffff & ((signed long) (destination[6 * dchannels] + source[6 * schannels])); destination[7 * dchannels] = 0xffff & ((signed long) (destination[7 * dchannels] + source[7 * schannels])); destination += (8 * dchannels); source += (8 * schannels); } }else{ i = 0; } for(; i < size; i++){ *destination = 0xffff & ((signed long) ((*destination) + (*source))); destination += dchannels; source += schannels; } } /** * ags_audio_signal_copy_buffer_to_double_buffer: * @destination: destination buffer * @dchannels: destination audio channels * @source: source buffer * @schannels: source audio channels * @size: frame count to copy * * Copy a buffer to an other buffer. * * Since: 0.4 */ void ags_audio_signal_copy_buffer_to_double_buffer(double *destination, guint dchannels, signed short *source, guint schannels, guint size) { for(; 0stream_beginning == NULL){ ags_audio_signal_stream_resize(audio_signal, 0); }else{ // AgsDevout *devout; GList *template_stream, *stream; // guint i, j, j_offcut; // guint k, template_k; audio_signal->buffer_size = template->buffer_size; ags_audio_signal_stream_resize(audio_signal, template->length); stream = audio_signal->stream_beginning; template_stream = template->stream_beginning; // k = 0; // template_k = 0; //TODO:JK: enhance me while(template_stream != NULL){ ags_audio_signal_copy_buffer_to_buffer(stream->data, 1, template_stream->data, 1, template->buffer_size); stream = stream->next; template_stream = template_stream->next; } } } /** * ags_audio_signal_get_template: * @audio_signal: a #GList containing #AgsAudioSignal * * Retrieve the template audio signal. * * Returns: the template #AgsAudioSignal * * Since: 0.3 */ AgsAudioSignal* ags_audio_signal_get_template(GList *audio_signal) { GList *list; list = audio_signal; while(list != NULL){ if((AGS_AUDIO_SIGNAL_TEMPLATE & (AGS_AUDIO_SIGNAL(list->data)->flags)) != 0) return((AgsAudioSignal *) list->data); list = list->next; } return(NULL); } /** * ags_audio_signal_get_stream_current: * @audio_signal: a #GList containing #AgsAudioSignal * @recall_id: the matching #AgsRecallID * * Retrieve next current stream of #AgsAudioSignal list. * * Returns: next #GList matching #AgsRecallID * * Since: 0.4 */ GList* ags_audio_signal_get_stream_current(GList *list_audio_signal, GObject *recall_id) { AgsAudioSignal *audio_signal; GList *list; list = list_audio_signal; while(list != NULL){ audio_signal = AGS_AUDIO_SIGNAL(list->data); if((AGS_AUDIO_SIGNAL_TEMPLATE & (audio_signal->flags)) != 0){ list = list->next; continue; } if(audio_signal->stream_current != NULL && audio_signal->recall_id == recall_id) return(list); list = list->next; } return(NULL); } /** * ags_audio_signal_get_by_recall_id: * @audio_signal: a #GList containing #AgsAudioSignal * @recall_id: matching #AgsRecallID * * Retrieve next audio signal refering to @recall_id * * Returns: matching #AgsAudioSignal * * Since: 0.3 */ GList* ags_audio_signal_get_by_recall_id(GList *list_audio_signal, GObject *recall_id) { AgsAudioSignal *audio_signal; GList *list; list = list_audio_signal; while(list != NULL){ audio_signal = AGS_AUDIO_SIGNAL(list->data); if((AGS_AUDIO_SIGNAL_TEMPLATE & (audio_signal->flags)) != 0){ list = list->next; continue; } if(audio_signal->recall_id == recall_id) return(list); list = list->next; } return(NULL); } /** * ags_audio_signal_tile: * @audio_signal: an #AgsAudioSignal * @template: the source #AgsAudioSignal * @frame_count: new frame count * * Tile audio signal data. * * Since: 0.4 */ void ags_audio_signal_tile(AgsAudioSignal *audio_signal, AgsAudioSignal *template, guint frame_count) { AgsDevout *devout; GList *template_stream, *audio_signal_stream, *audio_signal_stream_end; signed short *template_buffer, *audio_signal_buffer; guint template_size; guint remaining_size; guint i, j, j_offcut; guint k, k_end; gboolean alloc_buffer; devout = AGS_DEVOUT(audio_signal->devout); audio_signal_stream = NULL; template_stream = template->stream_beginning; if(template_stream == NULL){ return; } template_size = (guint) (template->delay * template->buffer_size) + template->length * template->buffer_size + template->last_frame; j = 0; k = 0; if(template->buffer_size > audio_signal->buffer_size){ k_end = audio_signal->buffer_size; }else if(template->buffer_size == audio_signal->buffer_size){ k_end = audio_signal->buffer_size; }else{ k_end = template->buffer_size; } j_offcut = 0; alloc_buffer = TRUE; /* write buffers */ for(i = 0; i < frame_count - template->buffer_size; i += audio_signal->buffer_size){ /* alloc buffer and prepend */ if(alloc_buffer){ audio_signal_buffer = ags_stream_alloc(audio_signal->buffer_size); audio_signal_stream = g_list_prepend(audio_signal_stream, audio_signal_buffer); } /* get template buffer */ template_buffer = (signed short *) template_stream->data; /* allocate and copy buffer */ if(template_size < audio_signal->buffer_size){ /* copy buffer */ ags_audio_signal_copy_buffer_to_buffer(audio_signal_buffer, 1, &(template_buffer[j_offcut]), 1, template_size - j_offcut); for(j = template_size - j_offcut; j < audio_signal->buffer_size - template_size; j += template_size){ ags_audio_signal_copy_buffer_to_buffer(&(audio_signal_buffer[j]), 1, template_buffer, 1, template_size); } j_offcut = audio_signal->buffer_size - j; ags_audio_signal_copy_buffer_to_buffer(&(audio_signal_buffer[j]), 1, template_buffer, 1, j_offcut); }else{ /* deep copy */ ags_audio_signal_copy_buffer_to_buffer(&(audio_signal_buffer[j]), 1, &(template_buffer[j_offcut]), 1, k_end - j_offcut); k += (k_end - j_offcut); /* iterate template stream */ if(k_end + j_offcut == template->buffer_size){ if(template_stream->next != NULL){ template_stream = template_stream->next; }else{ template_stream = template->stream_beginning; } } /* copy parameters */ j = k % audio_signal->buffer_size; if(template->buffer_size < audio_signal->buffer_size){ j_offcut = k % template->buffer_size; }else if(template->buffer_size == audio_signal->buffer_size){ j_offcut = k % audio_signal->buffer_size; }else{ j_offcut = k % audio_signal->buffer_size; } k_end = template->buffer_size - j_offcut; /* alloc audio signal */ if(j == 0){ alloc_buffer = TRUE; }else{ alloc_buffer = FALSE; } } } /* write remaining buffer */ remaining_size = frame_count - (i * audio_signal->buffer_size); if(remaining_size > k_end - j_offcut){ ags_audio_signal_copy_buffer_to_buffer(&(audio_signal_buffer[j]), 1, &(template_buffer[j_offcut]), 1, k_end - j_offcut); if(k_end + j_offcut == template->buffer_size){ if(template_stream->next != NULL){ template_stream = template_stream->next; }else{ template_stream = template->stream_beginning; } } ags_audio_signal_copy_buffer_to_buffer(&(audio_signal_buffer[j]), 1, &(template_buffer[j_offcut]), 1, remaining_size - (k_end - j_offcut)); }else{ ags_audio_signal_copy_buffer_to_buffer(&(audio_signal_buffer[j]), 1, &(template_buffer[j_offcut]), 1, remaining_size); } /* reverse list */ audio_signal_stream_end = audio_signal_stream; audio_signal_stream = g_list_reverse(audio_signal_stream); if(audio_signal->stream_beginning != NULL){ ags_list_free_and_free_link(audio_signal->stream_beginning); } audio_signal->stream_beginning = audio_signal_stream; // audio_signal->stream_current = audio_signal_stream; audio_signal->stream_end = audio_signal_stream_end; } /** * ags_audio_signal_scale: * @audio_signal: an #AgsAudioSignal * @template: the source #AgsAudioSignal * @length: new frame count * * Scale audio signal data. * * Since: 0.4 */ void ags_audio_signal_scale(AgsAudioSignal *audio_signal, AgsAudioSignal *template, guint length) { GList *source, *destination, *stream_template; gpointer data; double scale_factor, morph_factor; guint offset; double step; guint i, j, j_stop; guint k, template_k; gboolean expand; auto void ags_audio_signal_scale_copy_8_bit(GList *source, GList *destination, guint soffset, guint doffset, guint dresolution); auto void ags_audio_signal_scale_copy_16_bit(GList *source, GList *destination, guint soffset, guint doffset, guint dresolution); auto void ags_audio_signal_scale_copy_24_bit(GList *source, GList *destination, guint soffset, guint doffset, guint dresolution); auto void ags_audio_signal_scale_copy_32_bit(GList *source, GList *destination, guint soffset, guint doffset, guint dresolution); auto void ags_audio_signal_scale_copy_64_bit(GList *source, GList *destination, guint soffset, guint doffset, guint dresolution); void ags_audio_signal_scale_copy_8_bit(GList *source, GList *destination, guint soffset, guint doffset, guint dresolution){ gint8 *sbuffer; sbuffer = (gint8 *) source->data; switch(dresolution){ case AGS_DEVOUT_RESOLUTION_8_BIT: { gint8 *dbuffer; gdouble scale; dbuffer = (gint8 *) destination->data; scale = 1.0; dbuffer[doffset] = scale * sbuffer[soffset]; } break; case AGS_DEVOUT_RESOLUTION_16_BIT: { gint16 *dbuffer; gdouble scale; dbuffer = (gint16 *) destination->data; scale = exp2(8.0); dbuffer[doffset] = scale * sbuffer[soffset]; } break; case AGS_DEVOUT_RESOLUTION_24_BIT: { unsigned char *dbuffer; gint16 value; gdouble scale; gint16 mask; dbuffer = (unsigned char *) destination->data; scale = exp2(16.0); value = scale * sbuffer[soffset]; mask = 0xff; dbuffer[doffset * 3] = mask & value; dbuffer[doffset * 3 + 1] = (mask << 8) & value; if(sbuffer[soffset] < 0){ dbuffer[doffset * 3 + 1] &= (~0x80); dbuffer[doffset * 3 + 2] = 0x80; }else{ dbuffer[doffset * 3 + 2] = 0; } } break; case AGS_DEVOUT_RESOLUTION_32_BIT: { gint32 *dbuffer; gdouble scale; dbuffer = (gint32 *) destination->data; scale = exp2(24.0); dbuffer[doffset] = scale * sbuffer[soffset]; } break; case AGS_DEVOUT_RESOLUTION_64_BIT: { gint64 *dbuffer; gdouble scale; dbuffer = (gint64 *) destination->data; scale = exp2(56.0); dbuffer[doffset] = scale * sbuffer[soffset]; } break; } } void ags_audio_signal_scale_copy_16_bit(GList *source, GList *destination, guint soffset, guint doffset, guint dresolution){ gint16 *sbuffer; sbuffer = (gint16 *) source->data; switch(dresolution){ case AGS_DEVOUT_RESOLUTION_8_BIT: { gint8 *dbuffer; gdouble scale; dbuffer = (gint8 *) destination->data; scale = exp2(1.0 / 8.0); dbuffer[doffset] = (gint8) floor(scale * sbuffer[soffset]); } break; case AGS_DEVOUT_RESOLUTION_16_BIT: { gint16 *dbuffer; dbuffer = (gint16 *) destination->data; dbuffer[doffset] = sbuffer[soffset]; } break; case AGS_DEVOUT_RESOLUTION_24_BIT: { unsigned char *dbuffer; gint32 value; gdouble scale; gint32 mask; dbuffer = (unsigned char *) destination->data; scale = exp2(8.0); mask = 0xff; value = scale * sbuffer[soffset]; dbuffer[doffset * 3] = mask & value; dbuffer[doffset * 3 + 1] = (mask << 8) & value; dbuffer[doffset * 3 + 2] = (mask << 16) & value; if(sbuffer[soffset] < 0){ dbuffer[doffset * 3 + 2] |= 0x80; } } break; case AGS_DEVOUT_RESOLUTION_32_BIT: { gint32 *dbuffer; gdouble scale; dbuffer = (gint32 *) destination->data; scale = exp2(16.0); dbuffer[doffset] = sbuffer[soffset]; } break; case AGS_DEVOUT_RESOLUTION_64_BIT: { gint64 *dbuffer; gdouble scale; dbuffer = (gint64 *) destination->data; scale = exp2(48.0); dbuffer[doffset] = scale * sbuffer[soffset]; } break; } } void ags_audio_signal_scale_copy_24_bit(GList *source, GList *destination, guint soffset, guint doffset, guint dresolution){ unsigned char *sbuffer; sbuffer = (char *) source->data; switch(dresolution){ case AGS_DEVOUT_RESOLUTION_8_BIT: { gint8 *dbuffer; gdouble scale; gint16 *mask; dbuffer = (gint8 *) destination->data; scale = exp2(1.0 / 16.0); dbuffer[doffset] = (gint8) round(scale * (double) sbuffer[soffset]); } break; case AGS_DEVOUT_RESOLUTION_16_BIT: { gint16 *dbuffer; gdouble scale; dbuffer = (gint16 *) destination->data; scale = exp2(1.0 / 8.0); dbuffer[doffset] = (gint16) round(scale * (double) sbuffer[soffset]); } break; case AGS_DEVOUT_RESOLUTION_24_BIT: { unsigned char *dbuffer; gint16 mask; dbuffer = (unsigned char *) destination->data; dbuffer[doffset * 3] = sbuffer[soffset * 3]; dbuffer[doffset * 3 + 1] = sbuffer[soffset * 3 + 1]; dbuffer[doffset * 3 + 2] = sbuffer[soffset * 3 + 2]; } break; case AGS_DEVOUT_RESOLUTION_32_BIT: { gint32 *dbuffer; gdouble scale; dbuffer = (gint32 *) destination->data; scale = exp2(8.0); dbuffer[doffset] = scale * sbuffer[soffset]; } break; case AGS_DEVOUT_RESOLUTION_64_BIT: { gint64 *dbuffer; gdouble scale; dbuffer = (gint64 *) destination->data; scale = exp2(40.0); dbuffer[doffset] = scale * sbuffer[soffset]; } break; } } void ags_audio_signal_scale_copy_32_bit(GList *source, GList *destination, guint soffset, guint doffset, guint dresolution){ gint32 *sbuffer; sbuffer = (gint32 *) source->data; switch(dresolution){ case AGS_DEVOUT_RESOLUTION_8_BIT: { gint8 *dbuffer; gdouble scale; dbuffer = (gint8 *) destination->data; scale = exp2(1.0 / 24.0); dbuffer[doffset] = scale * sbuffer[soffset]; } break; case AGS_DEVOUT_RESOLUTION_16_BIT: { gint16 *dbuffer; gdouble scale; dbuffer = (gint16 *) destination->data; scale = exp2(1.0 / 16.0); dbuffer[doffset] = scale * sbuffer[soffset]; } break; case AGS_DEVOUT_RESOLUTION_24_BIT: { unsigned char *dbuffer; gint32 value; gdouble scale; gint32 mask; dbuffer = (unsigned char *) destination->data; scale = exp2(1.0 / 8.0); mask = 0xff; value = scale * sbuffer[soffset]; dbuffer[doffset * 3] = mask & value; dbuffer[doffset * 3 + 1] = (mask << 8) & value; dbuffer[doffset * 3 + 2] = (mask << 16) & value; if(sbuffer[soffset] < 0){ dbuffer[doffset * 3 + 2] |= 0x80; } } break; case AGS_DEVOUT_RESOLUTION_32_BIT: { gint32 *dbuffer; dbuffer = (gint32 *) destination->data; dbuffer[doffset] = sbuffer[soffset]; } break; case AGS_DEVOUT_RESOLUTION_64_BIT: { gint64 *dbuffer; gdouble scale; dbuffer = (gint64 *) destination->data; scale = exp2(32.0); dbuffer[doffset] = scale * sbuffer[soffset]; } break; } } void ags_audio_signal_scale_copy_64_bit(GList *source, GList *destination, guint soffset, guint doffset, guint dresolution){ gint64 *sbuffer; sbuffer = (gint64 *) source->data; switch(dresolution){ case AGS_DEVOUT_RESOLUTION_8_BIT: { gint8 *dbuffer; gdouble scale; dbuffer = (gint8 *) destination->data; scale = exp2(1 / 56.0); dbuffer[doffset] = scale * sbuffer[soffset]; } break; case AGS_DEVOUT_RESOLUTION_16_BIT: { gint16 *dbuffer; gdouble scale; dbuffer = (gint16 *) destination->data; scale = exp2(1 / 48.0); dbuffer[doffset] = scale * sbuffer[soffset]; } break; case AGS_DEVOUT_RESOLUTION_24_BIT: { unsigned char *dbuffer; gint32 value; gdouble scale; gint32 mask; dbuffer = (unsigned char *) destination->data; scale = exp2(1.0 / 40.0); mask = 0xff; value = scale * sbuffer[soffset]; dbuffer[doffset * 3] = mask & value; dbuffer[doffset * 3 + 1] = (mask << 8) & value; dbuffer[doffset * 3 + 2] = (mask << 16) & value; if(sbuffer[soffset] < 0){ dbuffer[doffset * 3 + 2] |= 0x80; } } break; case AGS_DEVOUT_RESOLUTION_32_BIT: { gint32 *dbuffer; gdouble scale; dbuffer = (gint32 *) destination->data; scale = exp2(1 / 32.0); dbuffer[doffset] = scale * sbuffer[soffset]; } break; case AGS_DEVOUT_RESOLUTION_64_BIT: { gint64 *dbuffer; dbuffer = (gint64 *) destination->data; dbuffer[doffset] = sbuffer[soffset]; } break; } } source = template->stream_beginning; if(template->samplerate < audio_signal->samplerate){ expand = TRUE; }else{ expand = FALSE; } scale_factor = 1.0 / template->length * length; morph_factor = 1.0 / template->resolution * audio_signal->resolution; /* prepare destination */ ags_audio_signal_stream_resize(audio_signal, length); /* create audio data */ //TODO:JK: fix me j_stop = audio_signal->resolution; // lcm(audio_signal->resolution, template->resolution); stream_template = NULL; offset = 0; step = 0.0; for(i = 0; i < template->length; i++){ for(; j < j_stop; j++){ if(offset == audio_signal->buffer_size && step >= morph_factor){ break; } if(offset == 0){ if(expand){ data = (gpointer) malloc(sizeof(audio_signal->buffer_size * morph_factor)); }else{ data = (gpointer) malloc(sizeof(audio_signal->buffer_size / morph_factor)); } stream_template = g_list_prepend(stream_template, data); destination = stream_template; } switch(template->resolution){ case AGS_DEVOUT_RESOLUTION_8_BIT: { ags_audio_signal_scale_copy_8_bit(destination, source, j, offset, audio_signal->resolution); } break; case AGS_DEVOUT_RESOLUTION_16_BIT: { ags_audio_signal_scale_copy_16_bit(destination, source, j, offset, audio_signal->resolution); } break; case AGS_DEVOUT_RESOLUTION_24_BIT: { ags_audio_signal_scale_copy_24_bit(destination, source, j, offset, audio_signal->resolution); } break; case AGS_DEVOUT_RESOLUTION_32_BIT: { ags_audio_signal_scale_copy_32_bit(destination, source, j, offset, audio_signal->resolution); } break; case AGS_DEVOUT_RESOLUTION_64_BIT: { ags_audio_signal_scale_copy_64_bit(destination, source, j, offset, audio_signal->resolution); } break; } step += (1 / morph_factor); if(step >= morph_factor){ step = 0.0; offset++; } } if(j == j_stop){ j = 0; } if(offset == template->buffer_size && step == 0.0){ offset = 0; source = source->next; } } stream_template = g_list_reverse(stream_template); /* morph */ //TODO:JK: implement me /* scale */ source = stream_template; destination = audio_signal->stream_beginning; offset = 0; k = 0; template_k = 0; while(destination != NULL){ for(i = 0; i < audio_signal->buffer_size && k < audio_signal->buffer_size && template_k < template->buffer_size; i++, k++, template_k++){ switch(audio_signal->resolution){ case AGS_DEVOUT_RESOLUTION_8_BIT: { ags_audio_signal_scale_copy_8_bit(destination, source, i, offset, audio_signal->resolution); } break; case AGS_DEVOUT_RESOLUTION_16_BIT: { ags_audio_signal_scale_copy_16_bit(destination, source, i, offset, audio_signal->resolution); } break; case AGS_DEVOUT_RESOLUTION_24_BIT: { ags_audio_signal_scale_copy_24_bit(destination, source, i, offset, audio_signal->resolution); } break; case AGS_DEVOUT_RESOLUTION_32_BIT: { ags_audio_signal_scale_copy_32_bit(destination, source, i, offset, audio_signal->resolution); } break; case AGS_DEVOUT_RESOLUTION_64_BIT: { ags_audio_signal_scale_copy_64_bit(destination, source, i, offset, audio_signal->resolution); } break; } offset = (guint) floor(morph_factor * (double) i); } if(k == audio_signal->buffer_size){ destination = destination->next; } if(template_k == template->buffer_size){ source = source->next; } } } /** * ags_audio_signal_envelope: * @audio_signal: * @attack: * @decay: * @sustain: * @release: * @ratio: * * Envelope audio signal. * * Since: 0.6.7 */ void ags_audio_signal_envelope(AgsAudioSignal *audio_signal, gdouble attack, gdouble decay, gdouble sustain, gdouble release, gdouble ratio) { GList *stream; signed short *buffer; gdouble volume; guint frame_count, current_frame_count; guint i, j, k; if(ratio == 0.0){ return; } stream = audio_signal->stream_beginning; buffer = stream->data; frame_count = audio_signal->buffer_size * audio_signal->length - (audio_signal->buffer_size - audio_signal->last_frame); for(j = 0, k = 0; j < 4; j++){ for(i = 0; ratio * (k + i) < (1.0 / ratio) * (frame_count / 4.0); i++, k++){ if(k != 0 && k % audio_signal->buffer_size == 0){ stream = stream->next; buffer = stream->data; } switch(j){ case 0: { volume = (1.0 / (k - i)) / (attack / (k - i)); } break; case 1: { volume = (1.0 / (k - i)) / (decay / (k - i)); } break; case 2: { volume = (1.0 / (k - i)) / (sustain / (k - i)); } break; case 3: { volume = (1.0 / (k - i)) / (release / (k - i)); } break; } *buffer = (signed short) (volume * buffer[0]); buffer++; } } } /** * ags_audio_signal_new: * @devout: the assigned #AgsDevout * @recycling: the #AgsRecycling * @recall_id: the #AgsRecallID, it can be NULL if %AGS_AUDIO_SIGNAL_TEMPLATE is set * * Creates a #AgsAudioSignal, with defaults of @devout, linking @recycling tree * and refering to @recall_id. * * Returns: a new #AgsAudioSignal * * Since: 0.3 */ AgsAudioSignal* ags_audio_signal_new(GObject *devout, GObject *recycling, GObject *recall_id) { AgsAudioSignal *audio_signal; audio_signal = (AgsAudioSignal *) g_object_new(AGS_TYPE_AUDIO_SIGNAL, "devout\0", devout, "recycling\0", recycling, "recall-id\0", recall_id, NULL); return(audio_signal); } /** * ags_audio_signal_new_with_length: * @devout: the assigned #AgsDevout * @recycling: the #AgsRecycling * @recall_id: the #AgsRecallID, it can be NULL if %AGS_AUDIO_SIGNAL_TEMPLATE is set * @length: audio data frame count * * Creates a #AgsAudioSignal, with defaults of @devout, linking @recycling tree * and refering to @recall_id. * The audio data is tiled to @length frame count. * * Returns: a new #AgsAudioSignal * * Since: 0.4 */ AgsAudioSignal* ags_audio_signal_new_with_length(GObject *devout, GObject *recycling, GObject *recall_id, guint length) { AgsAudioSignal *audio_signal, *template; audio_signal = (AgsAudioSignal *) g_object_new(AGS_TYPE_AUDIO_SIGNAL, "devout\0", devout, "recycling\0", recycling, "recall-id\0", recall_id, NULL); template = ags_audio_signal_get_template(AGS_RECYCLING(recycling)->audio_signal); if(template != NULL){ ags_audio_signal_tile(audio_signal, template, length); } return(audio_signal); } gsequencer-0.6.37/src/ags/audio/ags_recall.h0000644000175000017500000001652012626272146015614 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_RECALL_H__ #define __AGS_RECALL_H__ #include #include #include #include #include #define AGS_TYPE_RECALL (ags_recall_get_type()) #define AGS_RECALL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_RECALL, AgsRecall)) #define AGS_RECALL_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_RECALL, AgsRecallClass)) #define AGS_IS_RECALL(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_RECALL)) #define AGS_IS_RECALL_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_RECALL)) #define AGS_RECALL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_RECALL, AgsRecallClass)) #define AGS_RECALL_HANDLER(handler) ((AgsRecallHandler *)(handler)) #define AGS_RECALL_DEFAULT_VERSION "0.4.2\0" #define AGS_RECALL_DEFAULT_BUILD_ID "CEST 02-10-2014 19:36\0" typedef struct _AgsRecall AgsRecall; typedef struct _AgsRecallClass AgsRecallClass; typedef struct _AgsRecallHandler AgsRecallHandler; typedef enum{ AGS_RECALL_CONNECTED = 1, AGS_RECALL_RUN_INITIALIZED = 1 << 1, //TODO:JK: rename to AGS_RECALL_RUN_CONNECTED AGS_RECALL_TEMPLATE = 1 << 2, AGS_RECALL_PLAYBACK = 1 << 3, AGS_RECALL_SEQUENCER = 1 << 4, AGS_RECALL_NOTATION = 1 << 5, AGS_RECALL_DEFAULT_TEMPLATE = 1 << 6, //TODO:JK: remove because it's useless AGS_RECALL_DYNAMIC_CONNECTED = 1 << 7, AGS_RECALL_INPUT_ORIENTATED = 1 << 8, AGS_RECALL_OUTPUT_ORIENTATED = 1 << 9, AGS_RECALL_PERSISTENT = 1 << 10, AGS_RECALL_INITIAL_RUN = 1 << 11, AGS_RECALL_TERMINATING = 1 << 12, AGS_RECALL_DONE = 1 << 13, AGS_RECALL_REMOVE = 1 << 14, AGS_RECALL_HIDE = 1 << 15, AGS_RECALL_PROPAGATE_DONE = 1 << 16, // see ags_recall_real_remove AGS_RECALL_PERSISTENT_PLAYBACK = 1 << 17, AGS_RECALL_PERSISTENT_SEQUENCER = 1 << 18, AGS_RECALL_PERSISTENT_NOTATION = 1 << 19, AGS_RECALL_SKIP_DEPENDENCIES = 1 << 20, }AgsRecallFlags; typedef enum{ AGS_RECALL_NOTIFY_RUN, AGS_RECALL_NOTIFY_AUDIO, AGS_RECALL_NOTIFY_AUDIO_RUN, AGS_RECALL_NOTIFY_CHANNEL, AGS_RECALL_NOTIFY_CHANNEL_RUN, AGS_RECALL_NOTIFY_RECALL, }AgsRecallNotifyDependencyMode; struct _AgsRecall { GObject object; guint flags; GObject *devout; GObject *container; // see AgsRecallContainer gchar *version; gchar *build_id; gchar *effect; gchar *name; gchar *xml_type; GList *dependencies; AgsRecallID *recall_id; AgsRecall *parent; GList *children; GType child_type; GParameter *child_parameters; guint n_params; GList *port; GList *handlers; }; struct _AgsRecallClass { GObjectClass object; void (*resolve_dependencies)(AgsRecall *recall); void (*run_init_pre)(AgsRecall *recall); void (*run_init_inter)(AgsRecall *recall); void (*run_init_post)(AgsRecall *recall); void (*run_pre)(AgsRecall *recall); void (*run_inter)(AgsRecall *recall); void (*run_post)(AgsRecall *recall); void (*stop_persistent)(AgsRecall *recall); void (*done)(AgsRecall *recall); void (*cancel)(AgsRecall *recall); void (*remove)(AgsRecall *recall); AgsRecall* (*duplicate)(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *params); // if a sequencer is linked with a sequencer the AgsRecall's with the flag AGS_RECALL_SOURCE must be duplicated void (*notify_dependency)(AgsRecall *recall, guint dependency, gboolean increase); void (*child_added)(AgsRecall *recall, AgsRecall *child); }; /** * AgsRecallHandler: * @signal_name the signal to listen * @callback the callback to use * @data user data to pass * @handler the handler id * * A #AgsRecallHandler-struct acts as a callback definition */ struct _AgsRecallHandler { const gchar *signal_name; GCallback callback; GObject *data; gulong handler; }; GType ags_recall_get_type(); void ags_recall_set_flags(AgsRecall *recall, guint flags); void ags_recall_resolve_dependencies(AgsRecall *reall); void ags_recall_child_added(AgsRecall *parent, AgsRecall *child); void ags_recall_run_init_pre(AgsRecall *recall); void ags_recall_run_init_inter(AgsRecall *recall); void ags_recall_run_init_post(AgsRecall *recall); void ags_recall_run_pre(AgsRecall *recall); void ags_recall_run_inter(AgsRecall *recall); void ags_recall_run_post(AgsRecall *recall); void ags_recall_stop_persistent(AgsRecall *recall); void ags_recall_done(AgsRecall *recall); void ags_recall_cancel(AgsRecall *recall); void ags_recall_remove(AgsRecall *recall); gboolean ags_recall_is_done(GList *recalls, GObject *recycling_container); AgsRecall* ags_recall_duplicate(AgsRecall *recall, AgsRecallID *recall_id); void ags_recall_set_recall_id(AgsRecall *recall, AgsRecallID *recall_id); void ags_recall_set_devout_recursive(AgsRecall *recall, GObject *devout); void ags_recall_notify_dependency(AgsRecall *recall, guint dependency, gint count); void ags_recall_add_dependency(AgsRecall *recall, AgsRecallDependency *dependency); void ags_recall_remove_dependency(AgsRecall *recall, AgsRecall *template); GList* ags_recall_get_dependencies(AgsRecall *recall); void ags_recall_remove_child(AgsRecall *recall, AgsRecall *child); void ags_recall_add_child(AgsRecall *recall, AgsRecall *child); GList* ags_recall_get_children(AgsRecall *recall); void ags_recall_set_effect(AgsRecall *recall, char *effect); GList* ags_recall_find_by_effect(GList *list, AgsRecallID *recall_id, char *effect); GList* ags_recall_find_type(GList *recall, GType type); GList* ags_recall_find_template(GList *recall); GList* ags_recall_template_find_type(GList *recall, GType type); GList* ags_recall_find_type_with_recycling_container(GList *recall, GType type, GObject *recycling_container); GList* ags_recall_find_recycling_container(GList *recall, GObject *recycling_container); GList* ags_recall_find_provider(GList *recall, GObject *provider); GList* ags_recall_template_find_provider(GList *recall, GObject *provider); GList* ags_recall_find_provider_with_recycling_container(GList *recall, GObject *provider, GObject *recycling_container); void ags_recall_run_init(AgsRecall *recall, guint stage); AgsRecallHandler* ags_recall_handler_alloc(const gchar *signal_name, GCallback callback, GObject *data); void ags_recall_add_handler(AgsRecall *recall, AgsRecallHandler *recall_handler); void ags_recall_remove_handler(AgsRecall *recall, AgsRecallHandler *recall_handler); AgsRecall* ags_recall_new(); #endif /*__AGS_RECALL_H__*/ gsequencer-0.6.37/src/ags/audio/ags_port.c0000644000175000017500000004511312626272146015331 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include void ags_port_class_init(AgsPortClass *port_class); void ags_port_connectable_interface_init(AgsConnectableInterface *connectable); void ags_port_init(AgsPort *port); void ags_port_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_port_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_port_connect(AgsConnectable *connectable); void ags_port_disconnect(AgsConnectable *connectable); void ags_port_real_safe_read(AgsPort *port, GValue *value); void ags_port_real_safe_write(AgsPort *port, GValue *value); void ags_port_real_safe_get_property(AgsPort *port, gchar *property_name, GValue *value); void ags_port_real_safe_set_property(AgsPort *port, gchar *property_name, GValue *value); /** * SECTION:ags_port * @short_description: Perform thread-safe operations * @title: AgsPort * @section_id: * @include: ags/audio/ags_port.h * * #AgsPort provides a thread-safe way to access or change values or properties. */ enum{ SAFE_READ, SAFE_WRITE, SAFE_GET_PROPERTY, SAFE_SET_PROPERTY, LAST_SIGNAL, }; enum{ PROP_0, PROP_PLUGIN_NAME, PROP_SPECIFIER, PROP_CONTROL_PORT, PROP_PORT_VALUE_IS_POINTER, PROP_PORT_VALUE_TYPE, PROP_PORT_VALUE_SIZE, PROP_PORT_VALUE_LENGTH, PROP_PORT_VALUE, }; static gpointer ags_port_parent_class = NULL; static guint port_signals[LAST_SIGNAL]; #include #include GType ags_port_get_type (void) { static GType ags_type_port = 0; if(!ags_type_port){ static const GTypeInfo ags_port_info = { sizeof (AgsPortClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_port_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsPort), 0, /* n_preallocs */ (GInstanceInitFunc) ags_port_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_port_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_port = g_type_register_static(G_TYPE_OBJECT, "AgsPort\0", &ags_port_info, 0); g_type_add_interface_static(ags_type_port, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return(ags_type_port); } void ags_port_class_init(AgsPortClass *port) { GObjectClass *gobject; GParamSpec *param_spec; ags_port_parent_class = g_type_class_peek_parent(port); /* GObjectClass */ gobject = (GObjectClass *) port; gobject->set_property = ags_port_set_property; gobject->get_property = ags_port_get_property; /* properties */ /** * AgsPort:plugin-name: * * The assigned plugin. * * Since: 0.4.0 */ param_spec = g_param_spec_string("plugin-name\0", "plugin-name of port\0", "The plugin-name this port belongs to\0", NULL, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_PLUGIN_NAME, param_spec); /** * AgsPort:specifier: * * The assigned plugin identifier. * * Since: 0.4.0 */ param_spec = g_param_spec_string("specifier\0", "specifier of port\0", "The specifier this port is identified by\0", NULL, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_SPECIFIER, param_spec); /** * AgsPort:control-port: * * The assigned plugin control port. * * Since: 0.4.0 */ param_spec = g_param_spec_string("control-port\0", "control-port of port\0", "The control-port this port is numbered\0", NULL, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_CONTROL_PORT, param_spec); /** * AgsPort:port-value-is-pointer: * * Specify port data as pointer. * * Since: 0.4.0 */ param_spec = g_param_spec_boolean("port-value-is-pointer\0", "port-value-is-pointer indicates if value is a pointer\0", "The port-value-is-pointer indicates if value is a pointer\0", FALSE, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_PORT_VALUE_IS_POINTER, param_spec); /** * AgsPort:port-value-type: * * The port's data type. * * Since: 0.4.0 */ param_spec = g_param_spec_gtype("port-value-type\0", "port-value-type tells you the type of the values\0", "The port-value-type tells you the type of the values\0", G_TYPE_NONE, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_PORT_VALUE_TYPE, param_spec); /** * AgsPort:port-value-size: * * The port's data type size. * * Since: 0.4.0 */ param_spec = g_param_spec_uint("port-value-size\0", "port-value-size is the size of a single entry\0", "The port-value-size is the size of a single entry\0", 1, 8, sizeof(gdouble), G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_PORT_VALUE_SIZE, param_spec); /** * AgsPort:port-value-length: * * The port's data array length. * * Since: 0.4.0 */ param_spec = g_param_spec_uint("port-value-length\0", "port-value-length is the array size\0", "The port-value-length is the array size\0", 0, 65535, 1, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_PORT_VALUE_LENGTH, param_spec); /* AgsPortClass */ port->safe_read = ags_port_real_safe_read; port->safe_write = ags_port_real_safe_write; port->safe_get_property = ags_port_real_safe_get_property; port->safe_set_property = ags_port_real_safe_set_property; /* signals */ /** * AgsPort::safe-read: * @port: the object providing safe read * * The ::safe-read signal is emited while doing safe read operation. */ port_signals[SAFE_READ] = g_signal_new("safe-read\0", G_TYPE_FROM_CLASS (port), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AgsPortClass, safe_read), NULL, NULL, g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER); /** * AgsPort::safe-write: * @port: the object providing safe write * * The ::safe-write signal is emited while doing safe write operation. */ port_signals[SAFE_WRITE] = g_signal_new("safe-write\0", G_TYPE_FROM_CLASS (port), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AgsPortClass, safe_write), NULL, NULL, g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER); /** * AgsPort::safe-get-property: * @port: the object providing safe get property * * The ::safe-get-property signal is emited while safe get property. */ port_signals[SAFE_GET_PROPERTY] = g_signal_new("safe-get-property\0", G_TYPE_FROM_CLASS (port), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AgsPortClass, safe_get_property), NULL, NULL, g_cclosure_user_marshal_VOID__STRING_POINTER, G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_POINTER); /** * AgsPort::safe-set-property: * @port: the object providing safe set property * * The ::safe-set-property signal is emited while safe set property. */ port_signals[SAFE_SET_PROPERTY] = g_signal_new("safe-set-property\0", G_TYPE_FROM_CLASS (port), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AgsPortClass, safe_set_property), NULL, NULL, g_cclosure_user_marshal_VOID__STRING_POINTER, G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_POINTER); } void ags_port_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->add_to_registry = NULL; connectable->remove_from_registry = NULL; connectable->is_ready = NULL; connectable->is_connected = NULL; connectable->connect = ags_port_connect; connectable->disconnect = ags_port_disconnect; } void ags_port_init(AgsPort *port) { pthread_mutexattr_t mutexattr; port->plugin_name = NULL; port->specifier = NULL; port->control_port = NULL; port->port_value_is_pointer = FALSE; port->port_value_type = G_TYPE_DOUBLE; port->port_value_size = sizeof(gdouble); port->port_value_length = 1; pthread_mutexattr_init(&mutexattr); pthread_mutexattr_settype(&mutexattr, PTHREAD_MUTEX_RECURSIVE); pthread_mutex_init(&(port->mutex), &mutexattr); } void ags_port_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsPort *port; port = AGS_PORT(gobject); switch(prop_id){ case PROP_PLUGIN_NAME: { gchar *plugin_name; plugin_name = (gchar *) g_value_get_string(value); if(port->plugin_name == plugin_name){ return; } if(port->plugin_name != NULL){ g_free(port->plugin_name); } port->plugin_name = g_strdup(plugin_name); } break; case PROP_SPECIFIER: { gchar *specifier; specifier = (gchar *) g_value_get_string(value); if(port->specifier == specifier){ return; } if(port->specifier != NULL){ g_free(port->specifier); } port->specifier = g_strdup(specifier); } break; case PROP_CONTROL_PORT: { gchar *control_port; control_port = (gchar *) g_value_get_string(value); if(port->control_port == control_port){ return; } if(port->control_port != NULL){ g_free(port->control_port); } port->control_port = g_strdup(control_port); } break; case PROP_PORT_VALUE_IS_POINTER: { port->port_value_is_pointer = g_value_get_boolean(value); } break; case PROP_PORT_VALUE_TYPE: { port->port_value_type = g_value_get_gtype(value); } break; case PROP_PORT_VALUE_SIZE: { port->port_value_size = g_value_get_uint(value); } break; case PROP_PORT_VALUE_LENGTH: { port->port_value_length = g_value_get_uint(value); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_port_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsPort *port; port = AGS_PORT(gobject); switch(prop_id){ case PROP_PLUGIN_NAME: g_value_set_string(value, port->plugin_name); break; case PROP_SPECIFIER: g_value_set_string(value, port->specifier); break; case PROP_CONTROL_PORT: g_value_set_string(value, port->control_port); break; case PROP_PORT_VALUE_IS_POINTER: g_value_set_boolean(value, port->port_value_is_pointer); break; case PROP_PORT_VALUE_TYPE: g_value_set_gtype(value, port->port_value_type); break; case PROP_PORT_VALUE_SIZE: g_value_set_uint(value, port->port_value_size); break; case PROP_PORT_VALUE_LENGTH: g_value_set_uint(value, port->port_value_length); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_port_connect(AgsConnectable *connectable) { AgsPort *port; port = AGS_PORT(connectable); } void ags_port_disconnect(AgsConnectable *connectable) { AgsPort *port; port = AGS_PORT(connectable); } void ags_port_real_safe_read(AgsPort *port, GValue *value) { guint overall_size; gpointer data; pthread_mutex_lock(&(port->mutex)); overall_size = port->port_value_length * port->port_value_size; if(!port->port_value_is_pointer){ if(port->port_value_type == G_TYPE_BOOLEAN){ g_value_set_boolean(value, port->port_value.ags_port_boolean); }else if(port->port_value_type == G_TYPE_INT64){ g_value_set_int64(value, port->port_value.ags_port_int); }else if(port->port_value_type == G_TYPE_UINT64){ g_value_set_uint64(value, port->port_value.ags_port_uint); }else if(port->port_value_type == G_TYPE_FLOAT){ g_value_set_float(value, port->port_value.ags_port_float); }else if(port->port_value_type == G_TYPE_DOUBLE){ g_value_set_double(value, port->port_value.ags_port_double); } }else{ if(port->port_value_type == G_TYPE_POINTER){ data = port->port_value.ags_port_pointer; }else if(port->port_value_type == G_TYPE_OBJECT){ data = port->port_value.ags_port_object; }else{ data = (gpointer) malloc(overall_size); if(port->port_value_type == G_TYPE_BOOLEAN){ memcpy(data, port->port_value.ags_port_boolean_ptr, overall_size); }else if(port->port_value_type == G_TYPE_INT64){ memcpy(data, port->port_value.ags_port_int_ptr, overall_size); }else if(port->port_value_type == G_TYPE_UINT64){ memcpy(data, port->port_value.ags_port_uint_ptr, overall_size); }else if(port->port_value_type == G_TYPE_FLOAT){ guint i; for(i = 0; i < port->port_value_length; i++){ port->port_value.ags_port_float_ptr[i] = ((gfloat *) data)[i]; } }else if(port->port_value_type == G_TYPE_DOUBLE){ memcpy(data, port->port_value.ags_port_double_ptr, overall_size); } } g_value_set_pointer(value, data); } pthread_mutex_unlock(&(port->mutex)); } /** * ags_port_safe_read: * @port: an #AgsPort * @value: the #GValue to store result * * Perform safe read. * * Since: 0.4 */ void ags_port_safe_read(AgsPort *port, GValue *value) { g_return_if_fail(AGS_IS_PORT(port)); g_object_ref(G_OBJECT(port)); g_signal_emit(G_OBJECT(port), port_signals[SAFE_READ], 0, value); g_object_unref(G_OBJECT(port)); } void ags_port_real_safe_write(AgsPort *port, GValue *value) { guint overall_size; gpointer data; if(port == NULL){ return; } pthread_mutex_lock(&(port->mutex)); overall_size = port->port_value_length * port->port_value_size; if(!port->port_value_is_pointer){ if(port->port_value_type == G_TYPE_BOOLEAN){ port->port_value.ags_port_boolean = g_value_get_boolean(value); }else if(port->port_value_type == G_TYPE_INT64){ port->port_value.ags_port_int = g_value_get_int64(value); }else if(port->port_value_type == G_TYPE_UINT64){ port->port_value.ags_port_uint = g_value_get_uint64(value); }else if(port->port_value_type == G_TYPE_FLOAT){ port->port_value.ags_port_float = (gfloat) g_value_get_float(value); }else if(port->port_value_type == G_TYPE_DOUBLE){ port->port_value.ags_port_double = g_value_get_double(value); }else if(port->port_value_type == G_TYPE_POINTER){ port->port_value.ags_port_pointer = g_value_get_pointer(value); }else if(port->port_value_type == G_TYPE_OBJECT){ port->port_value.ags_port_object = g_value_get_object(value); }else{ g_warning("ags_port.c: unknown type\0"); } }else{ data = g_value_get_pointer(value); if(port->port_value_type == G_TYPE_BOOLEAN){ memcpy(port->port_value.ags_port_boolean_ptr, data, overall_size); }else if(port->port_value_type == G_TYPE_INT64){ memcpy(port->port_value.ags_port_int_ptr, data, overall_size); }else if(port->port_value_type == G_TYPE_UINT64){ memcpy(port->port_value.ags_port_uint_ptr, data, overall_size); }else if(port->port_value_type == G_TYPE_DOUBLE){ memcpy(port->port_value.ags_port_double_ptr, data, overall_size); }else if(port->port_value_type == G_TYPE_POINTER){ port->port_value.ags_port_pointer = data; }else{ data = g_value_get_object(value); if(port->port_value_type == G_TYPE_OBJECT){ port->port_value.ags_port_object = data; }else{ g_warning("ags_port.c: unknown type\0"); } } } pthread_mutex_unlock(&(port->mutex)); } /** * ags_port_safe_write: * @port: an #AgsPort * @value: the #GValue containing data * * Perform safe write. * * Since: 0.4 */ void ags_port_safe_write(AgsPort *port, GValue *value) { g_return_if_fail(AGS_IS_PORT(port)); g_object_ref(G_OBJECT(port)); g_signal_emit(G_OBJECT(port), port_signals[SAFE_WRITE], 0, value); g_object_unref(G_OBJECT(port)); } void ags_port_real_safe_get_property(AgsPort *port, gchar *property_name, GValue *value) { pthread_mutex_lock(&(port->mutex)); g_object_get_property(port->port_value.ags_port_object, property_name, value); pthread_mutex_unlock(&(port->mutex)); } /** * ags_port_safe_get_property: * @port: an #AgsPort * @property_name: the property's name * @value: the #GValue to store the result * * Perform safe get property. * * Since: 0.4 */ void ags_port_safe_get_property(AgsPort *port, gchar *property_name, GValue *value) { g_return_if_fail(AGS_IS_PORT(port)); g_object_ref(G_OBJECT(port)); g_signal_emit(G_OBJECT(port), port_signals[SAFE_GET_PROPERTY], 0, property_name, value); g_object_unref(G_OBJECT(port)); } void ags_port_real_safe_set_property(AgsPort *port, gchar *property_name, GValue *value) { pthread_mutex_lock(&(port->mutex)); g_object_set_property(port->port_value.ags_port_object, property_name, value); pthread_mutex_unlock(&(port->mutex)); } /** * ags_port_safe_set_property: * @port: an #AgsPort * @property_name: the property's name * @value: the #GValue containing data * * Perform safe set property. * * Since: 0.4 */ void ags_port_safe_set_property(AgsPort *port, gchar *property_name, GValue *value) { g_return_if_fail(AGS_IS_PORT(port)); g_object_ref(G_OBJECT(port)); g_signal_emit(G_OBJECT(port), port_signals[SAFE_SET_PROPERTY], 0, property_name, value); g_object_unref(G_OBJECT(port)); } /** * ags_port_find_specifier: * @port: a #GList containing #AgsPort * @specifier: the recall specifier to match * * Retrieve port by specifier. * * Returns: Next match. * * Since: 0.4 */ GList* ags_port_find_specifier(GList *port, gchar *specifier) { while(port != NULL){ if(!g_strcmp0(AGS_PORT(port->data)->specifier, specifier)){ return(port); } port = port->next; } return(NULL); } /** * ags_port_new: * * Creates an #AgsPort. * * Returns: a new #AgsPort. * * Since: 0.4 */ AgsPort* ags_port_new() { AgsPort *port; port = (AgsPort *) g_object_new(AGS_TYPE_PORT, NULL); return(port); } gsequencer-0.6.37/src/ags/audio/ags_synths.c0000644000175000017500000000521312626272146015672 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include short scale = 32000; void ags_synth_sin(AgsDevout *devout, signed short *buffer, guint offset, guint freq, guint phase, guint length, double volume) { guint i; for (i = offset; i < offset + length; i++){ buffer[i] = (signed short) (0xffff & ((int)buffer[i] + (int)(sin ((double)(i + phase) * 2.0 * M_PI * freq / (double)devout->frequency) * (double)scale * volume))); } } void ags_synth_saw(AgsDevout *devout, signed short *buffer, guint offset, guint freq, guint phase, guint length, double volume) { guint i; phase = (int)(phase) % (int)(freq); phase = (phase / freq) * (devout->frequency / freq); for (i = offset; i < length; i++){ buffer[i] = (signed short) (0xffff & ((int)buffer[i] + (int)(((((int)(i + phase) % (int)(devout->frequency / freq)) * 2.0 * freq / devout->frequency) -1) * scale * volume))); } } void ags_synth_triangle(AgsDevout *devout, signed short *buffer, guint offset, guint freq, guint phase, guint length, double volume) { guint i; phase = (int)(phase) % (int)(freq); phase = (phase / freq) * (devout->frequency / freq); for (i = offset; i < length; i++){ buffer[i] = (signed short) (0xffff & ((int)buffer[i] + (int)((((phase + i) * freq / devout->frequency * 2.0) - ((int)((float) ((int)((phase + i) * freq / devout->frequency)) / 2.0) * 2) -1) * scale * volume))); } } void ags_synth_square(AgsDevout *devout, signed short *buffer, guint offset, guint freq, guint phase, guint length, double volume) { guint i; phase = (int)(phase) % (int)(freq); phase = (phase / freq) * (devout->frequency / freq); for (i = offset; i < length; i++){ if (sin (i + phase) >= 0.0){ buffer[i] = (signed short) (0xffff & ((int)buffer[i] + (int)(1.0 * scale * volume))); }else{ buffer[i] = (signed short) (0xffff & ((int)buffer[i] + (int)(-1.0 * scale * volume))); } } } gsequencer-0.6.37/src/ags/audio/ags_recycling.c0000644000175000017500000006511312633240400016310 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include void ags_recycling_class_init(AgsRecyclingClass *recycling_class); void ags_recycling_connectable_interface_init(AgsConnectableInterface *connectable); void ags_recycling_concurrent_tree_interface_init(AgsConcurrentTreeInterface *concurrent_tree); void ags_recycling_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_recycling_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_recycling_init(AgsRecycling *recycling); void ags_recycling_connect(AgsConnectable *connectable); void ags_recycling_disconnect(AgsConnectable *connectable); pthread_mutex_t* ags_recycling_get_lock(AgsConcurrentTree *concurrent_tree); pthread_mutex_t* ags_recycling_get_parent_lock(AgsConcurrentTree *concurrent_tree); void ags_recycling_finalize(GObject *gobject); void ags_recycling_real_add_audio_signal(AgsRecycling *recycling, AgsAudioSignal *audio_signal); void ags_recycling_real_remove_audio_signal(AgsRecycling *recycling, AgsAudioSignal *audio_signal); /** * SECTION:ags_recycling * @short_description: A container of audio signals * @title: AgsRecycling * @section_id: * @include: ags/audio/ags_recycling.h * * #AgsRecycling forms the nested tree of AgsChannel. Ever channel * having own audio signal contains therefor an #AgsRecycling */ enum{ PROP_0, PROP_CHANNEL, PROP_DEVOUT, }; enum{ ADD_AUDIO_SIGNAL, REMOVE_AUDIO_SIGNAL, LAST_SIGNAL, }; static gpointer ags_recycling_parent_class = NULL; static guint recycling_signals[LAST_SIGNAL]; extern pthread_mutex_t ags_application_mutex; GType ags_recycling_get_type(void) { static GType ags_type_recycling = 0; if(!ags_type_recycling){ static const GTypeInfo ags_recycling_info = { sizeof (AgsRecyclingClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_recycling_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsRecycling), 0, /* n_preallocs */ (GInstanceInitFunc) ags_recycling_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_recycling_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_concurrent_tree_interface_info = { (GInterfaceInitFunc) ags_recycling_concurrent_tree_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_recycling = g_type_register_static(G_TYPE_OBJECT, "AgsRecycling\0", &ags_recycling_info, 0); g_type_add_interface_static(ags_type_recycling, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_recycling, AGS_TYPE_CONCURRENT_TREE, &ags_concurrent_tree_interface_info); } return(ags_type_recycling); } void ags_recycling_class_init(AgsRecyclingClass *recycling) { GObjectClass *gobject; GParamSpec *param_spec; ags_recycling_parent_class = g_type_class_peek_parent(recycling); /* GObjectClass */ gobject = (GObjectClass *) recycling; gobject->set_property = ags_recycling_set_property; gobject->get_property = ags_recycling_get_property; gobject->finalize = ags_recycling_finalize; /* properties */ /** * AgsRecycling:channel: * * The assigned #AgsChannel. * * Since: 0.4.0 */ param_spec = g_param_spec_object("channel\0", "assigned channel\0", "The channel it is assigned with\0", AGS_TYPE_CHANNEL, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_CHANNEL, param_spec); /** * AgsRecycling:devout: * * The assigned #AgsDevout acting as default sink. * * Since: 0.4.0 */ param_spec = g_param_spec_object("devout\0", "assigned devout\0", "The devout it is assigned with\0", AGS_TYPE_DEVOUT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_DEVOUT, param_spec); /* */ recycling->add_audio_signal = ags_recycling_real_add_audio_signal; recycling->remove_audio_signal = ags_recycling_real_remove_audio_signal; /** * AgsRecycling::add-audio-signal * @recycling: an #AgsRecycling * @audio_signal: the #AgsAudioSignal to add * * The ::add-audio-signal signal is emited as adding #AgsAudioSignal */ recycling_signals[ADD_AUDIO_SIGNAL] = g_signal_new("add-audio-signal\0", G_TYPE_FROM_CLASS (recycling), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AgsRecyclingClass, add_audio_signal), NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, G_TYPE_OBJECT); /** * AgsRecycling::remove-audio-signal: * @recycling: an #AgsRecycling * @audio_signal: the #AgsAudioSignal to remove * * The ::remove-audio-signal signal is emited as removing #AgsAudioSignal */ recycling_signals[REMOVE_AUDIO_SIGNAL] = g_signal_new("remove-audio-signal\0", G_TYPE_FROM_CLASS (recycling), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AgsRecyclingClass, remove_audio_signal), NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, G_TYPE_OBJECT); } void ags_recycling_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->is_ready = NULL; connectable->is_connected = NULL; connectable->connect = ags_recycling_connect; connectable->disconnect = ags_recycling_disconnect; } void ags_recycling_concurrent_tree_interface_init(AgsConcurrentTreeInterface *concurrent_tree) { concurrent_tree->get_lock = ags_recycling_get_lock; concurrent_tree->get_parent_lock = ags_recycling_get_parent_lock; } void ags_recycling_init(AgsRecycling *recycling) { AgsMutexManager *mutex_manager; pthread_mutex_t *mutex; pthread_mutexattr_t attr; //FIXME:JK: memory leak pthread_mutexattr_init(&attr); pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); mutex = (pthread_mutex_t *) malloc(sizeof(pthread_mutex_t)); pthread_mutex_init(mutex, &attr); pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); ags_mutex_manager_insert(mutex_manager, (GObject *) recycling, mutex); pthread_mutex_unlock(&(ags_application_mutex)); recycling->flags = 0; recycling->devout = NULL; recycling->channel = NULL; recycling->parent = NULL; recycling->next = NULL; recycling->prev = NULL; recycling->audio_signal = NULL; } void ags_recycling_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsRecycling *recycling; recycling = AGS_RECYCLING(gobject); switch(prop_id){ case PROP_CHANNEL: { AgsChannel *channel; channel = (AgsChannel *) g_value_get_object(value); if(channel == (AgsChannel *) recycling->channel){ return; } if(recycling->channel != NULL){ g_object_unref(recycling->channel); } if(channel != NULL){ g_object_ref(channel); } recycling->channel = (GObject *) channel; } break; case PROP_DEVOUT: { AgsDevout *devout; devout = (AgsDevout *) g_value_get_object(value); ags_recycling_set_devout(recycling, (GObject *) devout); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_recycling_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsRecycling *recycling; recycling = AGS_RECYCLING(gobject); switch(prop_id){ case PROP_CHANNEL: g_value_set_object(value, recycling->channel); break; case PROP_DEVOUT: g_value_set_object(value, recycling->devout); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_recycling_connect(AgsConnectable *connectable) { /* empty */ } void ags_recycling_disconnect(AgsConnectable *connectable) { /* empty */ } pthread_mutex_t* ags_recycling_get_lock(AgsConcurrentTree *concurrent_tree) { AgsMutexManager *mutex_manager; pthread_mutex_t *recycling_mutex; /* lookup mutex */ pthread_mutex_lock(&ags_application_mutex); mutex_manager = ags_mutex_manager_get_instance(); recycling_mutex = ags_mutex_manager_lookup(mutex_manager, AGS_RECYCLING(concurrent_tree)); pthread_mutex_unlock(&ags_application_mutex); return(recycling_mutex); } pthread_mutex_t* ags_recycling_get_parent_lock(AgsConcurrentTree *concurrent_tree) { AgsMutexManager *mutex_manager; pthread_mutex_t *parent_mutex; /* lookup mutex */ pthread_mutex_lock(&ags_application_mutex); mutex_manager = ags_mutex_manager_get_instance(); if(AGS_RECYCLING(concurrent_tree)->parent != NULL){ parent_mutex = ags_mutex_manager_lookup(mutex_manager, AGS_RECYCLING(concurrent_tree)->parent); }else{ parent_mutex = ags_mutex_manager_lookup(mutex_manager, AGS_RECYCLING(concurrent_tree)->devout); } pthread_mutex_unlock(&ags_application_mutex); return(parent_mutex); } void ags_recycling_finalize(GObject *gobject) { AgsRecycling *recycling; AgsMutexManager *mutex_manager; GList *list, *list_next; // g_warning("ags_recycling_finalize\0"); pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); ags_mutex_manager_remove(mutex_manager, gobject); pthread_mutex_unlock(&(ags_application_mutex)); recycling = AGS_RECYCLING(gobject); /* AgsAudioSignal */ ags_list_free_and_unref_link(recycling->audio_signal); /* call parent */ G_OBJECT_CLASS(ags_recycling_parent_class)->finalize(gobject); } /** * ags_recycling_set_devout: * @recycling: an #AgsRecycling * @devout: the #AgsDevout to set * * Sets #AgsDevout to recycling. * * Since: 0.3 */ void ags_recycling_set_devout(AgsRecycling *recycling, GObject *devout) { /* recycling */ if(recycling->devout == devout) return; if(recycling->devout != NULL) g_object_unref(recycling->devout); if(devout != NULL) g_object_ref(devout); recycling->devout = (GObject *) devout; } /** * ags_recycling_add_audio_signal: * @recycling: an #AgsRecycling * @audio_signal: the #AgsAudioSignal to add * * Add #AgsAudioSignal to recycling. * * Since: 0.3 */ void ags_recycling_add_audio_signal(AgsRecycling *recycling, AgsAudioSignal *audio_signal) { AgsMutexManager *mutex_manager; pthread_mutex_t *recycling_mutex; if(recycling == NULL){ return; } /* lookup mutex */ pthread_mutex_lock(&ags_application_mutex); mutex_manager = ags_mutex_manager_get_instance(); recycling_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) recycling); pthread_mutex_unlock(&ags_application_mutex); pthread_mutex_lock(recycling_mutex); if(!AGS_IS_RECYCLING(recycling)){ pthread_mutex_unlock(recycling_mutex); return; } if(!AGS_IS_AUDIO_SIGNAL(audio_signal)){ pthread_mutex_unlock(recycling_mutex); return; } /* emit signal */ g_object_ref(G_OBJECT(recycling)); g_signal_emit(G_OBJECT(recycling), recycling_signals[ADD_AUDIO_SIGNAL], 0, audio_signal); g_object_unref(G_OBJECT(recycling)); /* release lock */ pthread_mutex_unlock(recycling_mutex); } void ags_recycling_real_add_audio_signal(AgsRecycling *recycling, AgsAudioSignal *audio_signal) { recycling->audio_signal = g_list_prepend(recycling->audio_signal, (gpointer) audio_signal); audio_signal->recycling = (GObject *) recycling; g_object_ref(audio_signal); } /** * ags_recycling_remove_audio_signal: * @recycling: an #AgsRecycling * @audio_signal: the #AgsAudioSignal to remove * * Remove #AgsAudioSignal of recycling. * * Since: 0.3 */ void ags_recycling_remove_audio_signal(AgsRecycling *recycling, AgsAudioSignal *audio_signal) { AgsMutexManager *mutex_manager; pthread_mutex_t *recycling_mutex; if(recycling == NULL){ return; } /* lookup mutex */ pthread_mutex_lock(&ags_application_mutex); mutex_manager = ags_mutex_manager_get_instance(); recycling_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) recycling); pthread_mutex_unlock(&ags_application_mutex); pthread_mutex_lock(recycling_mutex); if(!AGS_IS_RECYCLING(recycling)){ pthread_mutex_unlock(recycling_mutex); return; } if(!AGS_IS_AUDIO_SIGNAL(audio_signal)){ pthread_mutex_unlock(recycling_mutex); return; } /* emit signal */ g_object_ref((GObject *) recycling); g_object_ref((GObject *) audio_signal); g_signal_emit(G_OBJECT(recycling), recycling_signals[REMOVE_AUDIO_SIGNAL], 0, audio_signal); g_object_unref((GObject *) audio_signal); g_object_unref((GObject *) recycling); /* release lock */ pthread_mutex_unlock(recycling_mutex); } void ags_recycling_real_remove_audio_signal(AgsRecycling *recycling, AgsAudioSignal *audio_signal) { recycling->audio_signal = g_list_remove(recycling->audio_signal, (gpointer) audio_signal); g_object_set(audio_signal, "recycling\0", NULL, NULL); } /** * ags_recycling_create_audio_signal_with_defaults: * @recycling: an #AgsRecycling * @audio_signal: the #AgsAudioSignal to apply defaults * @delay: * @attack: * * Create audio signal with defaults. * * Since: 0.4 */ void ags_recycling_create_audio_signal_with_defaults(AgsRecycling *recycling, AgsAudioSignal *audio_signal, gdouble delay, guint attack) { AgsAudioSignal *template; AgsMutexManager *mutex_manager; pthread_mutex_t *recycling_mutex; /* lookup mutex */ pthread_mutex_lock(&ags_application_mutex); mutex_manager = ags_mutex_manager_get_instance(); recycling_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) recycling); pthread_mutex_unlock(&ags_application_mutex); pthread_mutex_lock(recycling_mutex); if(!AGS_IS_RECYCLING(recycling)){ pthread_mutex_unlock(recycling_mutex); return; } if(!AGS_IS_AUDIO_SIGNAL(audio_signal)){ pthread_mutex_unlock(recycling_mutex); return; } /* create audio signal */ template = ags_audio_signal_get_template(recycling->audio_signal); audio_signal->delay = delay; audio_signal->attack = attack; if(template == NULL){ ags_audio_signal_stream_resize(audio_signal, 0); /* release lock */ pthread_mutex_unlock(recycling_mutex); return; } audio_signal->devout = template->devout; audio_signal->recycling = (GObject *) recycling; audio_signal->samplerate = template->samplerate; audio_signal->buffer_size = template->buffer_size; audio_signal->resolution = template->resolution; audio_signal->last_frame = (((guint)(delay * template->buffer_size) + attack + template->last_frame) % template->buffer_size); audio_signal->loop_start = (((guint) (delay * template->buffer_size) + attack + template->loop_start) % template->buffer_size); audio_signal->loop_end = (((guint)(delay * template->buffer_size) + attack + template->loop_end) % template->buffer_size); ags_audio_signal_stream_resize(audio_signal, template->length); ags_audio_signal_duplicate_stream(audio_signal, template); /* release lock */ pthread_mutex_unlock(recycling_mutex); } /** * ags_recycling_create_audio_signal_with_frame_count: * @recycling: an #AgsRecycling * @audio_signal: the #AgsAudioSignal to apply defaults * @frame_count: the audio data size * @delay: * @attack: * * Create audio signal with frame count. * * Since: 0.4 */ void ags_recycling_create_audio_signal_with_frame_count(AgsRecycling *recycling, AgsAudioSignal *audio_signal, guint frame_count, gdouble delay, guint attack) { AgsDevout *devout; AgsAudioSignal *template; AgsMutexManager *mutex_manager; pthread_mutex_t *recycling_mutex; GList *stream, *template_stream, *template_loop; guint frames_copied; guint loop_start, loop_end, loop_attack; guint i, j; gboolean enter_loop, initial_loop; /* lookup mutex */ pthread_mutex_lock(&ags_application_mutex); mutex_manager = ags_mutex_manager_get_instance(); recycling_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) recycling); pthread_mutex_unlock(&ags_application_mutex); pthread_mutex_lock(recycling_mutex); if(!AGS_IS_RECYCLING(recycling)){ pthread_mutex_unlock(recycling_mutex); return; } if(!AGS_IS_AUDIO_SIGNAL(audio_signal)){ pthread_mutex_unlock(recycling_mutex); return; } /* create audio signal */ template = ags_audio_signal_get_template(recycling->audio_signal); audio_signal->devout = template->devout; audio_signal->recycling = (GObject *) recycling; audio_signal->samplerate = template->samplerate; audio_signal->buffer_size = template->buffer_size; audio_signal->resolution = template->resolution; audio_signal->last_frame = (((guint)(delay * template->buffer_size) + attack + template->last_frame) % template->buffer_size); audio_signal->loop_start = (((guint) (delay * template->buffer_size) + attack + template->loop_start) % template->buffer_size); audio_signal->loop_end = (((guint)(delay * template->buffer_size) + attack + template->loop_end) % template->buffer_size); devout = AGS_DEVOUT(audio_signal->devout); /* resize */ ags_audio_signal_stream_resize(audio_signal, (guint) ceil(((double) attack + (double) frame_count) / (double) audio_signal->buffer_size)); if(template->length == 0){ /* release lock */ pthread_mutex_unlock(recycling_mutex); return; } audio_signal->last_frame = ((guint) frame_count + attack) % audio_signal->buffer_size; /* generic copying */ stream = audio_signal->stream_beginning; template_stream = template->stream_beginning; frames_copied = 0; loop_start = template->loop_start; loop_end = template->loop_end; initial_loop = TRUE; /* loop related copying */ if(frame_count >= template->loop_start && template->loop_start < template->loop_end){ template_loop = g_list_nth(template->stream_beginning, (guint) floor((double)loop_start / audio_signal->buffer_size)); enter_loop = TRUE; }else{ template_loop = NULL; enter_loop = FALSE; } /* the copy loops */ j = 0; while(stream != NULL && template_stream != NULL && frames_copied < frame_count){ if(!(enter_loop && frames_copied + audio_signal->buffer_size > loop_start) && frames_copied < frame_count){ ags_audio_signal_copy_buffer_to_buffer(&(((short *) stream->data)[attack]), 1, (short *) template_stream->data, 1, audio_signal->buffer_size - attack); if(stream->next != NULL && attack != 0){ ags_audio_signal_copy_buffer_to_buffer((short *) stream->next->data, 1, &(((short *) template_stream->data)[audio_signal->buffer_size - attack]), 1, attack); } } if(enter_loop && ((frames_copied > loop_start || frames_copied + audio_signal->buffer_size > loop_start) || (frames_copied < frame_count))){ for(i = 0; i < (guint) ceil(audio_signal->buffer_size / (loop_end - loop_start)); i++, j++){ if(template_stream == NULL){ template_stream = template_loop; } initial_loop = FALSE; if((loop_end - loop_start) < audio_signal->buffer_size){ if(initial_loop && (loop_start % audio_signal->buffer_size) == 0){ loop_attack = 0; }else{ loop_attack = (loop_start + j * (loop_end - loop_start)) % (loop_end - loop_start); } if(loop_attack + i * (loop_end - loop_start) < audio_signal->buffer_size){ ags_audio_signal_copy_buffer_to_buffer(&(((short *) stream->data)[loop_attack + i * (loop_end - loop_start)]), 1, &(((short *) template_stream->data)[loop_start % audio_signal->buffer_size]), 1, loop_end - loop_start); }else{ ags_audio_signal_copy_buffer_to_buffer(&(((short *) stream->data)[loop_attack + i * (loop_end - loop_start)]), 1, &(((short *) template_stream->data)[loop_start % audio_signal->buffer_size]), 1, audio_signal->buffer_size - (loop_attack + i * (loop_end - loop_start))); } }else{ if(initial_loop){ if((loop_start % audio_signal->buffer_size) == 0){ loop_attack = 0; }else{ loop_attack = (loop_start + audio_signal->buffer_size - (loop_start % audio_signal->buffer_size)) % audio_signal->buffer_size; } }else{ loop_attack = (loop_start + j * (audio_signal->buffer_size - (loop_start % audio_signal->buffer_size)) + (j - 1) * (loop_start % audio_signal->buffer_size)) % audio_signal->buffer_size; } if(initial_loop){ ags_audio_signal_copy_buffer_to_buffer(&(((short *) stream->data)[loop_attack]), 1, (short *) template_stream->data, 1, audio_signal->buffer_size - loop_attack); }else{ ags_audio_signal_copy_buffer_to_buffer(&(((short *) stream->data)[loop_attack]), 1, &(((short *) template_stream->data)[loop_start % audio_signal->buffer_size]), 1, loop_start - loop_end); } if(loop_attack != 0 && stream->next != NULL){ ags_audio_signal_copy_buffer_to_buffer((short *) stream->next->data, 1, &(((short *) template_stream->data)[audio_signal->buffer_size - loop_attack]), 1, loop_attack); } } } } stream = stream->next; template_stream = template_stream->next; frames_copied += audio_signal->buffer_size; } /* release lock */ pthread_mutex_unlock(recycling_mutex); } /** * ags_recycling_find_next_channel: * @start_region: boundary start * @end_region: boundary end * @prev_channel: previous channel * * Retrieve next recycling with different channel. * * Returns: Matching recycling. * * Since: 0.4 */ AgsRecycling* ags_recycling_find_next_channel(AgsRecycling *start_region, AgsRecycling *end_region, GObject *prev_channel) { AgsRecycling *recycling, *end_recycling; AgsMutexManager *mutex_manager; pthread_mutex_t *recycling_mutex, *start_recycling_mutex, *end_recycling_mutex; /* lookup mutex */ pthread_mutex_lock(&ags_application_mutex); mutex_manager = ags_mutex_manager_get_instance(); start_recycling_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) start_region); end_recycling_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) end_region); pthread_mutex_unlock(&ags_application_mutex); /* verify objects and get pointer for safe access */ pthread_mutex_lock(start_recycling_mutex); if(!AGS_IS_RECYCLING(start_region)){ pthread_mutex_unlock(start_recycling_mutex); return; } pthread_mutex_lock(start_recycling_mutex); pthread_mutex_lock(end_recycling_mutex); if(!AGS_IS_RECYCLING(end_region)){ pthread_mutex_unlock(end_recycling_mutex); return; } end_recycling = end_region->next; pthread_mutex_unlock(end_recycling_mutex); /* find */ recycling = start_region; while(recycling != end_recycling){ /* lock current */ pthread_mutex_lock(&ags_application_mutex); recycling_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) recycling); pthread_mutex_unlock(&ags_application_mutex); /* check if new match */ pthread_mutex_lock(recycling_mutex); if(recycling->channel != prev_channel){ pthread_mutex_unlock(recycling_mutex); return(recycling); } recycling = recycling->next; pthread_mutex_unlock(recycling_mutex); } /* no new channel within region */ return(NULL); } /** * ags_recycling_position: * @start_region: boundary start * @end_region: boundary end * @recycling: matching recycling * * Retrieve position of recycling. * * Returns: position within boundary. * * Since: 0.4 */ gint ags_recycling_position(AgsRecycling *start_region, AgsRecycling *end_region, AgsRecycling *recycling) { AgsRecycling *current; AgsMutexManager *mutex_manager; pthread_mutex_t *current_mutex; gint position; if(start_region == NULL){ return(-1); } /* lookup mutex */ pthread_mutex_lock(&ags_application_mutex); mutex_manager = ags_mutex_manager_get_instance(); pthread_mutex_unlock(&ags_application_mutex); /* determine position */ current = start_region; position = -1; while(current != NULL && current != end_region){ position++; /* lock current */ pthread_mutex_lock(&ags_application_mutex); current_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) current); pthread_mutex_unlock(&ags_application_mutex); /* check if new match */ pthread_mutex_lock(current_mutex); if(current == recycling){ pthread_mutex_unlock(current_mutex); return(position); } current = current->next; pthread_mutex_unlock(current_mutex); } /* no match within region */ return(-1); } /** * ags_recycling_new: * @devout: the #AgsDevout * * Creates a #AgsRecycling, with defaults of @devout. * * Returns: a new #AgsRecycling * * Since: 0.3 */ AgsRecycling* ags_recycling_new(GObject *devout) { AgsRecycling *recycling; AgsAudioSignal *audio_signal; recycling = (AgsRecycling *) g_object_new(AGS_TYPE_RECYCLING, "devout\0", devout, NULL); audio_signal = ags_audio_signal_new(devout, (GObject *) recycling, NULL); audio_signal->flags |= AGS_AUDIO_SIGNAL_TEMPLATE; ags_connectable_connect(AGS_CONNECTABLE(audio_signal)); recycling->audio_signal = g_list_alloc(); recycling->audio_signal->data = (gpointer) audio_signal; return(recycling); } gsequencer-0.6.37/src/ags/audio/ags_garbage_collector.c0000644000175000017500000001650212626272146020003 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include void ags_garbage_collector_class_init (AgsGarbageCollectorClass *garbage_collector_class); void ags_garbage_collector_init (AgsGarbageCollector *garbage_collector); void ags_garbage_collector_destroy (GObject *gobject); GType ags_garbage_collector_get_type (void) { static GType ags_type_garbage_collector = 0; if(!ags_type_garbage_collector){ static const GTypeInfo ags_garbage_collector_info = { sizeof (AgsGarbageCollectorClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_garbage_collector_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsGarbageCollector), 0, /* n_preallocs */ (GInstanceInitFunc) ags_garbage_collector_init, }; ags_type_garbage_collector = g_type_register_static (G_TYPE_OBJECT, "AgsGarbageCollector\0", &ags_garbage_collector_info, 0); } return(ags_type_garbage_collector); } void ags_garbage_collector_class_init(AgsGarbageCollectorClass *garbage_collector_class) { } void ags_garbage_collector_init(AgsGarbageCollector *garbage_collector) { garbage_collector->flags = 0; garbage_collector->devout = NULL; garbage_collector->list = NULL; garbage_collector->stopped = NULL; garbage_collector->start = NULL; garbage_collector->end = NULL; } void ags_garbage_collector_destroy(GObject *gobject) { g_object_unref(gobject); } void ags_garbage_collector_add(AgsGarbageCollector *garbage_collector, AgsRecycling *recycling) { static GStaticMutex mutex = G_STATIC_MUTEX_INIT; g_static_mutex_lock(&mutex); garbage_collector->list = g_list_prepend(garbage_collector->list, recycling); if(garbage_collector->stopped == NULL) garbage_collector->stopped = garbage_collector->list; g_static_mutex_unlock(&mutex); } void ags_garbage_collector_remove(AgsGarbageCollector *garbage_collector, AgsRecycling *recycling) { static GStaticMutex mutex = G_STATIC_MUTEX_INIT; g_static_mutex_lock(&mutex); if((AGS_GARBAGE_COLLECTOR_RUN & garbage_collector->flags) != 0){ garbage_collector->flags |= AGS_GARBAGE_COLLECTOR_CANCEL_RUN; g_static_mutex_unlock(&mutex); if(recycling == garbage_collector->stopped->data){ } if(garbage_collector->stopped == garbage_collector->start){ } if(garbage_collector->stopped == garbage_collector->end){ } garbage_collector->list = g_list_remove(garbage_collector->list, (gpointer) recycling); }else{ garbage_collector->list = g_list_remove(garbage_collector->list, (gpointer) recycling); g_static_mutex_unlock(&mutex); } } /* * you should set the flag AGS_GARBAGE_COLLECTOR_RUN on before calling this function and wrap it with a mutex */ void ags_garbage_collector_run(AgsGarbageCollector *garbage_collector) { GList *audio_signal; gboolean stopped_is_control; static GStaticMutex mutex = G_STATIC_MUTEX_INIT; /* void ags_garbage_collector_run_audio_signal(AgsAudioSignal *audio_signal){ GList *stream, *stream_prev, *lock, *prev_lock; guint i; gboolean reset_lock_attack; static GStaticMutex mutex = G_STATIC_MUTEX_INIT; stream = audio_signal->stream; i = audio_signal->lock_attack; reset_lock_attack = TRUE; if(i == AGS_STREAM_LOCK_SIZE){ prev_lock = audio_signal->lock; audio_signal->lock = audio_signal->lock->next; audio_signal->lock->prev = NULL; free(prev_lock); i = 0; }else lock = audio_signal->lock; goto ags_garbage_collector_run_audio_signal0; while(stream != audio_signal->current_stream && stream != NULL){ for(i = 0; i < AGS_STREAM_LOCK_SIZE;){ ags_garbage_collector_run_audio_signal0: if((AGS_GARBAGE_COLLECTOR_CANCEL_RUN & garbage_collector->flags) != 0){ return; } if(AGS_STREAM_LOCK(lock->data)->lock[i] == 0){ if(reset_lock_attack){ audio_signal->stream = stream->next; stream_prev = stream; stream = stream->next; stream->prev = NULL; free(stream_prev); }else{ stream_prev = stream; stream = stream->next; stream->prev = stream_prev->prev; stream_prev->prev->next = stream; free(stream_prev); } AGS_STREAM_LOCK(lock->data)->lock[i] = ~0; }else if(reset_lock_attack){ reset_lock_attack = FALSE; } if(AGS_STREAM_LOCK(lock->data)->lock[i] != ~0) stream = stream->next; i++; if(reset_lock_attack){ audio_signal->lock_attack = i; g_static_mutex_unlock(&mutex); } } if(reset_lock_attack){ prev_lock = audio_signal->lock; audio_signal->lock = audio_signal->lock->next; audio_signal->lock->prev = NULL; free(prev_lock); }else lock = lock->next; } } if(garbage_collector->stopped == NULL) return; g_static_mutex_lock(&mutex); garbage_collector->start = garbage_collector->stopped; garbage_collector->end = NULL; g_static_mutex_unlock(&mutex); if(garbage_collector->start != garbage_collector->list) stopped_is_control = FALSE; else stopped_is_control = TRUE; ags_garbage_collector_run0: while(garbage_collector->stopped != garbage_collector->end){ if((AGS_GARBAGE_COLLECTOR_CANCEL_RUN & garbage_collector->flags) != 0){ garbage_collector->flags &= (~AGS_GARBAGE_COLLECTOR_RUN); return; } audio_signal = AGS_RECYCLING(garbage_collector->stopped->data)->audio_signal; while(audio_signal != NULL && (AGS_AUDIO_SIGNAL(audio_signal->data)->start < AGS_DEVOUT(garbage_collector->devout)->offset)){ ags_garbage_collector_run_audio_signal((AgsAudioSignal *) audio_signal->data); if((AGS_GARBAGE_COLLECTOR_CANCEL_RUN & garbage_collector->flags) != 0){ garbage_collector->flags &= (~AGS_GARBAGE_COLLECTOR_RUN); return; } audio_signal = audio_signal->next; } garbage_collector->stopped = garbage_collector->stopped->next; } if(!stopped_is_control){ garbage_collector->stopped = garbage_collector->list; garbage_collector->end = garbage_collector->start; garbage_collector->start = garbage_collector->list; stopped_is_control = TRUE; goto ags_garbage_collector_run0; } ags_garbage_collector_runEnd: g_static_mutex_lock(&mutex); if(garbage_collector->stopped == NULL) garbage_collector->stopped = garbage_collector->list; garbage_collector->flags &= (~AGS_GARBAGE_COLLECTOR_RUN); g_static_mutex_unlock(&mutex); */ } AgsGarbageCollector* ags_garbage_collector_new() { AgsGarbageCollector *garbage_collector; garbage_collector = (AgsGarbageCollector *) g_object_new(AGS_TYPE_GARBAGE_COLLECTOR, NULL); return(garbage_collector); } gsequencer-0.6.37/src/ags/audio/ags_recall_channel_run.c0000644000175000017500000010503112626272146020157 00000000000000/* AGS - Advanced GTK Sequencer * Copyright (C) 2005-2011 Joël Krähemann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void ags_recall_channel_run_class_init(AgsRecallChannelRunClass *recall_channel_run); void ags_recall_channel_run_connectable_interface_init(AgsConnectableInterface *connectable); void ags_recall_channel_run_packable_interface_init(AgsPackableInterface *packable); void ags_recall_channel_run_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable); void ags_recall_channel_run_init(AgsRecallChannelRun *recall_channel_run); void ags_recall_channel_run_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_recall_channel_run_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_recall_channel_run_connect(AgsConnectable *connectable); void ags_recall_channel_run_disconnect(AgsConnectable *connectable); gboolean ags_recall_channel_run_pack(AgsPackable *packable, GObject *container); gboolean ags_recall_channel_run_unpack(AgsPackable *packable); void ags_recall_channel_run_connect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_recall_channel_run_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_recall_channel_run_finalize(GObject *gobject); void ags_recall_channel_run_remove(AgsRecall *recall); AgsRecall* ags_recall_channel_run_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter); void ags_recall_channel_run_map_recall_recycling(AgsRecallChannelRun *recall_channel_run); void ags_recall_channel_run_remap_child_source(AgsRecallChannelRun *recall_channel_run, AgsRecycling *old_start_changed_region, AgsRecycling *old_end_changed_region, AgsRecycling *new_start_changed_region, AgsRecycling *new_end_changed_region); void ags_recall_channel_run_remap_child_destination(AgsRecallChannelRun *recall_channel_run, AgsRecycling *old_start_changed_region, AgsRecycling *old_end_changed_region, AgsRecycling *new_start_changed_region, AgsRecycling *new_end_changed_region); void ags_recall_channel_run_source_recycling_changed_callback(AgsChannel *channel, AgsRecycling *old_start_region, AgsRecycling *old_end_region, AgsRecycling *new_start_region, AgsRecycling *new_end_region, AgsRecycling *old_start_changed_region, AgsRecycling *old_end_changed_region, AgsRecycling *new_start_changed_region, AgsRecycling *new_end_changed_region, AgsRecallChannelRun *recall_channel_run); void ags_recall_channel_run_destination_recycling_changed_callback(AgsChannel *channel, AgsRecycling *old_start_region, AgsRecycling *old_end_region, AgsRecycling *new_start_region, AgsRecycling *new_end_region, AgsRecycling *old_start_changed_region, AgsRecycling *old_end_changed_region, AgsRecycling *new_start_changed_region, AgsRecycling *new_end_changed_region, AgsRecallChannelRun *recall_channel_run); void ags_recall_channel_run_real_run_order_changed(AgsRecallChannelRun *recall_channel_run, guint run_order); /** * SECTION:ags_recall_channel_run * @short_description: dynamic channel context of recall * @title: AgsRecallChannelRun * @section_id: * @include: ags/audio/ags_recall_channel_run.h * * #AgsRecallChannelRun acts as channel recall run. */ enum{ RUN_ORDER_CHANGED, LAST_SIGNAL, }; enum{ PROP_0, PROP_AUDIO_CHANNEL, PROP_DESTINATION, PROP_SOURCE, PROP_RECALL_AUDIO_RUN, PROP_RECALL_CHANNEL, }; static gpointer ags_recall_channel_run_parent_class = NULL; static AgsConnectableInterface* ags_recall_channel_run_parent_connectable_interface; static AgsPackableInterface* ags_recall_channel_run_parent_packable_interface; static AgsDynamicConnectableInterface *ags_recall_channel_run_parent_dynamic_connectable_interface; static guint recall_channel_run_signals[LAST_SIGNAL]; GType ags_recall_channel_run_get_type() { static GType ags_type_recall_channel_run = 0; if(!ags_type_recall_channel_run){ static const GTypeInfo ags_recall_channel_run_info = { sizeof (AgsRecallChannelRunClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_recall_channel_run_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsRecallChannelRun), 0, /* n_preallocs */ (GInstanceInitFunc) ags_recall_channel_run_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_recall_channel_run_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_packable_interface_info = { (GInterfaceInitFunc) ags_recall_channel_run_packable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_dynamic_connectable_interface_info = { (GInterfaceInitFunc) ags_recall_channel_run_dynamic_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_recall_channel_run = g_type_register_static(AGS_TYPE_RECALL, "AgsRecallChannelRun\0", &ags_recall_channel_run_info, 0); g_type_add_interface_static(ags_type_recall_channel_run, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_recall_channel_run, AGS_TYPE_PACKABLE, &ags_packable_interface_info); g_type_add_interface_static(ags_type_recall_channel_run, AGS_TYPE_DYNAMIC_CONNECTABLE, &ags_dynamic_connectable_interface_info); } return(ags_type_recall_channel_run); } void ags_recall_channel_run_class_init(AgsRecallChannelRunClass *recall_channel_run) { GObjectClass *gobject; AgsRecallClass *recall; GParamSpec *param_spec; ags_recall_channel_run_parent_class = g_type_class_peek_parent(recall_channel_run); /* GObjectClass */ gobject = (GObjectClass *) recall_channel_run; gobject->set_property = ags_recall_channel_run_set_property; gobject->get_property = ags_recall_channel_run_get_property; gobject->finalize = ags_recall_channel_run_finalize; /* properties */ /** * AgsRecallChannelRun:audio-channel: * * The audio channel to output. * * Since: 0.4.0 */ param_spec = g_param_spec_uint("audio-channel\0", "assigned audio channel\0", "The audio channel this recall is assigned to\0", 0, 65535, 0, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_AUDIO_CHANNEL, param_spec); /** * AgsRecallChannelRun:recall-audio-run: * * The audio run opposite of this recall. * * Since: 0.4.0 */ param_spec = g_param_spec_object("recall-audio-run\0", "AgsRecallAudioRun of this recall\0", "The AgsRecallAudioRun which this recall needs\0", AGS_TYPE_RECALL_AUDIO_RUN, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_RECALL_AUDIO_RUN, param_spec); /** * AgsRecallChannelRun:recall-channel: * * The channel context of this recall. * * Since: 0.4.0 */ param_spec = g_param_spec_object("recall-channel\0", "AsgRecallChannel of this recall\0", "The AgsRecallChannel which this recall needs\0", AGS_TYPE_RECALL_CHANNEL, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_RECALL_CHANNEL, param_spec); /** * AgsRecallChannelRun:destination: * * The channel to do output to. * * Since: 0.4.0 */ param_spec = g_param_spec_object("destination\0", "destination of output\0", "The destination AgsChannel where it will output to\0", AGS_TYPE_CHANNEL, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_DESTINATION, param_spec); /** * AgsRecallChannelRun:source: * * The channel to do input from. * * Since: 0.4.0 */ param_spec = g_param_spec_object("source\0", "source of input\0", "The source AgsChannel where it will take the input from\0", AGS_TYPE_CHANNEL, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_SOURCE, param_spec); /* AgsRecallClass */ recall = (AgsRecallClass *) recall_channel_run; recall->remove = ags_recall_channel_run_remove; recall->duplicate = ags_recall_channel_run_duplicate; /* AgsRecallChannelRunClass */ recall_channel_run->run_order_changed = ags_recall_channel_run_real_run_order_changed; /* signals */ /** * AgsRecallChannelRun::run-order-changed: * @recall_channel_run: the object run order changed * @run_order: nth run of parent recycling. * * The ::run-order-changed signal is invoked as changing link of destination * during playback. */ recall_channel_run_signals[RUN_ORDER_CHANGED] = g_signal_new("run-order-changed\0", G_TYPE_FROM_CLASS (recall_channel_run), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AgsRecallChannelRunClass, run_order_changed), NULL, NULL, g_cclosure_marshal_VOID__UINT, G_TYPE_NONE, 1, G_TYPE_UINT); } void ags_recall_channel_run_connectable_interface_init(AgsConnectableInterface *connectable) { AgsConnectableInterface *ags_recall_channel_run_connectable_parent_interface; ags_recall_channel_run_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_recall_channel_run_connect; connectable->disconnect = ags_recall_channel_run_disconnect; } void ags_recall_channel_run_packable_interface_init(AgsPackableInterface *packable) { ags_recall_channel_run_parent_packable_interface = g_type_interface_peek_parent(packable); packable->pack = ags_recall_channel_run_pack; packable->unpack = ags_recall_channel_run_unpack; } void ags_recall_channel_run_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable) { ags_recall_channel_run_parent_dynamic_connectable_interface = g_type_interface_peek_parent(dynamic_connectable); dynamic_connectable->connect_dynamic = ags_recall_channel_run_connect_dynamic; dynamic_connectable->disconnect_dynamic = ags_recall_channel_run_disconnect_dynamic; } void ags_recall_channel_run_init(AgsRecallChannelRun *recall_channel_run) { recall_channel_run->audio_channel = 0; recall_channel_run->recall_audio_run = NULL; recall_channel_run->recall_channel = NULL; recall_channel_run->source = NULL; recall_channel_run->destination = NULL; recall_channel_run->run_order = 0; } void ags_recall_channel_run_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsRecallChannelRun *recall_channel_run; recall_channel_run = AGS_RECALL_CHANNEL_RUN(gobject); switch(prop_id){ case PROP_AUDIO_CHANNEL: { recall_channel_run->audio_channel = g_value_get_uint(value); } break; case PROP_RECALL_AUDIO_RUN: { AgsRecallAudioRun *recall_audio_run; recall_audio_run = (AgsRecallAudioRun *) g_value_get_object(value); if(recall_channel_run->recall_audio_run == recall_audio_run) return; if(recall_channel_run->recall_audio_run != NULL){ g_object_unref(G_OBJECT(recall_channel_run->recall_audio_run)); } if(recall_audio_run != NULL){ g_object_ref(G_OBJECT(recall_audio_run)); } recall_channel_run->recall_audio_run = recall_audio_run; } break; case PROP_RECALL_CHANNEL: { AgsRecallChannel *recall_channel; recall_channel = (AgsRecallChannel *) g_value_get_object(value); if(recall_channel_run->recall_channel == recall_channel) return; if(recall_channel_run->recall_channel != NULL){ g_object_unref(G_OBJECT(recall_channel_run->recall_channel)); } if(recall_channel != NULL){ g_object_ref(G_OBJECT(recall_channel)); } recall_channel_run->recall_channel = recall_channel; } break; case PROP_DESTINATION: { AgsChannel *destination; AgsChannel *old_destination; AgsRecycling *new_start_region, *new_end_region; AgsRecycling *old_start_region, *old_end_region; destination = (AgsChannel *) g_value_get_object(value); if(recall_channel_run->destination == destination) return; old_destination = recall_channel_run->destination; if(old_destination != NULL){ old_start_region = old_destination->first_recycling; old_end_region = old_destination->last_recycling; }else{ old_start_region = NULL; old_end_region = NULL; } if(destination != NULL){ g_object_ref(G_OBJECT(destination)); new_start_region = destination->first_recycling; new_end_region = destination->last_recycling; }else{ new_start_region = NULL; new_end_region = NULL; } recall_channel_run->destination = destination; /* child destination */ if(destination == recall_channel_run->source) g_warning("destination == recall_channel_run->source\0"); if(old_destination != NULL) g_object_unref(G_OBJECT(old_destination)); } break; case PROP_SOURCE: { AgsChannel *source; AgsChannel *old_source; AgsRecycling *new_start_region, *new_end_region; AgsRecycling *old_start_region, *old_end_region; source = (AgsChannel *) g_value_get_object(value); if(recall_channel_run->source == source) return; old_source = recall_channel_run->source; if(old_source != NULL){ old_start_region = old_source->first_recycling; old_end_region = old_source->last_recycling; }else{ old_start_region = NULL; old_end_region = NULL; } if(source != NULL){ g_object_ref(G_OBJECT(source)); new_start_region = source->first_recycling; new_end_region = source->last_recycling; }else{ new_start_region = NULL; new_end_region = NULL; } recall_channel_run->source = source; if(source == recall_channel_run->destination) g_warning("destination == recall_channel_run->source\0"); if(old_source != NULL) g_object_unref(G_OBJECT(old_source)); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; }; } void ags_recall_channel_run_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsRecallChannelRun *recall_channel_run; recall_channel_run = AGS_RECALL_CHANNEL_RUN(gobject); switch(prop_id){ case PROP_AUDIO_CHANNEL: { g_value_set_uint(value, recall_channel_run->audio_channel); } break; case PROP_RECALL_AUDIO_RUN: { g_value_set_object(value, recall_channel_run->recall_audio_run); } break; case PROP_RECALL_CHANNEL: { g_value_set_object(value, recall_channel_run->recall_channel); } break; case PROP_DESTINATION: { g_value_set_object(value, recall_channel_run->destination); } break; case PROP_SOURCE: { g_value_set_object(value, recall_channel_run->source); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; }; } void ags_recall_channel_run_finalize(GObject *gobject) { AgsRecallChannelRun *recall_channel_run; recall_channel_run = AGS_RECALL_CHANNEL_RUN(gobject); if(recall_channel_run->recall_audio_run != NULL) g_object_unref(G_OBJECT(recall_channel_run->recall_audio_run)); if(recall_channel_run->recall_channel != NULL) g_object_unref(G_OBJECT(recall_channel_run->recall_channel)); if(recall_channel_run->destination != NULL) g_object_unref(recall_channel_run->destination); if(recall_channel_run->source != NULL) g_object_unref(recall_channel_run->source); G_OBJECT_CLASS(ags_recall_channel_run_parent_class)->finalize(gobject); } void ags_recall_channel_run_connect(AgsConnectable *connectable) { AgsRecallChannelRun *recall_channel_run; GObject *gobject; if((AGS_RECALL_CONNECTED & (AGS_RECALL(connectable)->flags)) != 0){ return; } ags_recall_channel_run_parent_connectable_interface->connect(connectable); /* AgsCopyChannelRun */ recall_channel_run = AGS_RECALL_CHANNEL_RUN(connectable); /* destination */ if(recall_channel_run->destination != NULL){ gobject = G_OBJECT(recall_channel_run->destination); /* recycling changed */ recall_channel_run->destination_recycling_changed_handler = g_signal_connect(gobject, "recycling_changed\0", G_CALLBACK(ags_recall_channel_run_destination_recycling_changed_callback), recall_channel_run); } /* source */ gobject = G_OBJECT(recall_channel_run->source); recall_channel_run->source_recycling_changed_handler = g_signal_connect(gobject, "recycling_changed\0", G_CALLBACK(ags_recall_channel_run_source_recycling_changed_callback), recall_channel_run); } void ags_recall_channel_run_disconnect(AgsConnectable *connectable) { AgsRecallChannelRun *recall_channel_run; GObject *gobject; /* AgsRecallChannelRun */ recall_channel_run = AGS_RECALL_CHANNEL_RUN(connectable); /* destination */ if(recall_channel_run->destination != NULL){ gobject = G_OBJECT(recall_channel_run->destination); g_signal_handler_disconnect(gobject, recall_channel_run->destination_recycling_changed_handler); } /* source */ if(recall_channel_run->source != NULL){ gobject = G_OBJECT(recall_channel_run->source); g_signal_handler_disconnect(gobject, recall_channel_run->source_recycling_changed_handler); } /* call parent */ ags_recall_channel_run_parent_connectable_interface->disconnect(connectable); } gboolean ags_recall_channel_run_pack(AgsPackable *packable, GObject *container) { AgsRecallAudioRun *recall_audio_run; AgsRecallContainer *recall_container; GList *list; AgsRecallID *recall_id; if(ags_recall_channel_run_parent_packable_interface->pack(packable, container)) return(TRUE); recall_container = AGS_RECALL_CONTAINER(container); /* set AgsRecallAudioRun */ list = recall_container->recall_audio_run; if(AGS_RECALL(packable)->recall_id != NULL){ recall_id = AGS_RECALL(packable)->recall_id; list = ags_recall_find_recycling_container(list, (GObject *) recall_id->recycling_container); if(list != NULL){ recall_audio_run = AGS_RECALL_AUDIO_RUN(list->data); g_object_set(G_OBJECT(packable), "recall-audio-run\0", recall_audio_run, NULL); } }else if((AGS_RECALL_TEMPLATE & (AGS_RECALL(packable)->flags)) != 0){ list = ags_recall_find_template(list); if(list != NULL){ recall_audio_run = AGS_RECALL_AUDIO_RUN(list->data); g_object_set(G_OBJECT(packable), "recall-audio-run\0", recall_audio_run, NULL); } } /* set AgsRecallChannel */ if(AGS_RECALL_CHANNEL_RUN(packable)->source != NULL){ list = recall_container->recall_channel; if((list = ags_recall_find_provider(list, G_OBJECT(AGS_RECALL_CHANNEL_RUN(packable)->source))) != NULL){ g_object_set(G_OBJECT(packable), "recall-channel\0", AGS_RECALL_CHANNEL(list->data), NULL); } } g_object_set(G_OBJECT(recall_container), "recall-channel-run\0", AGS_RECALL(packable), NULL); return(FALSE); } gboolean ags_recall_channel_run_unpack(AgsPackable *packable) { AgsRecall *recall; AgsRecallContainer *recall_container; GList *list; AgsRecallID *recall_id; recall = AGS_RECALL(packable); if(recall == NULL) return(TRUE); recall_container = AGS_RECALL_CONTAINER(recall->container); if(recall_container == NULL) return(TRUE); /* ref */ g_object_ref(recall); g_object_ref(recall_container); /* unset AgsRecallAudioRun */ g_object_set(G_OBJECT(packable), "recall_audio_run\0", NULL, NULL); /* unset AgsRecallChannel */ g_object_set(G_OBJECT(packable), "recall_channel\0", NULL, NULL); /* call parent */ if(ags_recall_channel_run_parent_packable_interface->unpack(packable)){ g_object_unref(recall); g_object_unref(recall_container); return(TRUE); } /* remove from list */ recall_container->recall_channel_run = g_list_remove(recall_container->recall_channel_run, recall); /* unref */ g_object_unref(recall); g_object_unref(recall_container); return(FALSE); } void ags_recall_channel_run_connect_dynamic(AgsConnectable *connectable) { if((AGS_RECALL_DYNAMIC_CONNECTED & (AGS_RECALL(connectable)->flags)) != 0){ return; } ags_recall_channel_run_parent_dynamic_connectable_interface->connect_dynamic(connectable); /* empty */ } void ags_recall_channel_run_disconnect_dynamic(AgsConnectable *connectable) { ags_recall_channel_run_parent_dynamic_connectable_interface->disconnect_dynamic(connectable); /* empty */ } void ags_recall_channel_run_remove(AgsRecall *recall) { if(AGS_RECALL_CHANNEL_RUN(recall)->source != NULL){ ags_channel_remove_recall(AGS_RECALL_CHANNEL_RUN(recall)->source, recall, ((recall->recall_id->recycling_container->parent) ? TRUE: FALSE)); } AGS_RECALL_CLASS(ags_recall_channel_run_parent_class)->remove(recall); } AgsRecall* ags_recall_channel_run_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter) { AgsAudio *audio; AgsChannel *output; AgsRecallChannelRun *recall_channel_run, *copy; AgsRecallID *output_recall_id; recall_channel_run = AGS_RECALL_CHANNEL_RUN(recall); if(recall_channel_run->destination != NULL && ags_recall_id_find_recycling_container(recall_channel_run->destination->recall_id, recall_id->recycling_container->parent) == NULL){ return(NULL); } parameter = ags_parameter_grow(G_OBJECT_TYPE(recall), parameter, n_params, "devout\0", AGS_RECALL(recall_channel_run)->devout, "recall_channel\0", recall_channel_run->recall_channel, "audio_channel\0", recall_channel_run->audio_channel, "source\0", recall_channel_run->source, "destination\0", recall_channel_run->destination, NULL); copy = AGS_RECALL_CHANNEL_RUN(AGS_RECALL_CLASS(ags_recall_channel_run_parent_class)->duplicate(recall, recall_id, n_params, parameter)); if(recall_channel_run->destination != NULL){ ags_recall_channel_run_remap_child_destination(copy, NULL, NULL, copy->destination->first_recycling, copy->destination->last_recycling); }else{ ags_recall_channel_run_remap_child_source(copy, NULL, NULL, copy->source->first_recycling, copy->source->last_recycling); } audio = AGS_AUDIO(copy->source->audio); if(AGS_IS_OUTPUT(copy->source)){ output = copy->source; output_recall_id = ags_recall_id_find_recycling_container(output->recall_id, (GObject *) recall_id->recycling_container); }else{ AgsRecallID *default_recall_id, *audio_recall_id; if((AGS_AUDIO_ASYNC & (audio->flags)) != 0){ output = ags_channel_nth(audio->output, copy->source->audio_channel); }else{ output = ags_channel_nth(audio->output, copy->source->line); } if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) != 0){ default_recall_id = ags_recall_id_find_recycling_container(audio->recall_id, recall_id->recycling_container); audio_recall_id = ags_recall_id_find_recycling_container(audio->recall_id, default_recall_id->recycling_container); output_recall_id = ags_recall_id_find_recycling_container(output->recall_id, audio_recall_id->recycling_container->parent); }else{ audio_recall_id = ags_recall_id_find_recycling_container(audio->recall_id, recall_id->recycling_container); output_recall_id = ags_recall_id_find_recycling_container(output->recall_id, audio_recall_id->recycling_container); } } //TODO:JK: remove because run order isn't used anymore /* if(recall_id->recycling_container->parent != NULL){ copy->run_order = g_list_index(recall_id->recycling_container->parent->children, recall_id->recycling_container); }else if(copy->destination != NULL){ copy->run_order = copy->destination->audio_channel; }else{ AgsRecycling *recycling; recycling = AGS_RECYCLING(recall_id->recycling); copy->run_order = AGS_CHANNEL(recycling->channel)->audio_channel; } */ return((AgsRecall *) copy); } void ags_recall_channel_run_map_recall_recycling(AgsRecallChannelRun *recall_channel_run) { AgsRecallChannel *recall_channel; AgsRecycling *source_recycling; AgsRecycling *destination_recycling, *start_destination_recycling, *end_destination_recycling; if(recall_channel_run->source == NULL || AGS_RECALL(recall_channel_run)->child_type == G_TYPE_NONE || (AGS_RECALL_TEMPLATE & (AGS_RECALL(recall_channel_run)->flags)) != 0){ return; } /* AgsRecallChannel */ recall_channel = AGS_RECALL_CHANNEL(recall_channel_run->recall_channel); /* AgsRecycling - source */ source_recycling = recall_channel->source->first_recycling; /* AgsRecycling - destination*/ if(recall_channel_run->destination != NULL){ start_destination_recycling = recall_channel_run->destination->first_recycling; end_destination_recycling = recall_channel_run->destination->last_recycling->next; }else{ start_destination_recycling = NULL; end_destination_recycling = NULL; } if(source_recycling != NULL){ AgsRecallRecycling *recall_recycling; while(source_recycling != recall_channel->source->last_recycling->next){ destination_recycling = start_destination_recycling; #ifdef AGS_DEBUG g_message("ags_recall_channel_run_map_recall_recycling\0"); #endif do{ recall_recycling = g_object_new(AGS_RECALL(recall_channel_run)->child_type, "devout\0", AGS_RECALL(recall_channel_run)->devout, "recall_id\0", AGS_RECALL(recall_channel_run)->recall_id, "audio_channel\0", recall_channel_run->audio_channel, "source\0", source_recycling, "destination\0", destination_recycling, NULL); ags_recall_add_child(AGS_RECALL(recall_channel_run), AGS_RECALL(recall_recycling)); if(destination_recycling != NULL){ destination_recycling = destination_recycling->next; } }while(destination_recycling != end_destination_recycling); source_recycling = source_recycling->next; } } } void ags_recall_channel_run_remap_child_source(AgsRecallChannelRun *recall_channel_run, AgsRecycling *old_start_changed_region, AgsRecycling *old_end_changed_region, AgsRecycling *new_start_changed_region, AgsRecycling *new_end_changed_region) { AgsRecycling *destination_recycling, *source_recycling; AgsRecallRecycling *recall_recycling; GList *list, *list_next; if(recall_channel_run->source == NULL || AGS_RECALL(recall_channel_run)->child_type == G_TYPE_NONE || (AGS_RECALL_TEMPLATE & (AGS_RECALL(recall_channel_run)->flags)) != 0){ return; } /* remove old */ if(old_start_changed_region != NULL){ AgsDevout *devout; AgsRecall *recall; AgsCancelRecall *cancel_recall; devout = AGS_DEVOUT(AGS_AUDIO(recall_channel_run->source->audio)->devout); source_recycling = old_start_changed_region; while(source_recycling != old_end_changed_region->next){ list = ags_recall_get_children(AGS_RECALL(recall_channel_run)); while(list != NULL){ list_next = list->next; if(AGS_RECALL_RECYCLING(list->data)->source == source_recycling){ recall = AGS_RECALL(list->data); g_message("disconnect\0"); ags_dynamic_connectable_disconnect_dynamic(AGS_DYNAMIC_CONNECTABLE(recall)); ags_recall_remove(recall); g_object_unref(recall); } list = list_next; } source_recycling = source_recycling->next; } } /* add new */ if(new_start_changed_region != NULL){ source_recycling = new_start_changed_region; while(source_recycling != new_end_changed_region->next){ recall_recycling = g_object_new(AGS_RECALL(recall_channel_run)->child_type, "devout\0", AGS_RECALL(recall_channel_run)->devout, "recall_id\0", AGS_RECALL(recall_channel_run)->recall_id, "audio_channel\0", recall_channel_run->audio_channel, "source\0", source_recycling, "destination\0", ((recall_channel_run->destination != NULL) ? recall_channel_run->destination->first_recycling: NULL), NULL); ags_recall_add_child(AGS_RECALL(recall_channel_run), AGS_RECALL(recall_recycling)); source_recycling = source_recycling->next; } } } void ags_recall_channel_run_remap_child_destination(AgsRecallChannelRun *recall_channel_run, AgsRecycling *old_start_changed_region, AgsRecycling *old_end_changed_region, AgsRecycling *new_start_changed_region, AgsRecycling *new_end_changed_region) { AgsRecycling *destination_recycling, *source_recycling; AgsRecallRecycling *recall_recycling; GList *list; if(recall_channel_run->source == NULL || AGS_RECALL(recall_channel_run)->child_type == G_TYPE_NONE || (AGS_RECALL_TEMPLATE & (AGS_RECALL(recall_channel_run)->flags)) != 0){ return; } /* remove old */ if(old_start_changed_region != NULL){ AgsDevout *devout; AgsRecall *recall; AgsCancelRecall *cancel_recall; devout = AGS_DEVOUT(AGS_AUDIO(recall_channel_run->source->audio)->devout); destination_recycling = old_start_changed_region; while(destination_recycling != old_end_changed_region->next){ list = ags_recall_get_children(AGS_RECALL(recall_channel_run)); while(list != NULL){ if(AGS_RECALL_RECYCLING(list->data)->destination == destination_recycling){ recall = AGS_RECALL(list->data); ags_recall_remove(recall); } list = list->next; } destination_recycling = destination_recycling->next; } } /* add new */ if(new_start_changed_region != NULL){ if(recall_channel_run->source != NULL){ if(recall_channel_run->source->first_recycling == NULL){ return; } destination_recycling = new_start_changed_region; while(destination_recycling != new_end_changed_region->next){ source_recycling = recall_channel_run->source->first_recycling; while(source_recycling != recall_channel_run->source->last_recycling->next){ recall_recycling = g_object_new(AGS_RECALL(recall_channel_run)->child_type, "devout\0", AGS_RECALL(recall_channel_run)->devout, "recall_id\0", AGS_RECALL(recall_channel_run)->recall_id, "audio_channel\0", recall_channel_run->audio_channel, "source\0", source_recycling, "destination\0", destination_recycling, NULL); ags_recall_add_child(AGS_RECALL(recall_channel_run), AGS_RECALL(recall_recycling)); source_recycling = source_recycling->next; } destination_recycling = destination_recycling->next; } } } } void ags_recall_channel_run_source_recycling_changed_callback(AgsChannel *channel, AgsRecycling *old_start_region, AgsRecycling *old_end_region, AgsRecycling *new_start_region, AgsRecycling *new_end_region, AgsRecycling *old_start_changed_region, AgsRecycling *old_end_changed_region, AgsRecycling *new_start_changed_region, AgsRecycling *new_end_changed_region, AgsRecallChannelRun *recall_channel_run) { if(recall_channel_run->destination != NULL){ ags_recall_channel_run_remap_child_source(recall_channel_run, NULL, NULL, NULL, NULL); ags_recall_channel_run_remap_child_destination(recall_channel_run, NULL, NULL, recall_channel_run->destination->first_recycling, recall_channel_run->destination->last_recycling); }else{ ags_recall_channel_run_remap_child_source(recall_channel_run, old_start_changed_region, old_end_changed_region, new_start_changed_region, new_end_changed_region); } } void ags_recall_channel_run_destination_recycling_changed_callback(AgsChannel *channel, AgsRecycling *old_start_region, AgsRecycling *old_end_region, AgsRecycling *new_start_region, AgsRecycling *new_end_region, AgsRecycling *old_start_changed_region, AgsRecycling *old_end_changed_region, AgsRecycling *new_start_changed_region, AgsRecycling *new_end_changed_region, AgsRecallChannelRun *recall_channel_run) { /* empty */ } void ags_recall_channel_run_real_run_order_changed(AgsRecallChannelRun *recall_channel_run, guint run_order) { recall_channel_run->run_order = run_order; } /** * ags_recall_channel_run_run_order_changed: * @recall_channel_run: an #AgsRecallChannelRun * @run_order: the run order * * Modify run order. * * Since: 0.4 */ void ags_recall_channel_run_run_order_changed(AgsRecallChannelRun *recall_channel_run, guint run_order) { g_return_if_fail(AGS_IS_RECALL(recall_channel_run)); g_object_ref(G_OBJECT(recall_channel_run)); g_signal_emit(G_OBJECT(recall_channel_run), recall_channel_run_signals[RUN_ORDER_CHANGED], 0, run_order); g_object_unref(G_OBJECT(recall_channel_run)); } /** * ags_recall_channel_run_new: * * Creates an #AgsRecallChannelRun * * Returns: a new #AgsRecallChannelRun * * Since: 0.4 */ AgsRecallChannelRun* ags_recall_channel_run_new() { AgsRecallChannelRun *recall_channel_run; recall_channel_run = (AgsRecallChannelRun *) g_object_new(AGS_TYPE_RECALL_CHANNEL_RUN, NULL); return(recall_channel_run); } gsequencer-0.6.37/src/ags/audio/ags_pattern.c0000644000175000017500000004255312626272146016027 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include void ags_pattern_class_init(AgsPatternClass *pattern_class); void ags_pattern_connectable_interface_init(AgsConnectableInterface *connectable); void ags_pattern_tactable_interface_init(AgsTactableInterface *tactable); void ags_pattern_portlet_interface_init(AgsPortletInterface *portlet); void ags_pattern_init(AgsPattern *pattern); void ags_pattern_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_pattern_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_pattern_connect(AgsConnectable *connectable); void ags_pattern_disconnect(AgsConnectable *connectable); void ags_pattern_finalize(GObject *gobject); void ags_pattern_change_bpm(AgsTactable *tactable, gdouble bpm); void ags_pattern_set_port(AgsPortlet *portlet, AgsPort *port); AgsPort* ags_pattern_get_port(AgsPortlet *portlet); GList* ags_pattern_list_safe_properties(AgsPortlet *portlet); void ags_pattern_safe_set_property(AgsPortlet *portlet, gchar *property_name, GValue *value); void ags_pattern_safe_get_property(AgsPortlet *portlet, gchar *property_name, GValue *value); /** * SECTION:ags_pattern * @short_description: Pattern representing tones * @title: AgsPattern * @section_id: * @include: ags/audio/ags_pattern.h * * #AgsPattern represents an audio pattern of tones. */ enum{ PROP_0, PROP_PORT, PROP_FIRST_INDEX, PROP_SECOND_INDEX, PROP_OFFSET, PROP_CURRENT_BIT, }; static gpointer ags_pattern_parent_class = NULL; GType ags_pattern_get_type (void) { static GType ags_type_pattern = 0; if(!ags_type_pattern){ static const GTypeInfo ags_pattern_info = { sizeof (AgsPatternClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_pattern_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsPattern), 0, /* n_preallocs */ (GInstanceInitFunc) ags_pattern_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_pattern_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_tactable_interface_info = { (GInterfaceInitFunc) ags_pattern_tactable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_portlet_interface_info = { (GInterfaceInitFunc) ags_pattern_portlet_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_pattern = g_type_register_static(G_TYPE_OBJECT, "AgsPattern\0", &ags_pattern_info, 0); g_type_add_interface_static(ags_type_pattern, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_pattern, AGS_TYPE_TACTABLE, &ags_tactable_interface_info); g_type_add_interface_static(ags_type_pattern, AGS_TYPE_PORTLET, &ags_portlet_interface_info); } return (ags_type_pattern); } void ags_pattern_class_init(AgsPatternClass *pattern) { GObjectClass *gobject; GParamSpec *param_spec; ags_pattern_parent_class = g_type_class_peek_parent(pattern); gobject = (GObjectClass *) pattern; gobject->set_property = ags_pattern_set_property; gobject->get_property = ags_pattern_get_property; gobject->finalize = ags_pattern_finalize; /* properties */ /** * AgsPattern:port: * * The pattern's port. * * Since: 0.4.0 */ param_spec = g_param_spec_object("port\0", "port of pattern\0", "The port of pattern\0", AGS_TYPE_PORT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_PORT, param_spec); /** * AgsPattern:first-index: * * Selected bank 0. * * Since: 0.4.0 */ param_spec = g_param_spec_uint("first-index\0", "the first index\0", "The first index to select pattern\0", 0, 256, 0, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_FIRST_INDEX, param_spec); /** * AgsPattern:second-index: * * Selected bank 1. * * Since: 0.4.0 */ param_spec = g_param_spec_uint("second-index\0", "the second index\0", "The second index to select pattern\0", 0, 256, 0, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_SECOND_INDEX, param_spec); /** * AgsPattern:offset: * * Position of pattern. * * Since: 0.4.0 */ param_spec = g_param_spec_uint("offset\0", "the offset\0", "The offset within the pattern\0", 0, 65535, 0, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_OFFSET, param_spec); /** * AgsPattern:current-bit: * * Offset of current position. * * Since: 0.4.0 */ param_spec = g_param_spec_boolean("current-bit\0", "current bit for offset\0", "The current bit for offset\0", FALSE, G_PARAM_READABLE); g_object_class_install_property(gobject, PROP_CURRENT_BIT, param_spec); } void ags_pattern_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->is_ready = NULL; connectable->is_connected = NULL; connectable->connect = ags_pattern_connect; connectable->disconnect = ags_pattern_disconnect; } void ags_pattern_tactable_interface_init(AgsTactableInterface *tactable) { tactable->change_bpm = ags_pattern_change_bpm; } void ags_pattern_portlet_interface_init(AgsPortletInterface *portlet) { portlet->set_port = ags_pattern_set_port; portlet->get_port = ags_pattern_get_port; portlet->list_safe_properties = ags_pattern_list_safe_properties; portlet->safe_set_property = ags_pattern_safe_set_property; portlet->safe_get_property = ags_pattern_safe_get_property; } void ags_pattern_init(AgsPattern *pattern) { //TODO:JK: define timestamp pattern->timestamp = NULL; pattern->dim[0] = 0; pattern->dim[1] = 0; pattern->dim[2] = 0; pattern->pattern = NULL; pattern->port = NULL; pattern->i = 0; pattern->j = 0; pattern->bit = 0; } void ags_pattern_connect(AgsConnectable *connectable) { /* empty */ } void ags_pattern_disconnect(AgsConnectable *connectable) { /* empty */ } void ags_pattern_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsPattern *pattern; pattern = AGS_PATTERN(gobject); switch(prop_id){ case PROP_PORT: { AgsPort *port; port = (AgsPort *) g_value_get_object(value); if(port == (AgsPort *) pattern->port){ return; } if(pattern->port != NULL){ g_object_unref(G_OBJECT(pattern->port)); } if(port != NULL){ g_object_ref(G_OBJECT(port)); } pattern->port = (GObject *) port; } break; case PROP_FIRST_INDEX: { AgsPort *port; guint i; i = g_value_get_uint(value); port = ags_portlet_get_port(AGS_PORTLET(pattern)); pthread_mutex_lock(&(port->mutex)); pattern->i = i; pthread_mutex_unlock(&(port->mutex)); } break; case PROP_SECOND_INDEX: { AgsPort *port; guint j; j = g_value_get_uint(value); port = ags_portlet_get_port(AGS_PORTLET(pattern)); pthread_mutex_lock(&(port->mutex)); pattern->j = j; pthread_mutex_unlock(&(port->mutex)); } break; case PROP_OFFSET: { AgsPort *port; guint bit; bit = g_value_get_uint(value); port = ags_portlet_get_port(AGS_PORTLET(pattern)); pthread_mutex_lock(&(port->mutex)); pattern->bit = bit; pthread_mutex_unlock(&(port->mutex)); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_pattern_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsPattern *pattern; pattern = AGS_PATTERN(gobject); switch(prop_id){ case PROP_PORT: g_value_set_object(value, pattern->port); break; case PROP_FIRST_INDEX: { AgsPort *port; port = ags_portlet_get_port(AGS_PORTLET(pattern)); pthread_mutex_lock(&(port->mutex)); g_value_set_uint(value, pattern->i); pthread_mutex_unlock(&(port->mutex)); } break; case PROP_SECOND_INDEX: { AgsPort *port; port = ags_portlet_get_port(AGS_PORTLET(pattern)); pthread_mutex_lock(&(port->mutex)); g_value_set_uint(value, pattern->j); pthread_mutex_unlock(&(port->mutex)); } break; case PROP_OFFSET: { AgsPort *port; port = ags_portlet_get_port(AGS_PORTLET(pattern)); pthread_mutex_lock(&(port->mutex)); g_value_set_uint(value, pattern->bit); pthread_mutex_unlock(&(port->mutex)); } break; case PROP_CURRENT_BIT: { AgsPort *port; port = ags_portlet_get_port(AGS_PORTLET(pattern)); pthread_mutex_lock(&(port->mutex)); g_value_set_boolean(value, ags_pattern_get_bit(pattern, pattern->i, pattern->j, pattern->bit)); pthread_mutex_unlock(&(port->mutex)); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_pattern_finalize(GObject *gobject) { AgsPattern *pattern; guint i, j; pattern = AGS_PATTERN(gobject); for(i = 0; i < pattern->dim[0]; i++){ for(j = 0; i < pattern->dim[1]; i++){ free(pattern->pattern[i][j]); } free(pattern->pattern[i]); } free(pattern->pattern); G_OBJECT_CLASS(ags_pattern_parent_class)->finalize(gobject); } void ags_pattern_change_bpm(AgsTactable *tactable, gdouble bpm) { //TODO:JK: implement me } void ags_pattern_set_port(AgsPortlet *portlet, AgsPort *port) { g_object_set(G_OBJECT(portlet), "port\0", port, NULL); } AgsPort* ags_pattern_get_port(AgsPortlet *portlet) { AgsPort *port; g_object_get(G_OBJECT(portlet), "port\0", &port, NULL); return(port); } GList* ags_pattern_list_safe_properties(AgsPortlet *portlet) { static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; static GList *list = NULL; pthread_mutex_lock(&mutex); if(list == NULL){ list = g_list_prepend(list, "first-index\0"); list = g_list_prepend(list, "second-index\0"); list = g_list_prepend(list, "offset\0"); list = g_list_prepend(list, "current-bit\0"); } pthread_mutex_unlock(&mutex); return(list); } void ags_pattern_safe_set_property(AgsPortlet *portlet, gchar *property_name, GValue *value) { //TODO:JK: add check for safe property g_object_set_property(G_OBJECT(portlet), property_name, value); } void ags_pattern_safe_get_property(AgsPortlet *portlet, gchar *property_name, GValue *value) { //TODO:JK: add check for safe property g_object_get_property(G_OBJECT(portlet), property_name, value); } /** * ags_pattern_get_by_timestamp: * @pattern: a #GList containing #AgsPattern * @timestamp: the matching timestamp * * Retrieve appropriate pattern for timestamp. * * Returns: the matching pattern. * * Since: 0.4 */ AgsPattern* ags_pattern_get_by_timestamp(GList *list, GObject *timestamp) { if(list == NULL) return(NULL); while(AGS_PATTERN(list->data)->timestamp != timestamp){ if(list->next == NULL) return(NULL); list = list->next; } return((AgsPattern *) list->data); } /** * ags_pattern_set_dim: * @pattern: an #AgsPattern * @dim0: bank 0 size * @dim1: bank 1 size * @length: amount of beats * * Reallocates the pattern's dimensions. * * Since: 0.3 */ void ags_pattern_set_dim(AgsPattern *pattern, guint dim0, guint dim1, guint length) { guint ***index0, **index1, *bitmap; guint i, j, k, j_set, k_set; guint bitmap_size; if(dim0 == 0 && pattern->pattern == NULL) return; // shrink if(pattern->dim[0] > dim0){ for(i = dim0; i < pattern->dim[0]; i++){ for(j = 0; j < pattern->dim[1]; j++) free(pattern->pattern[i][j]); free(pattern->pattern[i]); } if(dim0 == 0){ free(pattern->pattern); ags_pattern_init(pattern); return; }else{ index0 = (guint ***) malloc((int) dim0 * sizeof(guint**)); for(i = 0; i < dim0; i++) index0[i] = pattern->pattern[i]; free(pattern->pattern); pattern->pattern = index0; pattern->dim[0] = dim0; } } if(pattern->dim[1] > dim1){ if(dim1 == 0){ for(i = 0; i < pattern->dim[0]; i++){ for(j = dim1; j < pattern->dim[1]; j++){ free(pattern->pattern[i][j]); } pattern->pattern[i] = NULL; } }else{ for(i = 0; i < pattern->dim[0]; i++){ for(j = dim1; j < pattern->dim[1]; j++){ free(pattern->pattern[i][j]); } } for(i = 0; pattern->dim[0]; i++){ index1 = (guint **) malloc(dim1 * sizeof(guint*)); for(j = 0; j < dim1; j++){ index1[j] = pattern->pattern[i][j]; } free(pattern->pattern[i]); pattern->pattern[i] = index1; } } pattern->dim[1] = dim1; } if(pattern->dim[2] > length){ for(i = 0; i < pattern->dim[0]; i++) for(j = 0; j < pattern->dim[1]; j++){ bitmap = (guint *) malloc((int) ceil((double) length / (double) (sizeof(guint) * 8)) * sizeof(guint)); for(k = 0; k < (guint) ceil((double) length / (double) (sizeof(guint) * 8)); k++) bitmap[k] = pattern->pattern[i][j][k]; free(pattern->pattern[i][j]); pattern->pattern[i][j] = bitmap; } }else if(pattern->dim[2] < length){ // grow for(i = 0; i < pattern->dim[0]; i++) for(j = 0; j < pattern->dim[1]; j++){ bitmap = (guint *) malloc((int) ceil((double) length / (double) (sizeof(guint) * 8)) * sizeof(guint)); for(k = 0; k < (guint) ceil((double) pattern->dim[2] / (double) (sizeof(guint) * 8)); k++) bitmap[k] = pattern->pattern[i][j][k]; free(pattern->pattern[i][j]); pattern->pattern[i][j] = bitmap; } } pattern->dim[2] = length; bitmap_size = (guint) ceil((double) pattern->dim[2] / (double) (sizeof(guint) * 8)) * sizeof(guint); if(pattern->dim[1] < dim1){ for(i = 0; i < pattern->dim[0]; i++){ index1 = (guint**) malloc(dim1 * sizeof(guint*)); for(j = 0; j < pattern->dim[1]; j++) index1[j] = pattern->pattern[i][j]; free(pattern->pattern[i]); pattern->pattern[i] = index1; for(j = pattern->dim[1]; j < dim1; j++){ pattern->pattern[i][j] = (guint*) malloc(bitmap_size); memset(pattern->pattern[i][j], 0, bitmap_size); } } pattern->dim[1] = dim1; } if(pattern->dim[0] < dim0){ index0 = (guint***) malloc(dim0 * sizeof(guint**)); for(i = 0; i < pattern->dim[0]; i++) index0[i] = pattern->pattern[i]; if(pattern->pattern != NULL) free(pattern->pattern); pattern->pattern = index0; for(i = pattern->dim[0]; i < dim0; i++){ pattern->pattern[i] = (guint**) malloc(pattern->dim[1] * sizeof(guint*)); for(j = 0; j < pattern->dim[1]; j++){ pattern->pattern[i][j] = (guint*) malloc(bitmap_size); memset(pattern->pattern[i][j], 0, bitmap_size); } } pattern->dim[0] = dim0; } } /** * ags_pattern_get_bit: * @pattern: an #AgsPattern * @i: bank index 0 * @j: bank index 1 * @bit: the tic to check * * Check for tic to be played. * * Returns: %TRUE if tone is enabled. * * Since: 0.3 */ gboolean ags_pattern_get_bit(AgsPattern *pattern, guint i, guint j, guint bit) { guint k, value; k = (guint) floor((double) bit / (double) (sizeof(guint) * 8)); value = 1 << (bit % (sizeof(guint) * 8)); //((1 << (bit % (sizeof(guint) *8))) & (pattern->pattern[i][j][(guint) floor((double) bit / (double) (sizeof(guint) * 8))])) != 0 if((value & (pattern->pattern[i][j][k])) != 0) return(TRUE); else return(FALSE); } /** * ags_pattern_toggle_bit: * @pattern: an #AgsPattern * @i: bank index 0 * @j: bank index 1 * @bit: the tic to toggle * * Toggle tone. * * Since: 0.3 */ void ags_pattern_toggle_bit(AgsPattern *pattern, guint i, guint j, guint bit) { guint k, value; k = (guint) floor((double) bit / (double) (sizeof(guint) * 8)); value = 1 << (bit % (sizeof(guint) * 8)); if(value & (pattern->pattern[i][j][k])) pattern->pattern[i][j][k] &= (~value); else pattern->pattern[i][j][k] |= value; } /** * ags_pattern_new: * * Creates an #AgsPattern * * Returns: a new #AgsPattern * * Since: 0.3 */ AgsPattern* ags_pattern_new() { AgsPattern *pattern; pattern = (AgsPattern *) g_object_new(AGS_TYPE_PATTERN, NULL); return(pattern); } gsequencer-0.6.37/src/ags/audio/ags_channel.c0000644000175000017500000070231312633145270015752 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include /** * SECTION:ags_channel * @short_description: Acts as entry point to the audio tree. * @title: AgsChannel * @section_id: * @include: ags/audio/ags_channel.h * * #AgsChannel is the entry point to the entire audio tree and its nested * recycling tree. * * Every channel has its own #AgsRecallID. As modifying link a new #AgsRecyclingContainer * is indicated, since it acts as a kind of recall id tree context. */ void ags_channel_class_init(AgsChannelClass *channel_class); void ags_channel_connectable_interface_init(AgsConnectableInterface *connectable); void ags_channel_init(AgsChannel *channel); void ags_channel_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_channel_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_channel_add_to_registry(AgsConnectable *connectable); void ags_channel_remove_from_registry(AgsConnectable *connectable); void ags_channel_connect(AgsConnectable *connectable); void ags_channel_disconnect(AgsConnectable *connectable); static void ags_channel_finalize(GObject *gobject); enum{ RECYCLING_CHANGED, DONE, LAST_SIGNAL, }; enum{ PROP_0, PROP_AUDIO, PROP_DEVOUT, }; static gpointer ags_channel_parent_class = NULL; static guint channel_signals[LAST_SIGNAL]; extern pthread_mutex_t ags_application_mutex; extern AgsConfig *config; GType ags_channel_get_type (void) { static GType ags_type_channel = 0; if(!ags_type_channel){ static const GTypeInfo ags_channel_info = { sizeof (AgsChannelClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_channel_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsChannel), 0, /* n_preallocs */ (GInstanceInitFunc) ags_channel_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_channel_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_channel = g_type_register_static(G_TYPE_OBJECT, "AgsChannel\0", &ags_channel_info, 0); g_type_add_interface_static(ags_type_channel, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return(ags_type_channel); } void ags_channel_class_init(AgsChannelClass *channel) { GObjectClass *gobject; GParamSpec *param_spec; ags_channel_parent_class = g_type_class_peek_parent(channel); /* GObjectClass */ gobject = (GObjectClass *) channel; gobject->set_property = ags_channel_set_property; gobject->get_property = ags_channel_get_property; gobject->finalize = ags_channel_finalize; /* properties */ /** * AgsChannel:audio: * * The assigned #AgsAudio aligning channels. * * Since: 0.4.0 */ param_spec = g_param_spec_object("audio\0", "assigned audio\0", "The audio it is assigned with\0", G_TYPE_OBJECT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_AUDIO, param_spec); /** * AgsChannel:devout: * * The assigned #AgsDevout acting as default sink. * * Since: 0.4.0 */ param_spec = g_param_spec_object("devout\0", "assigned devout\0", "The devout it is assigned with\0", G_TYPE_OBJECT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_DEVOUT, param_spec); /* AgsChannelClass */ channel->recycling_changed = NULL; channel->done = NULL; /* signals */ /** * AgsChannel::recycling-changed: * @channel the object recycling changed * @old_start_region: first recycling * @old_end_region: last recycling * @new_start_region: new first recycling * @new_end_region: new last recycling * @old_start_changed_region: modified link recycling start * @old_end_changed_region: modified link recyclig end * @new_start_changed_region: replacing link recycling start * @new_end_changed_region: replacing link recycling end * * The ::recycling-changed signal is invoked to notify modified recycling tree. */ channel_signals[RECYCLING_CHANGED] = g_signal_new("recycling-changed\0", G_TYPE_FROM_CLASS (channel), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AgsChannelClass, recycling_changed), NULL, NULL, g_cclosure_user_marshal_VOID__OBJECT_OBJECT_OBJECT_OBJECT_OBJECT_OBJECT_OBJECT_OBJECT, G_TYPE_NONE, 8, G_TYPE_OBJECT, G_TYPE_OBJECT, G_TYPE_OBJECT, G_TYPE_OBJECT, G_TYPE_OBJECT, G_TYPE_OBJECT, G_TYPE_OBJECT, G_TYPE_OBJECT); /** * AgsChannel::done: * @channel: the object done playing. * @recall_id: the appropriate #AgsRecallID * * The ::done signal is invoked during termination of playback. */ channel_signals[DONE] = g_signal_new("done\0", G_TYPE_FROM_CLASS (channel), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AgsChannelClass, done), NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, G_TYPE_OBJECT); } void ags_channel_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->add_to_registry = ags_channel_add_to_registry; connectable->remove_from_registry = ags_channel_remove_from_registry; connectable->is_ready = NULL; connectable->is_connected = NULL; connectable->connect = ags_channel_connect; connectable->disconnect = ags_channel_disconnect; } GQuark ags_channel_error_quark() { return(g_quark_from_static_string("ags-channel-error-quark\0")); } void ags_channel_init(AgsChannel *channel) { AgsMutexManager *mutex_manager; gchar *str0, *str1; pthread_mutex_t *mutex; pthread_mutexattr_t attr; //FIXME:JK: memory leak pthread_mutexattr_init(&attr); pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); mutex = (pthread_mutex_t *) malloc(sizeof(pthread_mutex_t)); pthread_mutex_init(mutex, &attr); pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); ags_mutex_manager_insert(mutex_manager, (GObject *) channel, mutex); pthread_mutex_unlock(&(ags_application_mutex)); channel->flags = 0; channel->audio = NULL; channel->devout = NULL; channel->prev = NULL; channel->prev_pad = NULL; channel->next = NULL; channel->next_pad = NULL; channel->pad = 0; channel->audio_channel = 0; channel->line = 0; channel->note = NULL; channel->devout_play = ags_devout_play_alloc(); AGS_DEVOUT_PLAY(channel->devout_play)->source = (GObject *) channel; str0 = ags_config_get(config, AGS_CONFIG_THREAD, "model\0"); str1 = ags_config_get(config, AGS_CONFIG_THREAD, "super-threaded-scope\0"); if(!g_ascii_strncasecmp(str0, "super-threaded\0", 15)){ if(!g_ascii_strncasecmp(str1, "channel\0", 8) || !g_ascii_strncasecmp(str1, "recycling\0", 10)){ g_atomic_int_or(&(AGS_DEVOUT_PLAY(channel->devout_play)->flags), AGS_DEVOUT_PLAY_SUPER_THREADED_CHANNEL); AGS_DEVOUT_PLAY(channel->devout_play)->channel_thread[0] = ags_channel_thread_new(NULL, channel); AGS_DEVOUT_PLAY(channel->devout_play)->channel_thread[1] = ags_channel_thread_new(NULL, channel); AGS_DEVOUT_PLAY(channel->devout_play)->channel_thread[2] = ags_channel_thread_new(NULL, channel); if(!g_ascii_strncasecmp(str1, "recycling\0", 10)){ AGS_DEVOUT_PLAY(channel->devout_play)->recycling_thread[0] = ags_recycling_thread_new(NULL, NULL); AGS_DEVOUT_PLAY(channel->devout_play)->recycling_thread[1] = ags_recycling_thread_new(NULL, NULL); AGS_DEVOUT_PLAY(channel->devout_play)->recycling_thread[2] = ags_recycling_thread_new(NULL, NULL); } } } free(str0); free(str1); channel->recall_id = NULL; channel->container = NULL; channel->recall = NULL; channel->play = NULL; channel->link = NULL; channel->first_recycling = NULL; channel->last_recycling = NULL; channel->pattern = NULL; channel->notation = NULL; channel->line_widget = NULL; channel->file_data = NULL; } void ags_channel_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsChannel *channel; channel = AGS_CHANNEL(gobject); switch(prop_id){ case PROP_AUDIO: { AgsAudio *audio; audio = (AgsAudio *) g_value_get_object(value); if((AgsAudio *) channel->audio == audio){ return; } if(channel->audio != NULL){ g_object_unref(G_OBJECT(channel->audio)); } if(audio != NULL){ g_object_ref(G_OBJECT(audio)); } channel->audio = (GObject *) audio; } break; case PROP_DEVOUT: { AgsDevout *devout; devout = (AgsDevout *) g_value_get_object(value); ags_channel_set_devout(channel, (GObject *) devout); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_channel_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsChannel *channel; channel = AGS_CHANNEL(gobject); switch(prop_id){ case PROP_AUDIO: g_value_set_object(value, channel->audio); break; case PROP_DEVOUT: g_value_set_object(value, channel->devout); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_channel_add_to_registry(AgsConnectable *connectable) { AgsMain *ags_main; AgsServer *server; AgsChannel *channel; AgsRegistryEntry *entry; GList *list; channel = AGS_CHANNEL(connectable); ags_main = AGS_MAIN(AGS_DEVOUT(AGS_AUDIO(channel->audio)->devout)->ags_main); server = ags_main->server; entry = ags_registry_entry_alloc(server->registry); g_value_set_object(&(entry->entry), (gpointer) channel); ags_registry_add(server->registry, entry); /* add play */ list = channel->play; while(list != NULL){ ags_connectable_add_to_registry(AGS_CONNECTABLE(list->data)); list = list->next; } /* add recall */ list = channel->recall; while(list != NULL){ ags_connectable_add_to_registry(AGS_CONNECTABLE(list->data)); list = list->next; } } void ags_channel_remove_from_registry(AgsConnectable *connectable) { //TODO:JK: implement me } void ags_channel_connect(AgsConnectable *connectable) { AgsChannel *channel; AgsRecycling *recycling; GList *list; channel = AGS_CHANNEL(connectable); #ifdef AGS_DEBUG g_message("connecting channel\0"); #endif // ags_connectable_add_to_registry(connectable); /* connect recall ids */ list = channel->recall_id; while(list != NULL){ ags_connectable_connect(AGS_CONNECTABLE(list->data)); list = list->next; } /* connect recall containers */ list = channel->container; while(list != NULL){ ags_connectable_connect(AGS_CONNECTABLE(list->data)); list = list->next; } /* connect recalls */ list = channel->recall; while(list != NULL){ ags_connectable_connect(AGS_CONNECTABLE(list->data)); list = list->next; } list = channel->play; while(list != NULL){ ags_connectable_connect(AGS_CONNECTABLE(list->data)); list = list->next; } /* connect recycling */ recycling = channel->first_recycling; if(recycling != NULL){ while(recycling != channel->last_recycling->next){ ags_connectable_connect(AGS_CONNECTABLE(recycling)); recycling = recycling->next; } } /* connect pattern and notation */ list = channel->pattern; while(list != NULL){ ags_connectable_connect(AGS_CONNECTABLE(list->data)); list = list->next; } if(channel->notation != NULL){ ags_connectable_connect(AGS_CONNECTABLE(channel->notation)); } } void ags_channel_disconnect(AgsConnectable *connectable) { //TODO:JK: implement me /* empty */ } static void ags_channel_finalize(GObject *gobject) { AgsChannel *channel; AgsRecycling *recycling, *recycling_next; AgsMutexManager *mutex_manager; pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); ags_mutex_manager_remove(mutex_manager, gobject); pthread_mutex_unlock(&(ags_application_mutex)); channel = AGS_CHANNEL(gobject); //FIXME:JK: wrong ref count if(channel->audio != NULL){ // g_object_unref(channel->audio); } /* AgsRecycling */ if(((AGS_AUDIO_INPUT_HAS_RECYCLING & (AGS_AUDIO(channel->audio)->flags)) != 0 && AGS_IS_INPUT(channel)) || ((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (AGS_AUDIO(channel->audio)->flags)) != 0 && AGS_IS_OUTPUT(channel))){ recycling = channel->first_recycling; if(recycling != NULL){ while(recycling != channel->last_recycling->next){ recycling_next = recycling->next; g_object_unref((GObject *) recycling); recycling = recycling_next; } } } /* key string */ if(channel->note != NULL){ free(channel->note); } if(channel->devout_play != NULL){ ags_devout_play_free(channel->devout_play); } /* free some lists */ g_list_free_full(channel->recall_id, g_object_unref); g_list_free_full(channel->container, g_object_unref); g_list_free_full(channel->recall, g_object_unref); g_list_free_full(channel->play, g_object_unref); g_list_free_full(channel->pattern, g_object_unref); /* AgsNotation */ if(channel->notation != NULL){ g_object_unref(channel->notation); } /* call parent class */ G_OBJECT_CLASS(ags_channel_parent_class)->finalize(gobject); } AgsRecall* ags_channel_find_recall(AgsChannel *channel, char *effect, char *name) { AgsRecall *recall; GList *list; //TODO:JK: implement me /* */ return(NULL); } /** * ags_channel_first: * @channel: an #AgsChannel * * Iterates until the first #AgsChannel was found. * * Returns: the first #AgsChannel * * Since: 0.3 */ AgsChannel* ags_channel_first(AgsChannel *channel) { AgsMutexManager *mutex_manager; pthread_mutex_t *mutex; if(channel == NULL){ return(NULL); } /* first */ channel = ags_channel_pad_first(channel); /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); pthread_mutex_unlock(&(ags_application_mutex)); /* iterate */ while(channel != NULL){ pthread_mutex_lock(&(ags_application_mutex)); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(mutex); if(channel->prev == NULL){ pthread_mutex_unlock(mutex); break; }else{ channel = channel->prev; pthread_mutex_unlock(mutex); } } return(channel); } /** * ags_channel_last: * @channel: an #AgsChannel * * Iterates until the last #AgsChannel was found. * * Returns: the last #AgsChannel * * Since: 0.3 */ AgsChannel* ags_channel_last(AgsChannel *channel) { AgsMutexManager *mutex_manager; pthread_mutex_t *mutex; if(channel == NULL){ return(NULL); } /* last */ channel = ags_channel_pad_last(channel); /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); pthread_mutex_unlock(&(ags_application_mutex)); /* iterate */ while(channel != NULL){ pthread_mutex_lock(&(ags_application_mutex)); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(mutex); if(channel->next == NULL){ pthread_mutex_unlock(mutex); break; }else{ channel = channel->next; pthread_mutex_unlock(mutex); } } return(channel); } /** * ags_channel_nth: * @channel: an #AgsChannel * @nth: the count to iterate * * Iterates @nth times forward. * * Returns: the nth #AgsChannel * * Since: 0.3 */ AgsChannel* ags_channel_nth(AgsChannel *channel, guint nth) { AgsMutexManager *mutex_manager; guint i; pthread_mutex_t *mutex; if(channel == NULL){ return(NULL); } /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); pthread_mutex_unlock(&(ags_application_mutex)); /* nth */ for(i = 0; i < nth && channel != NULL; i++){ pthread_mutex_lock(&(ags_application_mutex)); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(mutex); channel = channel->next; pthread_mutex_unlock(mutex); } if((nth != 0 && i != nth) || channel == NULL){ g_message("ags_channel_nth:\n nth channel does not exist\n `- stopped @: i = %u; nth = %u\n\0", i, nth); } return(channel); } /** * ags_channel_pad_first: * @channel: an #AgsChannel * * Iterates until the first pad has been reached. * * Returns: the first #AgsChannel with the same audio_channel as @channel * * Since: 0.3 */ AgsChannel* ags_channel_pad_first(AgsChannel *channel) { AgsMutexManager *mutex_manager; pthread_mutex_t *mutex; if(channel == NULL){ return(NULL); } /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); pthread_mutex_unlock(&(ags_application_mutex)); /* pad first */ while(channel != NULL){ pthread_mutex_lock(&(ags_application_mutex)); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(mutex); if(channel->prev_pad == NULL){ pthread_mutex_unlock(mutex); break; }else{ channel = channel->prev_pad; pthread_mutex_unlock(mutex); } } return(channel); } /** * ags_channel_pad_last: * @channel: an #AgsChannel * * Iterates until the last pad has been reached. * * Returns: the last #AgsChannel with the same audio_channel as @channel * * Since: 0.3 */ AgsChannel* ags_channel_pad_last(AgsChannel *channel) { AgsMutexManager *mutex_manager; pthread_mutex_t *mutex; if(channel == NULL){ return(NULL); } /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); pthread_mutex_unlock(&(ags_application_mutex)); while(channel != NULL){ pthread_mutex_lock(&(ags_application_mutex)); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(mutex); if(channel->next_pad == NULL){ pthread_mutex_unlock(mutex); break; }else{ channel = channel->next_pad; pthread_mutex_unlock(mutex); } } return(channel); } /** * ags_channel_pad_nth: * @channel: an #AgsChannel * @nth: the count of pads to step * * Iterates nth times. * * Returns: the nth pad * * Since: 0.3 */ AgsChannel* ags_channel_pad_nth(AgsChannel *channel, guint nth) { AgsMutexManager *mutex_manager; guint i; pthread_mutex_t *mutex; /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); pthread_mutex_unlock(&(ags_application_mutex)); /* pad nth */ for(i = 0; i < nth && channel != NULL; i++){ pthread_mutex_lock(&(ags_application_mutex)); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(mutex); channel = channel->next_pad; pthread_mutex_unlock(mutex); } if((nth != 0 && i != nth) || channel == NULL){ g_message("ags_channel_nth_pad:\n nth pad does not exist\n `- stopped @: i = %u; nth = %u\0", i, nth); } return(channel); } /** * ags_channel_first_with_recycling: * @channel: an #AgsChannel * * Iterates over pads forwards as long as there is no #AgsRecycling on the #AgsChannel. * * Returns: the first channel with an #AgsRecycling * * Since: 0.3 */ AgsChannel* ags_channel_first_with_recycling(AgsChannel *channel) { AgsMutexManager *mutex_manager; pthread_mutex_t *mutex; if(channel == NULL){ return(NULL); } channel = ags_channel_pad_first(channel); /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); pthread_mutex_unlock(&(ags_application_mutex)); /* first with recycling */ while(channel != NULL){ pthread_mutex_lock(&(ags_application_mutex)); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(mutex); if(channel->first_recycling != NULL){ pthread_mutex_unlock(mutex); break; } channel = channel->next_pad; pthread_mutex_unlock(mutex); } return(channel); } /** * ags_channel_last_with_recycling: * @channel: an #AgsChannel * * Iterates over pads backwards as long as there is no #AgsRecycling on the #AgsChannel. * * Returns: the last channel with an #AgsRecycling * * Since: 0.3 */ AgsChannel* ags_channel_last_with_recycling(AgsChannel *channel) { AgsMutexManager *mutex_manager; pthread_mutex_t *mutex; if(channel == NULL){ return(NULL); } channel = ags_channel_pad_last(channel); /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); pthread_mutex_unlock(&(ags_application_mutex)); /* last with recycling */ while(channel != NULL){ pthread_mutex_lock(&(ags_application_mutex)); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(mutex); if(channel->last_recycling != NULL){ pthread_mutex_unlock(mutex); break; } channel = channel->prev_pad; pthread_mutex_unlock(mutex); } return(channel); } AgsChannel* ags_channel_prev_with_recycling(AgsChannel *channel) { AgsChannel *current; AgsRecycling *recycling; AgsMutexManager *mutex_manager; pthread_mutex_t *mutex; if(channel == NULL){ return(NULL); } /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); /* prev with recycling */ pthread_mutex_lock(mutex); current = channel->prev_pad; pthread_mutex_unlock(mutex); while(current != NULL && current != channel){ pthread_mutex_lock(&(ags_application_mutex)); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) current); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(mutex); recycling = current->last_recycling; pthread_mutex_unlock(mutex); if(recycling != NULL){ break; } pthread_mutex_lock(mutex); current = current->prev_pad; pthread_mutex_unlock(mutex); } if(current == channel){ return(NULL); }else{ return(current); } } AgsChannel* ags_channel_next_with_recycling(AgsChannel *channel) { AgsChannel *current; AgsRecycling *recycling; AgsMutexManager *mutex_manager; pthread_mutex_t *mutex; if(channel == NULL){ return(NULL); } /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); /* next with recycling */ pthread_mutex_lock(mutex); current = channel->next_pad; pthread_mutex_unlock(mutex); while(current != NULL && current != channel){ pthread_mutex_lock(&(ags_application_mutex)); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) current); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(mutex); recycling = current->first_recycling; pthread_mutex_unlock(mutex); if(recycling != NULL){ break; } pthread_mutex_lock(mutex); current = current->next_pad; pthread_mutex_unlock(mutex); } if(current == channel){ return(NULL); }else{ return(current); } } /** * ags_channel_set_devout: * @channel: an #AgsChannel * @devout: an #AgsDevout * * Sets devout. * * Since: 0.4 */ void ags_channel_set_devout(AgsChannel *channel, GObject *devout) { AgsMutexManager *mutex_manager; GList *list; gchar *str0, *str1; pthread_mutex_t *mutex; if(channel == NULL){ return; } /* channel */ if(channel->devout == devout){ return; } /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); /* apply new devout */ pthread_mutex_lock(mutex); if(channel->devout != NULL){ g_object_unref(channel->devout); } if(devout != NULL){ g_object_ref(devout); } channel->devout = (GObject *) devout; /**/ str0 = ags_config_get(config, AGS_CONFIG_THREAD, "model\0"); str1 = ags_config_get(config, AGS_CONFIG_THREAD, "super-threaded-scope\0"); if(!g_ascii_strncasecmp(str0, "super-threaded\0", 15)){ /* super threaed setup */ if(!g_ascii_strncasecmp(str1, "channel\0", 8)){ /* playback */ g_object_set(AGS_DEVOUT_PLAY(channel->devout_play)->channel_thread[0], "devout\0", devout, NULL); /* sequencer */ g_object_set(AGS_DEVOUT_PLAY(channel->devout_play)->channel_thread[1], "devout\0", devout, NULL); /* notation */ g_object_set(AGS_DEVOUT_PLAY(channel->devout_play)->channel_thread[2], "devout\0", devout, NULL); } } free(str0); free(str1); /* recall */ list = channel->play; while(list != NULL){ g_object_set(G_OBJECT(list->data), "devout\0", devout, NULL); list = list->next; } list = channel->recall; while(list != NULL){ g_object_set(G_OBJECT(list->data), "devout\0", devout, NULL); list = list->next; } /* AgsRecycling */ if((AGS_IS_OUTPUT(channel) && (AGS_AUDIO_OUTPUT_HAS_RECYCLING & (AGS_AUDIO(channel->audio)->flags)) != 0) || ((AGS_IS_INPUT(channel) && (AGS_AUDIO_INPUT_HAS_RECYCLING & (AGS_AUDIO(channel->audio)->flags)) != 0))){ AgsRecycling *recycling; recycling = channel->first_recycling; if(recycling != NULL){ while(recycling != channel->last_recycling->next){ g_object_set(G_OBJECT(recycling), "devout\0", devout, NULL); recycling = recycling->next; } } } pthread_mutex_unlock(mutex); } /** * ags_channel_add_recall_id: * @channel: an #AgsChannel * @recall_id: the #AgsRecallID * * Adds a recall id. * * Since: 0.4 */ void ags_channel_add_recall_id(AgsChannel *channel, AgsRecallID *recall_id) { AgsMutexManager *mutex_manager; pthread_mutex_t *mutex; if(channel == NULL || recall_id == NULL){ return; } /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); /* add recall id */ pthread_mutex_lock(mutex); g_object_ref(G_OBJECT(recall_id)); channel->recall_id = g_list_prepend(channel->recall_id, recall_id); pthread_mutex_unlock(mutex); } /** * ags_channel_remove_recall_id: * @channel: an #AgsChannel * @recall_id: the #AgsRecallID * * Removes a recall id. * * Since: 0.4 */ void ags_channel_remove_recall_id(AgsChannel *channel, AgsRecallID *recall_id) { AgsMutexManager *mutex_manager; pthread_mutex_t *mutex; if(channel == NULL || recall_id == NULL){ return; } /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); /* remove recall id */ pthread_mutex_lock(mutex); channel->recall_id = g_list_remove(channel->recall_id, recall_id); g_object_unref(G_OBJECT(recall_id)); pthread_mutex_unlock(mutex); } /** * ags_channel_add_recall_container: * @channel: an #AgsChannel * @recall_container: the #AgsRecallContainer * * Adds a recall container. * * Since: 0.4 */ void ags_channel_add_recall_container(AgsChannel *channel, GObject *recall_container) { AgsMutexManager *mutex_manager; pthread_mutex_t *mutex; if(channel == NULL || recall_container == NULL){ return; } /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); /* add recall container */ pthread_mutex_lock(mutex); g_object_ref(G_OBJECT(recall_container)); channel->container = g_list_prepend(channel->container, recall_container); pthread_mutex_unlock(mutex); } /** * ags_channel_remove_recall_container: * @channel: an #AgsChannel * @recall_container: the #AgsRecallContainer * * Removes a recall container. * * Since: 0.4 */ void ags_channel_remove_recall_container(AgsChannel *channel, GObject *recall_container) { AgsMutexManager *mutex_manager; pthread_mutex_t *mutex; if(channel == NULL || recall_container == NULL){ return; } /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); /* remove recall container */ pthread_mutex_lock(mutex); channel->container = g_list_remove(channel->container, recall_container); g_object_unref(G_OBJECT(recall_container)); pthread_mutex_unlock(mutex); } /** * ags_channel_remove_recall: * @channel: an #AgsChannel * @recall_container: the #AgsRecall * @play: %TRUE if simple playback. * * Removes a recall. * * Since: 0.4 */ void ags_channel_remove_recall(AgsChannel *channel, GObject *recall, gboolean play) { AgsMutexManager *mutex_manager; pthread_mutex_t *mutex; if(channel == NULL || recall == NULL){ return; } /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); /* add recall */ pthread_mutex_lock(mutex); if(play){ channel->play = g_list_remove(channel->play, recall); }else{ channel->recall = g_list_remove(channel->recall, recall); } g_object_unref(G_OBJECT(recall)); pthread_mutex_unlock(mutex); } /** * ags_channel_add_recall: * @channel: an #AgsChannel * @recall_container: the #AgsRecall * @play: %TRUE if simple playback. * * Adds a recall. * * Since: 0.4 */ void ags_channel_add_recall(AgsChannel *channel, GObject *recall, gboolean play) { AgsMutexManager *mutex_manager; pthread_mutex_t *mutex; if(channel == NULL || recall == NULL){ return; } /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); /* remove recall */ pthread_mutex_lock(mutex); g_object_ref(recall); if(play){ channel->play = g_list_prepend(channel->play, recall); }else{ channel->recall = g_list_prepend(channel->recall, recall); } pthread_mutex_unlock(mutex); } /** * ags_channel_safe_resize_audio_signal: * @channel: an #AgsChannel * @length: new frame count length * * Resize audio data. * * Since: 0.4 */ void ags_channel_safe_resize_audio_signal(AgsChannel *channel, guint length) { AgsRecycling *last_recycling; AgsRecycling *recycling, *end_recycling; AgsAudioSignal *audio_signal; AgsMutexManager *mutex_manager; GList *list; guint new_length; gdouble factor; pthread_mutex_t *mutex; pthread_mutex_t *recycling_mutex; if(channel == NULL || channel->first_recycling == NULL){ return; } /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); /* get recycling and last recycling */ pthread_mutex_lock(mutex); recycling = channel->first_recycling; last_recycling = channel->last_recycling; pthread_mutex_unlock(mutex); /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); recycling_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) last_recycling); pthread_mutex_unlock(&(ags_application_mutex)); /* get end recycling */ pthread_mutex_lock(recycling_mutex); end_recycling = last_recycling->next; pthread_mutex_unlock(recycling_mutex); /* safe resize */ while(recycling != end_recycling){ /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); recycling_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) recycling); pthread_mutex_unlock(&(ags_application_mutex)); /* get audio signal */ pthread_mutex_lock(recycling_mutex); list = recycling->audio_signal; while(list != NULL){ audio_signal = AGS_AUDIO_SIGNAL(list->data); /* safe shrink or grow */ if(audio_signal->stream_current != NULL){ if(length < audio_signal->length){ factor = audio_signal->length / length; new_length = length + (factor * g_list_position(audio_signal->stream_beginning, audio_signal->stream_current)); }else{ factor = length / audio_signal->length; new_length = length - (factor * g_list_position(audio_signal->stream_beginning, audio_signal->stream_current)); } }else{ new_length = length; } /* do it so */ ags_audio_signal_stream_safe_resize(audio_signal, new_length); /* iterate audio signal */ list = list->next; } /* iterate recycling */ recycling = recycling->next; pthread_mutex_unlock(recycling_mutex); } } /** * ags_channel_duplicate_recall: * @channel: an #AgsChannel that contains the #AgsRecall templates * @playback: if a #AgsRecall that is dedicated to a playback should be duplicated * @sequencer: if a #AgsRecall that is dedicated to a sequencer should be duplicated * @notation: if a #AgsRecall that is dedicated to a notation should be duplicated * @recall_id: the #AgsRecallID the newly allocated #AgsRecall objects belongs to * * Duplicate #AgsRecall templates for use with ags_channel_recursive_play(), * but ags_channel_recursive_play_init() may call this function for you. * * Since: 0.3 */ void ags_channel_duplicate_recall(AgsChannel *channel, AgsRecallID *recall_id) { AgsAudio *audio; AgsRecall *recall, *copy; GList *list_recall, *list_recall_start; gboolean playback, sequencer, notation; AgsMutexManager *mutex_manager; pthread_mutex_t *mutex; if(channel == NULL || recall_id == NULL){ return; } #ifdef AGS_DEBUG g_message("duplicate channel %d\0", channel->line); #endif /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); /* playback mode */ pthread_mutex_lock(mutex); audio = AGS_AUDIO(channel->audio); playback = FALSE; sequencer = FALSE; notation = FALSE; if((AGS_RECALL_ID_PLAYBACK & (recall_id->flags)) != 0){ playback = TRUE; } if((AGS_RECALL_ID_SEQUENCER & (recall_id->flags)) != 0){ sequencer = TRUE; } if((AGS_RECALL_ID_NOTATION & (recall_id->flags)) != 0){ notation = TRUE; } /* recall or play */ if(recall_id->recycling_container->parent == NULL){ list_recall = g_list_copy(channel->play); list_recall_start = list_recall = g_list_reverse(list_recall); }else{ list_recall = g_list_copy(channel->recall); list_recall_start = list_recall = g_list_reverse(list_recall); } /* duplicate */ while(list_recall != NULL){ recall = AGS_RECALL(list_recall->data); /* ignore initialized or non-runnable AgsRecalls */ if((AGS_RECALL_TEMPLATE & (recall->flags)) == 0 || AGS_IS_RECALL_AUDIO(recall) || AGS_IS_RECALL_CHANNEL(recall) || recall->recall_id != NULL){ list_recall = list_recall->next; continue; } if((playback && (AGS_RECALL_PLAYBACK & (recall->flags)) == 0) || (sequencer && (AGS_RECALL_SEQUENCER & (recall->flags)) == 0) || (notation && (AGS_RECALL_NOTATION & (recall->flags)) == 0)){ list_recall = list_recall->next; // g_message("%x - %x\0", recall->flags, recall_id->flags); continue; } /* duplicate the recall */ copy = ags_recall_duplicate(recall, recall_id); if(copy == NULL){ /* iterate */ list_recall = list_recall->next; continue; } #ifdef AGS_DEBUG g_message("recall duplicated: %s\0", G_OBJECT_TYPE_NAME(copy)); #endif /* set appropriate flag */ if(playback){ ags_recall_set_flags(copy, AGS_RECALL_PLAYBACK); }else if(sequencer){ ags_recall_set_flags(copy, AGS_RECALL_SEQUENCER); }else if(notation){ ags_recall_set_flags(copy, AGS_RECALL_NOTATION); } /* append to AgsAudio */ ags_channel_add_recall(channel, (GObject *) copy, ((recall_id->recycling_container->parent == NULL) ? TRUE: FALSE)); /* connect */ ags_connectable_connect(AGS_CONNECTABLE(copy)); /* notify run */ ags_recall_notify_dependency(copy, AGS_RECALL_NOTIFY_RUN, 1); /* iterate */ list_recall = list_recall->next; } g_list_free(list_recall_start); pthread_mutex_unlock(mutex); } /** * ags_channel_resolve_recall: * @channel: an #AgsChannel * @recall_id: appropriate #AgsRecallID * * Resolve step of initialization. * * Since: 0.4 */ void ags_channel_resolve_recall(AgsChannel *channel, AgsRecallID *recall_id) { AgsRecall *recall; GList *list_recall; AgsMutexManager *mutex_manager; pthread_mutex_t *mutex; if(channel == NULL || recall_id == NULL){ return; } /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); /* get the appropriate lists */ pthread_mutex_lock(mutex); #ifdef AGS_DEBUG g_message("resolve channel %d\0", channel->line); #endif if(recall_id->recycling_container->parent == NULL){ list_recall = channel->play; }else{ list_recall = channel->recall; } /* resolve dependencies */ while((list_recall = ags_recall_find_recycling_container(list_recall, G_OBJECT(recall_id->recycling_container))) != NULL){ recall = AGS_RECALL(list_recall->data); ags_recall_resolve_dependencies(recall); list_recall = list_recall->next; } pthread_mutex_unlock(mutex); } /** * ags_channel_init_recall: * @channel: an #AgsChannel that contains the recalls * @recall_id: the #AgsRecallId this recall belongs to * * Prepare #AgsRecall objects to become runnning, ags_channel_recursive_play_init() * may call this function for you. * * Since: 0.3 */ void ags_channel_init_recall(AgsChannel *channel, gint stage, AgsRecallID *recall_id) { AgsRecall *recall; GList *list_recall; AgsMutexManager *mutex_manager; pthread_mutex_t *mutex; if(channel == NULL || recall_id == NULL){ return; } /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); /* recall or play */ pthread_mutex_lock(mutex); #ifdef AGS_DEBUG g_message("ags_channel_init_recall@%d - audio::IN[%u]; channel: %llu %llu\n\0", stage, AGS_AUDIO(channel->audio)->input_lines, (long long unsigned int) channel->audio_channel, (long long unsigned int) channel->pad); #endif if(recall_id->recycling_container->parent == NULL){ list_recall = channel->play; }else{ list_recall = channel->recall; } /* init recall */ while(list_recall != NULL){ recall = AGS_RECALL(list_recall->data); if(recall->recall_id == NULL || recall->recall_id->recycling_container == NULL || AGS_IS_RECALL_CHANNEL(recall)){ list_recall = list_recall->next; continue; } if(recall->recall_id->recycling_container != recall_id->recycling_container){ if(AGS_IS_INPUT(channel) && recall->recall_id->recycling_container->parent == NULL){ AgsRecyclingContainer *parent_container; parent_container = ags_recall_id_find_parent_recycling_container(AGS_AUDIO(channel->audio)->recall_id, recall->recall_id->recycling_container); if(recall_id->recycling_container->parent != parent_container){ list_recall = list_recall->next; continue; } }else{ list_recall = list_recall->next; continue; } } if((AGS_RECALL_TEMPLATE & (recall->flags)) == 0){ #ifdef AGS_DEBUG g_message("recall run init: %s - %x\0", G_OBJECT_TYPE_NAME(recall), recall->flags); #endif if(stage == 0){ ags_dynamic_connectable_connect_dynamic(AGS_DYNAMIC_CONNECTABLE(recall)); recall->flags &= (~AGS_RECALL_HIDE); ags_recall_run_init_pre(recall); recall->flags &= (~AGS_RECALL_REMOVE); }else if(stage == 1){ ags_recall_run_init_inter(recall); }else{ ags_recall_run_init_post(recall); } } list_recall = list_recall->next; } pthread_mutex_unlock(mutex); } /** * ags_channel_play: * @channel: an #AgsChannel * @recall_id: appropriate #AgsRecallID * @stage: run_pre, run_inter or run_post * * Play one single run of @stage step. * * Since: 0.3 */ void ags_channel_play(AgsChannel *channel, AgsRecallID *recall_id, gint stage) { AgsRecall *recall; GList *list, *list_next; AgsMutexManager *mutex_manager; pthread_mutex_t *mutex; if(channel == NULL || recall_id == NULL || recall_id->recycling_container == NULL){ return; } /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); /* play or recall */ pthread_mutex_lock(mutex); if(recall_id->recycling_container->parent != NULL){ list = channel->recall; }else{ list = channel->play; } /* run */ while(list != NULL){ list_next = list->next; recall = AGS_RECALL(list->data); if(recall == NULL){ if(recall_id->recycling_container->parent != NULL){ channel->recall = g_list_remove(channel->recall, recall); }else{ channel->play = g_list_remove(channel->play, recall); } g_warning("recall == NULL\0"); list = list_next; continue; } if(recall->recall_id == NULL || recall->recall_id->recycling_container != recall_id->recycling_container || AGS_IS_RECALL_CHANNEL(recall)){ list = list_next; continue; } if((AGS_RECALL_TEMPLATE & (recall->flags)) == 0){ #ifdef AGS_DEBUG g_message("%s play channel %x:%d @%x -> %x\0", G_OBJECT_TYPE_NAME(recall), channel, channel->line, recall, recall->recall_id); #endif if((AGS_RECALL_HIDE & (recall->flags)) == 0){ if(stage == 0){ ags_recall_run_pre(recall); }else if(stage == 1){ ags_recall_run_inter(recall); }else{ ags_recall_run_post(recall); } } } list = list_next; } pthread_mutex_unlock(mutex); } /** * ags_channel_done: * @channel: an #AgsChannel * @recall_id: the current #AgsRecallID * * Is emitted as playing channel is done. * * Since: 0.4 */ void ags_channel_done(AgsChannel *channel, AgsRecallID *recall_id) { AgsMutexManager *mutex_manager; pthread_mutex_t *mutex; if(channel == NULL){ return; } /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); /* verify type */ pthread_mutex_lock(mutex); if(!(AGS_IS_CHANNEL(channel))){ pthread_mutex_unlock(mutex); return; } /* emit */ g_object_ref(G_OBJECT(channel)); g_signal_emit(G_OBJECT(channel), channel_signals[DONE], 0, recall_id); g_object_unref(G_OBJECT(channel)); pthread_mutex_unlock(mutex); } /** * ags_channel_cancel: * @channel: an #AgsChannel * @recall_id: and #AgsRecallID * * Calls for every matching @recall_id ags_recall_cancel() * * Since: 0.3 */ void ags_channel_cancel(AgsChannel *channel, AgsRecallID *recall_id) { AgsRecall *recall; AgsMutexManager *mutex_manager; GList *list, *list_next; pthread_mutex_t *mutex; if(channel == NULL || recall_id == NULL){ return; } /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); /* recall or play */ pthread_mutex_lock(mutex); g_object_ref(recall_id); if(recall_id->recycling_container->parent == NULL){ list = channel->play; }else{ list = channel->recall; } while(list != NULL){ list_next = list->next; recall = AGS_RECALL(list->data); if((AGS_RECALL_TEMPLATE & (recall->flags)) != 0 || recall->recall_id->recycling_container != recall_id->recycling_container){ list = list_next; continue; } g_object_ref(recall_id); g_object_ref(recall); ags_recall_cancel(recall); list = list_next; } pthread_mutex_unlock(mutex); } /** * ags_channel_remove: * @channel: an #AgsChannel * @recall_id: and #AgsRecallID * * Calls for every matching @recall_id ags_recall_remove() * * Since: 0.3 */ void ags_channel_remove(AgsChannel *channel, AgsRecallID *recall_id) { AgsRecall *recall; AgsMutexManager *mutex_manager; GList *list, *list_next; gboolean play; pthread_mutex_t *mutex; if(channel == NULL || recall_id == NULL){ return; } /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); /* recall or play */ pthread_mutex_lock(mutex); if(recall_id->recycling_container->parent == NULL){ list = channel->play; play = TRUE; }else{ list = channel->recall; play = FALSE; } while(list != NULL){ list_next = list->next; recall = AGS_RECALL(list->data); if((AGS_RECALL_TEMPLATE & (recall->flags)) != 0 || recall->recall_id->recycling_container != recall_id->recycling_container){ list = list_next; continue; } ags_recall_remove(recall); ags_channel_remove_recall(channel, recall, play); g_object_unref(recall_id); list = list_next; } channel->recall_id = g_list_remove(channel->recall_id, recall_id); g_object_unref(recall_id); pthread_mutex_unlock(mutex); } void ags_channel_recall_id_set(AgsChannel *output, AgsRecallID *default_recall_id, gboolean ommit_own_channel, guint mode, ...) { AgsAudio *audio; AgsChannel *current; AgsRecallID *recall_id; AgsRecyclingContainer *recycling_container; AgsMutexManager *mutex_manager; char *key; guint flags; guint stage; gboolean async_recall; va_list va_list; pthread_mutex_t *mutex; pthread_mutex_t *audio_mutex; pthread_mutex_t *current_mutex; /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) output); pthread_mutex_unlock(&(ags_application_mutex)); /* read variadict arguments */ va_start(va_list, mode); switch(mode){ case AGS_CHANNEL_RECALL_ID_RUN_STAGE: key = va_arg(va_list, char*); stage = va_arg(va_list, guint); break; } va_end(va_list); /* get audio */ pthread_mutex_lock(mutex); audio = (AgsAudio *) output->audio; pthread_mutex_unlock(mutex); /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); /* get recycling container and flags */ pthread_mutex_lock(audio_mutex); recycling_container = default_recall_id->recycling_container; flags = audio->flags; pthread_mutex_unlock(audio_mutex); /* */ if((AGS_AUDIO_ASYNC & (flags)) != 0){ async_recall = TRUE; }else{ async_recall = FALSE; } switch(async_recall){ case TRUE: { /* iterate next */ pthread_mutex_lock(mutex); current = output->next_pad; pthread_mutex_unlock(mutex); while(current != NULL){ /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); current_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) current); pthread_mutex_unlock(&(ags_application_mutex)); /* set run stage */ pthread_mutex_lock(current_mutex); recall_id = ags_recall_id_find_parent_recycling_container(current->recall_id, recycling_container->parent); pthread_mutex_unlock(current_mutex); if(recall_id == NULL){ return; } switch(mode){ case AGS_CHANNEL_RECALL_ID_RUN_STAGE: { pthread_mutex_lock(audio_mutex); ags_recall_id_set_run_stage(default_recall_id, stage); pthread_mutex_unlock(audio_mutex); } break; case AGS_CHANNEL_RECALL_ID_CANCEL: { pthread_mutex_lock(current_mutex); recall_id->flags |= AGS_RECALL_ID_CANCEL; pthread_mutex_unlock(current_mutex); } break; } pthread_mutex_lock(current_mutex); current = current->next_pad; pthread_mutex_unlock(current_mutex); } /* iterate prev */ pthread_mutex_lock(mutex); current = output->prev_pad; pthread_mutex_unlock(mutex); while(current != NULL){ /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); current_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) current); pthread_mutex_unlock(&(ags_application_mutex)); /* set run stage */ pthread_mutex_lock(current_mutex); recall_id = ags_recall_id_find_parent_recycling_container(current->recall_id, recycling_container->parent); pthread_mutex_unlock(current_mutex); switch(mode){ case AGS_CHANNEL_RECALL_ID_RUN_STAGE: { pthread_mutex_lock(audio_mutex); ags_recall_id_set_run_stage(default_recall_id, stage); pthread_mutex_unlock(audio_mutex); } break; case AGS_CHANNEL_RECALL_ID_CANCEL: { pthread_mutex_lock(current_mutex); recall_id->flags |= AGS_RECALL_ID_CANCEL; pthread_mutex_unlock(current_mutex); } break; } pthread_mutex_lock(current_mutex); current = current->prev_pad; pthread_mutex_unlock(current_mutex); } } case FALSE: { if(ommit_own_channel){ break; } pthread_mutex_lock(mutex); recall_id = ags_recall_id_find_parent_recycling_container(output->recall_id, recycling_container->parent); pthread_mutex_unlock(mutex); if(recall_id == NULL){ return; } switch(mode){ case AGS_CHANNEL_RECALL_ID_RUN_STAGE: { pthread_mutex_lock(audio_mutex); ags_recall_id_set_run_stage(default_recall_id, stage); pthread_mutex_unlock(audio_mutex); } break; case AGS_CHANNEL_RECALL_ID_CANCEL: { pthread_mutex_lock(mutex); recall_id->flags |= AGS_RECALL_ID_CANCEL; pthread_mutex_unlock(mutex); } break; } } } } /** * ags_channel_find_port: * @channel: an #AgsChannel * * Retrieve all ports of #AgsChannel * * Returns: a #GList containing #AgsPort * * Since: 0.4 */ GList* ags_channel_find_port(AgsChannel *channel) { AgsMutexManager *mutex_manager; GList *recall; GList *list; pthread_mutex_t *mutex; if(channel == NULL){ return(NULL); } /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); /* collect port of playing recall */ pthread_mutex_lock(mutex); recall = channel->play; list = NULL; while(recall != NULL){ if(AGS_RECALL(recall->data)->port != NULL){ if(list == NULL){ list = g_list_copy(AGS_RECALL(recall->data)->port); }else{ if(AGS_RECALL(recall->data)->port != NULL){ list = g_list_concat(list, g_list_copy(AGS_RECALL(recall->data)->port)); } } } recall = recall->next; } /* the same for true recall */ recall = channel->recall; while(recall != NULL){ if(AGS_RECALL(recall->data)->port != NULL){ if(list == NULL){ list = g_list_copy(AGS_RECALL(recall->data)->port); }else{ if(AGS_RECALL(recall->data)->port != NULL){ list = g_list_concat(list, g_list_copy(AGS_RECALL(recall->data)->port)); } } } recall = recall->next; } /* */ pthread_mutex_unlock(mutex); list = g_list_reverse(list); return(list); } /** * ags_channel_set_link: * @channel: an #AgsChannel to link * @link: an other #AgsChannel to link with * @error: you may retrieve a AGS_CHANNEL_ERROR_LOOP_IN_LINK error * * Change the linking of #AgsChannel objects. Sets link, calls ags_channel_set_recycling() * and ags_channel_recursive_reset_recall_ids(). Further it does loop detection and makes * your machine running. Thus it adds #AgsRecallID. Asynchronously only. * * Since: 0.3 */ void ags_channel_set_link(AgsChannel *channel, AgsChannel *link, GError **error) { AgsChannel *old_channel_link, *old_link_link; AgsRecycling *first_recycling, *last_recycling; GError *this_error; if(channel == NULL && link == NULL){ return; } if(channel != NULL){ if(channel->link == link){ return; } old_channel_link = channel->link; }else{ if(link->link == NULL){ return; } old_channel_link = NULL; } if(link != NULL){ old_link_link = link->link; }else{ old_link_link = NULL; } g_message("set link %x %x\0", channel, link); if(link != NULL){ old_link_link = link->link; }else{ old_link_link = NULL; } /* check for a loop */ if(channel != NULL && link != NULL){ AgsAudio *audio, *current_audio; AgsChannel *current_channel; if(AGS_IS_OUTPUT(channel)){ audio = AGS_AUDIO(link->audio); current_channel = link; }else{ audio = AGS_AUDIO(channel->audio); current_channel = channel; } if((AGS_AUDIO_ASYNC & (audio->flags)) != 0){ current_channel = ags_channel_nth(audio->output, link->audio_channel); }else{ current_channel = ags_channel_nth(audio->output, link->line); } if(current_channel != NULL){ current_channel = current_channel->link; } if(current_channel != NULL){ current_audio = AGS_AUDIO(current_channel->audio); while(current_channel != NULL){ if(current_audio == audio){ if(error != NULL){ g_set_error(error, AGS_CHANNEL_ERROR, AGS_CHANNEL_ERROR_LOOP_IN_LINK, "failed to link channel %u from %s with channel %u from %s\0", channel->line, G_OBJECT_TYPE_NAME(audio), link->line, G_OBJECT_TYPE_NAME(link->audio)); } return; } if((AGS_AUDIO_ASYNC & (current_audio->flags)) != 0){ current_channel = ags_channel_nth(current_audio->output, current_channel->audio_channel); }else{ current_channel = ags_channel_nth(current_audio->output, current_channel->line); } if(current_channel != NULL){ current_channel = current_channel->link; } if(current_channel != NULL){ current_audio = AGS_AUDIO(current_channel->audio); } } } } /* set link */ if(channel != NULL){ channel->link = link; } if(link != NULL){ link->link = channel; if(channel != NULL){ ags_channel_set_link(link, channel, &this_error); } } /* set old input/output to NULL */ if(old_link_link != NULL){ old_link_link->link = NULL; this_error = NULL; ags_channel_set_link(old_link_link, NULL, &this_error); } /* set old input/output to NULL */ if(old_channel_link != NULL){ old_channel_link->link = NULL; this_error = NULL; ags_channel_set_link(old_channel_link, NULL, &this_error); } /* set recycling */ if(channel != NULL){ if(AGS_IS_OUTPUT(channel)){ first_recycling = channel->first_recycling; last_recycling = channel->last_recycling; if(link != NULL){ ags_channel_set_recycling(link, first_recycling, last_recycling, TRUE, TRUE); } if(AGS_IS_INPUT(old_channel_link)){ if((AGS_AUDIO_INPUT_HAS_RECYCLING & (AGS_AUDIO(old_channel_link->audio)->flags)) != 0){ first_recycling = g_object_new(AGS_TYPE_RECYCLING, "channel\0", channel, "devout\0", AGS_AUDIO(channel->audio)->devout, NULL); last_recycling = first_recycling; ags_channel_set_recycling(old_channel_link, first_recycling, last_recycling, TRUE, TRUE); }else{ ags_channel_set_recycling(old_channel_link, NULL, NULL, TRUE, TRUE); } } // ags_channel_set_recycling(old_link_link, // NULL, NULL, // TRUE, TRUE); }else{ if(link != NULL){ first_recycling = link->first_recycling; last_recycling = link->last_recycling; ags_channel_set_recycling(channel, first_recycling, last_recycling, TRUE, TRUE); // ags_channel_set_recycling(old_channel_link, // NULL, NULL, // TRUE, TRUE); ags_channel_set_recycling(old_link_link, NULL, NULL, TRUE, TRUE); }else{ if((AGS_AUDIO_INPUT_HAS_RECYCLING & (AGS_AUDIO(channel->audio)->flags)) != 0){ first_recycling = g_object_new(AGS_TYPE_RECYCLING, "channel\0", channel, "devout\0", AGS_AUDIO(channel->audio)->devout, NULL); last_recycling = first_recycling; ags_channel_set_recycling(channel, first_recycling, last_recycling, TRUE, TRUE); // ags_channel_set_recycling(old_channel_link, // NULL, NULL, // TRUE, TRUE); }else{ ags_channel_set_recycling(channel, NULL, NULL, TRUE, TRUE); // ags_channel_set_recycling(old_channel_link, // NULL, NULL, // TRUE, TRUE); } } } }else{ if(AGS_IS_INPUT(link)){ if((AGS_AUDIO_INPUT_HAS_RECYCLING & (AGS_AUDIO(link->audio)->flags)) != 0){ first_recycling = g_object_new(AGS_TYPE_RECYCLING, "channel\0", link, "devout\0", AGS_AUDIO(link->audio)->devout, NULL); last_recycling = first_recycling; ags_channel_set_recycling(link, first_recycling, last_recycling, TRUE, TRUE); ags_channel_set_recycling(old_link_link, NULL, NULL, TRUE, TRUE); }else{ ags_channel_set_recycling(link, NULL, NULL, TRUE, TRUE); // ags_channel_set_recycling(old_link_link, // NULL, NULL, // TRUE, TRUE); } } } /* reset recall id */ ags_channel_recursive_reset_recall_ids(channel, link, old_channel_link, old_link_link); } /** * ags_channel_set_recycling: * @channel: the channel to reset * @first_recycling: the recycling to set for channel->first_recycling * @last_recycling: the recycling to set for channel->last_recycling * @update: reset allthough the AgsRecyclings are still the same * @destroy_old: destroy old AgsRecyclings * * Called by ags_channel_set_link() to handle outdated #AgsRecycling references. * Asynchronously only. * * Since: 0.3 */ void ags_channel_set_recycling(AgsChannel *channel, AgsRecycling *first_recycling, AgsRecycling *last_recycling, gboolean update, gboolean destroy_old) { AgsAudio *audio; AgsAudio *found_prev, *found_next; AgsChannel *prev_channel, *next_channel, *current; AgsRecycling *parent; AgsRecycling *old_first_recycling, *old_last_recycling; AgsRecycling *replace_with_first_recycling, *replace_with_last_recycling; AgsRecycling *changed_old_first_recycling, *changed_old_last_recycling; AgsRecycling *nth_recycling, *next_recycling, *stop_recycling; AgsRecyclingContainer *recycling_container, *old_recycling_container; AgsRecallID *current_recall_id; GList *recall_id; guint flags; guint complete_level_first, complete_level_last; gboolean is_output; gboolean replace_first, replace_last; gboolean find_prev, find_next; gboolean change_old_last, change_old_first; auto gboolean ags_channel_set_recycling_recursive_input(AgsChannel *input); auto void ags_channel_set_recycling_recursive_output(AgsChannel *output); auto void ags_channel_set_recycling_recursive(AgsChannel *input); auto void ags_channel_set_recycling_emit_changed_input(AgsChannel *input); auto void ags_channel_set_recycling_emit_changed_output(AgsChannel *output); auto void ags_channel_set_recycling_emit_changed(AgsChannel *input); gboolean ags_channel_set_recycling_recursive_input(AgsChannel *input){ AgsChannel *nth_channel_prev, *nth_channel_next; if(input == NULL || (input->first_recycling == replace_with_first_recycling && input->last_recycling == replace_with_last_recycling)){ return(TRUE); } /* set recycling */ if(replace_first){ input->first_recycling = replace_with_first_recycling; } if(replace_last){ input->last_recycling = replace_with_last_recycling; } /* search for neighboor recyclings */ if((AGS_AUDIO_ASYNC & (AGS_AUDIO(input->audio)->flags)) != 0){ if(find_prev){ nth_channel_prev = ags_channel_prev_with_recycling(input); if(nth_channel_prev != NULL){ #ifdef AGS_DEBUG g_message("found prev\0"); #endif find_prev = FALSE; replace_first = FALSE; if(complete_level_first == 0){ found_prev = audio; prev_channel = nth_channel_prev; complete_level_first = 1; } } }else{ if(nth_channel_prev == NULL){ nth_channel_prev = ags_channel_prev_with_recycling(input); } } if(find_next){ nth_channel_next = ags_channel_next_with_recycling(input); if(nth_channel_next != NULL){ #ifdef AGS_DEBUG g_message("found next\0"); #endif find_next = FALSE; replace_last = FALSE; if(complete_level_last == 0){ found_next = audio; next_channel = nth_channel_next; complete_level_last = 1; } } }else{ if(nth_channel_next == NULL){ nth_channel_next = ags_channel_next_with_recycling(input); } } if(prev_channel != NULL){ if(next_channel == NULL){ if(replace_with_last_recycling == NULL){ replace_with_last_recycling = prev_channel->last_recycling; find_next = FALSE; } }else{ replace_with_last_recycling = prev_channel->last_recycling; replace_with_first_recycling = next_channel->first_recycling; } }else{ if(next_channel != NULL){ if(replace_with_first_recycling == NULL){ replace_with_first_recycling = next_channel->first_recycling; find_prev = FALSE; } } } } if(replace_first || replace_last){ return(FALSE); }else{ return(TRUE); } } void ags_channel_set_recycling_recursive_output(AgsChannel *output){ AgsAudio *audio; AgsChannel *input; AgsChannel *link; AgsChannel *nth_channel_prev, *nth_channel_next; AgsRecycling *first_recycling, *last_recycling; guint flags; guint audio_channel; if(output == NULL){ return; } /* get audio and audio channel */ audio = AGS_AUDIO(output->audio); audio_channel = output->audio_channel; /* get input */ input = audio->input; flags = audio->flags; /* update input AgsRecallIDs */ //TODO:JK: check for compliance // ags_recall_id_reset_recycling(output->recall_id, // output->first_recycling, // replace_with_first_recycling, replace_with_last_recycling); if(replace_last){ /* do it so */ output->last_recycling = replace_with_last_recycling; } /* last recycling */ if(replace_first){ /* do it so */ output->first_recycling = replace_with_first_recycling; } /* deeper level */ link = output->link; if(link != NULL){ ags_channel_set_recycling_recursive(link); } } void ags_channel_set_recycling_recursive(AgsChannel *input){ AgsAudio *audio; AgsChannel *output; guint flags; guint audio_channel, line; gboolean completed; if(input == NULL){ return; } /* get audio and audio channel */ audio = AGS_AUDIO(input->audio); audio_channel = input->audio_channel; line = input->line; /* get output */ output = audio->output; flags = audio->flags; /* AgsInput */ completed = ags_channel_set_recycling_recursive_input(input); if(completed){ return; } /* AgsOutput */ if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (flags)) == 0){ if((AGS_AUDIO_ASYNC & (audio->flags)) != 0){ output = ags_channel_nth(output, audio_channel); }else{ output = ags_channel_nth(output, line); } ags_channel_set_recycling_recursive_output(output); } } void ags_channel_set_recycling_emit_changed_input(AgsChannel *input){ AgsRecycling *input_first_recycling, *input_last_recycling; if(input == NULL){ return; } /* get current recycling */ input_first_recycling = input->first_recycling; input_last_recycling = input->last_recycling; /* emit changed */ if(input != channel){ ags_channel_recycling_changed(input, changed_old_first_recycling, changed_old_last_recycling, input_first_recycling, input_last_recycling, old_first_recycling, old_last_recycling, first_recycling, last_recycling); } } void ags_channel_set_recycling_emit_changed_output(AgsChannel *output){ AgsChannel *link; AgsRecycling *output_first_recycling, *output_last_recycling; if(output == NULL){ return; } /* get current recycling */ link = output->link; output_first_recycling = output->first_recycling; output_last_recycling = output->last_recycling; /* emit changed */ if(output != channel){ ags_channel_recycling_changed(output, changed_old_first_recycling, changed_old_last_recycling, output_first_recycling, output_last_recycling, old_first_recycling, old_last_recycling, first_recycling, last_recycling); } if(link != NULL){ ags_channel_set_recycling_emit_changed(link); } } void ags_channel_set_recycling_emit_changed(AgsChannel *input){ AgsAudio *audio; AgsChannel *output; guint flags; guint audio_channel, line; if(input == NULL){ return; } /* get audio and audio channel */ audio = AGS_AUDIO(input->audio); audio_channel = input->audio_channel; line = input->line; /* get output */ output = audio->output; flags = audio->flags; /* AgsInput */ ags_channel_set_recycling_emit_changed_input(input); /* higher level */ if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (flags)) == 0){ if((AGS_AUDIO_ASYNC & (flags)) != 0){ output = ags_channel_nth(output, audio_channel); }else{ output = ags_channel_nth(output, line); } ags_channel_set_recycling_emit_changed_output(output); } return; } /* entry point */ if(channel == NULL){ return; } audio = AGS_AUDIO(channel->audio); /* fix first or last recycling if needed */ if(first_recycling == NULL && last_recycling != NULL){ first_recycling = last_recycling; } if(last_recycling == NULL && first_recycling != NULL){ last_recycling = first_recycling; } /* set old recycling */ old_first_recycling = channel->first_recycling; old_last_recycling = channel->last_recycling; if(!update && old_first_recycling == first_recycling && old_last_recycling == last_recycling){ return; } /* initialising */ found_prev = NULL; found_next = NULL; parent = NULL; prev_channel = NULL; next_channel = NULL; replace_with_first_recycling = first_recycling; replace_with_last_recycling = last_recycling; changed_old_first_recycling = NULL; changed_old_last_recycling = NULL; complete_level_first = 0; complete_level_last = 0; replace_first = TRUE; replace_last = TRUE; find_next = TRUE; find_prev = TRUE; change_old_first = TRUE; change_old_last = TRUE; if((old_first_recycling == first_recycling)){ if(!update){ if(old_last_recycling == last_recycling){ return; } replace_first = FALSE; } } if((old_last_recycling == last_recycling)){ if(!update){ replace_last = FALSE; } } /* set recycling - update AgsChannel */ if(AGS_IS_INPUT(channel)){ ags_channel_set_recycling_recursive(channel); }else{ ags_channel_set_recycling_recursive_output(channel); } channel->first_recycling = first_recycling; channel->last_recycling = last_recycling; /* join now the retrieved recyclings */ if(!(AGS_IS_INPUT(channel) && (AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) != 0)){ if(first_recycling != NULL){ if((prev_channel != NULL && prev_channel->last_recycling != NULL)){ prev_channel->last_recycling->next = first_recycling; first_recycling->prev = prev_channel->last_recycling; }else{ first_recycling->prev = NULL; } if(next_channel != NULL && next_channel->first_recycling != NULL){ next_channel->first_recycling->prev = last_recycling; last_recycling->next = next_channel->first_recycling; }else{ last_recycling->next = NULL; } }else{ gboolean link_next, link_prev; if(prev_channel != NULL && prev_channel->last_recycling != NULL){ link_next = TRUE; }else{ link_next = FALSE; } if(next_channel != NULL && next_channel->first_recycling != NULL){ link_prev = TRUE; }else{ link_prev = FALSE; } if(link_next){ if(link_prev){ next_channel->first_recycling->prev = prev_channel->last_recycling; prev_channel->last_recycling->next = next_channel->first_recycling; }else{ prev_channel->last_recycling->next = NULL; } }else if(link_prev){ next_channel->first_recycling->prev = NULL; } } } /* destroy old recycling */ if(destroy_old && old_first_recycling != NULL){ nth_recycling = old_first_recycling; while(nth_recycling != old_last_recycling->next){ next_recycling = nth_recycling->next; g_object_unref(G_OBJECT(nth_recycling)); nth_recycling = next_recycling; } } /* find and set parent */ if(first_recycling != NULL){ AgsAudio *audio; AgsChannel *output; guint audio_channel, line; /* find parent */ parent = NULL; if(AGS_IS_OUTPUT(channel)){ current = channel->link; }else{ current = channel; } while(current != NULL && parent == NULL){ /* get audio */ audio = (AgsAudio *) current->audio; audio_channel = current->audio_channel; line = current->line; /* get nth */ output = audio->output; if((AGS_AUDIO_ASYNC & (audio->flags)) != 0){ current = ags_channel_nth(output, audio_channel); }else{ current = ags_channel_nth(output, line); } /* check if parent found */ if(current != NULL){ if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) != 0){ /* set parent */ parent = current->first_recycling; } current = current->link; }else{ break; } } /* apply parent */ if(update){ nth_recycling = first_recycling; stop_recycling = last_recycling->next; }else{ if(first_recycling == old_first_recycling){ nth_recycling = old_last_recycling; stop_recycling = last_recycling->next; }else{ nth_recycling = first_recycling; if(old_first_recycling != NULL){ stop_recycling = old_first_recycling->next; }else{ stop_recycling = NULL; } } } /* parent - do it so */ while(nth_recycling != stop_recycling){ nth_recycling->parent = parent; nth_recycling = nth_recycling->next; } } /* add recall id */ recall_id = audio->recall_id; while(recall_id != NULL){ if(AGS_RECALL_ID(recall_id->data)->recycling != NULL && AGS_IS_OUTPUT(AGS_RECYCLING(AGS_RECALL_ID(recall_id->data)->recycling)->channel)){ recall_id = recall_id->next; continue; } current_recall_id = g_object_new(AGS_TYPE_RECALL_ID, "recycling\0", first_recycling, "recycling-container\0", AGS_RECALL_ID(recall_id->data)->recycling_container, NULL); ags_channel_add_recall_id(channel, current_recall_id); recall_id = recall_id->next; } /* update recycling container */ recall_id = audio->recall_id; while(recall_id != NULL){ is_output = AGS_IS_OUTPUT(channel); if(is_output){ if((AgsRecycling *) AGS_RECALL_ID(recall_id->data)->recycling != old_first_recycling){ recall_id = recall_id->next; continue; } }else{ if((AgsRecycling *) AGS_RECALL_ID(recall_id->data)->recycling != old_first_recycling){ recall_id = recall_id->next; continue; } } old_recycling_container = (AgsRecyclingContainer *) AGS_RECALL_ID(recall_id->data)->recycling_container; recycling_container = ags_recycling_container_reset_recycling(old_recycling_container, old_first_recycling, old_last_recycling, first_recycling, last_recycling); if(recycling_container != NULL){ recycling_container->parent = old_recycling_container->parent; ags_audio_add_recycling_container(audio, recycling_container); } ags_audio_remove_recycling_container(audio, (GObject *) old_recycling_container); g_object_set(recall_id->data, "recycling-container\0", recycling_container, NULL); ags_channel_recursive_reset_recycling_container(channel, old_recycling_container, recycling_container); recall_id = recall_id->next; } /* emit changed */ changed_old_first_recycling = NULL; changed_old_last_recycling = NULL; is_output = AGS_IS_OUTPUT(channel); if(!is_output){ AgsChannel *output; if(old_first_recycling != NULL){ changed_old_first_recycling = old_first_recycling; changed_old_last_recycling = old_last_recycling; } ags_channel_set_recycling_emit_changed_input(channel); flags = audio->flags; if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (flags)) == 0){ output = audio->output; if((AGS_AUDIO_ASYNC & (flags)) != 0){ guint audio_channel; audio_channel = channel->audio_channel; output = ags_channel_nth(output, audio_channel); }else{ guint line; line = channel->line; output = ags_channel_nth(output, line); } ags_channel_set_recycling_emit_changed_output(output); } }else{ ags_channel_set_recycling_emit_changed_output(channel); } } /** * ags_channel_recursive_reset_recycling_container: * @channel: the channel to reset * @old_recycling_container: the old recycling container context * @recycling_container: the new recycling container context * * Resets the recycling container context. Asynchronously only. * * Since: 0.4 */ void ags_channel_recursive_reset_recycling_container(AgsChannel *channel, AgsRecyclingContainer *old_recycling_container, AgsRecyclingContainer *recycling_container) { AgsAudio *audio; gboolean is_output; auto void ags_channel_reset_recycling_container(GList *recall_id); auto void ags_channel_recursive_reset_recycling_container_up(AgsChannel *channel); auto void ags_channel_recursive_reset_recycling_container_down_input(AgsChannel *channel); auto void ags_channel_recursive_reset_recycling_container_down_output(AgsChannel *channel); void ags_channel_reset_recycling_container(GList *recall_id){ while(recall_id != NULL){ if(AGS_RECALL_ID(recall_id->data)->recycling_container == old_recycling_container){ g_object_set(recall_id->data, "recycling-container\0", recycling_container, NULL); } recall_id = recall_id->next; } } void ags_channel_recursive_reset_recycling_container_up(AgsChannel *channel){ AgsAudio *audio; AgsChannel *current, *output; guint flags; guint audio_channel, line; gboolean is_output; if(channel == NULL){ return; } current = channel; /* get audio and defaults */ audio_channel = channel->audio_channel; line = channel->line; audio = (AgsAudio *) channel->audio; is_output = AGS_IS_OUTPUT(channel); if(is_output){ /* reset recycling container */ flags = audio->flags; ags_channel_reset_recycling_container(audio->recall_id); goto ags_channel_recursive_reset_recycling_container_up_OUTPUT; } /* reset current channel */ while(current != NULL){ audio = (AgsAudio *) current->audio; audio_channel = current->audio_channel; line = current->line; ags_channel_reset_recycling_container(current->recall_id); /* reset recycling container */ flags = audio->flags; output = audio->output; ags_channel_reset_recycling_container(audio->recall_id); if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (flags)) != 0){ break; } current = ags_channel_nth(output, ((AGS_AUDIO_ASYNC & (flags)) ? audio_channel: line)); ags_channel_recursive_reset_recycling_container_up_OUTPUT: ags_channel_reset_recycling_container(current->recall_id); /* iterate */ current = current->link; } /* update all in recycling context */ if(AGS_IS_INPUT(current) && (AGS_AUDIO_ASYNC & (flags)) != 0){ AgsChannel *input, *link; input = audio->input; input = ags_channel_nth(input, audio_channel); while(input != NULL){ if(input != current){ link = input->link; ags_channel_reset_recycling_container(input->recall_id); /* traverse the tree */ ags_channel_recursive_reset_recycling_container_down_output(link); } /* iterate */ input = input->next_pad; } } } void ags_channel_recursive_reset_recycling_container_down_input(AgsChannel *output){ AgsAudio *audio; AgsChannel *input; AgsChannel *link; guint flags; guint audio_channel, line; pthread_mutex_t *mutex; pthread_mutex_t *audio_mutex, *input_mutex; if(output == NULL){ return; } /* get audio and defaults */ audio = (AgsAudio *) output->audio; audio_channel = output->audio_channel; line = output->line; /* reset recycling container */ input = audio->input; flags = audio->flags; if((AGS_AUDIO_ASYNC & (flags)) != 0){ input = ags_channel_nth(input, audio_channel); while(input != NULL){ /* reset recycling container */ link = input->link; ags_channel_reset_recycling_container(input->recall_id); ags_channel_recursive_reset_recycling_container_down_output(link); /* iterate */ input = input->next_pad; } }else{ input = ags_channel_nth(input, line); /* reset recycling container */ link = input->link; ags_channel_reset_recycling_container(input->recall_id); ags_channel_recursive_reset_recycling_container_down_output(link); } } void ags_channel_recursive_reset_recycling_container_down_output(AgsChannel *output){ AgsAudio *audio; guint flags; pthread_mutex_t *mutex; pthread_mutex_t *audio_mutex; if(output == NULL){ return; } /* get audio and defaults */ audio = (AgsAudio *) output->audio; /* check if still reset recycling container */ flags = audio->flags; if(output != channel && (AGS_AUDIO_OUTPUT_HAS_RECYCLING & (flags)) != 0){ return; } /* reset recycling container - output */ ags_channel_reset_recycling_container(output->recall_id); /* reset recycling container - audio */ ags_channel_reset_recycling_container(audio->recall_id); /* traverse the tree */ ags_channel_recursive_reset_recycling_container_down_input(output); } /* entry point */ if(channel == NULL){ return; } /* traverse the tree */ is_output = AGS_IS_OUTPUT(channel); if(!is_output){ ags_channel_recursive_reset_recycling_container_down_output(channel->link); ags_channel_recursive_reset_recycling_container_up(channel); }else{ ags_channel_recursive_reset_recycling_container_down_output(channel); ags_channel_recursive_reset_recycling_container_up(channel->link); } } /** * ags_channel_recycling_changed: * @channel: the object recycling changed * @old_start_region: first recycling * @old_end_region: last recycling * @new_start_region: new first recycling * @new_end_region: new last recycling * @old_start_changed_region: modified link recycling start * @old_end_changed_region: modified link recyclig end * @new_start_changed_region: replacing link recycling start * @new_end_changed_region: replacing link recycling end * * Modify recycling. Asynchronously only. * * Since: 0.3 */ void ags_channel_recycling_changed(AgsChannel *channel, AgsRecycling *old_start_region, AgsRecycling *old_end_region, AgsRecycling *new_start_region, AgsRecycling *new_end_region, AgsRecycling *old_start_changed_region, AgsRecycling *old_end_changed_region, AgsRecycling *new_start_changed_region, AgsRecycling *new_end_changed_region) { if(channel == NULL){ return; } /* verify type */ if(!(AGS_IS_CHANNEL(channel))){ return; } /* emit */ g_object_ref(G_OBJECT(channel)); g_signal_emit(G_OBJECT(channel), channel_signals[RECYCLING_CHANGED], 0, old_start_region, old_end_region, new_start_region, new_end_region, old_start_changed_region, old_end_changed_region, new_start_changed_region, new_end_changed_region); g_object_unref(G_OBJECT(channel)); } /** * ags_channel_recursive_play_init: * @channel: the #AgsChannel to prepare * @stage: valid values for @stage are: -1 for running all three stages, or the stages 0 through 2 to run * just the specified stage. With stage is meant the #AgsRecall run_init_pre, #AgsRecall run_init_inter * and #AgsRecall run_init_post stages. * @arrange_recall_id: %TRUE if new #AgsRecallID objects should be created * @duplicate_templates: %TRUE if the #AgsRecall templates should be duplicated * @playback: %TRUE if the purpose is a simple playback of the tree, this option is used to omit the * duplication of #AgsRecall templates which haven't set %AGS_RECALL_PLAYBACK flag * @sequencer: %TRUE if the purpose is playing the tree for a sequencer, this option is used to omit the * duplication of #AgsRecall templates which haven't set the %AGS_RECALL_SEQUENCER flag * @notation: %TRUE if the purpose is playing the tree for a notation, this option is used to omit the * duplication of #AgsRecall templates which haven't set the %AGS_RECALL_NOTATION flag * @resolve_dependencies: %TRUE if the * @recall_id: the initial recall id or %NULL * * Make the tree ready for a new #AgsDevoutPlay. Only for asynchronous use, take a look at #AgsInitChannel or * #AgsInitAudio task. * * Since: 0.3 */ AgsRecallID* ags_channel_recursive_play_init(AgsChannel *channel, gint stage, gboolean arrange_recall_id, gboolean duplicate_templates, gboolean playback, gboolean sequencer, gboolean notation, gboolean resolve_dependencies, AgsRecallID *recall_id) { AgsAudio *audio; AgsRecallID *audio_recall_id, *default_recall_id, *retval; gint stage_stop; auto AgsRecallID* ags_channel_recursive_play_init_arrange_recall_id_up(AgsChannel *channel, AgsRecallID *recall_id, gboolean initially_unowned); auto AgsRecallID** ags_channel_recursive_play_init_arrange_recall_id_down_input(AgsChannel *output, AgsRecallID *recall_id, gboolean initially_unowned); auto AgsRecallID* ags_channel_recursive_play_init_arrange_recall_id_down(AgsChannel *output, AgsRecallID *recall_id, gboolean initially_unowned); auto void ags_channel_recursive_play_init_duplicate_up(AgsChannel *channel, AgsRecallID *recall_id); auto void ags_channel_recursive_play_init_duplicate_down_input(AgsChannel *output, AgsRecallID *recall_id); auto void ags_channel_recursive_play_init_duplicate_down(AgsChannel *output, AgsRecallID *recall_id); auto void ags_channel_recursive_play_init_resolve_up(AgsChannel *channel, AgsRecallID *recall_id); auto void ags_channel_recursive_play_init_resolve_down_input(AgsChannel *output, AgsRecallID *recall_id); auto void ags_channel_recursive_play_init_resolve_down(AgsChannel *output, AgsRecallID *recall_id); auto void ags_channel_recursive_play_init_up(AgsChannel *channel, AgsRecallID *recall_id); auto void ags_channel_recursive_play_init_down_input(AgsChannel *output, AgsRecallID *recall_id); auto void ags_channel_recursive_play_init_down(AgsChannel *output, AgsRecallID *recall_id); /* * arrangeing recall ids is done from the axis to the root and then from the axis to the leafs */ AgsRecallID* ags_channel_recursive_play_init_arrange_recall_id_up(AgsChannel *channel, AgsRecallID *recall_id, gboolean initially_unowned) { AgsAudio *audio; AgsChannel *current; AgsRecallID *audio_recall_id; AgsRecycling *recycling; AgsRecyclingContainer *recycling_container; gint recycling_length; gint i; if(channel == NULL){ return; } audio = AGS_AUDIO(channel->audio); current = channel; if(AGS_IS_OUTPUT(channel)){ /* create toplevel recycling container */ recycling_length = ags_recycling_position(channel->first_recycling, channel->last_recycling->next, channel->last_recycling); recycling_length += 1; recycling_container = (AgsRecyclingContainer *) g_object_new(AGS_TYPE_RECYCLING_CONTAINER, "length\0", recycling_length, "parent\0", NULL, NULL); ags_audio_add_recycling_container(audio, (GObject *) recycling_container); /* recycling */ recycling = channel->first_recycling; for(i = 0; i < recycling_length; i++){ recycling_container->recycling[i] = recycling; recycling = recycling->next; } /* output recall id */ retval = recall_id = g_object_new(AGS_TYPE_RECALL_ID, "recycling\0", channel->first_recycling, "recycling_container\0", recycling_container, NULL); g_object_set(recycling_container, "recall_id\0", recall_id, NULL); ags_channel_add_recall_id(channel, recall_id); if(playback){ recall_id->flags |= AGS_RECALL_ID_PLAYBACK; } if(sequencer){ recall_id->flags |= AGS_RECALL_ID_SEQUENCER; } if(notation){ recall_id->flags |= AGS_RECALL_ID_NOTATION; } /* audio recall id */ audio_recall_id = g_object_new(AGS_TYPE_RECALL_ID, "recycling_container\0", recall_id->recycling_container, "recycling\0", channel->first_recycling, NULL); ags_audio_add_recall_id(audio, audio_recall_id); if(playback){ audio_recall_id->flags |= AGS_RECALL_ID_PLAYBACK; } if(sequencer){ audio_recall_id->flags |= AGS_RECALL_ID_SEQUENCER; } if(notation){ audio_recall_id->flags |= AGS_RECALL_ID_NOTATION; } goto ags_channel_recursive_play_init_up_OUTPUT; }else{ /* recycling container */ recycling_length = ags_recycling_position(channel->first_recycling, channel->last_recycling->next, channel->last_recycling); recycling_length += 1; recycling_container = (AgsRecyclingContainer *) g_object_new(AGS_TYPE_RECYCLING_CONTAINER, "length\0", recycling_length, "parent\0", NULL, NULL); ags_audio_add_recycling_container(audio, (GObject *) recycling_container); /* recycling */ recycling = channel->first_recycling; for(i = 0; i < recycling_length; i++){ recycling_container->recycling[i] = recycling; recycling = recycling->next; } /* input recall id */ retval = recall_id = g_object_new(AGS_TYPE_RECALL_ID, "recycling\0", channel->first_recycling, "recycling_container\0", recycling_container, NULL); g_object_set(recycling_container, "recall_id\0", recall_id, NULL); ags_audio_add_recall_id(audio, (GObject *) recall_id); if(playback){ audio_recall_id->flags |= AGS_RECALL_ID_PLAYBACK; } if(sequencer){ audio_recall_id->flags |= AGS_RECALL_ID_SEQUENCER; } if(notation){ audio_recall_id->flags |= AGS_RECALL_ID_NOTATION; } /* audio recall id */ audio_recall_id = g_object_new(AGS_TYPE_RECALL_ID, "recycling_container\0", recall_id->recycling_container, "recycling\0", channel->first_recycling, NULL); ags_audio_add_recall_id(audio, (GObject *) audio_recall_id); if(playback){ audio_recall_id->flags |= AGS_RECALL_ID_PLAYBACK; } if(sequencer){ audio_recall_id->flags |= AGS_RECALL_ID_SEQUENCER; } if(notation){ audio_recall_id->flags |= AGS_RECALL_ID_NOTATION; } } /* goto toplevel AgsChannel */ while(current != NULL){ /* input recall id */ recall_id = g_object_new(AGS_TYPE_RECALL_ID, "recycling\0", current->first_recycling, "recycling_container\0", recall_id->recycling_container, NULL); g_object_set(recycling_container, "recall_id\0", recall_id, NULL); ags_channel_add_recall_id(current, (GObject *) recall_id); if(playback){ recall_id->flags |= AGS_RECALL_ID_PLAYBACK; } if(sequencer){ recall_id->flags |= AGS_RECALL_ID_SEQUENCER; } if(notation){ recall_id->flags |= AGS_RECALL_ID_NOTATION; } /* audio recall id */ recall_id = g_object_new(AGS_TYPE_RECALL_ID, "recycling\0", current->first_recycling, "recycling_container\0", recall_id->recycling_container, NULL); ags_audio_add_recall_id(audio, (GObject *) recall_id); if(playback){ recall_id->flags |= AGS_RECALL_ID_PLAYBACK; } if(sequencer){ recall_id->flags |= AGS_RECALL_ID_SEQUENCER; } if(notation){ recall_id->flags |= AGS_RECALL_ID_NOTATION; } /* AgsOutput */ if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) != 0){ break; } if((AGS_AUDIO_ASYNC & (audio->flags)) != 0){ current = ags_channel_nth(audio->output, current->audio_channel); }else{ current = ags_channel_nth(audio->output, current->line); } ags_channel_recursive_play_init_up_OUTPUT: if(current != channel){ /* output recall id with default recycling container */ recall_id = g_object_new(AGS_TYPE_RECALL_ID, "recycling\0", current->first_recycling, "recycling_container\0", recall_id->recycling_container, NULL); ags_channel_add_recall_id(current, (GObject *) recall_id); if(playback){ recall_id->flags |= AGS_RECALL_ID_PLAYBACK; } if(sequencer){ recall_id->flags |= AGS_RECALL_ID_SEQUENCER; } if(notation){ recall_id->flags |= AGS_RECALL_ID_NOTATION; } } /* iterate */ if(current->link == NULL){ break; } audio = AGS_AUDIO(current->link->audio); //NOTE:JK: see documentation // if((AGS_AUDIO_INPUT_HAS_RECYCLING & (audio->flags)) != 0) // break; current = current->link; } return(audio_recall_id); } AgsRecallID** ags_channel_recursive_play_init_arrange_recall_id_down_input(AgsChannel *output, AgsRecallID *default_recall_id, gboolean initially_unowned) { AgsAudio *audio; AgsChannel *input; AgsRecallID *input_recall_id; AgsRecallID **recall_id; AgsRecyclingContainer *recycling_container; if(output == NULL){ return(NULL); } audio = AGS_AUDIO(output->audio); if(audio->input == NULL){ return(NULL); } if((AGS_AUDIO_ASYNC & (audio->flags)) != 0){ input = ags_channel_nth(audio->input, output->audio_channel); recall_id = (AgsRecallID **) malloc((audio->input_pads + 1) * sizeof(AgsRecallID*)); recall_id[audio->input_pads] = NULL; while(input != NULL){ /* input recall id */ input_recall_id = g_object_new(AGS_TYPE_RECALL_ID, "recycling-container\0", default_recall_id->recycling_container, "recycling\0", input->first_recycling, NULL); recall_id[input->pad] = input_recall_id; ags_channel_add_recall_id(input, (GObject *) input_recall_id); if(playback){ input_recall_id->flags |= AGS_RECALL_ID_PLAYBACK; } if(sequencer){ input_recall_id->flags |= AGS_RECALL_ID_SEQUENCER; } if(notation){ input_recall_id->flags |= AGS_RECALL_ID_NOTATION; } /* follow the links */ if(input->link != NULL){ ags_channel_recursive_play_init_arrange_recall_id_down(input->link, input_recall_id, FALSE); } /* iterate */ input = input->next_pad; } }else{ input = ags_channel_nth(audio->input, output->line); recall_id = (AgsRecallID **) malloc(2 * sizeof(AgsRecallID*)); recall_id[1] = NULL; /* input recall id */ recall_id[0] = input_recall_id = g_object_new(AGS_TYPE_RECALL_ID, "recycling-container\0", default_recall_id->recycling_container, "recycling\0", input->first_recycling, NULL); ags_channel_add_recall_id(input, (GObject *) input_recall_id); if(playback){ input_recall_id->flags |= AGS_RECALL_ID_PLAYBACK; } if(sequencer){ input_recall_id->flags |= AGS_RECALL_ID_SEQUENCER; } if(notation){ input_recall_id->flags |= AGS_RECALL_ID_NOTATION; } /* follow the links */ if(input->link != NULL){ ags_channel_recursive_play_init_arrange_recall_id_down(input->link, input_recall_id, FALSE); } } return(recall_id); } AgsRecallID* ags_channel_recursive_play_init_arrange_recall_id_down(AgsChannel *output, AgsRecallID *recall_id, gboolean initially_unowned) { AgsAudio *audio; AgsChannel *input, *last_input; AgsRecycling *recycling; AgsRecyclingContainer *recycling_container; AgsRecallID *output_recall_id, *audio_recall_id, *default_recall_id; AgsRecallID **input_recall_id; gint recycling_length; gint i; if(output == NULL){ return; } /* AgsAudio */ audio = AGS_AUDIO(output->audio); recycling_container = recall_id->recycling_container; /* input */ if((AGS_AUDIO_ASYNC & (audio->flags)) != 0){ input = ags_channel_nth(audio->input, output->audio_channel); last_input = ags_channel_pad_last(input); }else{ input = ags_channel_nth(audio->input, output->line); last_input = input; } /* AgsOutput */ /* recall id */ if(!initially_unowned){ if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) != 0){ /* output recycling container */ recycling_length = ags_recycling_position(output->first_recycling, output->last_recycling->next, output->last_recycling); recycling_length += 1; recycling_container = (AgsRecyclingContainer *) g_object_new(AGS_TYPE_RECYCLING_CONTAINER, "parent\0", recycling_container, "length\0", recycling_length, NULL); ags_audio_add_recycling_container(audio, (GObject *) recycling_container); /* set up recycling container */ recycling = output->first_recycling; for(i = 0; i < recycling_length; i++){ recycling_container->recycling[i] = recycling; recycling = recycling->next; } } /* output recall id */ output_recall_id = g_object_new(AGS_TYPE_RECALL_ID, "recycling_container\0", recycling_container, "recycling\0", output->first_recycling, NULL); ags_channel_add_recall_id(output, (GObject *) output_recall_id); if(playback){ output_recall_id->flags |= AGS_RECALL_ID_PLAYBACK; } if(sequencer){ output_recall_id->flags |= AGS_RECALL_ID_SEQUENCER; } if(notation){ output_recall_id->flags |= AGS_RECALL_ID_NOTATION; } if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) != 0){ g_object_set(recycling_container, "recall_id\0", output_recall_id, NULL); } /* create audio recall id */ audio_recall_id = g_object_new(AGS_TYPE_RECALL_ID, "recycling_container\0", recycling_container, "recycling\0", output->first_recycling, NULL); ags_audio_add_recall_id(audio, (GObject *) audio_recall_id); if(playback){ audio_recall_id->flags |= AGS_RECALL_ID_PLAYBACK; } if(sequencer){ audio_recall_id->flags |= AGS_RECALL_ID_SEQUENCER; } if(notation){ audio_recall_id->flags |= AGS_RECALL_ID_NOTATION; } }else{ /* get audio recall id */ audio_recall_id = ags_recall_id_find_recycling_container(audio->recall_id, recycling_container); } if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) != 0){ /* input recycling container */ recycling_length = ags_recycling_position(input->first_recycling, last_input->last_recycling->next, last_input->last_recycling); recycling_length += 1; recycling_container = (AgsRecyclingContainer *) g_object_new(AGS_TYPE_RECYCLING_CONTAINER, "parent\0", recycling_container, "length\0", recycling_length, NULL); ags_audio_add_recycling_container(audio, (GObject *) recycling_container); /* set up recycling container */ recycling = input->first_recycling; for(i = 0; i < recycling_length; i++){ recycling_container->recycling[i] = recycling; recycling = recycling->next; } } /* audio recall id */ default_recall_id = g_object_new(AGS_TYPE_RECALL_ID, "recycling_container\0", recycling_container, "recycling\0", input->first_recycling, NULL); ags_audio_add_recall_id(audio, (GObject *) default_recall_id); if(playback){ default_recall_id->flags |= AGS_RECALL_ID_PLAYBACK; } if(sequencer){ default_recall_id->flags |= AGS_RECALL_ID_SEQUENCER; } if(notation){ default_recall_id->flags |= AGS_RECALL_ID_NOTATION; } if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) != 0){ g_object_set(recycling_container, "recall_id\0", default_recall_id, NULL); } /* follow the links */ input_recall_id = ags_channel_recursive_play_init_arrange_recall_id_down_input(output, default_recall_id, FALSE); if(input_recall_id != NULL){ free(input_recall_id); } return(default_recall_id); } /* * duplicateing template recalls is done from the root to the leafes * * externalized * externalized */ void ags_channel_recursive_play_init_duplicate_up(AgsChannel *channel, AgsRecallID *recall_id) { AgsAudio *audio; AgsChannel *current; if(channel == NULL){ return; } audio = AGS_AUDIO(channel->audio); current = channel; if(AGS_IS_OUTPUT(channel)){ goto ags_channel_recursive_play_init_duplicate_up_OUTPUT; } /* goto toplevel AgsChannel */ while(current != NULL){ /* AgsInput */ recall_id = ags_recall_id_find_recycling_container(current->recall_id, recall_id->recycling_container); ags_channel_duplicate_recall(current, recall_id); /* AgsAudio */ recall_id = ags_recall_id_find_recycling_container(audio->recall_id, recall_id->recycling_container); ags_audio_duplicate_recall(audio, recall_id); /* AgsOutput */ if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) != 0){ break; } if((AGS_AUDIO_ASYNC & (audio->flags)) != 0){ current = ags_channel_nth(audio->output, current->audio_channel); }else{ current = ags_channel_nth(audio->output, current->line); } recall_id = ags_recall_id_find_recycling_container(current->recall_id, recall_id->recycling_container); ags_channel_recursive_play_init_duplicate_up_OUTPUT: ags_channel_duplicate_recall(current, recall_id); if(current == channel){ /* AgsAudio */ recall_id = ags_recall_id_find_recycling_container(audio->recall_id, recall_id->recycling_container); ags_audio_duplicate_recall(audio, recall_id); } /* iterate */ if(current->link == NULL){ break; } audio = AGS_AUDIO(current->link->audio); //NOTE:JK: see documentation // if((AGS_AUDIO_INPUT_HAS_RECYCLING & (audio->flags)) != 0) // break; current = current->link; } } void ags_channel_recursive_play_init_duplicate_down_input(AgsChannel *output, AgsRecallID *default_recall_id) { AgsAudio *audio; AgsChannel *input, *input_start; AgsRecallID *input_recall_id; audio = AGS_AUDIO(output->audio); if(audio->input == NULL){ return; } if((AGS_AUDIO_ASYNC & (audio->flags)) != 0){ /* async order of channels within audio */ /* retrieve input */ input_start = input = ags_channel_nth(audio->input, output->audio_channel); /* duplicate recalls on input */ while(input != NULL){ input_recall_id = ags_recall_id_find_recycling_container(input->recall_id, default_recall_id->recycling_container); /* duplicate input */ ags_channel_duplicate_recall(input, input_recall_id); /* iterate */ input = input->next_pad; } /* traverse the tree */ input = input_start; while(input != NULL){ if(input->link != NULL){ input_recall_id = ags_recall_id_find_recycling_container(input->recall_id, default_recall_id->recycling_container); /* follow the links */ ags_channel_recursive_play_init_duplicate_down(input->link, input_recall_id); } /* iterate */ input = input->next_pad; } }else{ /* sync order of channels within audio */ /* retrieve input */ input = ags_channel_nth(audio->input, output->line); /* duplicate recalls on input */ ags_channel_duplicate_recall(input, input_recall_id); /* follow the links */ if(input->link != NULL){ /* follow the links */ ags_channel_recursive_play_init_duplicate_down(input->link, input_recall_id); } } } void ags_channel_recursive_play_init_duplicate_down(AgsChannel *output, AgsRecallID *recall_id) { AgsAudio *audio; AgsRecallID *audio_recall_id, *default_recall_id; GList *list; if(output == NULL){ return; } /* AgsAudio */ audio = AGS_AUDIO(output->audio); if(recall_id->recycling_container->parent != NULL){ list = output->recall_id; while(list != NULL){ if(AGS_RECALL_ID(list->data)->recycling_container->parent == recall_id->recycling_container){ recall_id = list->data; break; } list = list->next; } if(list == NULL){ recall_id = NULL; } } /* duplicate output */ ags_channel_duplicate_recall(output, recall_id); /* retrieve next recall id */ if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) != 0){ AgsChannel *input; if((AGS_AUDIO_ASYNC & (audio->flags)) != 0){ input = ags_channel_nth(audio->input, output->audio_channel); }else{ input = ags_channel_nth(audio->input, output->line); } audio_recall_id = ags_recall_id_find_recycling_container(audio->recall_id, recall_id->recycling_container); if(audio_recall_id == NULL && AGS_RECYCLING_CONTAINER(recall_id->recycling_container)->parent == NULL){ audio_recall_id = ags_recall_id_find_parent_recycling_container(audio->recall_id, recall_id->recycling_container); } list = audio_recall_id->recycling_container->children; default_recall_id = ags_recall_id_find_recycling_container(audio->recall_id, AGS_RECYCLING_CONTAINER(list->data)); }else{ audio_recall_id = ags_recall_id_find_recycling_container(audio->recall_id, recall_id->recycling_container); default_recall_id = audio_recall_id; } if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) != 0){ /* duplicate audio */ ags_audio_duplicate_recall(audio, audio_recall_id); ags_audio_duplicate_recall(audio, default_recall_id); /* call function which duplicates input */ ags_channel_recursive_play_init_duplicate_down_input(output, default_recall_id); }else{ /* duplicate audio */ ags_audio_duplicate_recall(audio, audio_recall_id); /* call function which duplicates input */ ags_channel_recursive_play_init_duplicate_down_input(output, default_recall_id); } } /* * resolving recall dependencies has to be done from the root to the leafs */ void ags_channel_recursive_play_init_resolve_up(AgsChannel *channel, AgsRecallID *recall_id) { AgsAudio *audio; AgsChannel *current; if(channel == NULL){ return; } audio = AGS_AUDIO(channel->audio); current = channel; if(AGS_IS_OUTPUT(channel)){ goto ags_channel_recursive_play_init_resolve_up0; } while(current != NULL){ /* resolve input */ recall_id = ags_recall_id_find_recycling_container(current->recall_id, recall_id->recycling_container); ags_channel_resolve_recall(current, recall_id); /* resolve audio */ recall_id = ags_recall_id_find_recycling_container(audio->recall_id, recall_id->recycling_container); ags_audio_resolve_recall(audio, recall_id); /* retrieve output */ if((AGS_AUDIO_ASYNC & (audio->flags)) != 0){ current = ags_channel_nth(audio->output, current->audio_channel); }else{ current = ags_channel_nth(audio->output, current->line); } /* stop if output has recycling */ if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) != 0){ return; } /* resolve output */ recall_id = ags_recall_id_find_recycling_container(channel->recall_id, recall_id->recycling_container); ags_channel_recursive_play_init_resolve_up0: ags_channel_resolve_recall(current, recall_id); if(current == channel){ AgsRecallID *audio_recall_id; /* AgsAudio */ audio_recall_id = ags_recall_id_find_recycling_container(audio->recall_id, recall_id->recycling_container); ags_audio_resolve_recall(audio, audio_recall_id); } /* iterate */ if(current->link == NULL) break; audio = AGS_AUDIO(current->link->audio); //NOTE:JK: see documentation // if((AGS_AUDIO_INPUT_HAS_RECYCLING & (audio->flags)) != 0) // break; current = current->link; } } void ags_channel_recursive_play_init_resolve_down_input(AgsChannel *output, AgsRecallID *default_recall_id) { AgsAudio *audio; AgsChannel *input, *input_start; AgsRecallID *input_recall_id; audio = AGS_AUDIO(output->audio); if(audio->input == NULL){ return; } if((AGS_AUDIO_ASYNC & (audio->flags)) != 0){ /* async order of channels within audio */ /* retrieve input */ input_start = input = ags_channel_nth(audio->input, output->audio_channel); /* resolve recall dependencies on input */ while(input != NULL){ input_recall_id = ags_recall_id_find_recycling_container(input->recall_id, default_recall_id->recycling_container); /* resolve input */ ags_channel_resolve_recall(input, input_recall_id); /* iterate */ input = input->next_pad; } /* traverse the tree */ input = input_start; while(input != NULL){ if(input->link != NULL){ input_recall_id = ags_recall_id_find_recycling_container(input->recall_id, default_recall_id->recycling_container); /* traverse the tree */ if(input->link != NULL){ /* follow the links */ ags_channel_recursive_play_init_resolve_down(input->link, input_recall_id); } } /* iterate */ input = input->next_pad; } }else{ /* sync order of channels within audio */ /* retrieve input */ input = ags_channel_nth(audio->input, output->line); input_recall_id = ags_recall_id_find_recycling_container(input->recall_id, default_recall_id->recycling_container); /* resolve recall dependencies on input */ ags_channel_resolve_recall(input, input_recall_id); /* traverse the tree */ if(input->link != NULL){ /* follow the links */ ags_channel_recursive_play_init_resolve_down(input->link, input_recall_id); } } } void ags_channel_recursive_play_init_resolve_down(AgsChannel *output, AgsRecallID *recall_id) { AgsAudio *audio; AgsChannel *input; AgsRecallID *audio_recall_id, *default_recall_id; GList *list; if(output == NULL){ return; } /* AgsAudio */ audio = AGS_AUDIO(output->audio); if(recall_id->recycling_container->parent != NULL){ list = output->recall_id; while(list != NULL){ if(AGS_RECALL_ID(list->data)->recycling_container->parent == recall_id->recycling_container){ recall_id = list->data; break; } list = list->next; } if(list == NULL){ recall_id = NULL; } } if((AGS_AUDIO_ASYNC & (audio->flags)) != 0){ input = ags_channel_nth(audio->input, output->audio_channel); }else{ input = ags_channel_nth(audio->input, output->line); } /* retrieve next recall id */ if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) != 0){ audio_recall_id = ags_recall_id_find_recycling_container(audio->recall_id, recall_id->recycling_container); if(audio_recall_id == NULL && AGS_RECYCLING_CONTAINER(recall_id->recycling_container)->parent == NULL){ audio_recall_id = ags_recall_id_find_parent_recycling_container(audio->recall_id, recall_id->recycling_container); } list = audio_recall_id->recycling_container->children; default_recall_id = ags_recall_id_find_recycling_container(audio->recall_id, AGS_RECYCLING_CONTAINER(list->data)); }else{ audio_recall_id = ags_recall_id_find_recycling_container(audio->recall_id, recall_id->recycling_container); default_recall_id = audio_recall_id; } /* resolve dependencies on output */ ags_channel_resolve_recall(output, recall_id); if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) != 0){ /* resolve dependencies on audio */ ags_audio_resolve_recall(audio, audio_recall_id); ags_audio_resolve_recall(audio, default_recall_id); /* traverse the tree */ ags_channel_recursive_play_init_resolve_down_input(output, default_recall_id); }else{ /* resolve dependencies on audio */ ags_audio_resolve_recall(audio, audio_recall_id); /* traverse the tree */ ags_channel_recursive_play_init_resolve_down_input(output, default_recall_id); } } /* * run-initializing recalls is done from the leafs to the root */ void ags_channel_recursive_play_init_up(AgsChannel *channel, AgsRecallID *recall_id) { AgsAudio *audio; AgsChannel *current; if(channel == NULL){ return; } audio = AGS_AUDIO(channel->audio); current = channel; if(AGS_IS_OUTPUT(channel)){ goto ags_channel_recursive_play_init_up0; } /* goto toplevel AgsChannel */ while(current != NULL){ //NOTE:JK: see documentation // if((AGS_AUDIO_INPUT_HAS_RECYCLING & (audio->flags)) != 0) // break; /* AgsInput */ recall_id = ags_recall_id_find_recycling_container(current->recall_id, recall_id->recycling_container); ags_channel_init_recall(current, stage, recall_id); /* AgsAudio */ recall_id = ags_recall_id_find_recycling_container(audio->recall_id, recall_id->recycling_container); ags_audio_init_recall(audio, stage, recall_id); /* AgsOutput */ if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) != 0){ break; } if((AGS_AUDIO_ASYNC & (audio->flags)) != 0){ current = ags_channel_nth(audio->output, current->audio_channel); }else{ current = ags_channel_nth(audio->output, current->line); } recall_id = ags_recall_id_find_recycling_container(current->recall_id, recall_id->recycling_container); ags_channel_recursive_play_init_up0: ags_channel_init_recall(current, stage, recall_id); if(current == channel){ AgsRecallID *audio_recall_id; /* AgsAudio */ audio_recall_id = ags_recall_id_find_recycling_container(audio->recall_id, recall_id->recycling_container); ags_audio_init_recall(audio, stage, audio_recall_id); } /* iterate */ if(current->link == NULL){ break; } audio = AGS_AUDIO(current->link->audio); current = current->link; } } void ags_channel_recursive_play_init_down_input(AgsChannel *output, AgsRecallID *default_recall_id) { AgsAudio *audio; AgsChannel *input; AgsRecallID *input_recall_id; audio = AGS_AUDIO(output->audio); if(audio->input == NULL){ return; } if((AGS_AUDIO_ASYNC & (audio->flags)) != 0){ input = ags_channel_nth(audio->input, output->audio_channel); while(input != NULL){ input_recall_id = ags_recall_id_find_recycling_container(input->recall_id, default_recall_id->recycling_container); /* follow the links */ if(input->link != NULL){ ags_channel_recursive_play_init_down(input->link, input_recall_id); } /* init recall */ ags_channel_init_recall(input, stage, input_recall_id); /* iterate */ input = input->next_pad; } }else{ input = ags_channel_nth(audio->input, output->line); input_recall_id = ags_recall_id_find_recycling_container(input->recall_id, default_recall_id->recycling_container); /* follow the links */ if(input->link != NULL){ ags_channel_recursive_play_init_down(input->link, input_recall_id); } /* init recall */ ags_channel_init_recall(input, stage, input_recall_id); } } void ags_channel_recursive_play_init_down(AgsChannel *output, AgsRecallID *recall_id) { AgsAudio *audio; AgsChannel *input; AgsRecallID *default_recall_id, *audio_recall_id; GList *list; if(output == NULL){ return; } /* AgsAudio */ audio = AGS_AUDIO(output->audio); if(recall_id->recycling_container->parent != NULL){ list = output->recall_id; while(list != NULL){ if(AGS_RECALL_ID(list->data)->recycling_container->parent == recall_id->recycling_container){ recall_id = list->data; break; } list = list->next; } if(list == NULL){ recall_id = NULL; } } if((AGS_AUDIO_ASYNC & (audio->flags)) != 0){ input = ags_channel_nth(audio->input, output->audio_channel); }else{ input = ags_channel_nth(audio->input, output->line); } /* retrieve next recall id */ if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) != 0){ audio_recall_id = ags_recall_id_find_recycling_container(audio->recall_id, recall_id->recycling_container); if(audio_recall_id == NULL && AGS_RECYCLING_CONTAINER(recall_id->recycling_container)->parent == NULL){ audio_recall_id = ags_recall_id_find_parent_recycling_container(audio->recall_id, recall_id->recycling_container); } list = audio_recall_id->recycling_container->children; default_recall_id = ags_recall_id_find_recycling_container(audio->recall_id, AGS_RECYCLING_CONTAINER(list->data)); }else{ audio_recall_id = ags_recall_id_find_recycling_container(audio->recall_id, recall_id->recycling_container); default_recall_id = audio_recall_id; } if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) != 0){ ags_audio_init_recall(audio, stage, audio_recall_id); ags_audio_init_recall(audio, stage, default_recall_id); /* follow the links */ ags_channel_recursive_play_init_down_input(output, default_recall_id); }else{ ags_audio_init_recall(audio, stage, audio_recall_id); /* follow the links */ ags_channel_recursive_play_init_down_input(output, default_recall_id); } /* init recall*/ ags_channel_init_recall(output, stage, recall_id); } /* * entry point */ if(channel == NULL){ return(NULL); } audio = AGS_AUDIO(channel->audio); /* arrange recall id */ if(arrange_recall_id){ if(AGS_IS_OUTPUT(channel)){ /* follow the links */ recall_id = ags_channel_recursive_play_init_arrange_recall_id_up(channel, NULL, FALSE); }else{ AgsChannel *input; AgsRecycling *recycling; AgsRecyclingContainer *recycling_container; guint recycling_length; guint i; input = channel; /* input recycling container */ recycling_length = ags_recycling_position(input->first_recycling, input->last_recycling->next, input->last_recycling); recycling_length += 1; recycling_container = (AgsRecyclingContainer *) g_object_new(AGS_TYPE_RECYCLING_CONTAINER, "parent\0", NULL, "length\0", recycling_length, NULL); ags_audio_add_recycling_container(audio, (GObject *) recycling_container); /* set up recycling container */ recycling = input->first_recycling; for(i = 0; i < recycling_length; i++){ recycling_container->recycling[i] = recycling; recycling = recycling->next; } /* audio recall id */ default_recall_id = g_object_new(AGS_TYPE_RECALL_ID, "recycling_container\0", recycling_container, "recycling\0", input->first_recycling, NULL); audio->recall_id = ags_recall_id_add(audio->recall_id, (GObject *) default_recall_id); if(playback){ default_recall_id->flags |= AGS_RECALL_ID_PLAYBACK; } if(sequencer){ default_recall_id->flags |= AGS_RECALL_ID_SEQUENCER; } if(notation){ default_recall_id->flags |= AGS_RECALL_ID_NOTATION; } if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) != 0){ g_object_set(recycling_container, "recall_id\0", default_recall_id, NULL); } /* input recall id */ recall_id = g_object_new(AGS_TYPE_RECALL_ID, "recycling_container\0", default_recall_id->recycling_container, "recycling\0", input->first_recycling, NULL); input->recall_id = ags_recall_id_add(input->recall_id, (GObject *) recall_id); if(playback){ recall_id->flags |= AGS_RECALL_ID_PLAYBACK; } if(sequencer){ recall_id->flags |= AGS_RECALL_ID_SEQUENCER; } if(notation){ recall_id->flags |= AGS_RECALL_ID_NOTATION; } } } /* get audio recall id */ audio_recall_id = ags_recall_id_find_recycling_container(audio->recall_id, recall_id->recycling_container); /* arrange recall id */ if(arrange_recall_id){ AgsRecallID *next_recall_id; if(AGS_IS_OUTPUT(channel)){ next_recall_id = ags_channel_recursive_play_init_arrange_recall_id_down(channel, audio_recall_id, TRUE); }else{ AgsChannel *input; input = channel; next_recall_id = ags_channel_recursive_play_init_arrange_recall_id_down(input->link, recall_id, FALSE); } } /* get default recall id */ if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) == 0){ default_recall_id = audio_recall_id; }else{ if(AGS_IS_OUTPUT(channel)){ AgsChannel *input; GList *list; if((AGS_AUDIO_ASYNC & (audio->flags)) == 0){ input = ags_channel_nth(audio->input, channel->line); }else{ input = ags_channel_nth(audio->input, channel->audio_channel); } list = recall_id->recycling_container->children; default_recall_id = ags_recall_id_find_recycling_container(audio->recall_id, AGS_RECYCLING_CONTAINER(list->data)); } } /* duplicate AgsRecall templates */ if(duplicate_templates){ if(AGS_IS_OUTPUT(channel)){ ags_channel_recursive_play_init_duplicate_up(channel->link, recall_id); ags_channel_recursive_play_init_duplicate_down(channel, recall_id); }else{ /* duplicate input */ ags_channel_duplicate_recall(channel, recall_id); /* follow the links */ if(channel->link != NULL){ ags_channel_recursive_play_init_duplicate_down(channel->link, recall_id); } } } /* resolve dependencies */ if(resolve_dependencies){ if(AGS_IS_OUTPUT(channel)){ ags_channel_recursive_play_init_resolve_up(channel->link, recall_id); ags_channel_recursive_play_init_resolve_down(channel, recall_id); }else{ /* resolve input */ ags_channel_resolve_recall(channel, recall_id); /* follow the links */ if(channel->link != NULL){ ags_channel_recursive_play_init_resolve_down(channel->link, default_recall_id); } } } /* do the different stages of recall initializiation */ if(stage == -1){ stage = 0; stage_stop = 3; }else{ stage_stop = stage + 1; } if(stage == 0){ if(playback){ AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[0] = recall_id; g_atomic_int_or(&(AGS_DEVOUT_PLAY(channel->devout_play)->flags), AGS_DEVOUT_PLAY_PLAYBACK); } if(sequencer){ AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[1] = recall_id; g_atomic_int_or(&(AGS_DEVOUT_PLAY(channel->devout_play)->flags), AGS_DEVOUT_PLAY_SEQUENCER); } if(notation){ AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[2] = recall_id; g_atomic_int_or(&(AGS_DEVOUT_PLAY(channel->devout_play)->flags), AGS_DEVOUT_PLAY_NOTATION); } } for(; stage < stage_stop;){ if(AGS_IS_OUTPUT(channel)){ ags_channel_recursive_play_init_down(channel, recall_id); ags_channel_recursive_play_init_up(channel->link, recall_id); }else{ if(channel->link != NULL){ ags_channel_recursive_play_init_down(channel->link, recall_id); } /* init recall */ ags_channel_init_recall(channel, stage, recall_id); } stage++; } return(recall_id); } /** * ags_channel_recursive_play_threaded: * @channel: an #AgsChannel * @recall_id: appropriate #AgsRecallID * @stage: run_pre, run_inter or run_post * * Super-threaded version of ags_channel_recursive_play() one single run of @stage step. This * function expects to be called by #AgsIteratorThread and having a functional #AgsRecyclingThread * setup. * * Since: 0.4 */ void ags_channel_recursive_play_threaded(AgsChannel *channel, AgsRecallID *recall_id, gint stage) { AgsChannel *link; AgsMutexManager *mutex_manager; AgsRecyclingThread *recycling_thread; guint playback_mode; gboolean is_output; pthread_mutex_t *mutex; auto void ags_channel_recursive_play_threaded_up(AgsChannel *channel, AgsRecallID *recall_id, AgsRecyclingThread *recycling_thread); auto void ags_channel_recursive_play_threaded_down_input(AgsChannel *output, AgsRecallID *default_recall_id, AgsRecyclingThread *recycling_thread); auto void ags_channel_recursive_play_threaded_down(AgsChannel *output, AgsRecallID *recall_id, AgsRecyclingThread *recycling_thread); void ags_channel_recursive_play_threaded_up(AgsChannel *channel, AgsRecallID *recall_id, AgsRecyclingThread *recycling_thread) { AgsAudio *audio; AgsChannel *current; AgsRecycling *first_recycling; guint flags; guint line, audio_channel; gboolean is_output; pthread_mutex_t *audio_mutex; pthread_mutex_t *mutex, *current_mutex; if(channel == NULL || recall_id == NULL){ return; } /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); current_mutex = mutex = ags_mutex_manager_lookup(mutex_manager, channel); pthread_mutex_unlock(&(ags_application_mutex)); /* initialize audio and check if first is output */ pthread_mutex_lock(mutex); audio = (AgsAudio *) channel->audio; first_recycling = channel->first_recycling; is_output = AGS_IS_OUTPUT(channel); pthread_mutex_unlock(mutex); /* start iteration */ current = channel; /* lock context */ ags_concurrent_tree_lock_context(AGS_CONCURRENT_TREE(first_recycling)); if(is_output){ goto ags_channel_recursive_play_threaded_up_OUTPUT; } /* go to toplevel AgsChannel */ while(current != NULL){ /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); current_mutex = ags_mutex_manager_lookup(mutex_manager, current); pthread_mutex_unlock(&(ags_application_mutex)); //NOTE:JK: see documentation // if((AGS_AUDIO_INPUT_HAS_RECYCLING & (audio->flags)) != 0) // break; /* play input */ pthread_mutex_lock(current_mutex); audio = AGS_AUDIO(current->audio); audio_channel = current->audio_channel; line = current->audio_channel; recall_id = ags_recall_id_find_recycling_container(current->recall_id, recall_id->recycling_container); pthread_mutex_unlock(current_mutex); ags_recycling_thread_play_channel(recycling_thread, (GObject *) current, recall_id, stage); /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); audio_mutex = ags_mutex_manager_lookup(mutex_manager, audio); pthread_mutex_unlock(&(ags_application_mutex)); /* play audio */ pthread_mutex_lock(audio_mutex); flags = audio->flags; current = audio->output; pthread_mutex_unlock(audio_mutex); /* output */ if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (flags)) != 0){ return; } pthread_mutex_lock(audio_mutex); recall_id = ags_recall_id_find_recycling_container(audio->recall_id, recall_id->recycling_container); pthread_mutex_unlock(audio_mutex); /* get output */ if((AGS_AUDIO_ASYNC & (flags)) != 0){ current = ags_channel_nth(current, audio_channel); }else{ current = ags_channel_nth(current, line); } ags_recycling_thread_play_audio(recycling_thread, (GObject *) current, (GObject *) audio, recall_id, stage); /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); current_mutex = ags_mutex_manager_lookup(mutex_manager, current); pthread_mutex_unlock(&(ags_application_mutex)); /* play output */ pthread_mutex_lock(current_mutex); recall_id = ags_recall_id_find_recycling_container(current->recall_id, recall_id->recycling_container); pthread_mutex_unlock(current_mutex); ags_channel_recursive_play_threaded_up_OUTPUT: ags_recycling_thread_play_channel(recycling_thread, (GObject *) current, recall_id, stage); /* iterate */ pthread_mutex_lock(current_mutex); current = current->link; pthread_mutex_unlock(current_mutex); } /* unlock context */ ags_concurrent_tree_unlock_context(AGS_CONCURRENT_TREE(first_recycling)); } void ags_channel_recursive_play_threaded_down_input(AgsChannel *output, AgsRecallID *default_recall_id, AgsRecyclingThread *recycling_thread) { AgsAudio *audio; AgsChannel *input, *input_start; AgsChannel *link; AgsRecycling *first_recycling; AgsRecyclingContainer *recycling_container; AgsRecallID *input_recall_id; AgsRecyclingThread *input_recycling_thread; guint flags; guint audio_channel, line; pthread_mutex_t *audio_mutex; pthread_mutex_t *mutex, *input_mutex; if(output == NULL || default_recall_id == NULL){ return; } /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex = ags_mutex_manager_lookup(mutex_manager, output); pthread_mutex_unlock(&(ags_application_mutex)); /* initialize audio */ pthread_mutex_lock(mutex); audio = (AgsAudio *) output->audio; audio_channel = output->audio_channel; line = output->line; pthread_mutex_unlock(mutex); /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); audio_mutex = ags_mutex_manager_lookup(mutex_manager, audio); pthread_mutex_unlock(&(ags_application_mutex)); /* retrieve input and flags */ pthread_mutex_lock(audio_mutex); input = audio->input; recycling_container = default_recall_id->recycling_container; flags = audio->flags; pthread_mutex_unlock(audio_mutex); if(input == NULL){ return; } if((AGS_AUDIO_ASYNC & (flags)) != 0){ /* async order of channels within audio */ /* retrieve input */ input_start = input = ags_channel_nth(input, audio_channel); /* play recalls on input */ while(input != NULL){ /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); input_mutex = ags_mutex_manager_lookup(mutex_manager, input); pthread_mutex_unlock(&(ags_application_mutex)); /* get first recycling */ pthread_mutex_lock(input_mutex); first_recycling = input->first_recycling; pthread_mutex_unlock(input_mutex); /* lock context */ ags_concurrent_tree_lock_context(AGS_CONCURRENT_TREE(first_recycling)); /* find recycling thread */ if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (flags)) != 0){ input_recycling_thread = ags_recycling_thread_find_child(recycling_thread, first_recycling); }else{ input_recycling_thread = recycling_thread; } /* find input recall id */ pthread_mutex_lock(input_mutex); input_recall_id = ags_recall_id_find_recycling_container(input->recall_id, recycling_container); pthread_mutex_unlock(input_mutex); /* play input */ ags_recycling_thread_play_channel(input_recycling_thread, (GObject *) input, input_recall_id, stage); /* unlock context */ ags_concurrent_tree_unlock_context(AGS_CONCURRENT_TREE(first_recycling)); /* iterate */ pthread_mutex_lock(input_mutex); input = input->next_pad; pthread_mutex_unlock(input_mutex); } /* traverse the tree */ input = input_start; while(input != NULL){ /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); input_mutex = ags_mutex_manager_lookup(mutex_manager, input); pthread_mutex_unlock(&(ags_application_mutex)); /* get link */ pthread_mutex_lock(input_mutex); link = input->link; pthread_mutex_unlock(input_mutex); if(link != NULL){ /* get first recycling */ pthread_mutex_lock(input_mutex); first_recycling = input->first_recycling; pthread_mutex_unlock(input_mutex); /* find recycling thread */ if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (flags)) != 0){ input_recycling_thread = ags_recycling_thread_find_child(recycling_thread, first_recycling); }else{ input_recycling_thread = recycling_thread; } /* find input recall id */ pthread_mutex_lock(input_mutex); input_recall_id = ags_recall_id_find_recycling_container(input->recall_id, recycling_container); pthread_mutex_unlock(input_mutex); /* traverse the tree */ if(link != NULL){ ags_channel_recursive_play_threaded_down(link, input_recall_id, input_recycling_thread); } } /* iterate */ pthread_mutex_lock(input_mutex); input = input->next_pad; pthread_mutex_unlock(input_mutex); } }else{ /* sync order of channels within audio */ /* retrieve input */ input = ags_channel_nth(input, line); /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); input_mutex = ags_mutex_manager_lookup(mutex_manager, input); pthread_mutex_unlock(&(ags_application_mutex)); /* get first recycling, find input recall id and get link */ pthread_mutex_lock(input_mutex); first_recycling = input->first_recycling; input_recall_id = ags_recall_id_find_recycling_container(input->recall_id, recycling_container); link = input->link; pthread_mutex_unlock(input_mutex); /* traverse the tree */ if(link != NULL){ ags_channel_recursive_play_threaded_down(link, input_recall_id, input_recycling_thread); } /* lock context */ ags_concurrent_tree_lock_context(AGS_CONCURRENT_TREE(first_recycling)); /* find recycling thread */ if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (flags)) != 0){ input_recycling_thread = ags_recycling_thread_find_child(recycling_thread, first_recycling); }else{ input_recycling_thread = recycling_thread; } /* play recalls on input */ ags_recycling_thread_play_channel(input_recycling_thread, (GObject *) input, input_recall_id, stage); ags_concurrent_tree_unlock_context(AGS_CONCURRENT_TREE(first_recycling)); } } void ags_channel_recursive_play_threaded_down(AgsChannel *output, AgsRecallID *recall_id, AgsRecyclingThread *recycling_thread) { AgsAudio *audio; AgsRecycling *first_recycling; AgsRecallID *default_recall_id, *audio_recall_id; GList *list; guint flags; guint line, audio_channel; pthread_mutex_t *audio_mutex; pthread_mutex_t *mutex, *current_mutex; if(output == NULL || recall_id == NULL){ return; } /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex = ags_mutex_manager_lookup(mutex_manager, channel); pthread_mutex_unlock(&(ags_application_mutex)); /* initialize audio */ pthread_mutex_lock(mutex); audio = (AgsAudio *) output->audio; first_recycling = output->first_recycling; pthread_mutex_unlock(mutex); /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); audio_mutex = ags_mutex_manager_lookup(mutex_manager, audio); pthread_mutex_unlock(&(ags_application_mutex)); /* lock context */ ags_concurrent_tree_lock_context(AGS_CONCURRENT_TREE(first_recycling)); /* retrieve recall id */ pthread_mutex_lock(mutex); flags = audio->flags; if(recall_id->recycling_container->parent != NULL){ list = output->recall_id; while(list != NULL){ if(AGS_RECALL_ID(list->data)->recycling_container->parent == recall_id->recycling_container){ recall_id = list->data; break; } list = list->next; } if(list == NULL){ recall_id = NULL; } } pthread_mutex_unlock(mutex); /* retrieve next recall id */ if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (flags)) != 0){ pthread_mutex_lock(audio_mutex); audio_recall_id = ags_recall_id_find_recycling_container(audio->recall_id, recall_id->recycling_container); if(audio_recall_id == NULL && AGS_RECYCLING_CONTAINER(recall_id->recycling_container)->parent == NULL){ audio_recall_id = ags_recall_id_find_parent_recycling_container(audio->recall_id, recall_id->recycling_container); } list = audio_recall_id->recycling_container->children; default_recall_id = ags_recall_id_find_recycling_container(audio->recall_id, AGS_RECYCLING_CONTAINER(list->data)); pthread_mutex_unlock(audio_mutex); }else{ pthread_mutex_lock(audio_mutex); audio_recall_id = ags_recall_id_find_recycling_container(audio->recall_id, recall_id->recycling_container); default_recall_id = audio_recall_id; pthread_mutex_unlock(audio_mutex); } /* unlock context */ ags_concurrent_tree_unlock_context(AGS_CONCURRENT_TREE(first_recycling)); if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (flags)) != 0){ /* call function which play input */ ags_channel_recursive_play_threaded_down_input(output, default_recall_id, recycling_thread); /* lock context */ ags_concurrent_tree_lock_context(AGS_CONCURRENT_TREE(first_recycling)); /* play audio */ ags_recycling_thread_play_audio(recycling_thread, (GObject *) output, (GObject *) audio, audio_recall_id, stage); ags_recycling_thread_play_audio(recycling_thread, (GObject *) output, (GObject *) audio, default_recall_id, stage); }else{ /* call function which play input */ ags_channel_recursive_play_threaded_down_input(output, default_recall_id, recycling_thread); /* lock context */ ags_concurrent_tree_lock_context(AGS_CONCURRENT_TREE(first_recycling)); /* play audio */ ags_recycling_thread_play_audio(recycling_thread, (GObject *) output, (GObject *) audio, audio_recall_id, stage); } /* play output */ ags_recycling_thread_play_channel(recycling_thread, (GObject *) output, recall_id, stage); /* unlock context */ ags_concurrent_tree_unlock_context(AGS_CONCURRENT_TREE(first_recycling)); } /* entry point */ if(channel == NULL || recall_id == NULL){ return; } /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); /* recursive compute audio */ pthread_mutex_lock(mutex); link = channel->link; /* retrieve playback mode and recycling thread */ playback_mode = 0; if((AGS_RECALL_ID_PLAYBACK & (recall_id->flags)) != 0){ playback_mode = 0; }else if((AGS_RECALL_ID_SEQUENCER & (recall_id->flags)) != 0){ playback_mode = 1; }else if((AGS_RECALL_ID_NOTATION & (recall_id->flags)) != 0){ playback_mode = 2; } recycling_thread = AGS_RECYCLING_THREAD(AGS_DEVOUT_PLAY(channel->devout_play)->recycling_thread[playback_mode]); /* check if start is output */ is_output = AGS_IS_OUTPUT(channel); pthread_mutex_unlock(mutex); /* traverse the tree */ if(is_output){ ags_channel_recursive_play_threaded_down(channel, recall_id, recycling_thread); ags_channel_recursive_play_threaded_up(link, recall_id, recycling_thread); }else{ AgsAudio *audio; AgsRecallID *audio_recall_id, *default_recall_id; guint flags; pthread_mutex_t *audio_mutex; pthread_mutex_lock(mutex); audio = (AgsAudio *) channel->audio; pthread_mutex_unlock(mutex); /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); /* get audio recall id */ pthread_mutex_lock(audio_mutex); flags = audio->flags; audio_recall_id = ags_recall_id_find_recycling_container(audio->recall_id, recall_id->recycling_container); pthread_mutex_unlock(audio_mutex); /* get default recall id and default recycling thread*/ if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (flags)) == 0){ default_recall_id = audio_recall_id; }else{ default_recall_id = recall_id; } /* follow the links */ if(link != NULL){ ags_channel_recursive_play_threaded_down(link, default_recall_id, recycling_thread); } /* */ ags_channel_recursive_play_threaded_up(channel, recall_id, recycling_thread); } } /** * ags_channel_recursive_play: * @channel: an #AgsChannel * @recall_id: appropriate #AgsRecallID * @stage: run_pre, run_inter or run_post * * Call recursively ags_channel_play() and ags_audio_play(). This tree iterator * function isn't capable of doing parallel computing tree. * * Since: 0.3 */ void ags_channel_recursive_play(AgsChannel *channel, AgsRecallID *recall_id, gint stage) { AgsChannel *link; AgsMutexManager *mutex_manager; gboolean is_output; pthread_mutex_t *mutex; auto void ags_channel_recursive_play_up(AgsChannel *channel, AgsRecallID *recall_id); auto void ags_channel_recursive_play_down_input(AgsChannel *output, AgsRecallID *default_recall_id); auto void ags_channel_recursive_play_down(AgsChannel *output, AgsRecallID *recall_id); void ags_channel_recursive_play_up(AgsChannel *channel, AgsRecallID *recall_id) { AgsAudio *audio; AgsChannel *current; AgsRecycling *first_recycling; guint flags; guint line, audio_channel; gboolean is_output; pthread_mutex_t *audio_mutex; pthread_mutex_t *mutex, *current_mutex; if(channel == NULL || recall_id == NULL){ return; } /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex = ags_mutex_manager_lookup(mutex_manager, channel); pthread_mutex_unlock(&(ags_application_mutex)); /* initialize audio and check if first is output */ pthread_mutex_lock(mutex); audio = (AgsAudio *) channel->audio; first_recycling = channel->first_recycling; is_output = AGS_IS_OUTPUT(channel); pthread_mutex_unlock(mutex); /* start iteration */ current = channel; if(is_output){ pthread_mutex_lock(current_mutex); goto ags_channel_recursive_play_up_OUTPUT; } /* lock context */ ags_concurrent_tree_lock_context(AGS_CONCURRENT_TREE(first_recycling)); /* go to toplevel AgsChannel */ while(current != NULL){ /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); current_mutex = ags_mutex_manager_lookup(mutex_manager, current); pthread_mutex_unlock(&(ags_application_mutex)); //NOTE:JK: see documentation // if((AGS_AUDIO_INPUT_HAS_RECYCLING & (audio->flags)) != 0) // break; /* play input */ pthread_mutex_lock(current_mutex); audio = AGS_AUDIO(current->audio); audio_channel = current->audio_channel; line = current->audio_channel; recall_id = ags_recall_id_find_recycling_container(current->recall_id, recall_id->recycling_container); pthread_mutex_unlock(current_mutex); ags_channel_play(current, recall_id, stage); recall_id = ags_recall_id_find_recycling_container(current->recall_id, recall_id->recycling_container); /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); audio_mutex = ags_mutex_manager_lookup(mutex_manager, audio); pthread_mutex_unlock(&(ags_application_mutex)); /* play audio */ pthread_mutex_lock(audio_mutex); flags = audio->flags; current = audio->output; pthread_mutex_unlock(audio_mutex); /* output */ if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (flags)) != 0){ break; } pthread_mutex_lock(audio_mutex); recall_id = ags_recall_id_find_recycling_container(audio->recall_id, recall_id->recycling_container); pthread_mutex_unlock(audio_mutex); /* get output */ if((AGS_AUDIO_ASYNC & (flags)) != 0){ current = ags_channel_nth(current, audio_channel); }else{ current = ags_channel_nth(current, line); } ags_audio_play(audio, recall_id, stage); /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); current_mutex = ags_mutex_manager_lookup(mutex_manager, current); pthread_mutex_unlock(&(ags_application_mutex)); /* play output */ pthread_mutex_lock(current_mutex); recall_id = ags_recall_id_find_recycling_container(current->recall_id, recall_id->recycling_container); ags_channel_recursive_play_up_OUTPUT: ags_channel_play(current, recall_id, stage); pthread_mutex_unlock(current_mutex); /* iterate */ pthread_mutex_lock(current_mutex); current = current->link; pthread_mutex_unlock(current_mutex); } ags_concurrent_tree_unlock_context(AGS_CONCURRENT_TREE(first_recycling)); } void ags_channel_recursive_play_down_input(AgsChannel *output, AgsRecallID *default_recall_id) { AgsAudio *audio; AgsChannel *input, *input_start; AgsChannel *link; AgsRecycling *first_recycling; AgsRecyclingContainer *recycling_container; AgsRecallID *input_recall_id; guint flags; guint audio_channel, line; pthread_mutex_t *audio_mutex; pthread_mutex_t *mutex, *input_mutex; if(output == NULL || default_recall_id == NULL){ return; } /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex = ags_mutex_manager_lookup(mutex_manager, output); pthread_mutex_unlock(&(ags_application_mutex)); /* initialize audio */ pthread_mutex_lock(mutex); audio = (AgsAudio *) output->audio; audio_channel = output->audio_channel; line = output->line; pthread_mutex_unlock(mutex); /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); audio_mutex = ags_mutex_manager_lookup(mutex_manager, audio); pthread_mutex_unlock(&(ags_application_mutex)); /* retrieve input and flags */ pthread_mutex_lock(audio_mutex); input = audio->input; recycling_container = default_recall_id->recycling_container; flags = audio->flags; pthread_mutex_unlock(audio_mutex); if(input == NULL){ return; } if((AGS_AUDIO_ASYNC & (flags)) != 0){ /* async order of channels within audio */ /* retrieve input */ input_start = input = ags_channel_nth(input, audio_channel); /* play recalls on input */ while(input != NULL){ /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); input_mutex = ags_mutex_manager_lookup(mutex_manager, input); pthread_mutex_unlock(&(ags_application_mutex)); /* get first recycling */ pthread_mutex_lock(input_mutex); first_recycling = input->first_recycling; pthread_mutex_unlock(input_mutex); /* lock context */ ags_concurrent_tree_lock_context(AGS_CONCURRENT_TREE(first_recycling)); /* find input recall id */ pthread_mutex_lock(input_mutex); input_recall_id = ags_recall_id_find_recycling_container(input->recall_id, recycling_container); pthread_mutex_unlock(input_mutex); /* play input */ ags_channel_play(input, input_recall_id, stage); /* unlock context */ ags_concurrent_tree_unlock_context(AGS_CONCURRENT_TREE(first_recycling)); /* iterate */ pthread_mutex_lock(input_mutex); input = input->next_pad; pthread_mutex_unlock(input_mutex); } /* traverse the tree */ input = input_start; while(input != NULL){ /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); input_mutex = ags_mutex_manager_lookup(mutex_manager, input); pthread_mutex_unlock(&(ags_application_mutex)); /* get link */ pthread_mutex_lock(input_mutex); link = input->link; pthread_mutex_unlock(input_mutex); if(link != NULL){ /* get first recycling */ pthread_mutex_lock(input_mutex); first_recycling = input->first_recycling; pthread_mutex_unlock(input_mutex); /* find input recall id */ pthread_mutex_lock(input_mutex); input_recall_id = ags_recall_id_find_recycling_container(input->recall_id, default_recall_id->recycling_container); pthread_mutex_unlock(input_mutex); /* traverse the tree */ if(link != NULL){ ags_channel_recursive_play_down(input->link, input_recall_id); } } /* iterate */ pthread_mutex_lock(input_mutex); input = input->next_pad; pthread_mutex_unlock(input_mutex); } }else{ /* sync order of channels within audio */ /* retrieve input */ input = ags_channel_nth(input, line); /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); input_mutex = ags_mutex_manager_lookup(mutex_manager, input); pthread_mutex_unlock(&(ags_application_mutex)); /* get first recycling, find input recall id and get link */ pthread_mutex_lock(input_mutex); first_recycling = input->first_recycling; input_recall_id = ags_recall_id_find_recycling_container(input->recall_id, default_recall_id->recycling_container); link = input->link; pthread_mutex_unlock(input_mutex); /* lock context */ ags_concurrent_tree_lock_context(AGS_CONCURRENT_TREE(first_recycling)); /* play recalls on input */ ags_channel_play(input, input_recall_id, stage); /* unlock context */ ags_concurrent_tree_unlock_context(AGS_CONCURRENT_TREE(first_recycling)); /* traverse the tree */ if(link != NULL){ ags_channel_recursive_play_down(link, input_recall_id); } } } void ags_channel_recursive_play_down(AgsChannel *output, AgsRecallID *recall_id) { AgsAudio *audio; AgsRecycling *first_recycling; AgsRecallID *default_recall_id, *audio_recall_id; GList *list; guint flags; guint line, audio_channel; pthread_mutex_t *audio_mutex; pthread_mutex_t *mutex, *current_mutex; if(output == NULL || recall_id == NULL){ return; } /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex = ags_mutex_manager_lookup(mutex_manager, channel); pthread_mutex_unlock(&(ags_application_mutex)); /* initialize audio */ pthread_mutex_lock(mutex); audio = (AgsAudio *) output->audio; first_recycling = output->first_recycling; pthread_mutex_unlock(mutex); /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); audio_mutex = ags_mutex_manager_lookup(mutex_manager, audio); pthread_mutex_unlock(&(ags_application_mutex)); /* lock context */ ags_concurrent_tree_lock_context(AGS_CONCURRENT_TREE(first_recycling)); /* retrieve recall id */ pthread_mutex_lock(mutex); flags = audio->flags; if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (flags)) != 0){ if(recall_id->recycling_container->parent != NULL){ list = output->recall_id; while(list != NULL){ if(AGS_RECALL_ID(list->data)->recycling_container->parent == recall_id->recycling_container){ recall_id = list->data; break; } list = list->next; } if(list == NULL){ recall_id = NULL; } } }else{ recall_id = ags_recall_id_find_recycling_container(output->recall_id, recall_id->recycling_container); } pthread_mutex_unlock(mutex); /* retrieve next recall id */ if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (flags)) != 0){ pthread_mutex_lock(audio_mutex); audio_recall_id = ags_recall_id_find_recycling_container(audio->recall_id, recall_id->recycling_container); if(audio_recall_id == NULL && AGS_RECYCLING_CONTAINER(recall_id->recycling_container)->parent == NULL){ audio_recall_id = ags_recall_id_find_parent_recycling_container(audio->recall_id, recall_id->recycling_container); } list = audio_recall_id->recycling_container->children; default_recall_id = ags_recall_id_find_recycling_container(audio->recall_id, AGS_RECYCLING_CONTAINER(list->data)); pthread_mutex_unlock(audio_mutex); }else{ pthread_mutex_lock(audio_mutex); audio_recall_id = ags_recall_id_find_recycling_container(audio->recall_id, recall_id->recycling_container); default_recall_id = audio_recall_id; pthread_mutex_unlock(audio_mutex); } /* play output */ ags_channel_play((GObject *) output, recall_id, stage); /* unlock context */ ags_concurrent_tree_unlock_context(AGS_CONCURRENT_TREE(first_recycling)); if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (flags)) != 0){ /* call function which play input */ ags_channel_recursive_play_down_input(output, default_recall_id); /* lock context */ ags_concurrent_tree_lock_context(AGS_CONCURRENT_TREE(first_recycling)); /* play audio */ ags_audio_play(audio, audio_recall_id, stage); ags_audio_play(audio, default_recall_id, stage); }else{ /* call function which play input */ ags_channel_recursive_play_down_input(output, default_recall_id); /* lock context */ ags_concurrent_tree_lock_context(AGS_CONCURRENT_TREE(first_recycling)); /* play audio */ ags_audio_play(audio, audio_recall_id, stage); } /* unlock context */ ags_concurrent_tree_unlock_context(AGS_CONCURRENT_TREE(first_recycling)); } /* entry point */ if(channel == NULL || recall_id == NULL){ return; } /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); /* recursive compute audio */ pthread_mutex_lock(mutex); link = channel->link; is_output = AGS_IS_OUTPUT(channel); pthread_mutex_unlock(mutex); if(is_output){ ags_channel_recursive_play_down(channel, recall_id); /* */ ags_channel_recursive_play_up(link, recall_id); }else{ AgsAudio *audio; AgsRecallID *audio_recall_id, *default_recall_id; guint flags; pthread_mutex_t *audio_mutex; pthread_mutex_lock(mutex); audio = (AgsAudio *) channel->audio; pthread_mutex_unlock(mutex); /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); /* get audio recall id */ pthread_mutex_lock(audio_mutex); flags = audio->flags; audio_recall_id = ags_recall_id_find_recycling_container(audio->recall_id, recall_id->recycling_container); pthread_mutex_unlock(audio_mutex); /* get default recall id */ if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (flags)) == 0){ default_recall_id = audio_recall_id; }else{ default_recall_id = recall_id; } /* follow the links */ if(link != NULL){ ags_channel_recursive_play_down(link, default_recall_id); } /* */ ags_channel_recursive_play_up(channel, recall_id); } } /** * ags_channel_tillrecycling_cancel: * @channel: an #AgsChannel * @recall_id: an #AgsRecallID * * Traverses the tree down and up and calls ags_channel_cancel() for corresponding * @recall_id. * * Since: 0.4 */ void ags_channel_tillrecycling_cancel(AgsChannel *channel, AgsRecallID *recall_id) { AgsAudio *audio; AgsRecallID *audio_recall_id, *default_recall_id; auto void ags_channel_tillrecycling_cancel_up(AgsChannel *channel, AgsRecallID *recall_id); auto void ags_channel_tillrecycling_cancel_down_input(AgsChannel *output, AgsRecallID *default_recall_id); auto void ags_channel_tillrecycling_cancel_down(AgsChannel *output, AgsRecallID *recall_id); void ags_channel_tillrecycling_cancel_up(AgsChannel *channel, AgsRecallID *recall_id) { AgsAudio *audio; AgsChannel *current; if(channel == NULL){ return; } audio = AGS_AUDIO(channel->audio); current = channel; if(AGS_IS_OUTPUT(channel)){ goto ags_channel_tillrecycling_cancel_up_OUTPUT; } /* goto toplevel AgsChannel */ while(current != NULL){ /* AgsInput */ recall_id = ags_recall_id_find_recycling_container(current->recall_id, recall_id->recycling_container); ags_channel_cancel(current, recall_id); /* AgsAudio */ recall_id = ags_recall_id_find_recycling_container(audio->recall_id, recall_id->recycling_container); ags_audio_cancel(audio, recall_id); /* AgsOutput */ if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) != 0){ break; } if((AGS_AUDIO_ASYNC & (audio->flags)) != 0){ current = ags_channel_nth(audio->output, current->audio_channel); }else{ current = ags_channel_nth(audio->output, current->line); } recall_id = ags_recall_id_find_recycling_container(current->recall_id, recall_id->recycling_container); ags_channel_tillrecycling_cancel_up_OUTPUT: ags_channel_cancel(current, recall_id); if(current == channel){ AgsRecallID *audio_recall_id; /* AgsAudio */ audio_recall_id = ags_recall_id_find_recycling_container(audio->recall_id, recall_id->recycling_container); ags_audio_cancel(audio, audio_recall_id); } /* iterate */ if(current->link == NULL){ break; } audio = AGS_AUDIO(current->link->audio); //NOTE:JK: see documentation // if((AGS_AUDIO_INPUT_HAS_RECYCLING & (audio->flags)) != 0) // break; current = current->link; } } void ags_channel_tillrecycling_cancel_down_input(AgsChannel *output, AgsRecallID *default_recall_id) { AgsAudio *audio; AgsChannel *input, *input_start; AgsRecallID *input_recall_id; audio = AGS_AUDIO(output->audio); if(audio->input == NULL){ return; } if((AGS_AUDIO_ASYNC & (audio->flags)) != 0){ /* async order of channels within audio */ /* retrieve input */ input_start = input = ags_channel_nth(audio->input, output->audio_channel); /* cancel recalls on input */ while(input != NULL){ input_recall_id = ags_recall_id_find_recycling_container(input->recall_id, default_recall_id->recycling_container); /* cancel input */ ags_channel_cancel(input, input_recall_id); /* iterate */ input = input->next_pad; } /* traverse the tree */ input = input_start; while(input != NULL){ if(input->link != NULL){ input_recall_id = ags_recall_id_find_recycling_container(input->recall_id, default_recall_id->recycling_container); /* follow the links */ ags_channel_tillrecycling_cancel_down(input->link, input_recall_id); } /* iterate */ input = input->next_pad; } }else{ /* sync order of channels within audio */ /* retrieve input */ input = ags_channel_nth(audio->input, output->line); input_recall_id = ags_recall_id_find_recycling_container(input->recall_id, default_recall_id->recycling_container); /* cancel recalls on input */ ags_channel_cancel(input, input_recall_id); /* follow the links */ if(input->link != NULL){ /* follow the links */ ags_channel_tillrecycling_cancel_down(input->link, input_recall_id); } } } void ags_channel_tillrecycling_cancel_down(AgsChannel *output, AgsRecallID *recall_id) { AgsAudio *audio; AgsRecallID *audio_recall_id, *default_recall_id; GList *list; if(output == NULL || recall_id == NULL){ return; } /* AgsAudio */ audio = AGS_AUDIO(output->audio); if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) != 0){ if(recall_id->recycling_container->parent != NULL){ list = output->recall_id; while(list != NULL){ if(AGS_RECALL_ID(list->data)->recycling_container->parent == recall_id->recycling_container){ recall_id = list->data; break; } list = list->next; } if(list == NULL){ recall_id = NULL; } } }else{ recall_id = ags_recall_id_find_recycling_container(output->recall_id, recall_id->recycling_container); } /* cancel output */ ags_channel_cancel(output, recall_id); /* retrieve next recall id */ if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) != 0){ AgsChannel *input; AgsRecyclingContainer *recycling_container; if((AGS_AUDIO_ASYNC & (audio->flags)) != 0){ input = ags_channel_nth(audio->input, output->audio_channel); }else{ input = ags_channel_nth(audio->input, output->line); } audio_recall_id = ags_recall_id_find_recycling_container(audio->recall_id, recall_id->recycling_container); if(audio_recall_id == NULL && AGS_RECYCLING_CONTAINER(recall_id->recycling_container)->parent == NULL){ audio_recall_id = ags_recall_id_find_parent_recycling_container(audio->recall_id, recall_id->recycling_container); } list = audio_recall_id->recycling_container->children; default_recall_id = ags_recall_id_find_recycling_container(audio->recall_id, AGS_RECYCLING_CONTAINER(list->data)); }else{ audio_recall_id = ags_recall_id_find_recycling_container(audio->recall_id, recall_id->recycling_container); default_recall_id = audio_recall_id; } if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) != 0){ /* call function which cancel input */ ags_channel_tillrecycling_cancel_down_input(output, default_recall_id); /* cancel audio */ ags_audio_cancel(audio, audio_recall_id); ags_audio_cancel(audio, default_recall_id); }else{ /* call function which cancel input */ ags_channel_tillrecycling_cancel_down_input(output, default_recall_id); /* cancel audio */ ags_audio_cancel(audio, audio_recall_id); } } /* entry point */ audio = channel->audio; if(AGS_IS_OUTPUT(channel)){ ags_channel_tillrecycling_cancel_down(channel, recall_id); ags_channel_tillrecycling_cancel_up(channel->link, recall_id); }else{ /* follow the links */ if(channel->link != NULL){ ags_channel_tillrecycling_cancel_down(channel->link, recall_id); } ags_channel_tillrecycling_cancel_up(channel, recall_id); } } /** * ags_channel_recursive_reset_recall_ids: * @channel: an #AgsChannel that was linked with @link * @link: an #AgsChannel that was linked with @channel * @old_channel_link: the old link of @channel * @old_link_link: the old link of @link * * Called by ags_channel_set_link() to handle running #AgsAudio objects correctly. * This function destroys #AgsRecall objects which were uneeded because they became * invalid due to unlinking. By the way it destroys the uneeded #AgsRecallID objects, too. * Additionally it creates #AgsRecall and #AgsRecallID objects to prepare becoming a * running object (#AgsAudio or #AgsChannel). * By the clean up the invalid #AgsRecall objects will be removed. * Once the clean up has done ags_channel_recursive_play_init() will be called for every * playing instance that was found. * * Since: 0.4 */ void ags_channel_recursive_reset_recall_ids(AgsChannel *channel, AgsChannel *link, AgsChannel *old_channel_link, AgsChannel *old_link_link) { AgsRecyclingContainer *recycling_container; GList *link_devout_play_list, *channel_devout_play_list; GList *link_invalid_recall_id_list, *channel_invalid_recall_id_list; GList *channel_recall_id_list, *link_recall_id_list, *recycled_recall_id_list; GList *parent; GList *list; gint stage; /* applying functions */ auto void ags_audio_reset_recall_id(AgsAudio *audio, GList *recall_id_list, GList *devout_play_list, GList *invalid_recall_id_list); auto void ags_channel_reset_recall_id(AgsChannel *channel, GList *recall_id_list, GList *devout_play_list, GList *invalid_recall_id_list); auto void ags_channel_recursive_reset_audio_duplicate_recall(AgsAudio *audio, GList *recall_id_list); auto void ags_channel_recursive_reset_channel_duplicate_recall(AgsChannel *channel, GList *recall_id_list); auto void ags_channel_recursive_reset_audio_resolve_recall(AgsAudio *audio, GList *recall_id_list); auto void ags_channel_recursive_reset_channel_resolve_recall(AgsChannel *channel, GList *recall_id_list); auto void ags_channel_recursive_reset_audio_init_recall(AgsAudio *audio, GList *recall_id_list); auto void ags_channel_recursive_reset_channel_init_recall(AgsChannel *channel, GList *recall_id_list); /* collectors of AgsDevoutPlay and recall_id */ auto GList* ags_channel_tillrecycling_collect_devout_play_down_input(AgsChannel *output, GList *list, gboolean collect_recall_id); auto GList* ags_channel_tillrecycling_collect_devout_play_down(AgsChannel *current, GList *list, gboolean collect_recall_id); auto GList* ags_channel_recursive_collect_devout_play_up(AgsChannel *channel, gboolean collect_recall_id); auto GList* ags_channel_recursive_collect_recycled(AgsChannel *channel, GList *collected_recall_id); /* tree iterator functions */ auto void ags_channel_recursive_reset_recall_id_down_input(AgsChannel *output, GList *recall_id_list, GList *devout_play_list, GList *invalid_recall_id_list); auto void ags_channel_recursive_reset_recall_id_down(AgsChannel *current, GList *recall_id_list, GList *devout_play_list, GList *invalid_recall_id_list); auto void ags_channel_tillrecycling_reset_recall_id_up(AgsChannel *channel, GList *recall_id_list, GList *devout_play_list, GList *invalid_recall_id_list); auto void ags_channel_recursive_unset_recall_id_down_input(AgsChannel *output, GList *invalid_recall_id_list); auto void ags_channel_recursive_unset_recall_id_down(AgsChannel *current, GList *invalid_recall_id_list); auto void ags_channel_tillrecycling_unset_recall_id_up(AgsChannel *channel, GList *invalid_recall_id_list); auto void ags_channel_recursive_duplicate_recall_down_input(AgsChannel *output, GList *recall_id_list); auto void ags_channel_recursive_duplicate_recall_down(AgsChannel *channel, GList *recall_id_list); auto void ags_channel_tillrecycling_duplicate_recall_up(AgsChannel *channel, GList *recall_id_list); auto void ags_channel_recursive_resolve_recall_down_input(AgsChannel *output, GList *recall_id); auto void ags_channel_recursive_resolve_recall_down(AgsChannel *channel, GList *recall_id); auto void ags_channel_tillrecycling_resolve_recall_up(AgsChannel *channel, GList *recall_id); auto void ags_channel_recursive_init_recall_down_input(AgsChannel *output, GList *recall_id); auto void ags_channel_recursive_init_recall_down(AgsChannel *channel, GList *recall_id); auto void ags_channel_tillrecycling_init_recall_up(AgsChannel *channel, GList *recall_id); /* implementation */ void ags_audio_reset_recall_id(AgsAudio *audio, GList *recall_id_list, GList *devout_play_list, GList *invalid_recall_id_list){ AgsRecall *recall; AgsRecallID *recall_id; AgsDevoutPlay *devout_play; GList *list; gboolean play; gboolean playback, sequencer, notation; AgsRecycling *recycling; gint recycling_length; gint i; gboolean success; while(invalid_recall_id_list != NULL){ recall_id = AGS_RECALL_ID(invalid_recall_id_list->data); play = (recall_id->recycling_container->parent == NULL) ? TRUE: FALSE; list = play ? audio->play: audio->recall; /* remove AgsRecalls */ while((list = ags_recall_find_recycling_container(list, G_OBJECT(recall_id->recycling_container))) != NULL){ recall = AGS_RECALL(list->data); #ifdef AGS_DEBUG g_message("reset recall id: invalidated\0"); #endif ags_audio_remove_recall(audio, (GObject *) recall, play); list = list->next; } /* remove AgsRecallID */ ags_audio_remove_recall_id(audio, (GObject *) recall_id); /* iterate */ invalid_recall_id_list = invalid_recall_id_list->next; } while(recall_id_list != NULL){ if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) == 0){ success = FALSE; /* playback */ if(devout_play_list != NULL){ devout_play = AGS_DEVOUT_PLAY(devout_play_list->data); playback = ((AGS_DEVOUT_PLAY_PLAYBACK & (g_atomic_int_get(&(devout_play->flags)))) != 0) ? TRUE: FALSE; }else{ playback = (((AGS_RECALL_ID_PLAYBACK & (AGS_RECALL_ID(recall_id_list->data)->flags)) != 0) ? TRUE: FALSE); } if(playback){ success = TRUE; #ifdef AGS_DEBUG g_message("recall id reset: play\0"); #endif /* append new recall id */ recall_id = g_object_new(AGS_TYPE_RECALL_ID, "recycling\0", AGS_RECALL_ID(recall_id_list->data)->recycling, "recycling_container\0", AGS_RECALL_ID(recall_id_list->data)->recycling_container, NULL); ags_audio_add_recall_id(audio, (GObject *) recall_id); if((AGS_RECALL_ID_PLAYBACK & (AGS_RECALL_ID(recall_id_list->data)->flags)) != 0){ recall_id->flags |= AGS_RECALL_ID_PLAYBACK; } if((AGS_RECALL_ID_SEQUENCER & (AGS_RECALL_ID(recall_id_list->data)->flags)) != 0){ recall_id->flags |= AGS_RECALL_ID_SEQUENCER; } if((AGS_RECALL_ID_NOTATION & (AGS_RECALL_ID(recall_id_list->data)->flags)) != 0){ recall_id->flags |= AGS_RECALL_ID_NOTATION; } /* iterate */ recall_id_list = recall_id_list->next; if(devout_play_list != NULL){ devout_play_list = devout_play_list->next; } } if(recall_id_list == NULL){ break; } /* sequencer */ devout_play = AGS_DEVOUT_PLAY(devout_play_list->data); if(devout_play_list != NULL){ devout_play = AGS_DEVOUT_PLAY(devout_play_list->data); sequencer = ((AGS_DEVOUT_PLAY_SEQUENCER & (g_atomic_int_get(&(devout_play->flags)))) != 0) ? TRUE: FALSE; }else{ sequencer = (((AGS_RECALL_ID_SEQUENCER & (AGS_RECALL_ID(recall_id_list->data)->flags)) != 0) ? TRUE: FALSE); } if(sequencer){ success = TRUE; #ifdef AGS_DEBUG g_message("recall id reset: sequencer\0"); #endif /* append new recall id */ recall_id = g_object_new(AGS_TYPE_RECALL_ID, "recycling\0", AGS_RECALL_ID(recall_id_list->data)->recycling, "recycling_container\0", AGS_RECALL_ID(recall_id_list->data)->recycling_container, NULL); ags_audio_add_recall_id(audio, (GObject *) recall_id); /* iterate */ recall_id_list = recall_id_list->next; if(devout_play_list != NULL){ devout_play_list = devout_play_list->next; } } if(recall_id_list == NULL){ break; } /* notation */ if(devout_play_list != NULL){ devout_play = AGS_DEVOUT_PLAY(devout_play_list->data); notation = ((AGS_DEVOUT_PLAY_NOTATION & (g_atomic_int_get(&(devout_play->flags)))) != 0) ? TRUE: FALSE; }else{ notation = (((AGS_RECALL_ID_NOTATION & (AGS_RECALL_ID(recall_id_list->data)->flags)) != 0) ? TRUE: FALSE); } if(notation){ success = TRUE; #ifdef AGS_DEBUG g_message("recall id reset: notation\0"); #endif /* append new recall id */ recall_id = g_object_new(AGS_TYPE_RECALL_ID, "recycling\0", AGS_RECALL_ID(recall_id_list->data)->recycling, "recycling_container\0", AGS_RECALL_ID(recall_id_list->data)->recycling_container, NULL); ags_audio_add_recall_id(audio, (GObject *) recall_id); /* iterate */ recall_id_list = recall_id_list->next; if(devout_play_list != NULL){ devout_play_list = devout_play_list->next; } } if(recall_id_list == NULL){ break; } if(!success){ /* iterate */ recall_id_list = recall_id_list->next; if(devout_play_list != NULL){ devout_play_list = devout_play_list->next; } } }else{ ags_audio_add_recall_id(audio, (GObject *) recall_id_list->data); /* iterate */ recall_id_list = recall_id_list->next; if(devout_play_list != NULL){ devout_play_list = devout_play_list->next; } } } } void ags_channel_reset_recall_id(AgsChannel *channel, GList *recall_id_list, GList *devout_play_list, GList *invalid_recall_id_list){ AgsAudio *audio; AgsRecall *recall; AgsRecallID *recall_id; AgsDevoutPlay *devout_play; GList *list; gboolean play; gboolean playback, sequencer, notation; gboolean success; audio = channel->audio; while(invalid_recall_id_list != NULL){ recall_id = AGS_RECALL_ID(invalid_recall_id_list->data); play = (recall_id->recycling_container->parent == NULL) ? TRUE: FALSE; list = play ? channel->play: channel->recall; /* unref AgsRecalls */ while((list = ags_recall_find_recycling_container(list, G_OBJECT(recall_id->recycling_container))) != NULL){ recall = AGS_RECALL(list->data); ags_channel_remove_recall(channel, (GObject *) recall, play); list = list->next; } /* unref AgsRecallID */ ags_channel_remove_recall_id(channel, recall_id); /* iterate */ invalid_recall_id_list = invalid_recall_id_list->next; } while(recall_id_list != NULL){ success = FALSE; /* playback */ if(devout_play_list != NULL){ devout_play = AGS_DEVOUT_PLAY(devout_play_list->data); playback = (((AGS_DEVOUT_PLAY_PLAYBACK & (g_atomic_int_get(&(devout_play->flags)))) != 0) ? TRUE: FALSE); }else{ playback = (((AGS_RECALL_ID_PLAYBACK & (AGS_RECALL_ID(recall_id_list->data)->flags)) != 0) ? TRUE: FALSE); } if(playback){ success = TRUE; #ifdef AGS_DEBUG g_message("recall id reset: playback\0"); #endif /* append new recall id */ recall_id = g_object_new(AGS_TYPE_RECALL_ID, "recycling\0", channel->first_recycling, "recycling_container\0", AGS_RECALL_ID(recall_id_list->data)->recycling_container, NULL); ags_channel_add_recall_id(channel, (GObject *) recall_id); recall_id->flags |= AGS_RECALL_ID_PLAYBACK; /* iterate */ recall_id_list = recall_id_list->next; if(devout_play_list != NULL){ devout_play_list = devout_play_list->next; } } if(recall_id_list == NULL){ break; } /* sequencer */ if(devout_play_list != NULL){ devout_play = AGS_DEVOUT_PLAY(devout_play_list->data); sequencer = (((AGS_DEVOUT_PLAY_SEQUENCER & (g_atomic_int_get(&(devout_play->flags)))) != 0) ? TRUE: FALSE); }else{ sequencer = (((AGS_RECALL_ID_SEQUENCER & (AGS_RECALL_ID(recall_id_list->data)->flags)) != 0) ? TRUE: FALSE); } if(sequencer){ success = TRUE; #ifdef AGS_DEBUG g_message("recall id reset: sequencer\0"); #endif /* append new recall id */ recall_id = g_object_new(AGS_TYPE_RECALL_ID, "recycling\0", channel->first_recycling, "recycling_container\0", AGS_RECALL_ID(recall_id_list->data)->recycling_container, NULL); ags_channel_add_recall_id(channel, (GObject *) recall_id); recall_id->flags |= AGS_RECALL_ID_SEQUENCER; /* iterate */ recall_id_list = recall_id_list->next; if(devout_play_list != NULL){ devout_play_list = devout_play_list->next; } } if(recall_id_list == NULL){ break; } /* notation */ if(devout_play_list != NULL){ devout_play = AGS_DEVOUT_PLAY(devout_play_list->data); notation = (((AGS_DEVOUT_PLAY_NOTATION & (g_atomic_int_get(&(devout_play->flags)))) != 0) ? TRUE: FALSE); }else{ notation = (((AGS_RECALL_ID_NOTATION & (AGS_RECALL_ID(recall_id_list->data)->flags)) != 0) ? TRUE: FALSE); } if(notation){ success = TRUE; #ifdef AGS_DEBUG g_message("recall id reset: notation\0"); #endif /* append new recall id */ recall_id = g_object_new(AGS_TYPE_RECALL_ID, "recycling\0", channel->first_recycling, "recycling_container\0", AGS_RECALL_ID(recall_id_list->data)->recycling_container, NULL); ags_channel_add_recall_id(channel, (GObject *) recall_id); recall_id->flags |= AGS_RECALL_ID_NOTATION; /* iterate */ recall_id_list = recall_id_list->next; if(devout_play_list != NULL){ devout_play_list = devout_play_list->next; } } if(recall_id_list == NULL){ break; } if(!success){ recall_id_list = recall_id_list->next; if(devout_play_list != NULL){ devout_play_list = devout_play_list->next; } } } } void ags_channel_recursive_reset_audio_duplicate_recall(AgsAudio *audio, GList *recall_id_list){ AgsRecallID *recall_id; while(recall_id_list != NULL){ recall_id = ags_recall_id_find_recycling_container(audio->recall_id, AGS_RECALL_ID(recall_id_list->data)->recycling_container); if(recall_id != NULL){ ags_audio_duplicate_recall(audio, recall_id); } recall_id_list = recall_id_list->next; } } void ags_channel_recursive_reset_channel_duplicate_recall(AgsChannel *channel, GList *recall_id_list){ AgsRecallID *recall_id; while(recall_id_list != NULL){ recall_id = ags_recall_id_find_recycling_container(channel->recall_id, AGS_RECALL_ID(recall_id_list->data)->recycling_container); if(recall_id != NULL){ ags_channel_duplicate_recall(channel, recall_id); } recall_id_list = recall_id_list->next; } } void ags_channel_recursive_reset_audio_resolve_recall(AgsAudio *audio, GList *recall_id_list){ AgsRecallID *recall_id; while(recall_id_list != NULL){ recall_id = ags_recall_id_find_recycling_container(audio->recall_id, AGS_RECALL_ID(recall_id_list->data)->recycling_container); if(recall_id != NULL){ ags_audio_resolve_recall(audio, recall_id); } recall_id_list = recall_id_list->next; } } void ags_channel_recursive_reset_channel_resolve_recall(AgsChannel *channel, GList *recall_id_list){ AgsRecallID *recall_id; while(recall_id_list != NULL){ recall_id = ags_recall_id_find_recycling_container(channel->recall_id, AGS_RECALL_ID(recall_id_list->data)->recycling_container); if(recall_id != NULL){ ags_channel_resolve_recall(channel, recall_id); } recall_id_list = recall_id_list->next; } } void ags_channel_recursive_reset_audio_init_recall(AgsAudio *audio, GList *recall_id_list){ AgsRecallID *recall_id; while(recall_id_list != NULL){ recall_id = ags_recall_id_find_recycling_container(audio->recall_id, AGS_RECALL_ID(recall_id_list->data)->recycling_container); if(recall_id != NULL){ ags_audio_init_recall(audio, stage, recall_id); } recall_id_list = recall_id_list->next; } } void ags_channel_recursive_reset_channel_init_recall(AgsChannel *channel, GList *recall_id_list){ AgsAudio *audio; AgsRecallID *recall_id; while(recall_id_list != NULL){ recall_id = ags_recall_id_find_recycling_container(channel->recall_id, AGS_RECALL_ID(recall_id_list->data)->recycling_container); if(recall_id != NULL){ ags_channel_init_recall(channel, stage, recall_id); } recall_id_list = recall_id_list->next; } } GList* ags_channel_tillrecycling_collect_devout_play_down_input(AgsChannel *output, GList *list, gboolean collect_recall_id){ AgsAudio *audio; AgsChannel *current; if(output == NULL){ return(list); } audio = AGS_AUDIO(output->audio); if((AGS_AUDIO_INPUT_HAS_RECYCLING & (audio->flags)) != 0) return(list); if((AGS_AUDIO_ASYNC & (audio->flags)) != 0){ current = ags_channel_nth(audio->input, output->audio_channel); while(current != NULL){ /* collect recall id and the recalls purpose */ if(current->devout_play != NULL){ if((AGS_DEVOUT_PLAY_PLAYBACK & (g_atomic_int_get(&(AGS_DEVOUT_PLAY(current->devout_play)->flags)))) != 0 && AGS_DEVOUT_PLAY(current->devout_play)->recall_id[0] != NULL){ #ifdef AGS_DEBUG g_message("recall id collect: play\0"); #endif list = g_list_prepend(list, (collect_recall_id ? AGS_DEVOUT_PLAY(current->devout_play)->recall_id[0]: current->devout_play)); } if((AGS_DEVOUT_PLAY_SEQUENCER & (g_atomic_int_get(&(AGS_DEVOUT_PLAY(current->devout_play)->flags)))) != 0 && AGS_DEVOUT_PLAY(current->devout_play)->recall_id[1] != NULL){ #ifdef AGS_DEBUG g_message("recall id collect: sequencer\0"); #endif list = g_list_prepend(list, (collect_recall_id ? AGS_DEVOUT_PLAY(current->devout_play)->recall_id[1]: current->devout_play)); } if((AGS_DEVOUT_PLAY_NOTATION & (g_atomic_int_get(&(AGS_DEVOUT_PLAY(current->devout_play)->flags)))) != 0 && AGS_DEVOUT_PLAY(current->devout_play)->recall_id[2] != NULL){ #ifdef AGS_DEBUG g_message("recall id collect: notation\0"); #endif list = g_list_prepend(list, (collect_recall_id ? AGS_DEVOUT_PLAY(current->devout_play)->recall_id[2]: current->devout_play)); } } /* follow the links */ list = ags_channel_tillrecycling_collect_devout_play_down(current->link, list, collect_recall_id); current = current->next_pad; } }else{ current = ags_channel_nth(audio->input, output->line); /* collect recall id and the recalls purpose */ if(current->devout_play != NULL){ if((AGS_DEVOUT_PLAY_PLAYBACK & (g_atomic_int_get(&(AGS_DEVOUT_PLAY(current->devout_play)->flags)))) != 0 && AGS_DEVOUT_PLAY(current->devout_play)->recall_id[0] != NULL){ #ifdef AGS_DEBUG g_message("recall id collect: play\0"); #endif list = g_list_prepend(list, (collect_recall_id ? AGS_DEVOUT_PLAY(current->devout_play)->recall_id[0]: current->devout_play)); } if((AGS_DEVOUT_PLAY_SEQUENCER & (g_atomic_int_get(&(AGS_DEVOUT_PLAY(current->devout_play)->flags)))) != 0 && AGS_DEVOUT_PLAY(current->devout_play)->recall_id[1] != NULL){ #ifdef AGS_DEBUG g_message("recall id collect: sequencer\0"); #endif list = g_list_prepend(list, (collect_recall_id ? AGS_DEVOUT_PLAY(current->devout_play)->recall_id[1]: current->devout_play)); } if((AGS_DEVOUT_PLAY_NOTATION & (g_atomic_int_get(&(AGS_DEVOUT_PLAY(current->devout_play)->flags)))) != 0 && AGS_DEVOUT_PLAY(current->devout_play)->recall_id[2] != NULL){ #ifdef AGS_DEBUG g_message("recall id collect: notation\0"); #endif list = g_list_prepend(list, (collect_recall_id ? AGS_DEVOUT_PLAY(current->devout_play)->recall_id[2]: current->devout_play)); } } /* follow the links */ list = ags_channel_tillrecycling_collect_devout_play_down(current->link, list, collect_recall_id); } return(list); } GList* ags_channel_tillrecycling_collect_devout_play_down(AgsChannel *current, GList *list, gboolean collect_recall_id){ AgsAudio *audio; if(current == NULL){ return(list); } audio = AGS_AUDIO(current->audio); /* collect devout play */ if(current->devout_play != NULL){ if((AGS_DEVOUT_PLAY_PLAYBACK & (g_atomic_int_get(&(AGS_DEVOUT_PLAY(current->devout_play)->flags)))) != 0 && AGS_DEVOUT_PLAY(current->devout_play)->recall_id[0] != NULL){ #ifdef AGS_DEBUG g_message("recall id collect: play\0"); #endif list = g_list_prepend(list, (collect_recall_id ? AGS_DEVOUT_PLAY(current->devout_play)->recall_id[0]: current->devout_play)); } if((AGS_DEVOUT_PLAY_SEQUENCER & (g_atomic_int_get(&(AGS_DEVOUT_PLAY(current->devout_play)->flags)))) != 0 && AGS_DEVOUT_PLAY(current->devout_play)->recall_id[1] != NULL){ #ifdef AGS_DEBUG g_message("recall id collect: sequencer\0"); #endif list = g_list_prepend(list, (collect_recall_id ? AGS_DEVOUT_PLAY(current->devout_play)->recall_id[1]: current->devout_play)); } if((AGS_DEVOUT_PLAY_NOTATION & (g_atomic_int_get(&(AGS_DEVOUT_PLAY(current->devout_play)->flags)))) != 0 && AGS_DEVOUT_PLAY(current->devout_play)->recall_id[2] != NULL){ #ifdef AGS_DEBUG g_message("recall id collect: notation\0"); #endif list = g_list_prepend(list, (collect_recall_id ? AGS_DEVOUT_PLAY(current->devout_play)->recall_id[2]: current->devout_play)); } } if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) != 0) return(list); /* follow the links */ list = ags_channel_tillrecycling_collect_devout_play_down_input(current, list, collect_recall_id); return(list); } GList* ags_channel_recursive_collect_devout_play_up(AgsChannel *channel, gboolean collect_recall_id){ AgsAudio *audio; AgsChannel *current; GList *list; if(channel == NULL){ return(NULL); } current = channel; list = NULL; if(AGS_IS_OUTPUT(channel)){ audio = AGS_AUDIO(current->audio); goto ags_channel_recursive_collect_devout_play_up_OUTPUT; } while(current != NULL){ audio = AGS_AUDIO(current->audio); /* input */ if(current->devout_play != NULL){ if((AGS_DEVOUT_PLAY_PLAYBACK & (g_atomic_int_get(&(AGS_DEVOUT_PLAY(current->devout_play)->flags)))) != 0 && AGS_DEVOUT_PLAY(current->devout_play)->recall_id[0] != NULL){ #ifdef AGS_DEBUG g_message("recall id collect: play\0"); #endif list = g_list_prepend(list, (collect_recall_id ? AGS_DEVOUT_PLAY(current->devout_play)->recall_id[0]: current->devout_play)); } if((AGS_DEVOUT_PLAY_SEQUENCER & (g_atomic_int_get(&(AGS_DEVOUT_PLAY(current->devout_play)->flags)))) != 0 && AGS_DEVOUT_PLAY(current->devout_play)->recall_id[1] != NULL){ #ifdef AGS_DEBUG g_message("recall id collect: sequencer\0"); #endif list = g_list_prepend(list, (collect_recall_id ? AGS_DEVOUT_PLAY(current->devout_play)->recall_id[1]: current->devout_play)); } if((AGS_DEVOUT_PLAY_NOTATION & (g_atomic_int_get(&(AGS_DEVOUT_PLAY(current->devout_play)->flags)))) != 0 && AGS_DEVOUT_PLAY(current->devout_play)->recall_id[2] != NULL){ #ifdef AGS_DEBUG g_message("recall id collect: notation\0"); #endif list = g_list_prepend(list, (collect_recall_id ? AGS_DEVOUT_PLAY(current->devout_play)->recall_id[2]: current->devout_play)); } } if(audio->output == NULL || (AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) != 0){ break; } /* output */ if((AGS_AUDIO_ASYNC & (audio->flags)) != 0){ current = ags_channel_nth(audio->output, current->audio_channel); }else{ current = ags_channel_nth(audio->output, current->line); } ags_channel_recursive_collect_devout_play_up_OUTPUT: if(current->devout_play != NULL){ if((AGS_DEVOUT_PLAY_PLAYBACK & (g_atomic_int_get(&(AGS_DEVOUT_PLAY(current->devout_play)->flags)))) != 0 && AGS_DEVOUT_PLAY(current->devout_play)->recall_id[0] != NULL){ #ifdef AGS_DEBUG g_message("recall id collect: play\0"); #endif list = g_list_prepend(list, (collect_recall_id ? AGS_DEVOUT_PLAY(current->devout_play)->recall_id[0]: current->devout_play)); } if((AGS_DEVOUT_PLAY_SEQUENCER & (g_atomic_int_get(&(AGS_DEVOUT_PLAY(current->devout_play)->flags)))) != 0 && AGS_DEVOUT_PLAY(current->devout_play)->recall_id[1] != NULL){ #ifdef AGS_DEBUG g_message("recall id collect: sequencer\0"); #endif list = g_list_prepend(list, (collect_recall_id ? AGS_DEVOUT_PLAY(current->devout_play)->recall_id[1]: current->devout_play)); } if((AGS_DEVOUT_PLAY_NOTATION & (g_atomic_int_get(&(AGS_DEVOUT_PLAY(current->devout_play)->flags)))) != 0 && AGS_DEVOUT_PLAY(current->devout_play)->recall_id[2] != NULL){ #ifdef AGS_DEBUG g_message("recall id collect: notation\0"); #endif list = g_list_prepend(list, (collect_recall_id ? AGS_DEVOUT_PLAY(current->devout_play)->recall_id[2]: current->devout_play)); } } current = current->link; } return(list); } GList* ags_channel_recursive_collect_recycled(AgsChannel *channel, GList *collected_recall_id) { AgsAudio *audio; AgsChannel *current; GList *recall_id; GList *list; if(channel == NULL){ return(NULL); } current = channel; list = NULL; if(AGS_IS_OUTPUT(channel)){ audio = AGS_AUDIO(current->audio); goto ags_channel_recursive_collect_devout_play_up_OUTPUT; } while(current != NULL){ audio = AGS_AUDIO(current->audio); /* input */ /* nothing to do here */ if(audio->output == NULL || (AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) != 0){ break; } /* output */ if((AGS_AUDIO_ASYNC & (audio->flags)) != 0){ current = ags_channel_nth(audio->output, current->audio_channel); }else{ current = ags_channel_nth(audio->output, current->line); } ags_channel_recursive_collect_devout_play_up_OUTPUT: /* nothing to do here */ current = current->link; } /* input */ if(current != NULL && AGS_IS_INPUT(current)){ recall_id = current->recall_id; while(recall_id != NULL){ if(g_list_find(collected_recall_id, recall_id->data) == NULL){ list = g_list_prepend(list, recall_id->data); } recall_id = recall_id->next; } } return(list); } void ags_channel_recursive_reset_recall_id_down_input(AgsChannel *output, GList *recall_id_list, GList *devout_play_list, GList *invalid_recall_id_list) { AgsAudio *audio; AgsChannel *current; AgsRecallID *recall_id, *default_recall_id; GList *next_recall_id_list; GList *next_invalid_recall_id_list; audio = AGS_AUDIO(output->audio); /* apply */ if((AGS_AUDIO_ASYNC & (audio->flags)) != 0){ current = ags_channel_nth(audio->input, output->audio_channel); while(current != NULL){ /* retrieve next recall id */ if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) == 0){ next_recall_id_list = recall_id_list; next_invalid_recall_id_list = invalid_recall_id_list; }else{ next_recall_id_list = NULL; while(recall_id_list != NULL){ default_recall_id = recall_id_list->data; /* recall id */ recall_id = g_object_new(AGS_TYPE_RECALL_ID, "recycling\0", current->first_recycling, "recycling-container\0", default_recall_id->recycling_container, NULL); if((AGS_RECALL_ID_PLAYBACK & (AGS_RECALL_ID(recall_id_list->data)->flags)) != 0){ recall_id->flags |= AGS_RECALL_ID_PLAYBACK; } if((AGS_RECALL_ID_SEQUENCER & (AGS_RECALL_ID(recall_id_list->data)->flags)) != 0){ recall_id->flags |= AGS_RECALL_ID_SEQUENCER; } if((AGS_RECALL_ID_NOTATION & (AGS_RECALL_ID(recall_id_list->data)->flags)) != 0){ recall_id->flags |= AGS_RECALL_ID_NOTATION; } next_recall_id_list = g_list_prepend(next_recall_id_list, recall_id); recall_id_list = recall_id_list->next; } next_recall_id_list = g_list_reverse(next_recall_id_list); next_invalid_recall_id_list = NULL; while(invalid_recall_id_list != NULL){ if(next_invalid_recall_id_list == NULL){ next_invalid_recall_id_list = ags_recycling_container_get_child_recall_id(AGS_RECALL_ID(invalid_recall_id_list->data)->recycling_container); }else{ next_invalid_recall_id_list = g_list_concat(next_invalid_recall_id_list, ags_recycling_container_get_child_recall_id(AGS_RECALL_ID(invalid_recall_id_list->data)->recycling_container)); } invalid_recall_id_list = invalid_recall_id_list->next; } } /* reset AgsInput */ ags_channel_reset_recall_id(current, recall_id_list, devout_play_list, invalid_recall_id_list); /* follow the links */ ags_channel_recursive_reset_recall_id_down(current->link, next_recall_id_list, devout_play_list, next_invalid_recall_id_list); current = current->next_pad; } }else{ current = ags_channel_nth(audio->input, output->line); /* retrieve next recall id */ if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) == 0){ next_recall_id_list = recall_id_list; next_invalid_recall_id_list = invalid_recall_id_list; }else{ next_recall_id_list = NULL; while(recall_id_list != NULL){ default_recall_id = recall_id_list->data; /* recall id */ recall_id = g_object_new(AGS_TYPE_RECALL_ID, "recycling\0", current->first_recycling, "recycling-container\0", default_recall_id->recycling_container, NULL); if((AGS_RECALL_ID_PLAYBACK & (AGS_RECALL_ID(recall_id_list->data)->flags)) != 0){ recall_id->flags |= AGS_RECALL_ID_PLAYBACK; } if((AGS_RECALL_ID_SEQUENCER & (AGS_RECALL_ID(recall_id_list->data)->flags)) != 0){ recall_id->flags |= AGS_RECALL_ID_SEQUENCER; } if((AGS_RECALL_ID_NOTATION & (AGS_RECALL_ID(recall_id_list->data)->flags)) != 0){ recall_id->flags |= AGS_RECALL_ID_NOTATION; } next_recall_id_list = g_list_prepend(next_recall_id_list, recall_id); recall_id_list = recall_id_list->next; } next_recall_id_list = g_list_reverse(next_recall_id_list); next_invalid_recall_id_list = NULL; while(invalid_recall_id_list != NULL){ if(next_invalid_recall_id_list == NULL){ next_invalid_recall_id_list = ags_recycling_container_get_child_recall_id(AGS_RECALL_ID(invalid_recall_id_list->data)->recycling_container); }else{ next_invalid_recall_id_list = g_list_concat(next_invalid_recall_id_list, ags_recycling_container_get_child_recall_id(AGS_RECALL_ID(invalid_recall_id_list->data)->recycling_container)); } invalid_recall_id_list = invalid_recall_id_list->next; } } /* reset AgsInput */ ags_channel_reset_recall_id(current, next_recall_id_list, devout_play_list, next_invalid_recall_id_list); /* follow the links */ ags_channel_recursive_reset_recall_id_down(current->link, next_recall_id_list, devout_play_list, next_invalid_recall_id_list); } } void ags_channel_recursive_reset_recall_id_down(AgsChannel *current, GList *recall_id_list, GList *devout_play_list, GList *invalid_recall_id_list) { AgsAudio *audio; AgsChannel *input, *last_input; AgsRecycling *recycling; AgsRecyclingContainer *recycling_container; AgsRecallID *recall_id; GList *output_recall_id_list, *default_recall_id_list; GList *output_invalid_recall_id_list, *default_invalid_recall_id_list; guint recycling_length; guint i; if(current == NULL){ return; } audio = AGS_AUDIO(current->audio); /* input */ if((AGS_AUDIO_ASYNC & (audio->flags)) != 0){ input = ags_channel_nth(audio->input, current->audio_channel); last_input = ags_channel_pad_last(input); }else{ input = ags_channel_nth(audio->input, current->line); last_input = input; } /* retrieve next recall id list */ if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) == 0){ default_recall_id_list = output_recall_id_list = recall_id_list; default_invalid_recall_id_list = output_invalid_recall_id_list = invalid_recall_id_list; }else{ output_recall_id_list = NULL; default_recall_id_list = NULL; while(recall_id_list != NULL){ /* output related - create toplevel recycling container */ recycling_length = ags_recycling_position(current->first_recycling, current->last_recycling->next, current->last_recycling); recycling_length += 1; recycling_container = (AgsRecyclingContainer *) g_object_new(AGS_TYPE_RECYCLING_CONTAINER, "length\0", recycling_length, "parent\0", AGS_RECALL_ID(recall_id_list->data)->recycling_container, NULL); ags_audio_add_recycling_container(audio, (GObject *) recycling_container); /* recycling */ recycling = current->first_recycling; for(i = 0; i < recycling_length; i++){ recycling_container->recycling[i] = recycling; recycling = recycling->next; } /* recall id */ recall_id = g_object_new(AGS_TYPE_RECALL_ID, "recycling\0", current->first_recycling, "recycling-container\0", recycling_container, NULL); if((AGS_RECALL_ID_PLAYBACK & (AGS_RECALL_ID(recall_id_list->data)->flags)) != 0){ recall_id->flags |= AGS_RECALL_ID_PLAYBACK; } if((AGS_RECALL_ID_SEQUENCER & (AGS_RECALL_ID(recall_id_list->data)->flags)) != 0){ recall_id->flags |= AGS_RECALL_ID_SEQUENCER; } if((AGS_RECALL_ID_NOTATION & (AGS_RECALL_ID(recall_id_list->data)->flags)) != 0){ recall_id->flags |= AGS_RECALL_ID_NOTATION; } g_object_set(recycling_container, "recall_id\0", recall_id, NULL); output_recall_id_list = g_list_prepend(output_recall_id_list, recall_id); /* default related - create toplevel recycling container */ recycling_length = ags_recycling_position(input->first_recycling, last_input->last_recycling->next, last_input->last_recycling); recycling_length += 1; recycling_container = (AgsRecyclingContainer *) g_object_new(AGS_TYPE_RECYCLING_CONTAINER, "length\0", recycling_length, "parent\0", AGS_RECALL_ID(output_recall_id_list->data)->recycling_container, NULL); ags_audio_add_recycling_container(audio, (GObject *) recycling_container); /* recycling */ recycling = input->first_recycling; for(i = 0; i < recycling_length; i++){ recycling_container->recycling[i] = recycling; recycling = recycling->next; } /* recall id */ recall_id = g_object_new(AGS_TYPE_RECALL_ID, "recycling\0", input->first_recycling, "recycling-container\0", recycling_container, NULL); if((AGS_RECALL_ID_PLAYBACK & (AGS_RECALL_ID(recall_id_list->data)->flags)) != 0){ recall_id->flags |= AGS_RECALL_ID_PLAYBACK; } if((AGS_RECALL_ID_SEQUENCER & (AGS_RECALL_ID(recall_id_list->data)->flags)) != 0){ recall_id->flags |= AGS_RECALL_ID_SEQUENCER; } if((AGS_RECALL_ID_NOTATION & (AGS_RECALL_ID(recall_id_list->data)->flags)) != 0){ recall_id->flags |= AGS_RECALL_ID_NOTATION; } g_object_set(recycling_container, "recall_id\0", recall_id, NULL); default_recall_id_list = g_list_prepend(default_recall_id_list, recall_id); /* iterate */ recall_id_list = recall_id_list->next; } default_recall_id_list = g_list_reverse(default_recall_id_list); /* invalid recall id list */ output_invalid_recall_id_list = NULL; default_invalid_recall_id_list = NULL; while(invalid_recall_id_list != NULL){ if(output_invalid_recall_id_list == NULL){ output_invalid_recall_id_list = ags_recycling_container_get_child_recall_id(AGS_RECALL_ID(invalid_recall_id_list->data)->recycling_container); default_invalid_recall_id_list = ags_recycling_container_get_child_recall_id(AGS_RECALL_ID(output_invalid_recall_id_list->data)->recycling_container); }else{ output_invalid_recall_id_list = g_list_concat(output_invalid_recall_id_list, ags_recycling_container_get_child_recall_id(AGS_RECALL_ID(invalid_recall_id_list->data)->recycling_container)); default_invalid_recall_id_list = g_list_concat(default_invalid_recall_id_list, ags_recycling_container_get_child_recall_id(AGS_RECALL_ID(invalid_recall_id_list->data)->recycling_container)); } invalid_recall_id_list = invalid_recall_id_list->next; } } /* reset on AgsOutput */ ags_channel_reset_recall_id(current, output_recall_id_list, devout_play_list, output_invalid_recall_id_list); if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) != 0){ /* reset on AgsAudio */ ags_audio_reset_recall_id(audio, output_recall_id_list, devout_play_list, output_invalid_recall_id_list); /* reset new recall id on AgsAudio */ ags_audio_reset_recall_id(audio, default_recall_id_list, devout_play_list, default_invalid_recall_id_list); }else{ /* reset on AgsAudio */ ags_audio_reset_recall_id(audio, output_recall_id_list, devout_play_list, output_invalid_recall_id_list); } /* follow the links */ ags_channel_recursive_reset_recall_id_down_input(current, default_recall_id_list, devout_play_list, default_invalid_recall_id_list); /* free allocated lists */ if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) != 0){ g_list_free(output_recall_id_list); g_list_free(default_recall_id_list); g_list_free(output_invalid_recall_id_list); g_list_free(default_invalid_recall_id_list); } } void ags_channel_tillrecycling_reset_recall_id_up(AgsChannel *channel, GList *recall_id_list, GList *devout_play_list, GList *invalid_recall_id_list) { AgsAudio *audio; AgsChannel *current; if(channel == NULL) return; current = channel; if(AGS_IS_OUTPUT(channel)){ audio = AGS_AUDIO(current->audio); ags_audio_reset_recall_id(audio, recall_id_list, devout_play_list, invalid_recall_id_list); goto ags_channel_tillrecycling_reset_recall_id_upOUTPUT; } while(current != NULL){ audio = AGS_AUDIO(current->audio); /* input */ ags_channel_reset_recall_id(current, recall_id_list, devout_play_list, invalid_recall_id_list); /* audio */ ags_audio_reset_recall_id(audio, recall_id_list, devout_play_list, invalid_recall_id_list); /* output */ if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) != 0){ break; } if((AGS_AUDIO_ASYNC & (audio->flags)) != 0){ current = ags_channel_nth(audio->output, current->audio_channel); }else{ current = ags_channel_nth(audio->output, current->line); } ags_channel_tillrecycling_reset_recall_id_upOUTPUT: ags_channel_reset_recall_id(current, recall_id_list, devout_play_list, invalid_recall_id_list); current = current->link; } } void ags_channel_recursive_unset_recall_id_down_input(AgsChannel *output, GList *invalid_recall_id_list) { AgsAudio *audio; AgsChannel *current; GList *next_invalid_recall_id_list; audio = AGS_AUDIO(output->audio); if((AGS_AUDIO_ASYNC & (audio->flags)) != 0){ current = ags_channel_nth(audio->input, output->audio_channel); while(current != NULL){ /* reset AgsInput */ ags_channel_reset_recall_id(current, NULL, NULL, invalid_recall_id_list); /* retrieve next recall id list */ if((AGS_AUDIO_INPUT_HAS_RECYCLING & (audio->flags)) == 0){ next_invalid_recall_id_list = invalid_recall_id_list; }else{ next_invalid_recall_id_list = NULL; while(invalid_recall_id_list != NULL){ if(next_invalid_recall_id_list == NULL){ next_invalid_recall_id_list = ags_recycling_container_get_child_recall_id(AGS_RECALL_ID(invalid_recall_id_list->data)->recycling_container); }else{ next_invalid_recall_id_list = g_list_concat(next_invalid_recall_id_list, ags_recycling_container_get_child_recall_id(AGS_RECALL_ID(invalid_recall_id_list->data)->recycling_container)); } invalid_recall_id_list = invalid_recall_id_list->next; } } /* follow the links */ ags_channel_recursive_unset_recall_id_down(current->link, next_invalid_recall_id_list); /* free allocated lists */ if((AGS_AUDIO_INPUT_HAS_RECYCLING & (audio->flags)) != 0){ g_list_free(next_invalid_recall_id_list); } current = current->next_pad; } }else{ current = ags_channel_nth(audio->input, output->line); /* reset AgsInput */ ags_channel_reset_recall_id(current, NULL, NULL, invalid_recall_id_list); /* retrieve next recall id list */ if((AGS_AUDIO_INPUT_HAS_RECYCLING & (audio->flags)) == 0){ next_invalid_recall_id_list = invalid_recall_id_list; }else{ next_invalid_recall_id_list = NULL; while(invalid_recall_id_list != NULL){ if(next_invalid_recall_id_list != NULL){ next_invalid_recall_id_list = ags_recycling_container_get_child_recall_id(AGS_RECALL_ID(invalid_recall_id_list->data)->recycling_container); }else{ next_invalid_recall_id_list = g_list_concat(next_invalid_recall_id_list, ags_recycling_container_get_child_recall_id(AGS_RECALL_ID(invalid_recall_id_list->data)->recycling_container)); } invalid_recall_id_list = invalid_recall_id_list->next; } } /* follow the links */ ags_channel_recursive_unset_recall_id_down(current->link, next_invalid_recall_id_list); /* free allocated lists */ if((AGS_AUDIO_INPUT_HAS_RECYCLING & (audio->flags)) == 0){ g_list_free(next_invalid_recall_id_list); } } } void ags_channel_recursive_unset_recall_id_down(AgsChannel *current, GList *invalid_recall_id_list) { AgsAudio *audio; GList *next_invalid_recall_id_list; if(current == NULL) return; audio = AGS_AUDIO(current->audio); /* reset on AgsOutput */ ags_channel_reset_recall_id(current, NULL, NULL, invalid_recall_id_list); /* retrieve next recall id list */ if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) != 0){ next_invalid_recall_id_list = invalid_recall_id_list; }else{ next_invalid_recall_id_list = NULL; while(invalid_recall_id_list != NULL){ if(next_invalid_recall_id_list){ next_invalid_recall_id_list = ags_recycling_container_get_child_recall_id(AGS_RECALL_ID(invalid_recall_id_list->data)->recycling_container); }else{ next_invalid_recall_id_list = g_list_concat(next_invalid_recall_id_list, ags_recycling_container_get_child_recall_id(AGS_RECALL_ID(invalid_recall_id_list->data)->recycling_container)); } invalid_recall_id_list = invalid_recall_id_list->next; } } /* reset on AgsAudio */ ags_audio_reset_recall_id(audio, NULL, NULL, invalid_recall_id_list); if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) != 0){ ags_audio_reset_recall_id(audio, NULL, NULL, invalid_recall_id_list); ags_audio_reset_recall_id(audio, NULL, NULL, next_invalid_recall_id_list); }else{ ags_audio_reset_recall_id(audio, NULL, NULL, invalid_recall_id_list); } /* go down */ ags_channel_recursive_unset_recall_id_down_input(current, next_invalid_recall_id_list); /* free allocated lists */ if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) != 0){ g_list_free(next_invalid_recall_id_list); } } void ags_channel_tillrecycling_unset_recall_id_up(AgsChannel *channel, GList *invalid_recall_id_list) { AgsAudio *audio; AgsChannel *current; if(channel == NULL) return; current = channel; if(AGS_IS_OUTPUT(channel)){ audio = AGS_AUDIO(current->audio); goto ags_channel_tillrecycling_reset_recall_id_upOUTPUT; } while(current != NULL){ audio = AGS_AUDIO(current->audio); /* input */ ags_channel_reset_recall_id(current, NULL, NULL, invalid_recall_id_list); if((AGS_AUDIO_INPUT_HAS_RECYCLING & (audio->flags)) != 0){ break; } /* audio */ ags_audio_reset_recall_id(audio, NULL, NULL, invalid_recall_id_list); /* output */ if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) != 0){ break; } if((AGS_AUDIO_ASYNC & (audio->flags)) != 0){ current = ags_channel_nth(audio->output, current->audio_channel); }else{ current = ags_channel_nth(audio->output, current->line); } ags_channel_tillrecycling_reset_recall_id_upOUTPUT: ags_audio_reset_recall_id(audio, NULL, NULL, invalid_recall_id_list); ags_channel_reset_recall_id(current, NULL, NULL, invalid_recall_id_list); current = current->link; } } void ags_channel_recursive_duplicate_recall_down_input(AgsChannel *output, GList *recall_id_list){ AgsAudio *audio; AgsChannel *current; audio = AGS_AUDIO(output->audio); if((AGS_AUDIO_ASYNC & (audio->flags)) != 0){ current = ags_channel_nth(audio->input, output->audio_channel); while(current != NULL){ /* duplicate input */ ags_channel_recursive_reset_channel_duplicate_recall(current, recall_id_list); if(current->link != NULL){ /* follow the links */ ags_channel_recursive_duplicate_recall_down(current->link, recall_id_list); } current = current->next_pad; } }else{ current = ags_channel_nth(audio->input, output->line); /* duplicate input */ ags_channel_recursive_reset_channel_duplicate_recall(current, recall_id_list); /* follow the links */ if(current->link != NULL){ ags_channel_recursive_duplicate_recall_down(current->link, recall_id_list); } } } void ags_channel_recursive_duplicate_recall_down(AgsChannel *current, GList *recall_id_list){ AgsAudio *audio; GList *next_recall_id_list, *default_recall_id_list; if(current == NULL) return; audio = AGS_AUDIO(current->audio); /* retrieve next recall id list */ if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) == 0){ next_recall_id_list = recall_id_list; default_recall_id_list = recall_id_list; }else{ next_recall_id_list = NULL; default_recall_id_list = NULL; while(recall_id_list != NULL){ if(next_recall_id_list == NULL){ next_recall_id_list = ags_recycling_container_get_child_recall_id(AGS_RECALL_ID(recall_id_list->data)->recycling_container); default_recall_id_list = ags_recycling_container_get_child_recall_id(AGS_RECALL_ID(next_recall_id_list->data)->recycling_container); }else{ next_recall_id_list = g_list_concat(next_recall_id_list, ags_recycling_container_get_child_recall_id(AGS_RECALL_ID(recall_id_list->data)->recycling_container)); default_recall_id_list = g_list_concat(default_recall_id_list, ags_recycling_container_get_child_recall_id(AGS_RECALL_ID(next_recall_id_list->data)->recycling_container)); } recall_id_list = recall_id_list->next; } } /* duplicate output */ ags_channel_recursive_reset_channel_duplicate_recall(current, next_recall_id_list); /* duplicate audio */ ags_channel_recursive_reset_audio_duplicate_recall(audio, next_recall_id_list); if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) != 0){ ags_channel_recursive_reset_audio_duplicate_recall(audio, default_recall_id_list); } /* go down */ ags_channel_recursive_duplicate_recall_down_input(current, default_recall_id_list); if((AGS_AUDIO_INPUT_HAS_RECYCLING & (audio->flags)) == 0){ g_list_free(next_recall_id_list); g_list_free(default_recall_id_list); } } void ags_channel_tillrecycling_duplicate_recall_up(AgsChannel *channel, GList *recall_id_list){ AgsAudio *audio; AgsChannel *current; if(channel == NULL) return; audio = AGS_AUDIO(channel->audio); current = channel; if(AGS_IS_OUTPUT(channel)){ goto ags_channel_tillrecycling_duplicate_recall_upOUTPUT; } while(current != NULL){ audio = AGS_AUDIO(current->audio); /* duplicate input */ ags_channel_recursive_reset_channel_duplicate_recall(current, recall_id_list); /* duplicate audio */ ags_channel_recursive_reset_audio_duplicate_recall(audio, recall_id_list); /* duplicate output */ if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) != 0){ break; } if((AGS_AUDIO_ASYNC & (audio->flags)) != 0){ current = ags_channel_nth(audio->output, current->audio_channel); }else{ current = ags_channel_nth(audio->output, current->line); } ags_channel_tillrecycling_duplicate_recall_upOUTPUT: ags_channel_recursive_reset_channel_duplicate_recall(current, recall_id_list); current = current->link; } } void ags_channel_recursive_resolve_recall_down_input(AgsChannel *output, GList *recall_id_list) { AgsAudio *audio; AgsChannel *current; audio = AGS_AUDIO(output->audio); if((AGS_AUDIO_ASYNC & (audio->flags)) != 0){ current = ags_channel_nth(audio->input, output->audio_channel); while(current != NULL){ /* resolve input */ ags_channel_recursive_reset_channel_resolve_recall(current, recall_id_list); if(current->link != NULL){ /* follow the links */ ags_channel_recursive_resolve_recall_down(current->link, recall_id_list); } current = current->next_pad; } }else{ current = ags_channel_nth(audio->input, output->line); /* resolve input */ ags_channel_recursive_reset_channel_resolve_recall(current, recall_id_list); /* follow the links */ if(current->link != NULL){ ags_channel_recursive_resolve_recall_down(current->link, recall_id_list); } } } void ags_channel_recursive_resolve_recall_down(AgsChannel *current, GList *recall_id_list) { AgsAudio *audio; GList *next_recall_id_list, *default_recall_id_list; if(current == NULL) return; audio = AGS_AUDIO(current->audio); /* retrieve next recall id list */ if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) == 0){ next_recall_id_list = recall_id_list; default_recall_id_list = recall_id_list; }else{ next_recall_id_list = NULL; default_recall_id_list = NULL; while(recall_id_list != NULL){ if(next_recall_id_list != NULL){ next_recall_id_list = ags_recycling_container_get_child_recall_id(AGS_RECALL_ID(recall_id_list->data)->recycling_container); default_recall_id_list = ags_recycling_container_get_child_recall_id(AGS_RECALL_ID(next_recall_id_list->data)->recycling_container); }else{ next_recall_id_list = g_list_concat(next_recall_id_list, ags_recycling_container_get_child_recall_id(AGS_RECALL_ID(recall_id_list->data)->recycling_container)); default_recall_id_list = g_list_concat(default_recall_id_list, ags_recycling_container_get_child_recall_id(AGS_RECALL_ID(next_recall_id_list->data)->recycling_container)); } recall_id_list = recall_id_list->next; } } /* resolve output */ ags_channel_recursive_reset_channel_resolve_recall(current, next_recall_id_list); /* resolve audio */ ags_channel_recursive_reset_audio_resolve_recall(audio, next_recall_id_list); if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) != 0){ ags_channel_recursive_reset_audio_resolve_recall(audio, default_recall_id_list); } /* go down */ ags_channel_recursive_resolve_recall_down_input(current, default_recall_id_list); if((AGS_AUDIO_INPUT_HAS_RECYCLING & (audio->flags)) == 0){ g_list_free(next_recall_id_list); g_list_free(default_recall_id_list); } } void ags_channel_tillrecycling_resolve_recall_up(AgsChannel *channel, GList *recall_id_list) { AgsAudio *audio; AgsChannel *current; if(channel == NULL) return; audio = AGS_AUDIO(channel->audio); current = channel; if(AGS_IS_OUTPUT(channel)){ goto ags_channel_tillrecycling_resolve_recall_upOUTPUT; } while(current != NULL){ audio = AGS_AUDIO(current->audio); /* resolve input */ ags_channel_recursive_reset_channel_resolve_recall(current, recall_id_list); /* resolve audio */ ags_channel_recursive_reset_audio_resolve_recall(audio, recall_id_list); /* resolve output */ if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) != 0){ break; } if((AGS_AUDIO_ASYNC & (audio->flags)) != 0){ current = ags_channel_nth(audio->output, current->audio_channel); }else{ current = ags_channel_nth(audio->output, current->line); } ags_channel_tillrecycling_resolve_recall_upOUTPUT: ags_channel_recursive_reset_channel_resolve_recall(current, recall_id_list); current = current->link; } } void ags_channel_recursive_init_recall_down_input(AgsChannel *output, GList *recall_id_list) { AgsAudio *audio; AgsChannel *current; audio = AGS_AUDIO(output->audio); if((AGS_AUDIO_ASYNC & (audio->flags)) != 0){ current = ags_channel_nth(audio->input, output->audio_channel); while(current != NULL){ /* follow the links */ ags_channel_recursive_init_recall_down(current->link, recall_id_list); /* init AgsInput */ ags_channel_recursive_reset_channel_init_recall(current, recall_id_list); current = current->next_pad; } }else{ current = ags_channel_nth(audio->input, output->line); /* follow the links */ ags_channel_recursive_init_recall_down(current->link, recall_id_list); /* init AgsInput */ if(current->link != NULL){ ags_channel_recursive_reset_channel_init_recall(current, recall_id_list); } } } void ags_channel_recursive_init_recall_down(AgsChannel *current, GList *recall_id_list) { AgsAudio *audio; GList *next_recall_id_list, *default_recall_id_list; if(current == NULL) return; audio = AGS_AUDIO(current->audio); /* retrieve next recall id list */ if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) == 0){ next_recall_id_list = recall_id_list; default_recall_id_list = recall_id_list; }else{ next_recall_id_list = NULL; default_recall_id_list = NULL; while(recall_id_list != NULL){ if(next_recall_id_list == NULL){ next_recall_id_list = ags_recycling_container_get_child_recall_id(AGS_RECALL_ID(recall_id_list->data)->recycling_container); default_recall_id_list = ags_recycling_container_get_child_recall_id(AGS_RECALL_ID(next_recall_id_list->data)->recycling_container); }else{ next_recall_id_list = g_list_concat(next_recall_id_list, ags_recycling_container_get_child_recall_id(AGS_RECALL_ID(recall_id_list->data)->recycling_container)); default_recall_id_list = g_list_concat(default_recall_id_list, ags_recycling_container_get_child_recall_id(AGS_RECALL_ID(next_recall_id_list->data)->recycling_container)); } recall_id_list = recall_id_list->next; } } /* follow the links */ ags_channel_recursive_resolve_recall_down_input(current, default_recall_id_list); /* init audio */ ags_channel_recursive_reset_audio_init_recall(audio, next_recall_id_list); if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) != 0){ ags_channel_recursive_reset_audio_init_recall(audio, default_recall_id_list); } /* init output */ ags_channel_recursive_reset_channel_init_recall(current, next_recall_id_list); if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) != 0){ g_list_free(next_recall_id_list); g_list_free(default_recall_id_list); } } void ags_channel_tillrecycling_init_recall_up(AgsChannel *channel, GList *recall_id_list) { AgsAudio *audio; AgsChannel *current; if(channel == NULL) return; audio = AGS_AUDIO(channel->audio); current = channel; if(AGS_IS_OUTPUT(channel)){ goto ags_channel_tillrecycling_init_recall_upOUTPUT; } while(current != NULL){ audio = AGS_AUDIO(current->audio); /* init input */ ags_channel_recursive_reset_channel_init_recall(current, recall_id_list); /* init audio */ ags_channel_recursive_reset_audio_init_recall(audio, recall_id_list); /* init output */ if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) != 0){ break; } if((AGS_AUDIO_ASYNC & (audio->flags)) != 0){ current = ags_channel_nth(audio->output, current->audio_channel); }else{ current = ags_channel_nth(audio->output, current->line); } ags_channel_tillrecycling_init_recall_upOUTPUT: ags_channel_recursive_reset_channel_init_recall(current, recall_id_list); current = current->link; } } /* entry point */ if(channel == NULL && link == NULL){ return; } if((link != NULL && (AGS_IS_OUTPUT(link)) || AGS_IS_INPUT(channel))){ AgsChannel *tmp, *tmp_old; tmp = link; link = channel; channel = tmp; tmp_old = old_link_link; old_link_link = old_channel_link; old_channel_link = tmp_old; } /* collect AgsDevoutPlays as lists */ /* go down */ channel_devout_play_list = NULL; channel_devout_play_list = ags_channel_tillrecycling_collect_devout_play_down(channel, channel_devout_play_list, FALSE); /* go up */ link_devout_play_list = NULL; link_devout_play_list = ags_channel_recursive_collect_devout_play_up(link, FALSE); /* retrieve lower */ channel_recall_id_list = NULL; channel_recall_id_list = ags_channel_tillrecycling_collect_devout_play_down(channel, channel_recall_id_list, TRUE); /* retrieve upper */ link_recall_id_list = NULL; link_recall_id_list = ags_channel_recursive_collect_devout_play_up(link, TRUE); recycled_recall_id_list = NULL; recycled_recall_id_list = ags_channel_recursive_collect_recycled(link, link_recall_id_list); /* retrieve invalid lower */ channel_invalid_recall_id_list = NULL; channel_invalid_recall_id_list = ags_channel_tillrecycling_collect_devout_play_down(old_link_link, channel_invalid_recall_id_list, TRUE); /* retrieve invalid upper */ link_invalid_recall_id_list = NULL; link_invalid_recall_id_list = ags_channel_recursive_collect_devout_play_up(old_channel_link, TRUE); /* go down */ ags_channel_recursive_reset_recall_id_down(channel, link_recall_id_list, link_devout_play_list, channel_invalid_recall_id_list); ags_channel_recursive_reset_recall_id_down(channel, recycled_recall_id_list, NULL, NULL); /* go up */ ags_channel_tillrecycling_reset_recall_id_up(link, channel_recall_id_list, channel_devout_play_list, link_invalid_recall_id_list); /* unset recall ids */ /* go down */ ags_channel_recursive_unset_recall_id_down(old_link_link, link_invalid_recall_id_list); /* go up */ ags_channel_tillrecycling_unset_recall_id_up(old_channel_link, channel_invalid_recall_id_list); /* duplicate recalls */ /* go down */ ags_channel_recursive_duplicate_recall_down(channel, link_recall_id_list); ags_channel_recursive_duplicate_recall_down(channel, recycled_recall_id_list); /* go up */ ags_channel_tillrecycling_duplicate_recall_up(link, channel_recall_id_list); /* resolve recalls */ /* go down */ ags_channel_recursive_resolve_recall_down(channel, link_recall_id_list); ags_channel_recursive_resolve_recall_down(channel, recycled_recall_id_list); /* go up */ ags_channel_tillrecycling_resolve_recall_up(link, channel_recall_id_list); /* init recalls */ for(stage = 0; stage < 3; stage++){ /* go down */ ags_channel_recursive_init_recall_down(channel, link_recall_id_list); ags_channel_recursive_init_recall_down(channel, recycled_recall_id_list); /* go up */ ags_channel_tillrecycling_init_recall_up(link, channel_recall_id_list); } /* free the lists */ g_list_free(channel_devout_play_list); g_list_free(link_devout_play_list); g_list_free(channel_invalid_recall_id_list); g_list_free(link_invalid_recall_id_list); g_list_free(channel_recall_id_list); g_list_free(link_recall_id_list); } /** * ags_channel_new: * @audio: the #AgsAudio * * Creates a #AgsChannel, linking tree to @audio. * * Returns: a new #AgsChannel * * Since: 0.3 */ AgsChannel* ags_channel_new(GObject *audio) { AgsChannel *channel; channel = (AgsChannel *) g_object_new(AGS_TYPE_CHANNEL, "audio\0", audio, NULL); return(channel); } gsequencer-0.6.37/src/ags/audio/ags_channel.h0000644000175000017500000001540312626272146015761 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_CHANNEL_H__ #define __AGS_CHANNEL_H__ #include #include #include #include #include #include #include #define AGS_TYPE_CHANNEL (ags_channel_get_type()) #define AGS_CHANNEL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_CHANNEL, AgsChannel)) #define AGS_CHANNEL_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_CHANNEL, AgsChannelClass)) #define AGS_IS_CHANNEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_CHANNEL)) #define AGS_IS_CHANNEL_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_CHANNEL)) #define AGS_CHANNEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_CHANNEL, AgsChannelClass)) typedef struct _AgsChannel AgsChannel; typedef struct _AgsChannelClass AgsChannelClass; typedef enum{ AGS_CHANNEL_RUNNING = 1, }AgsChannelFlags; typedef enum{ AGS_CHANNEL_RECALL_ID_RUN_STAGE, AGS_CHANNEL_RECALL_ID_CANCEL, }AgsChannelRecallIDMode; #define AGS_CHANNEL_ERROR (ags_channel_error_quark()) typedef enum{ AGS_CHANNEL_ERROR_LOOP_IN_LINK, }AgsChannelError; struct _AgsChannel { GObject object; guint flags; GObject *audio; GObject *devout; AgsChannel *prev; AgsChannel *prev_pad; AgsChannel *next; AgsChannel *next_pad; guint pad; guint audio_channel; guint line; char *note; gpointer devout_play; // GObject *recycling_container; // contains child recycling GList *recall_id; // there may be several recall's running GList *container; GList *recall; GList *play; AgsChannel *link; AgsRecycling *first_recycling; AgsRecycling *last_recycling; GList *pattern; AgsNotation *notation; GtkWidget *line_widget; gpointer file_data; }; struct _AgsChannelClass { GObjectClass object; void (*recycling_changed)(AgsChannel *channel, AgsRecycling *old_start_region, AgsRecycling *old_end_region, AgsRecycling *new_start_region, AgsRecycling *new_end_region, AgsRecycling *old_start_changed_region, AgsRecycling *old_end_changed_region, AgsRecycling *new_start_changed_region, AgsRecycling *new_end_changed_region); void (*done)(AgsChannel *channel, AgsRecallID *recall_id); }; GType ags_channel_get_type(); GQuark ags_channel_error_quark(); AgsRecall* ags_channel_find_recall(AgsChannel *channel, char *effect, char *name); AgsChannel* ags_channel_first(AgsChannel *channel); AgsChannel* ags_channel_last(AgsChannel *channel); AgsChannel* ags_channel_nth(AgsChannel *channel, guint nth); AgsChannel* ags_channel_pad_first(AgsChannel *channel); AgsChannel* ags_channel_pad_last(AgsChannel *channel); AgsChannel* ags_channel_pad_nth(AgsChannel *channel, guint nth); AgsChannel* ags_channel_first_with_recycling(AgsChannel *channel); AgsChannel* ags_channel_last_with_recycling(AgsChannel *channel); AgsChannel* ags_channel_prev_with_recycling(AgsChannel *channel); AgsChannel* ags_channel_next_with_recycling(AgsChannel *channel); void ags_channel_set_devout(AgsChannel *channel, GObject *devout); void ags_channel_remove_recall_id(AgsChannel *channel, AgsRecallID *recall_id); void ags_channel_add_recall_id(AgsChannel *channel, AgsRecallID *recall_id); void ags_channel_add_recall_container(AgsChannel *channel, GObject *recall_container); void ags_channel_remove_recall_container(AgsChannel *channel, GObject *recall_container); void ags_channel_remove_recall(AgsChannel *channel, GObject *recall, gboolean play); void ags_channel_add_recall(AgsChannel *channel, GObject *recall, gboolean play); void ags_channel_safe_resize_audio_signal(AgsChannel *channel, guint size); void ags_channel_duplicate_recall(AgsChannel *channel, AgsRecallID *recall_id); void ags_channel_resolve_recall(AgsChannel *channel, AgsRecallID *recall_id); void ags_channel_init_recall(AgsChannel *channel, gint stage, AgsRecallID *recall_id); void ags_channel_play(AgsChannel *channel, AgsRecallID *recall_id, gint stage); void ags_channel_done(AgsChannel *channel, AgsRecallID *recall_id); void ags_channel_cancel(AgsChannel *channel, AgsRecallID *recall_id); void ags_channel_remove(AgsChannel *channel, AgsRecallID *recall_id); void ags_channel_recall_id_set(AgsChannel *output, AgsRecallID *recall_id, gboolean ommit_own_channel, guint mode, ...); GList* ags_channel_find_port(AgsChannel *channel); void ags_channel_set_link(AgsChannel *channel, AgsChannel *link, GError **error); void ags_channel_set_recycling(AgsChannel *channel, AgsRecycling *first_recycling, AgsRecycling *last_recycling, gboolean update, gboolean destroy_old); void ags_channel_recursive_reset_recycling_container(AgsChannel *channel, AgsRecyclingContainer *old_recycling_container, AgsRecyclingContainer *recycling_container); void ags_channel_recycling_changed(AgsChannel *channel, AgsRecycling *old_start_region, AgsRecycling *old_end_region, AgsRecycling *new_start_region, AgsRecycling *new_end_region, AgsRecycling *old_start_changed_region, AgsRecycling *old_end_changed_region, AgsRecycling *new_start_changed_region, AgsRecycling *new_end_changed_region); AgsRecallID* ags_channel_recursive_play_init(AgsChannel *channel, gint stage, gboolean arrange_recall_id, gboolean duplicate_templates, gboolean playback, gboolean sequencer, gboolean notation, gboolean resolve_dependencies, AgsRecallID *recall_id); void ags_channel_recursive_play_threaded(AgsChannel *channel, AgsRecallID *recall_id, gint stage); inline void ags_channel_recursive_play(AgsChannel *channel, AgsRecallID *recall_id, gint stage); void ags_channel_tillrecycling_cancel(AgsChannel *channel, AgsRecallID *recall_id); void ags_channel_recursive_reset_recall_ids(AgsChannel *channel, AgsChannel *link, AgsChannel *old_channel_link, AgsChannel *old_link_link); AgsChannel* ags_channel_new(GObject *audio); #endif /*__AGS_CHANNEL_H__*/ gsequencer-0.6.37/src/ags/audio/ags_recall_channel.h0000644000175000017500000000410212612232540017262 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_RECALL_CHANNEL_H__ #define __AGS_RECALL_CHANNEL_H__ #include #include #include #include #define AGS_TYPE_RECALL_CHANNEL (ags_recall_channel_get_type()) #define AGS_RECALL_CHANNEL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_RECALL_CHANNEL, AgsRecallChannel)) #define AGS_RECALL_CHANNEL_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_RECALL_CHANNEL, AgsRecallChannelClass)) #define AGS_IS_RECALL_CHANNEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_RECALL_CHANNEL)) #define AGS_IS_RECALL_CHANNEL_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_RECALL_CHANNEL)) #define AGS_RECALL_CHANNEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_RECALL_CHANNEL, AgsRecallChannelClass)) typedef struct _AgsRecallChannel AgsRecallChannel; typedef struct _AgsRecallChannelClass AgsRecallChannelClass; struct _AgsRecallChannel { AgsRecall recall; AgsChannel *destination; AgsChannel *source; }; struct _AgsRecallChannelClass { AgsRecallClass recall; }; GType ags_recall_channel_get_type(); GList* ags_recall_channel_find_channel(GList *recall_channel, AgsChannel *channel); AgsRecallChannel* ags_recall_channel_new(); #endif /*__AGS_RECALL_CHANNEL_H__*/ gsequencer-0.6.37/src/ags/audio/ags_recycling.h0000644000175000017500000000604312626272146016330 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_RECYCLING_H__ #define __AGS_RECYCLING_H__ #include #include #define AGS_TYPE_RECYCLING (ags_recycling_get_type()) #define AGS_RECYCLING(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_RECYCLING, AgsRecycling)) #define AGS_RECYCLING_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_RECYCLING, AgsRecyclingClass)) #define AGS_IS_RECYCLING(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_RECYCLING)) #define AGS_IS_RECYCLING_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_RECYCLING)) #define AGS_RECYCLING_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_RECYCLING, AgsRecyclingClass)) typedef struct _AgsRecycling AgsRecycling; typedef struct _AgsRecyclingClass AgsRecyclingClass; typedef enum{ AGS_RECYCLING_MUTED = 1, }AgsRecyclingFlags; struct _AgsRecycling { GObject object; guint flags; GObject *channel; GObject *devout; AgsRecycling *parent; AgsRecycling *next; AgsRecycling *prev; GList *audio_signal; }; struct _AgsRecyclingClass { GObjectClass object; void (*add_audio_signal)(AgsRecycling *recycling, AgsAudioSignal *audio_signal); void (*remove_audio_signal)(AgsRecycling *recycling, AgsAudioSignal *audio_signal); }; GType ags_recycling_get_type(void); void ags_recycling_set_devout(AgsRecycling *recycling, GObject *devout); void ags_recycling_add_audio_signal(AgsRecycling *recycling, AgsAudioSignal *audio_signal); void ags_recycling_remove_audio_signal(AgsRecycling *recycling, AgsAudioSignal *audio_signal); void ags_recycling_create_audio_signal_with_defaults(AgsRecycling *recycling, AgsAudioSignal *audio_signal, gdouble delay, guint attack); void ags_recycling_create_audio_signal_with_frame_count(AgsRecycling *recycling, AgsAudioSignal *audio_signal, guint frame_count, gdouble delay, guint attack); gint ags_recycling_position(AgsRecycling *start_recycling, AgsRecycling *end_region, AgsRecycling *recycling); AgsRecycling* ags_recycling_find_next_channel(AgsRecycling *start_region, AgsRecycling *end_region, GObject *prev_channel); AgsRecycling* ags_recycling_new(GObject *devout); #endif /*__AGS_RECYCLING_H__*/ gsequencer-0.6.37/src/ags/audio/ags_audio.h0000644000175000017500000001231112626272146015445 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_AUDIO_H__ #define __AGS_AUDIO_H__ #include #include #include #define AGS_TYPE_AUDIO (ags_audio_get_type ()) #define AGS_AUDIO(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_AUDIO, AgsAudio)) #define AGS_AUDIO_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_AUDIO, AgsAudioClass)) #define AGS_IS_AUDIO(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_AUDIO)) #define AGS_IS_AUDIO_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_AUDIO)) #define AGS_AUDIO_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_AUDIO, AgsAudioClass)) typedef struct _AgsAudio AgsAudio; typedef struct _AgsAudioClass AgsAudioClass; typedef enum{ AGS_AUDIO_OUTPUT_HAS_RECYCLING = 1, AGS_AUDIO_INPUT_HAS_RECYCLING = 1 << 1, AGS_AUDIO_INPUT_TAKES_FILE = 1 << 2, AGS_AUDIO_HAS_NOTATION = 1 << 3, AGS_AUDIO_SYNC = 1 << 4, // can be combined with below AGS_AUDIO_ASYNC = 1 << 5, AGS_AUDIO_RUNNING = 1 << 6, AGS_AUDIO_PLAYING = 1 << 7, AGS_AUDIO_NOTATION_DEFAULT = 1 << 8, AGS_AUDIO_REVERSE_MAPPING = 1 << 9, AGS_AUDIO_PATTERN_MODE = 1 << 10, }AgsAudioFlags; struct _AgsAudio { GObject object; guint flags; GObject *devout; guint level; guint sequence_length; guint audio_channels; guint frequence; guint output_pads; guint output_lines; guint input_pads; guint input_lines; AgsChannel *output; AgsChannel *input; gpointer devout_play_domain; GList *notation; GList *recall_id; GList *recycling_container; GList *container; GList *recall; GList *play; GList *recall_remove; //TODO:JK: verify deprecation GList *play_remove; //TODO:JK: verify deprecation GtkWidget *machine; }; struct _AgsAudioClass { GObjectClass object; void (*set_audio_channels)(AgsAudio *audio, guint audio_channels, guint audio_channels_old); void (*set_pads)(AgsAudio *audio, GType type, guint pads, guint pads_old); AgsRecallID* (*init_run)(AgsAudio *audio); void (*tact)(AgsAudio *audio, AgsRecallID *recall_id); void (*done)(AgsAudio *audio, AgsRecallID *recall_id); }; GType ags_audio_get_type(); void ags_audio_set_devout(AgsAudio *audio, GObject *devout); void ags_audio_set_flags(AgsAudio *audio, guint flags); void ags_audio_unset_flags(AgsAudio *audio, guint flags); void ags_audio_set_audio_channels(AgsAudio *audio, guint audio_channels); void ags_audio_set_pads(AgsAudio *audio, GType type, guint pads); void ags_audio_set_sequence_length(AgsAudio *audio, guint sequence_length); void ags_audio_add_recycling_container(AgsAudio *audio, GObject *recycling_container); void ags_audio_remove_recycling_container(AgsAudio *audio, GObject *recycling_container); void ags_audio_add_recall_id(AgsAudio *audio, GObject *recall_id); void ags_audio_remove_recall_id(AgsAudio *audio, GObject *recall_id); void ags_audio_add_recall_container(AgsAudio *audio, GObject *recall_container); void ags_audio_remove_recall_container(AgsAudio *audio, GObject *recall_container); void ags_audio_add_recall(AgsAudio *audio, GObject *recall, gboolean play); void ags_audio_remove_recall(AgsAudio *audio, GObject *recall, gboolean play); void ags_audio_recall_change_state(AgsAudio *audio, gboolean enable); AgsRecallID* ags_audio_init_run(AgsAudio *audio); void ags_audio_duplicate_recall(AgsAudio *audio, AgsRecallID *recall_id); void ags_audio_init_recall(AgsAudio *audio, gint stage, AgsRecallID *recall_id); void ags_audio_resolve_recall(AgsAudio *audio, AgsRecallID *recall_id); gboolean ags_audio_is_playing(AgsAudio *audio); void ags_audio_play(AgsAudio *audio, AgsRecallID *recall_id, gint stage); void ags_audio_tact(AgsAudio *audio, AgsRecallID *recall_id); void ags_audio_done(AgsAudio *audio, AgsRecallID *recall_id); void ags_audio_cancel(AgsAudio *audio, AgsRecallID *recall_id); void ags_audio_remove(AgsAudio *audio, AgsRecallID *recall_id); GList* ags_audio_find_port(AgsAudio *audio); void ags_audio_open_files(AgsAudio *audio, GSList *filenames, gboolean overwrite_channels, gboolean create_channels); GList* ags_audio_recursive_play_init(AgsAudio *audio, gboolean playback, gboolean sequencer, gboolean notation); AgsAudio* ags_audio_new(); #endif /*__AGS_AUDIO_H__*/ gsequencer-0.6.37/src/ags/audio/ags_task.h0000644000175000017500000000365112626272146015315 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_TASK_H__ #define __AGS_TASK_H__ #include #include #define AGS_TYPE_TASK (ags_task_get_type()) #define AGS_TASK(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_TASK, AgsTask)) #define AGS_TASK_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_TASK, AgsTaskClass)) #define AGS_IS_TASK(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_TASK)) #define AGS_IS_TASK_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_TASK)) #define AGS_TASK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_TASK, AgsTaskClass))) typedef struct _AgsTask AgsTask; typedef struct _AgsTaskClass AgsTaskClass; typedef enum{ AGS_TASK_LOCKED = 1, }AgsTaskFlags; struct _AgsTask { GObject object; guint flags; char *name; guint delay; pthread_cond_t wait_sync_task_cond; }; struct _AgsTaskClass { GObjectClass object; void (*launch)(AgsTask *task); void (*failure)(AgsTask *task, GError *error); }; GType ags_task_get_type(); void ags_task_launch(AgsTask *task); void ags_task_failure(AgsTask *task, GError *error); AgsTask* ags_task_new(); #endif /*__AGS_TASK_H__*/ gsequencer-0.6.37/src/ags/audio/ags_recall_recycling.c0000644000175000017500000010135312633056342017641 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void ags_recall_recycling_class_init(AgsRecallRecyclingClass *recall_recycling); void ags_recall_recycling_connectable_interface_init(AgsConnectableInterface *connectable); void ags_recall_recycling_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable); void ags_recall_recycling_init(AgsRecallRecycling *recall_recycling); void ags_recall_recycling_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_recall_recycling_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_recall_recycling_connect(AgsConnectable *connectable); void ags_recall_recycling_disconnect(AgsConnectable *connectable); void ags_recall_recycling_connect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_recall_recycling_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_recall_recycling_finalize(GObject *gobject); AgsRecall* ags_recall_recycling_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter); void ags_recall_recycling_source_add_audio_signal_callback(AgsRecycling *source, AgsAudioSignal *audio_signal, AgsRecallRecycling *recall_recycling); void ags_recall_recycling_source_remove_audio_signal_callback(AgsRecycling *source, AgsAudioSignal *audio_signal, AgsRecallRecycling *recall_recycling); void ags_recall_recycling_destination_add_audio_signal_callback(AgsRecycling *destination, AgsAudioSignal *audio_signal, AgsRecallRecycling *recall_recycling); void ags_recall_recycling_destination_remove_audio_signal_callback(AgsRecycling *destination, AgsAudioSignal *audio_signal, AgsRecallRecycling *recall_recycling); void ags_recall_recycling_duplicate_list(GList *list, GList **target); /** * SECTION:ags_recall_recycling * @short_description: recycling context of recall * @title: AgsRecallRecycling * @section_id: * @include: ags/audio/ags_recall_recycling.h * * #AgsRecallRecycling acts as recycling recall. */ enum{ PROP_0, PROP_AUDIO_CHANNEL, PROP_DESTINATION, PROP_SOURCE, PROP_CHILD_DESTINATION, PROP_CHILD_SOURCE, }; static gpointer ags_recall_recycling_parent_class = NULL; static AgsConnectableInterface* ags_recall_recycling_parent_connectable_interface; static AgsDynamicConnectableInterface *ags_recall_recycling_parent_dynamic_connectable_interface; extern pthread_mutex_t ags_application_mutex; GType ags_recall_recycling_get_type() { static GType ags_type_recall_recycling = 0; if(!ags_type_recall_recycling){ static const GTypeInfo ags_recall_recycling_info = { sizeof (AgsRecallRecyclingClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_recall_recycling_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsRecallRecycling), 0, /* n_preallocs */ (GInstanceInitFunc) ags_recall_recycling_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_recall_recycling_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_dynamic_connectable_interface_info = { (GInterfaceInitFunc) ags_recall_recycling_dynamic_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_recall_recycling = g_type_register_static(AGS_TYPE_RECALL, "AgsRecallRecycling\0", &ags_recall_recycling_info, 0); g_type_add_interface_static(ags_type_recall_recycling, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_recall_recycling, AGS_TYPE_DYNAMIC_CONNECTABLE, &ags_dynamic_connectable_interface_info); } return(ags_type_recall_recycling); } void ags_recall_recycling_class_init(AgsRecallRecyclingClass *recall_recycling) { GObjectClass *gobject; AgsRecallClass *recall; GParamSpec *param_spec; ags_recall_recycling_parent_class = g_type_class_peek_parent(recall_recycling); /* GObjectClass */ gobject = (GObjectClass *) recall_recycling; gobject->set_property = ags_recall_recycling_set_property; gobject->get_property = ags_recall_recycling_get_property; gobject->finalize = ags_recall_recycling_finalize; /* properties */ /** * AgsRecallRecycling:audio-channel: * * The assigned destination recycling. * * Since: 0.4.0 */ param_spec = g_param_spec_uint("audio-channel\0", "assigned audio channel\0", "The audio channel this recall does output to\0", 0, 65536, 0, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_AUDIO_CHANNEL, param_spec); /** * AgsRecallRecycling:destination: * * The assigned destination recycling. * * Since: 0.4.0 */ param_spec = g_param_spec_object("destination\0", "AgsRecycling destination of this recall\0", "The AgsRecycling destination of this recall\0", AGS_TYPE_RECYCLING, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_DESTINATION, param_spec); /** * AgsRecallRecycling:destination: * * The assigned source recycling. * * Since: 0.4.0 */ param_spec = g_param_spec_object("source\0", "AgsRecycling source of this recall\0", "The AgsRecycling source of this recall\0", AGS_TYPE_RECYCLING, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_SOURCE, param_spec); /** * AgsRecallRecycling:child-destination: * * The assigned destination audio signal. * * Since: 0.4.0 */ param_spec = g_param_spec_object("child-destination\0", "AgsAudioSignal of this recall\0", "The destination AgsAudioSignal child recall needs\0", AGS_TYPE_AUDIO_SIGNAL, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_CHILD_DESTINATION, param_spec); /** * AgsRecallRecycling:child-source: * * The assigned source audio signal. * * Since: 0.4.0 */ param_spec = g_param_spec_object("child-source\0", "AgsAudioSignal of this recall\0", "The source AgsAudioSignal child recall needs\0", AGS_TYPE_AUDIO_SIGNAL, G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_CHILD_SOURCE, param_spec); /* AgsRecallClass */ recall = (AgsRecallClass *) recall_recycling; recall->duplicate = ags_recall_recycling_duplicate; /* AgsRecallRecyclingClass */ } void ags_recall_recycling_connectable_interface_init(AgsConnectableInterface *connectable) { AgsConnectableInterface *ags_recall_recycling_connectable_parent_interface; ags_recall_recycling_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_recall_recycling_connect; connectable->disconnect = ags_recall_recycling_disconnect; } void ags_recall_recycling_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable) { ags_recall_recycling_parent_dynamic_connectable_interface = g_type_interface_peek_parent(dynamic_connectable); dynamic_connectable->connect_dynamic = ags_recall_recycling_connect_dynamic; dynamic_connectable->disconnect_dynamic = ags_recall_recycling_disconnect_dynamic; } void ags_recall_recycling_init(AgsRecallRecycling *recall_recycling) { recall_recycling->flags = 0; recall_recycling->flags = (AGS_RECALL_RECYCLING_MAP_CHILD_DESTINATION | AGS_RECALL_RECYCLING_MAP_CHILD_SOURCE); recall_recycling->audio_channel = 0; recall_recycling->destination = NULL; recall_recycling->source = NULL; recall_recycling->child_destination = NULL; recall_recycling->child_source = NULL; } void ags_recall_recycling_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsRecallRecycling *recall_recycling; recall_recycling = AGS_RECALL_RECYCLING(gobject); switch(prop_id){ case PROP_AUDIO_CHANNEL: { recall_recycling->audio_channel = g_value_get_uint(value); } break; case PROP_DESTINATION: { AgsRecycling *destination; destination = (AgsRecycling *) g_value_get_object(value); if(recall_recycling->destination == destination) return; if(recall_recycling->destination != NULL){ if((AGS_RECALL_TEMPLATE & (AGS_RECALL(recall_recycling)->flags)) == 0){ gobject = G_OBJECT(recall_recycling->destination); if((AGS_RECALL_DYNAMIC_CONNECTED & (AGS_RECALL(recall_recycling)->flags)) != 0){ g_signal_handler_disconnect(gobject, recall_recycling->destination_add_audio_signal_handler); g_signal_handler_disconnect(gobject, recall_recycling->destination_remove_audio_signal_handler); } } g_object_unref(G_OBJECT(recall_recycling->destination)); } if(destination != NULL){ g_object_ref(G_OBJECT(destination)); } if((AGS_RECALL_TEMPLATE & (AGS_RECALL(recall_recycling)->flags)) == 0){ gobject = G_OBJECT(destination); if((AGS_RECALL_DYNAMIC_CONNECTED & (AGS_RECALL(recall_recycling)->flags)) != 0){ recall_recycling->destination_add_audio_signal_handler = g_signal_connect_after(gobject, "add_audio_signal\0", G_CALLBACK(ags_recall_recycling_destination_add_audio_signal_callback), recall_recycling); recall_recycling->destination_remove_audio_signal_handler = g_signal_connect(gobject, "remove_audio_signal\0", G_CALLBACK(ags_recall_recycling_destination_remove_audio_signal_callback), recall_recycling); } } recall_recycling->destination = destination; } break; case PROP_SOURCE: { AgsRecycling *source; source = (AgsRecycling *) g_value_get_object(value); if(recall_recycling->source == source) return; if(recall_recycling->source != NULL){ if((AGS_RECALL_TEMPLATE & (AGS_RECALL(recall_recycling)->flags)) == 0){ gobject = G_OBJECT(recall_recycling->source); if((AGS_RECALL_DYNAMIC_CONNECTED & (AGS_RECALL(recall_recycling)->flags)) != 0){ g_signal_handler_disconnect(gobject, recall_recycling->source_add_audio_signal_handler); g_signal_handler_disconnect(gobject, recall_recycling->source_remove_audio_signal_handler); } } g_object_unref(G_OBJECT(recall_recycling->source)); } if(source != NULL){ g_object_ref(G_OBJECT(source)); } recall_recycling->source = source; if(source != NULL){ if((AGS_RECALL_TEMPLATE & (AGS_RECALL(recall_recycling)->flags)) == 0){ gobject = G_OBJECT(source); if((AGS_RECALL_DYNAMIC_CONNECTED & (AGS_RECALL(recall_recycling)->flags)) != 0){ recall_recycling->source_add_audio_signal_handler = g_signal_connect_after(gobject, "add_audio_signal\0", G_CALLBACK(ags_recall_recycling_source_add_audio_signal_callback), recall_recycling); recall_recycling->source_remove_audio_signal_handler = g_signal_connect(gobject, "remove_audio_signal\0", G_CALLBACK(ags_recall_recycling_source_remove_audio_signal_callback), recall_recycling); } } } } break; case PROP_CHILD_DESTINATION: { AgsAudioSignal *child_destination; child_destination = (AgsAudioSignal *) g_value_get_object(value); if(recall_recycling->child_destination == child_destination) return; if(recall_recycling->child_destination != NULL){ g_object_unref(G_OBJECT(recall_recycling->child_destination)); } if(child_destination != NULL){ g_object_ref(G_OBJECT(child_destination)); } recall_recycling->child_destination = child_destination; } break; case PROP_CHILD_SOURCE: { AgsAudioSignal *child_source; child_source = (AgsAudioSignal *) g_value_get_object(value); if(g_list_find(recall_recycling->child_source, child_source) != NULL) return; if(child_source != NULL){ g_object_ref(G_OBJECT(child_source)); recall_recycling->child_source = g_list_prepend(recall_recycling->child_source, child_source); } } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; }; } void ags_recall_recycling_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsRecallRecycling *recall_recycling; recall_recycling = AGS_RECALL_RECYCLING(gobject); switch(prop_id){ case PROP_AUDIO_CHANNEL: { g_value_set_uint(value, recall_recycling->audio_channel); } break; case PROP_DESTINATION: { g_value_set_object(value, recall_recycling->destination); } break; case PROP_SOURCE: { g_value_set_object(value, recall_recycling->source); } break; case PROP_CHILD_DESTINATION: { g_value_set_object(value, recall_recycling->child_destination); } break; }; } void ags_recall_recycling_finalize(GObject *gobject) { AgsRecallRecycling *recall_recycling; recall_recycling = AGS_RECALL_RECYCLING(gobject); if(recall_recycling->destination != NULL) g_object_unref(G_OBJECT(recall_recycling->destination)); if(recall_recycling->source != NULL) g_object_unref(G_OBJECT(recall_recycling->source)); if(recall_recycling->child_destination != NULL) g_object_unref(G_OBJECT(recall_recycling->child_destination)); if(recall_recycling->child_source != NULL) ags_list_free_and_unref_link(recall_recycling->child_source); /* call parent */ G_OBJECT_CLASS(ags_recall_recycling_parent_class)->finalize(gobject); } void ags_recall_recycling_connect(AgsConnectable *connectable) { if((AGS_RECALL_CONNECTED & (AGS_RECALL(connectable)->flags)) != 0){ return; } ags_recall_recycling_parent_connectable_interface->connect(connectable); /* empty */ } void ags_recall_recycling_disconnect(AgsConnectable *connectable) { ags_recall_recycling_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_recall_recycling_connect_dynamic(AgsDynamicConnectable *dynamic_connectable) { AgsRecallRecycling *recall_recycling; GObject *gobject; if((AGS_RECALL_DYNAMIC_CONNECTED & (AGS_RECALL(dynamic_connectable)->flags)) != 0){ return; } ags_recall_recycling_parent_dynamic_connectable_interface->connect_dynamic(dynamic_connectable); /* AgsRecallRecycling */ recall_recycling = AGS_RECALL_RECYCLING(dynamic_connectable); /* destination */ if(recall_recycling->destination != NULL){ gobject = G_OBJECT(recall_recycling->destination); recall_recycling->destination_add_audio_signal_handler = g_signal_connect_after(gobject, "add_audio_signal\0", G_CALLBACK(ags_recall_recycling_destination_add_audio_signal_callback), recall_recycling); recall_recycling->destination_remove_audio_signal_handler = g_signal_connect(gobject, "remove_audio_signal\0", G_CALLBACK(ags_recall_recycling_destination_remove_audio_signal_callback), recall_recycling); } /* source */ gobject = G_OBJECT(recall_recycling->source); recall_recycling->source_add_audio_signal_handler = g_signal_connect_after(gobject, "add_audio_signal\0", G_CALLBACK(ags_recall_recycling_source_add_audio_signal_callback), recall_recycling); recall_recycling->source_remove_audio_signal_handler = g_signal_connect(gobject, "remove_audio_signal\0", G_CALLBACK(ags_recall_recycling_source_remove_audio_signal_callback), recall_recycling); } void ags_recall_recycling_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable) { AgsRecallRecycling *recall_recycling; GObject *gobject; recall_recycling = AGS_RECALL_RECYCLING(dynamic_connectable); if((AGS_RECALL_DYNAMIC_CONNECTED & (AGS_RECALL(recall_recycling)->flags)) == 0){ return; } /* destination */ if(recall_recycling->destination != NULL && (AGS_RECALL_TEMPLATE & (AGS_RECALL(recall_recycling)->flags)) == 0){ gobject = G_OBJECT(recall_recycling->destination); g_signal_handler_disconnect(gobject, recall_recycling->destination_add_audio_signal_handler); g_signal_handler_disconnect(gobject, recall_recycling->destination_remove_audio_signal_handler); } /* source */ if(recall_recycling->source != NULL && (AGS_RECALL_TEMPLATE & (AGS_RECALL(recall_recycling)->flags)) == 0){ gobject = G_OBJECT(recall_recycling->source); g_signal_handler_disconnect(gobject, recall_recycling->source_add_audio_signal_handler); g_signal_handler_disconnect(gobject, recall_recycling->source_remove_audio_signal_handler); } /* call parent */ ags_recall_recycling_parent_dynamic_connectable_interface->disconnect_dynamic(dynamic_connectable); } AgsRecall* ags_recall_recycling_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter) { AgsRecallRecycling *recall_recycling, *copy; GList *list; recall_recycling = AGS_RECALL_RECYCLING(recall); parameter = ags_parameter_grow(G_OBJECT_TYPE(recall), parameter, n_params, "devout\0", recall->devout, "audio_channel\0", recall_recycling->audio_channel, "destination\0", recall_recycling->destination, "source\0", recall_recycling->source, NULL); copy = AGS_RECALL_RECYCLING(AGS_RECALL_CLASS(ags_recall_recycling_parent_class)->duplicate(recall, recall_id, n_params, parameter)); return((AgsRecall *) copy); } GList* ags_recall_recycling_get_child_source(AgsRecallRecycling *recall_recycling) { GList *child_source; child_source = NULL; g_list_foreach(recall_recycling->child_source, (GFunc) ags_list_duplicate_list, &child_source); child_source = g_list_reverse(child_source); return(child_source); } void ags_recall_recycling_source_add_audio_signal_callback(AgsRecycling *source, AgsAudioSignal *audio_signal, AgsRecallRecycling *recall_recycling) { AgsChannel *channel; AgsRecall *recall; AgsRecallAudioSignal *recall_audio_signal; AgsRecallID *recall_id; AgsMutexManager *mutex_manager; pthread_mutex_t *mutex; if(source == NULL || recall_recycling == NULL || audio_signal == NULL){ return; } recall = AGS_RECALL(recall_recycling); //FIXME:JK: work-around for crashing while resetting link if(recall->parent == NULL){ return; } channel = AGS_RECALL_CHANNEL_RUN(recall->parent)->source; pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(mutex); if((AGS_AUDIO_SIGNAL_TEMPLATE & (audio_signal->flags)) != 0 || audio_signal->recall_id == NULL || recall->recall_id == NULL){ pthread_mutex_unlock(mutex); return; } recall_id = audio_signal->recall_id; if(recall_id->recycling_container != recall->recall_id->recycling_container){ if(AGS_IS_INPUT(channel)){ if(channel->link != NULL){ if(recall->recall_id->recycling_container->parent != NULL){ if(recall_id->recycling_container->parent != recall->recall_id->recycling_container){ pthread_mutex_unlock(mutex); return; } }else{ // AgsRecyclingContainer *parent_container; // parent_container = ags_recall_id_find_parent_recycling_container(AGS_AUDIO(channel->audio)->recall_id, // recall->recall_id->recycling_container); // if(recall_id->recycling_container->parent != parent_container){ pthread_mutex_unlock(mutex); return; // } } }else{ pthread_mutex_unlock(mutex); return; } }else{ pthread_mutex_unlock(mutex); return; } } if(AGS_RECALL_CHANNEL_RUN(recall->parent)->destination != NULL && ags_recall_id_find_recycling_container(AGS_RECALL_CHANNEL_RUN(recall->parent)->destination->recall_id, recall_id->recycling_container->parent) == NULL){ if(AGS_RECALL_CHANNEL_RUN(recall->parent)->source->link != NULL){ if(ags_recall_id_find_recycling_container(AGS_RECALL_CHANNEL_RUN(recall->parent)->destination->recall_id, recall_id->recycling_container->parent->parent) == NULL){ pthread_mutex_unlock(mutex); return; } }else{ pthread_mutex_unlock(mutex); return; } } if(((AGS_RECALL_ID_PLAYBACK & (recall_id->flags)) != 0 && (AGS_RECALL_PLAYBACK & (recall->flags)) == 0) || ((AGS_RECALL_ID_SEQUENCER & (recall_id->flags)) != 0 && (AGS_RECALL_SEQUENCER & (recall->flags)) == 0) || ((AGS_RECALL_ID_NOTATION & (recall_id->flags)) != 0 && (AGS_RECALL_NOTATION & (recall->flags)) == 0)){ pthread_mutex_unlock(mutex); return; } #ifdef AGS_DEBUG g_message("add %s:%x -> %x @ %x\0", G_OBJECT_TYPE_NAME(recall), recall->recall_id, audio_signal->recall_id, recall->recall_id->recycling_container); g_message("ags_recall_recycling_source_add_audio_signal_callback %s[%llx]\0", G_OBJECT_TYPE_NAME(recall_recycling), (long long unsigned int) recall_recycling); g_message("ags_recall_recycling_source_add_audio_signal - channel: %s[%u]\0", G_OBJECT_TYPE_NAME(recall_recycling), AGS_CHANNEL(recall_recycling->source->channel)->line); if(!AGS_IS_INPUT(source->channel)){ g_message("ags_recall_recycling_source_add_audio_signal_callback[%s]\0", G_OBJECT_TYPE_NAME(recall)); } #endif if((AGS_RECALL_RECYCLING_MAP_CHILD_SOURCE & (recall_recycling->flags)) != 0){ g_object_set(G_OBJECT(recall_recycling), "child_source\0", audio_signal, NULL); } if(AGS_RECALL(recall_recycling)->child_type != G_TYPE_NONE){ recall_audio_signal = g_object_new(AGS_RECALL(recall_recycling)->child_type, "devout\0", recall->devout, "recall_id\0", audio_signal->recall_id, "audio_channel\0", recall_recycling->audio_channel, //"destination\0", recall_recycling->child_destination, "source\0", audio_signal, NULL); #ifdef AGS_DEBUG g_message("%s\0", G_OBJECT_TYPE_NAME(recall_audio_signal)); #endif ags_recall_add_child(AGS_RECALL(recall_recycling), AGS_RECALL(recall_audio_signal)); } pthread_mutex_unlock(mutex); } void ags_recall_recycling_source_remove_audio_signal_callback(AgsRecycling *source, AgsAudioSignal *audio_signal, AgsRecallRecycling *recall_recycling) { AgsDevout *devout; AgsChannel *channel; AgsRecall *recall; AgsCancelRecall *cancel_recall; AgsRecallAudioSignal *recall_audio_signal; AgsMutexManager *mutex_manager; GList *list; pthread_mutex_t *mutex; if(source == NULL || recall_recycling == NULL || audio_signal == NULL){ return; } recall = AGS_RECALL(recall_recycling); //FIXME:JK: work-around for crashing while resetting link if(recall->parent == NULL){ return; } channel = AGS_RECALL_CHANNEL_RUN(recall->parent)->source; pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(mutex); if((AGS_AUDIO_SIGNAL_TEMPLATE & (audio_signal->flags)) != 0 || audio_signal->recall_id == NULL || recall->recall_id == NULL){ pthread_mutex_unlock(mutex); return; } if(AGS_RECALL_ID(audio_signal->recall_id)->recycling_container != recall->recall_id->recycling_container){ if(AGS_IS_INPUT(channel)){ if(channel->link != NULL){ if(AGS_RECALL_ID(audio_signal->recall_id)->recycling_container->parent != recall->recall_id->recycling_container){ pthread_mutex_unlock(mutex); return; } }else{ pthread_mutex_unlock(mutex); return; } }else{ pthread_mutex_unlock(mutex); return; } } if(AGS_RECALL_CHANNEL_RUN(recall->parent)->destination != NULL && ags_recall_id_find_recycling_container(AGS_RECALL_CHANNEL_RUN(recall->parent)->destination->recall_id, recall->recall_id->recycling_container->parent) == NULL){ pthread_mutex_unlock(mutex); return; } #ifdef AGS_DEBUG g_message("ags_recall_recycling_source_remove_audio_signal - channel: %s[%u]\n\0", G_OBJECT_TYPE_NAME(recall_recycling), AGS_CHANNEL(recall_recycling->source->channel)->line); #endif devout = AGS_DEVOUT(AGS_AUDIO(AGS_CHANNEL(source->channel)->audio)->devout); list = ags_recall_get_children(recall); while(list != NULL){ recall_audio_signal = AGS_RECALL_AUDIO_SIGNAL(list->data); if((recall_audio_signal->source == audio_signal) && (AGS_RECALL_DONE & (AGS_RECALL(recall_audio_signal)->flags)) == 0){ // cancel_recall = ags_cancel_recall_new(AGS_RECALL(recall_audio_signal), // NULL); // ags_task_thread_append_task(AGS_TASK_THREAD(AGS_AUDIO_LOOP(AGS_MAIN(devout->ags_main)->main_loop)->task_thread), // (AgsTask *) cancel_recall); break; } list = list->next; } if((AGS_RECALL_RECYCLING_MAP_CHILD_SOURCE & (recall_recycling->flags)) != 0){ if(g_list_find(recall_recycling->child_source, audio_signal) != NULL){ recall_recycling->child_source = g_list_remove(recall_recycling->child_source, audio_signal); g_object_unref(audio_signal); } } pthread_mutex_unlock(mutex); } void ags_recall_recycling_destination_add_audio_signal_callback(AgsRecycling *destination, AgsAudioSignal *audio_signal, AgsRecallRecycling *recall_recycling) { AgsChannel *channel; AgsRecyclingContainer *output_recycling_container; AgsRecall *recall; AgsMutexManager *mutex_manager; pthread_mutex_t *mutex; if(destination == NULL || recall_recycling == NULL || audio_signal == NULL){ return; } recall = AGS_RECALL(recall_recycling); //FIXME:JK: work-around for crashing while resetting link if(recall->parent == NULL){ return; } channel = AGS_RECALL_CHANNEL_RUN(recall->parent)->source; pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(mutex); output_recycling_container = recall->recall_id->recycling_container->parent; if((AGS_AUDIO_SIGNAL_TEMPLATE & (audio_signal->flags)) != 0 || audio_signal->recall_id == NULL || recall->recall_id == NULL){ pthread_mutex_unlock(mutex); return; } if(AGS_RECALL_ID(audio_signal->recall_id)->recycling_container != recall->recall_id->recycling_container){ if(AGS_IS_INPUT(channel)){ if(channel->link != NULL){ if(AGS_RECALL_ID(audio_signal->recall_id)->recycling_container->parent != recall->recall_id->recycling_container){ pthread_mutex_unlock(mutex); return; } }else{ pthread_mutex_unlock(mutex); return; } }else{ pthread_mutex_unlock(mutex); return; } } #ifdef AGS_DEBUG g_message("ags_recall_recycling_destination_add_audio_signal_callback %s[%llx]\0", G_OBJECT_TYPE_NAME(recall_recycling), (long long unsigned int) recall_recycling); if((AGS_RECALL_RECYCLING_MAP_CHILD_DESTINATION & (recall_recycling->flags)) != 0){ g_message("ags_recall_recycling_destination_add_audio_signal - channel: %s[%u]\n\0", G_OBJECT_TYPE_NAME(recall_recycling), AGS_CHANNEL(recall_recycling->source->channel)->line); } g_message(" -- g_object_set -- child_destination@%llx\0", (long long unsigned int) audio_signal); #endif g_object_set(G_OBJECT(recall_recycling), "child_destination\0", audio_signal, NULL); if((AGS_RECALL_RECYCLING_MAP_CHILD_SOURCE & (recall_recycling->flags)) != 0){ if(recall_recycling->child_source != NULL){ // g_list_free_full(recall_recycling->child_source, // g_object_unref); } recall_recycling->child_source = NULL; } pthread_mutex_unlock(mutex); } void ags_recall_recycling_destination_remove_audio_signal_callback(AgsRecycling *destination, AgsAudioSignal *audio_signal, AgsRecallRecycling *recall_recycling) { AgsDevout *devout; AgsChannel *channel; AgsRecall *recall; AgsCancelRecall *cancel_recall; AgsRecallAudioSignal *recall_audio_signal; AgsMutexManager *mutex_manager; GList *list; pthread_mutex_t *mutex; if(destination == NULL || recall_recycling == NULL || audio_signal == NULL){ return; } recall = AGS_RECALL(recall_recycling); //FIXME:JK: work-around for crashing while resetting link if(recall->parent == NULL){ return; } channel = AGS_RECALL_CHANNEL_RUN(recall->parent)->source; pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(mutex); if((AGS_AUDIO_SIGNAL_TEMPLATE & (audio_signal->flags)) != 0 || audio_signal->recall_id == NULL || recall->recall_id == NULL){ pthread_mutex_unlock(mutex); return; } if(AGS_RECALL_ID(audio_signal->recall_id)->recycling_container != recall->recall_id->recycling_container){ if(AGS_IS_INPUT(channel)){ if(channel->link != NULL){ if(AGS_RECALL_ID(audio_signal->recall_id)->recycling_container->parent != recall->recall_id->recycling_container){ pthread_mutex_unlock(mutex); return; } }else{ pthread_mutex_unlock(mutex); return; } }else{ pthread_mutex_unlock(mutex); return; } } #ifdef AGS_DEBUG g_message("ags_recall_recycling_destination_remove_audio_signal - channel: %s[%u]\n\0", G_OBJECT_TYPE_NAME(recall_recycling), AGS_CHANNEL(recall_recycling->source->channel)->line); #endif devout = AGS_DEVOUT(AGS_AUDIO(AGS_CHANNEL(destination->channel)->audio)->devout); list = ags_recall_get_children(AGS_RECALL(recall_recycling)); while(list != NULL){ recall_audio_signal = AGS_RECALL_AUDIO_SIGNAL(list->data); if(recall_audio_signal->destination == audio_signal && (AGS_RECALL_DONE & (AGS_RECALL(recall_audio_signal)->flags)) == 0){ // cancel_recall = ags_cancel_recall_new(AGS_RECALL(recall_audio_signal), // NULL); // ags_task_thread_append_task(AGS_TASK_THREAD(AGS_AUDIO_LOOP(AGS_MAIN(devout->ags_main)->main_loop)->task_thread), // (AgsTask *) cancel_recall); } list = list->next; } if((AGS_RECALL_RECYCLING_MAP_CHILD_DESTINATION & (recall_recycling->flags)) != 0){ if(recall_recycling->child_destination == audio_signal){ g_object_set(G_OBJECT(recall_recycling), "child_destination\0", NULL, NULL); } } if((AGS_RECALL_RECYCLING_MAP_CHILD_SOURCE & (recall_recycling->flags)) != 0){ if(recall_recycling->child_source != NULL){ recall_recycling->child_source = NULL; } recall_recycling->child_source = NULL; } pthread_mutex_unlock(mutex); } /** * ags_recall_recycling_new: * * Creates a #AgsRecallRecycling * * Returns: a new #AgsRecallRecycling * * Since: 0.4 */ AgsRecallRecycling* ags_recall_recycling_new() { AgsRecallRecycling *recall_recycling; recall_recycling = (AgsRecallRecycling *) g_object_new(AGS_TYPE_RECALL_RECYCLING, NULL); return(recall_recycling); } gsequencer-0.6.37/src/ags/audio/ags_output.h0000644000175000017500000000364612626272146015717 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_OUTPUT_H__ #define __AGS_OUTPUT_H__ #include #include #include #include #include #define AGS_TYPE_OUTPUT (ags_output_get_type()) #define AGS_OUTPUT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_OUTPUT, AgsOutput)) #define AGS_OUTPUT_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_OUTPUT, AgsOutputClass)) #define AGS_IS_OUTPUT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_OUTPUT)) #define AGS_IS_OUTPUT_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_OUTPUT)) #define AGS_OUTPUT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_OUTPUT, AgsOutputClass)) typedef struct _AgsOutput AgsOutput; typedef struct _AgsOutputClass AgsOutputClass; struct _AgsOutput { AgsChannel channel; }; struct _AgsOutputClass { AgsChannelClass channel; }; GType ags_output_get_type(); AgsRecycling* ags_output_find_first_input_recycling(AgsOutput *output); AgsRecycling* ags_output_find_last_input_recycling(AgsOutput *output); AgsOutput* ags_output_new(GObject *audio); #endif /*__AGS_OUTPUT_H__*/ gsequencer-0.6.37/src/ags/audio/ags_input.c0000644000175000017500000001357012626272146015506 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include void ags_input_class_init (AgsInputClass *input_class); void ags_input_connectable_interface_init(AgsConnectableInterface *connectable); void ags_input_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_input_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_input_init (AgsInput *input); void ags_input_finalize (GObject *gobject); void ags_input_connect(AgsConnectable *connectable); void ags_input_disconnect(AgsConnectable *connectable); /** * SECTION:ags_input * @short_description: Input of #AgsAudio * @title: AgsInput * @section_id: * @include: ags/audio/ags_input.h * * #AgsInput represents an input channel of #AgsAudio. */ static gpointer ags_input_parent_class = NULL; static AgsConnectableInterface *ags_input_parent_connectable_interface; enum{ PROP_0, PROP_FILE_LINK, }; GType ags_input_get_type (void) { static GType ags_type_input = 0; if(!ags_type_input){ static const GTypeInfo ags_input_info = { sizeof (AgsInputClass), (GBaseInitFunc) NULL, /* base_init */ (GBaseFinalizeFunc) NULL, /* base_finalize */ (GClassInitFunc) ags_input_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsInput), 0, /* n_preallocs */ (GInstanceInitFunc) ags_input_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_input_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_input = g_type_register_static(AGS_TYPE_CHANNEL, "AgsInput\0", &ags_input_info, 0); g_type_add_interface_static(ags_type_input, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_input); } void ags_input_class_init(AgsInputClass *input) { GObjectClass *gobject; AgsChannelClass *channel; GParamSpec *param_spec; ags_input_parent_class = g_type_class_peek_parent(input); gobject = (GObjectClass *) input; gobject->set_property = ags_input_set_property; gobject->get_property = ags_input_get_property; gobject->finalize = ags_input_finalize; /* properties */ /** * AgsInput:file-link: * * The file containing audio data. * * Since: 0.4.0 */ param_spec = g_param_spec_object("file-link\0", "file link assigned to\0", "The file link to read from\0", AGS_TYPE_FILE_LINK, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_FILE_LINK, param_spec); /* */ channel = (AgsChannelClass *) input; } void ags_input_connectable_interface_init(AgsConnectableInterface *connectable) { AgsConnectableInterface *ags_input_connectable_parent_interface; ags_input_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_input_connect; connectable->disconnect = ags_input_disconnect; } void ags_input_init(AgsInput *input) { input->file_link = NULL; } void ags_input_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsInput *input; input = AGS_INPUT(gobject); switch(prop_id){ case PROP_FILE_LINK: { AgsAudioFile *audio_file; AgsFileLink *file_link; file_link = (AgsFileLink *) g_value_get_object(value); if(input->file_link == file_link){ return; } if(input->file_link != NULL){ g_object_unref(G_OBJECT(input->file_link)); } if(file_link != NULL){ g_object_ref(G_OBJECT(file_link)); } input->file_link = (GObject *) file_link; } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_input_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsInput *input; input = AGS_INPUT(gobject); switch(prop_id){ case PROP_FILE_LINK: g_value_set_object(value, input->file_link); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_input_finalize(GObject *gobject) { AgsInput *input; input = AGS_INPUT(gobject); if(input->file_link != NULL){ g_object_unref(G_OBJECT(input->file_link)); } G_OBJECT_CLASS(ags_input_parent_class)->finalize(gobject); } void ags_input_connect(AgsConnectable *connectable) { ags_input_parent_connectable_interface->connect(connectable); } void ags_input_disconnect(AgsConnectable *connectable) { ags_input_parent_connectable_interface->disconnect(connectable); } /** * ags_input_new: * @audio: the #AgsAudio * * Creates a #AgsInput, linking tree to @audio. * * Returns: a new #AgsInput * * Since: 0.3 */ AgsInput* ags_input_new(GObject *audio) { AgsInput *input; input = (AgsInput *) g_object_new(AGS_TYPE_INPUT, "audio\0", audio, NULL); return(input); } gsequencer-0.6.37/src/ags/audio/ags_notation.h0000644000175000017500000001130612626272146016202 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_NOTATION_H__ #define __AGS_NOTATION_H__ #include #include #include #include #include #define AGS_TYPE_NOTATION (ags_notation_get_type()) #define AGS_NOTATION(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_NOTATION, AgsNotation)) #define AGS_NOTATION_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_NOTATION, AgsNotationClass)) #define AGS_IS_NOTATION(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_NOTATION)) #define AGS_IS_NOTATION_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_NOTATION)) #define AGS_NOTATION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_NOTATION, AgsNotationClass)) #define AGS_NOTATION_DEFAULT_BPM (120.0) #define AGS_NOTATION_TICS_PER_BEAT (1.0) #define AGS_NOTATION_MINIMUM_NOTE_LENGTH (1.0 / 16.0) #define AGS_NOTATION_MAXIMUM_NOTE_LENGTH (16.0) #define AGS_NOTATION_DEFAULT_LENGTH (65535.0 / AGS_NOTATION_TICS_PER_BEAT - AGS_NOTATION_MAXIMUM_NOTE_LENGTH) #define AGS_NOTATION_DEFAULT_JIFFIE (60.0 / AGS_NOTATION_DEFAULT_BPM / AGS_NOTATION_TICS_PER_BEAT) #define AGS_NOTATION_DEFAULT_DURATION (AGS_NOTATION_DEFAULT_LENGTH * AGS_NOTATION_DEFAULT_JIFFIE * AGS_MICROSECONDS_PER_SECOND) #define AGS_NOTATION_CLIPBOARD_VERSION "0.4.2\0" #define AGS_NOTATION_CLIPBOARD_TYPE "AgsNotationClipboardXml\0" #define AGS_NOTATION_CLIPBOARD_FORMAT "AgsNotationNativePiano\0" typedef struct _AgsNotation AgsNotation; typedef struct _AgsNotationClass AgsNotationClass; typedef enum{ AGS_NOTATION_STICKY = 1, AGS_NOTATION_PATTERN_MODE = 1 << 1, }AgsNotationFlags; struct _AgsNotation { GObject object; guint flags; GObject *timestamp; guint audio_channel; GObject *audio; gchar *key; gchar *base_note; gdouble base_frequency; gdouble tact; gdouble bpm; gdouble maximum_note_length; GList *notes; gdouble start_loop; gdouble end_loop; gdouble offset; GList *selection; GObject *port; GList *current_notes; GList *next_notes; }; struct _AgsNotationClass { GObjectClass object; }; GType ags_notation_get_type(); GList* ags_notation_find_near_timestamp(GList *notation, guint audio_channel, GObject *timestamp); void ags_notation_add_note(AgsNotation *notation, AgsNote *note, gboolean use_selection_list); gboolean ags_notation_remove_note_at_position(AgsNotation *notation, guint x, guint y); GList* ags_notation_get_selection(AgsNotation *notation); gboolean ags_notation_is_note_selected(AgsNotation *notation, AgsNote *note); AgsNote* ags_notation_find_point(AgsNotation *notation, guint x, guint y, gboolean use_selection_list); GList* ags_notation_find_region(AgsNotation *notation, guint x0, guint y0, guint x1, guint y1, gboolean use_selection_list); void ags_notation_free_selection(AgsNotation *notation); void ags_notation_add_all_to_selection(AgsNotation *notation); void ags_notation_add_point_to_selection(AgsNotation *notation, guint x, guint y, gboolean replace_current_selection); void ags_notation_remove_point_from_selection(AgsNotation *notation, guint x, guint y); void ags_notation_add_region_to_selection(AgsNotation *notation, guint x0, guint y0, guint x1, guint y1, gboolean replace_current_selection); void ags_notation_remove_region_from_selection(AgsNotation *notation, guint x0, guint y0, guint x1, guint y1); xmlNodePtr ags_notation_copy_selection(AgsNotation *notation); xmlNodePtr ags_notation_cut_selection(AgsNotation *notation); void ags_notation_insert_from_clipboard(AgsNotation *notation, xmlNodePtr content, gboolean reset_x_offset, guint x_offset, gboolean reset_y_offset, guint y_offset); GList* ags_notation_get_current(AgsNotation *notation); AgsNotation* ags_notation_new(guint audio_channel); #endif /*__AGS_NOTATION_H__*/ gsequencer-0.6.37/src/ags/audio/ags_recall_dependency.c0000644000175000017500000002132712626272146020006 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include void ags_recall_dependency_class_init(AgsRecallDependencyClass *recall_dependency); void ags_recall_dependency_connectable_interface_init(AgsConnectableInterface *connectable); void ags_recall_dependency_init(AgsRecallDependency *recall_dependency); void ags_recall_dependency_connect(AgsConnectable *connectable); void ags_recall_dependency_disconnect(AgsConnectable *connectable); void ags_recall_dependency_finalize(GObject *gobject); /** * SECTION:ags_recall_dependency * @short_description: Object specifing dependency * @title: AgsRecallDependency * @section_id: * @include: ags/audio/ags_recall_dependency.h * * #AgsRecallDependency specifies dependencies on other recalls. Dependencies * are resolved during initialization. */ static gpointer ags_recall_dependency_parent_class = NULL; GType ags_recall_dependency_get_type(void) { static GType ags_type_recall_dependency = 0; if(!ags_type_recall_dependency){ static const GTypeInfo ags_recall_dependency_info = { sizeof (AgsRecallDependencyClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_recall_dependency_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsRecallDependency), 0, /* n_preallocs */ (GInstanceInitFunc) ags_recall_dependency_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_recall_dependency_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_recall_dependency = g_type_register_static(G_TYPE_OBJECT, "AgsRecallDependency\0", &ags_recall_dependency_info, 0); g_type_add_interface_static(ags_type_recall_dependency, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_recall_dependency); } void ags_recall_dependency_class_init(AgsRecallDependencyClass *recall_dependency) { GObjectClass *gobject; ags_recall_dependency_parent_class = g_type_class_peek_parent(recall_dependency); gobject = (GObjectClass *) recall_dependency; gobject->finalize = ags_recall_dependency_finalize; } void ags_recall_dependency_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->connect = ags_recall_dependency_connect; connectable->disconnect = ags_recall_dependency_disconnect; } void ags_recall_dependency_init(AgsRecallDependency *recall_dependency) { recall_dependency->dependency = NULL; } void ags_recall_dependency_connect(AgsConnectable *connectable) { /* empty */ } void ags_recall_dependency_disconnect(AgsConnectable *connectable) { /* empty */ } void ags_recall_dependency_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_recall_dependency_parent_class)->finalize(gobject); } /** * ags_recall_dependency_find_dependency: * @recall_dependencies: a #GList containing #AgsRecallDependency * @dependency: the #AgsRecall depending on * * Retrieve dependency. * * Returns: Next match. * * Since: 0.4.0 */ GList* ags_recall_dependency_find_dependency(GList *recall_dependencies, GObject *dependency) { AgsRecallDependency *recall_dependency; while(recall_dependencies != NULL){ recall_dependency = AGS_RECALL_DEPENDENCY(recall_dependencies->data); if(recall_dependency->dependency == dependency){ return(recall_dependencies); } recall_dependencies = recall_dependencies->next; } return(NULL); } /** * ags_recall_dependency_find_dependency_by_provider: * @recall_dependencies: a #GList containing #AgsRecallDependency * @provider: the object providing recall, like #AgsAudio or #AgsChannel * * Retrieve dependency by provider. * * Returns: Next match. * * Since: 0.4.0 */ GList* ags_recall_dependency_find_dependency_by_provider(GList *recall_dependencies, GObject *provider) { AgsRecallDependency *recall_dependency; while(recall_dependencies != NULL){ recall_dependency = AGS_RECALL_DEPENDENCY(recall_dependencies->data); if((AGS_IS_CHANNEL(provider) && AGS_IS_RECALL_CHANNEL_RUN(recall_dependency->dependency) && (AGS_RECALL_CHANNEL_RUN(recall_dependency->dependency)->source == AGS_CHANNEL(provider))) || (AGS_IS_AUDIO(provider) && AGS_IS_RECALL_AUDIO_RUN(recall_dependency->dependency) && (AGS_RECALL_AUDIO_RUN(recall_dependency->dependency)->recall_audio->audio == AGS_AUDIO(provider)))){ return(recall_dependencies); } recall_dependencies = recall_dependencies->next; } return(NULL); } /** * ags_recall_dependency_resolve: * @recall_dependeny: an #AgsRecallDependency * @recall_id: the #AgsRecallID refering to * * Resolve dependency. * * Returns: the #AgsRecall dependency. * * Since: 0.4.0 */ GObject* ags_recall_dependency_resolve(AgsRecallDependency *recall_dependency, AgsRecallID *recall_id) { AgsRecallContainer *recall_container; AgsRecall *dependency; if(recall_dependency->dependency == NULL || AGS_RECALL(recall_dependency->dependency)->container == NULL){ g_message("dependency resolve: container == NULL"); return(NULL); } dependency = AGS_RECALL(recall_dependency->dependency); recall_container = AGS_RECALL_CONTAINER(dependency->container); if(AGS_IS_RECALL_AUDIO(dependency)){ return((GObject *) recall_container->recall_audio); }else if(AGS_IS_RECALL_AUDIO_RUN(dependency)){ GList *recall_list; if(recall_id == NULL){ g_message("dependency resolve: recall_id == NULL"); return(NULL); } recall_list = ags_recall_find_recycling_container(recall_container->recall_audio_run, (GObject *) recall_id->recycling_container); if(recall_list != NULL){ return(G_OBJECT(recall_list->data)); }else if(recall_id->recycling_container->parent != NULL){ recall_list = ags_recall_find_recycling_container(recall_container->recall_audio_run, (GObject *) recall_id->recycling_container->parent); if(recall_list != NULL){ return(G_OBJECT(recall_list->data)); }else{ g_warning("dependency not found!\0"); } } }else if(AGS_IS_RECALL_CHANNEL(dependency)){ GList *recall_list; recall_list = ags_recall_find_provider(recall_container->recall_channel, (GObject *) AGS_RECALL_CHANNEL(dependency)->source); if(recall_list != NULL){ return(G_OBJECT(recall_list->data)); } }else if(AGS_IS_RECALL_CHANNEL_RUN(dependency)){ GList *recall_list; if(recall_id == NULL){ g_message("dependency resolve: recall_id == NULL"); return(NULL); } recall_list = ags_recall_find_provider_with_recycling_container(recall_container->recall_channel_run, (GObject *) AGS_RECALL_CHANNEL_RUN(dependency)->recall_channel->source, (GObject *) recall_id->recycling_container); if(recall_list != NULL){ return(G_OBJECT(recall_list->data)); }else if(recall_id->recycling_container->parent != NULL){ recall_list = ags_recall_find_provider_with_recycling_container(recall_container->recall_channel_run, (GObject *) AGS_RECALL_CHANNEL_RUN(dependency)->recall_channel->source, (GObject *) recall_id->recycling_container->parent); if(recall_list != NULL){ return(G_OBJECT(recall_list->data)); } } } return(NULL); } /** * ags_recall_dependency_new: * @dependency: the #AgsRecall depending on * * Creates a #AgsRecallDependency * * Returns: a new #AgsRecallDependency * * Since: 0.4.0 */ AgsRecallDependency* ags_recall_dependency_new(GObject *dependency) { AgsRecallDependency *recall_dependency; recall_dependency = (AgsRecallDependency *) g_object_new(AGS_TYPE_RECALL_DEPENDENCY, NULL); recall_dependency->dependency = dependency; return(recall_dependency); } gsequencer-0.6.37/src/ags/audio/ags_input.h0000644000175000017500000000340412626272146015506 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_INPUT_H__ #define __AGS_INPUT_H__ #include #include #include #include #include #define AGS_TYPE_INPUT (ags_input_get_type()) #define AGS_INPUT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_INPUT, AgsInput)) #define AGS_INPUT_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_INPUT, AgsInputClass)) #define AGS_IS_INPUT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_INPUT)) #define AGS_IS_INPUT_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_INPUT)) #define AGS_INPUT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_INPUT, AgsInputClass)) typedef struct _AgsInput AgsInput; typedef struct _AgsInputClass AgsInputClass; struct _AgsInput { AgsChannel channel; GObject *file_link; }; struct _AgsInputClass { AgsChannelClass channel; }; GType ags_input_get_type(); AgsInput* ags_input_new(GObject *audio); #endif /*__AGS_INPUT_H__*/ gsequencer-0.6.37/src/ags/audio/ags_recall_recycling.h0000644000175000017500000000542312626272146017653 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_RECALL_RECYCLING_H__ #define __AGS_RECALL_RECYCLING_H__ #include #include #include #include #include #include #define AGS_TYPE_RECALL_RECYCLING (ags_recall_recycling_get_type()) #define AGS_RECALL_RECYCLING(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_RECALL_RECYCLING, AgsRecallRecycling)) #define AGS_RECALL_RECYCLING_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_RECALL_RECYCLING, AgsRecallRecyclingClass)) #define AGS_IS_RECALL_RECYCLING(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_RECALL_RECYCLING)) #define AGS_IS_RECALL_RECYCLING_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_RECALL_RECYCLING)) #define AGS_RECALL_RECYCLING_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_RECALL_RECYCLING, AgsRecallRecyclingClass)) typedef struct _AgsRecallRecycling AgsRecallRecycling; typedef struct _AgsRecallRecyclingClass AgsRecallRecyclingClass; typedef enum{ AGS_RECALL_RECYCLING_GARBAGE_COLLECTOR = 1, AGS_RECALL_RECYCLING_MAP_CHILD_DESTINATION = 1 << 1, AGS_RECALL_RECYCLING_MAP_CHILD_SOURCE = 1 << 2, AGS_RECALL_RECYCLING_CREATE_DESTINATION_ON_MAP_SOURCE = 1 << 3, }AgsRecallRecyclingFlags; struct _AgsRecallRecycling { AgsRecall recall; guint flags; guint audio_channel; AgsRecycling *destination; gulong destination_add_audio_signal_handler; gulong destination_remove_audio_signal_handler; AgsRecycling *source; gulong source_add_audio_signal_handler; gulong source_remove_audio_signal_handler; AgsAudioSignal *child_destination; GList *child_source; }; struct _AgsRecallRecyclingClass { AgsRecallClass recall; }; GType ags_recall_recycling_get_type(); GList* ags_recall_recycling_get_child_source(AgsRecallRecycling *recall_recycling); AgsRecallRecycling* ags_recall_recycling_new(); #endif /*__AGS_RECALL_RECYCLING_H__*/ gsequencer-0.6.37/src/ags/audio/ags_recall_audio.h0000644000175000017500000000364612612232537016775 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_RECALL_AUDIO_H__ #define __AGS_RECALL_AUDIO_H__ #include #include #include #include #define AGS_TYPE_RECALL_AUDIO (ags_recall_audio_get_type()) #define AGS_RECALL_AUDIO(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_RECALL_AUDIO, AgsRecallAudio)) #define AGS_RECALL_AUDIO_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_RECALL_AUDIO, AgsRecallAudioClass)) #define AGS_IS_RECALL_AUDIO(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_RECALL_AUDIO)) #define AGS_IS_RECALL_AUDIO_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_RECALL_AUDIO)) #define AGS_RECALL_AUDIO_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_RECALL_AUDIO, AgsRecallAudioClass)) typedef struct _AgsRecallAudio AgsRecallAudio; typedef struct _AgsRecallAudioClass AgsRecallAudioClass; struct _AgsRecallAudio { AgsRecall recall; AgsAudio *audio; }; struct _AgsRecallAudioClass { AgsRecallClass recall; }; GType ags_recall_audio_get_type(); AgsRecallAudio* ags_recall_audio_new(AgsAudio *audio); #endif /*__AGS_RECALL_AUDIO_H__*/ gsequencer-0.6.37/src/ags/audio/ags_note.c0000644000175000017500000000675512626272146015323 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include void ags_note_class_init(AgsNoteClass *note); void ags_note_connectable_interface_init(AgsConnectableInterface *connectable); void ags_note_init(AgsNote *note); void ags_note_connect(AgsConnectable *connectable); void ags_note_disconnect(AgsConnectable *connectable); void ags_note_finalize(GObject *object); /** * SECTION:ags_note * @short_description: Note class. * @title: AgsNote * @section_id: * @include: ags/audio/ags_note.h * * #AgsNote represents a tone. */ static gpointer ags_note_parent_class = NULL; GType ags_note_get_type() { static GType ags_type_note = 0; if(!ags_type_note){ static const GTypeInfo ags_note_info = { sizeof(AgsNoteClass), NULL, NULL, (GClassInitFunc) ags_note_class_init, NULL, NULL, sizeof(AgsNote), 0, (GInstanceInitFunc) ags_note_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_note_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_note = g_type_register_static(G_TYPE_OBJECT, "AgsNote\0", &ags_note_info, 0); g_type_add_interface_static(ags_type_note, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return(ags_type_note); } void ags_note_class_init(AgsNoteClass *note) { GObjectClass *gobject; ags_note_parent_class = g_type_class_peek_parent(note); gobject = (GObjectClass *) note; gobject->finalize = ags_note_finalize; } void ags_note_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->connect = ags_note_connect; connectable->disconnect = ags_note_disconnect; } void ags_note_init(AgsNote *note) { note->flags = 0; note->x[0] = 0; note->x[1] = 0; note->y = 0; note->name = NULL; note->frequency = 440.0; } void ags_note_connect(AgsConnectable *connectable) { /* empty */ } void ags_note_disconnect(AgsConnectable *connectable) { /* empty */ } void ags_note_finalize(GObject *gobject) { /* empty */ G_OBJECT_CLASS(ags_note_parent_class)->finalize(gobject); } /** * ags_note_duplicate: * @note: an #AgsNote * * Duplicate a note. * * Returns: the duplicated #AgsNote. * * Since: 0.4 */ AgsNote* ags_note_duplicate(AgsNote *note) { AgsNote *copy; copy = ags_note_new(); copy->flags = 0; copy->x[0] = note->x[0]; copy->x[1] = note->x[1]; copy->y = note->y; return(copy); } /** * ags_note_new: * * Creates an #AgsNote * * Returns: a new #AgsNote * * Since: 0.4 */ AgsNote* ags_note_new() { AgsNote *note; note = (AgsNote *) g_object_new(AGS_TYPE_NOTE, NULL); return(note); } gsequencer-0.6.37/src/ags/audio/ags_recall_channel.c0000644000175000017500000003030312626272146017272 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include void ags_recall_channel_class_init(AgsRecallChannelClass *recall_channel); void ags_recall_channel_connectable_interface_init(AgsConnectableInterface *connectable); void ags_recall_channel_packable_interface_init(AgsPackableInterface *packable); void ags_recall_channel_init(AgsRecallChannel *recall_channel); void ags_recall_channel_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_recall_channel_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_recall_channel_connect(AgsConnectable *connectable); void ags_recall_channel_disconnect(AgsConnectable *connectable); gboolean ags_recall_channel_pack(AgsPackable *packable, GObject *container); gboolean ags_recall_channel_unpack(AgsPackable *packable); void ags_recall_channel_finalize(GObject *gobject); void ags_recall_channel_remove(AgsRecall *recall); AgsRecall* ags_recall_channel_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter); /** * SECTION:ags_recall_channel * @short_description: channel context of recall * @title: AgsRecallChannel * @section_id: * @include: ags/audio/ags_recall_channel.h * * #AgsRecallChannel acts as channel recall. */ enum{ PROP_0, PROP_DESTINATION, PROP_SOURCE, }; static gpointer ags_recall_channel_parent_class = NULL; static AgsConnectableInterface* ags_recall_channel_parent_connectable_interface; static AgsPackableInterface* ags_recall_channel_parent_packable_interface; GType ags_recall_channel_get_type() { static GType ags_type_recall_channel = 0; if(!ags_type_recall_channel){ static const GTypeInfo ags_recall_channel_info = { sizeof (AgsRecallChannelClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_recall_channel_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsRecallChannel), 0, /* n_preallocs */ (GInstanceInitFunc) ags_recall_channel_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_recall_channel_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_packable_interface_info = { (GInterfaceInitFunc) ags_recall_channel_packable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_recall_channel = g_type_register_static(AGS_TYPE_RECALL, "AgsRecallChannel\0", &ags_recall_channel_info, 0); g_type_add_interface_static(ags_type_recall_channel, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_recall_channel, AGS_TYPE_PACKABLE, &ags_packable_interface_info); } return(ags_type_recall_channel); } void ags_recall_channel_class_init(AgsRecallChannelClass *recall_channel) { GObjectClass *gobject; AgsRecallClass *recall; GParamSpec *param_spec; ags_recall_channel_parent_class = g_type_class_peek_parent(recall_channel); /* GObjectClass */ gobject = (GObjectClass *) recall_channel; gobject->set_property = ags_recall_channel_set_property; gobject->get_property = ags_recall_channel_get_property; gobject->finalize = ags_recall_channel_finalize; /* properties */ /** * AgsRecallChannel:destination: * * The assigned destination channel. * * Since: 0.4.0 */ param_spec = g_param_spec_object("destination\0", "assigned destination channel\0", "The destination channel object it is assigned to\0", AGS_TYPE_CHANNEL, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_DESTINATION, param_spec); /** * AgsRecallChannel:source: * * The assigned source channel. * * Since: 0.4.0 */ param_spec = g_param_spec_object("source\0", "assigned source channel\0", "The source channel object it is assigned to\0", AGS_TYPE_CHANNEL, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_SOURCE, param_spec); /* AgsRecallClass */ recall = (AgsRecallClass *) recall_channel; recall->remove = ags_recall_channel_remove; recall->duplicate = ags_recall_channel_duplicate; } void ags_recall_channel_connectable_interface_init(AgsConnectableInterface *connectable) { AgsConnectableInterface *ags_recall_channel_connectable_parent_interface; ags_recall_channel_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_recall_channel_connect; connectable->disconnect = ags_recall_channel_disconnect; } void ags_recall_channel_packable_interface_init(AgsPackableInterface *packable) { ags_recall_channel_parent_packable_interface = g_type_interface_peek_parent(packable); packable->pack = ags_recall_channel_pack; packable->unpack = ags_recall_channel_unpack; } void ags_recall_channel_init(AgsRecallChannel *recall_channel) { recall_channel->destination = NULL; recall_channel->source = NULL; } void ags_recall_channel_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsRecallChannel *recall_channel; recall_channel = AGS_RECALL_CHANNEL(gobject); switch(prop_id){ case PROP_DESTINATION: { AgsChannel *destination; destination = (AgsChannel *) g_value_get_object(value); if(recall_channel->destination == destination) return; if(recall_channel->destination != NULL) g_object_unref(recall_channel->destination); if(destination != NULL) g_object_ref(destination); recall_channel->destination = destination; } break; case PROP_SOURCE: { AgsChannel *source; source = (AgsChannel *) g_value_get_object(value); if(recall_channel->source == source) return; if(recall_channel->source != NULL) g_object_unref(recall_channel->source); if(source != NULL) g_object_ref(source); recall_channel->source = source; } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_recall_channel_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsRecallChannel *recall_channel; recall_channel = AGS_RECALL_CHANNEL(gobject); switch(prop_id){ case PROP_DESTINATION: g_value_set_object(value, recall_channel->destination); break; case PROP_SOURCE: g_value_set_object(value, recall_channel->source); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_recall_channel_finalize(GObject *gobject) { AgsRecallChannel *recall_channel; recall_channel = AGS_RECALL_CHANNEL(gobject); if(recall_channel->source != NULL) g_object_unref(recall_channel->source); if(recall_channel->destination != NULL) g_object_unref(G_OBJECT(recall_channel->destination)); G_OBJECT_CLASS(ags_recall_channel_parent_class)->finalize(gobject); } void ags_recall_channel_connect(AgsConnectable *connectable) { ags_recall_channel_parent_connectable_interface->connect(connectable); /* empty */ } void ags_recall_channel_disconnect(AgsConnectable *connectable) { ags_recall_channel_parent_connectable_interface->disconnect(connectable); /* empty */ } gboolean ags_recall_channel_pack(AgsPackable *packable, GObject *container) { AgsRecallContainer *recall_container; AgsRecallChannel *recall_channel; GList *list; if(ags_recall_channel_parent_packable_interface->pack(packable, container)) return(TRUE); recall_container = AGS_RECALL_CONTAINER(container); recall_channel = AGS_RECALL_CHANNEL(packable); g_object_set(container, "recall_channel\0", recall_channel, NULL); /* set in AgsRecallChannelRun */ list = recall_container->recall_channel_run; while((list = ags_recall_find_provider(list, G_OBJECT(recall_channel->source))) != NULL){ g_object_set(G_OBJECT(list->data), "recall_channel\0", recall_channel, NULL); list = list->next; } return(FALSE); } gboolean ags_recall_channel_unpack(AgsPackable *packable) { AgsRecall *recall; AgsRecallContainer *recall_container; GList *list; recall = AGS_RECALL(packable); if(recall == NULL) return(TRUE); recall_container = AGS_RECALL_CONTAINER(recall->container); if(recall_container == NULL) return(TRUE); /* ref */ g_object_ref(recall); g_object_ref(recall_container); /* unset in AgsRecallChannelRun */ list = recall_container->recall_channel_run; while((list = ags_recall_find_provider(list, G_OBJECT(AGS_RECALL_CHANNEL(packable)->source))) != NULL){ g_object_set(G_OBJECT(list->data), "recall_channel\0", NULL, NULL); list = list->next; } /* call parent */ if(ags_recall_channel_parent_packable_interface->unpack(packable)){ g_object_unref(recall); g_object_unref(recall_container); return(TRUE); } /* remove from list */ recall_container->recall_channel = g_list_remove(recall_container->recall_channel, recall); /* unref */ g_object_unref(recall); g_object_unref(recall_container); return(FALSE); } void ags_recall_channel_remove(AgsRecall *recall) { if(AGS_RECALL_CHANNEL(recall)->source != NULL){ ags_channel_remove_recall(AGS_RECALL_CHANNEL(recall)->source, recall, ((recall->recall_id->recycling_container->parent) ? TRUE: FALSE)); } AGS_RECALL_CLASS(ags_recall_channel_parent_class)->remove(recall); } AgsRecall* ags_recall_channel_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter) { AgsRecallChannel *recall_channel, *copy; recall_channel = AGS_RECALL_CHANNEL(recall); parameter = ags_parameter_grow(G_OBJECT_TYPE(recall), parameter, n_params, "source\0", recall_channel->source, "destination\0", recall_channel->destination, NULL); copy = AGS_RECALL_CHANNEL(AGS_RECALL_CLASS(ags_recall_channel_parent_class)->duplicate(recall, recall_id, n_params, parameter)); g_message("ags warning - ags_recall_channel_duplicate: you shouldn't do this %s\n\0", G_OBJECT_TYPE_NAME(recall)); return((AgsRecall *) copy); } /** * ags_recall_channel_find_channel: * @recall_channel: a #GList containing #AgsRecallChannel * @source: the #AgsChannel to find * * Retrieve next recall assigned to channel. * * Returns: Next match. * * Since: 0.4 */ GList* ags_recall_channel_find_channel(GList *recall_channel_i, AgsChannel *source) { AgsRecallChannel *recall_channel; while(recall_channel_i != NULL){ recall_channel = AGS_RECALL_CHANNEL(recall_channel_i->data); if(recall_channel->source == source) return(recall_channel_i); recall_channel_i = recall_channel_i->next; } return(NULL); } /** * ags_recall_channel_new: * * Creates an #AgsRecallChannel. * * Returns: a new #AgsRecallChannel. * * Since: 0.4 */ AgsRecallChannel* ags_recall_channel_new() { AgsRecallChannel *recall_channel; recall_channel = (AgsRecallChannel *) g_object_new(AGS_TYPE_RECALL_CHANNEL, NULL); return(recall_channel); } gsequencer-0.6.37/src/ags/audio/ags_recall_channel_run_dummy.h0000644000175000017500000000462612612232540021374 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_RECALL_CHANNEL_RUN_DUMMY_H__ #define __AGS_RECALL_CHANNEL_RUN_DUMMY_H__ #include #include #include #include #include #define AGS_TYPE_RECALL_CHANNEL_RUN_DUMMY (ags_recall_channel_run_dummy_get_type()) #define AGS_RECALL_CHANNEL_RUN_DUMMY(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_RECALL_CHANNEL_RUN_DUMMY, AgsRecallChannelRunDummy)) #define AGS_RECALL_CHANNEL_RUN_DUMMY_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_RECALL_CHANNEL_RUN_DUMMY, AgsRecallChannelRunDummyClass)) #define AGS_IS_RECALL_CHANNEL_RUN_DUMMY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_RECALL_CHANNEL_RUN_DUMMY)) #define AGS_IS_RECALL_CHANNEL_RUN_DUMMY_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_RECALL_CHANNEL_RUN_DUMMY)) #define AGS_RECALL_CHANNEL_RUN_DUMMY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_RECALL_CHANNEL_RUN_DUMMY, AgsRecallChannelRunDummyClass)) typedef struct _AgsRecallChannelRunDummy AgsRecallChannelRunDummy; typedef struct _AgsRecallChannelRunDummyClass AgsRecallChannelRunDummyClass; struct _AgsRecallChannelRunDummy { AgsRecallChannelRun recall_channel_run; GType recycling_dummy_child_type; }; struct _AgsRecallChannelRunDummyClass { AgsRecallChannelRunClass recall_channel_run; }; GType ags_recall_channel_run_dummy_get_type(); AgsRecallChannelRunDummy* ags_recall_channel_run_dummy_new(AgsChannel *source, GType child_type, GType recycling_dummy_child_type); #endif /*__AGS_RECALL_CHANNEL_RUN_DUMMY_H__*/ gsequencer-0.6.37/src/ags/audio/ags_output.c0000644000175000017500000001517512626272146015712 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include void ags_output_class_init(AgsOutputClass *output_class); void ags_output_connectable_interface_init(AgsConnectableInterface *connectable); void ags_output_init(AgsOutput *output); void ags_output_finalize(GObject *gobject); void ags_output_connect(AgsConnectable *connectable); void ags_output_disconnect(AgsConnectable *connectable); /** * SECTION:ags_output * @short_description: Output of #AgsAudio * @title: AgsOutput * @section_id: * @include: ags/audio/ags_output.h * * #AgsOutput represents an output channel of #AgsAudio. */ static gpointer ags_output_parent_class = NULL; static AgsConnectableInterface *ags_output_parent_connectable_interface; GType ags_output_get_type (void) { static GType ags_type_output = 0; if(!ags_type_output){ static const GTypeInfo ags_output_info = { sizeof (AgsOutputClass), (GBaseInitFunc) NULL, /* base_init */ (GBaseFinalizeFunc) NULL, /* base_finalize */ (GClassInitFunc) ags_output_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsOutput), 0, /* n_preallocs */ (GInstanceInitFunc) ags_output_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_output_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_output = g_type_register_static(AGS_TYPE_CHANNEL, "AgsOutput\0", &ags_output_info, 0); g_type_add_interface_static(ags_type_output, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_output); } void ags_output_class_init(AgsOutputClass *output) { GObjectClass *gobject; AgsChannelClass *channel; ags_output_parent_class = g_type_class_peek_parent(output); gobject = (GObjectClass *) output; gobject->finalize = ags_output_finalize; channel = (AgsChannelClass *) output; } void ags_output_connectable_interface_init(AgsConnectableInterface *connectable) { AgsConnectableInterface *ags_output_connectable_parent_interface; ags_output_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_output_connect; connectable->disconnect = ags_output_disconnect; } void ags_output_init(AgsOutput *output) { } void ags_output_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_output_parent_class)->finalize(gobject); } void ags_output_connect(AgsConnectable *connectable) { ags_output_parent_connectable_interface->connect(connectable); } void ags_output_disconnect(AgsConnectable *connectable) { ags_output_parent_connectable_interface->disconnect(connectable); } /** * ags_output_map_audio_signal: * @output: an #AgsOutput * @recall_id: the assigned #AgsRecallID * * Maps audio signal and assigning it to recall id. * * Returns: a new #GList containing #AgsAudioSignal * * Since: 0.4 */ GList* ags_output_map_audio_signal(AgsOutput *output, AgsRecallID *recall_id) { AgsDevout *devout; AgsAudioSignal *audio_signal; GList *list_destination; if(output != NULL){ list_destination = g_list_alloc(); goto ags_copy_pattern_map_destination0; }else return(NULL); devout = AGS_DEVOUT(AGS_AUDIO(AGS_CHANNEL(output)->audio)->devout); while(output != NULL){ list_destination->next = g_list_alloc(); list_destination->next->prev = list_destination; list_destination = list_destination->next; ags_copy_pattern_map_destination0: g_message("ags_output_map_audio_signal\n\0"); audio_signal = ags_audio_signal_new((GObject *) devout, (GObject *) output->channel.first_recycling, (GObject *) recall_id); ags_connectable_connect(AGS_CONNECTABLE(audio_signal)); ags_recycling_add_audio_signal(output->channel.first_recycling, audio_signal); audio_signal->stream_current = audio_signal->stream_beginning; list_destination->data = (gpointer) audio_signal; output = (AgsOutput *) output->channel.next_pad; } return(list_destination); } /** * ags_output_find_first_input_recycling: * @output: an #AgsOutput * * Retrieve first input recycling. * * Returns: the first #AgsRecycling of #AgsAudio * * Since: 0.4 */ AgsRecycling* ags_output_find_first_input_recycling(AgsOutput *output) { AgsAudio *audio; AgsChannel *input; if(output == NULL) return(NULL); audio = AGS_AUDIO(AGS_CHANNEL(output)->audio); if((AGS_AUDIO_ASYNC & (audio->flags)) != 0){ input = ags_channel_nth(audio->input, AGS_CHANNEL(output)->audio_channel); input = ags_channel_first_with_recycling(input); }else{ input = ags_channel_nth(audio->input, AGS_CHANNEL(output)->line); } if(input != NULL){ return(input->first_recycling); }else{ return(NULL); } } /** * ags_output_find_last_input_recycling: * @output: an #AgsOutput * * Retrieve last input recycling. * * Returns: the last #AgsRecycling of #AgsAudio * * Since: 0.4 */ AgsRecycling* ags_output_find_last_input_recycling(AgsOutput *output) { AgsAudio *audio; AgsChannel *input; if(output == NULL) return(NULL); audio = AGS_AUDIO(AGS_CHANNEL(output)->audio); if((AGS_AUDIO_ASYNC & (audio->flags)) != 0){ input = ags_channel_nth(audio->input, AGS_CHANNEL(output)->audio_channel); input = ags_channel_last_with_recycling(input); }else{ input = ags_channel_nth(audio->input, AGS_CHANNEL(output)->line); } if(input != NULL){ return(input->last_recycling); }else{ return(NULL); } } /** * ags_output_new: * @audio: the #AgsAudio * * Creates an #AgsOutput, linking tree to @audio. * * Returns: a new #AgsOutput * * Since: 0.3 */ AgsOutput* ags_output_new(GObject *audio) { AgsOutput *output; output = (AgsOutput *) g_object_new(AGS_TYPE_OUTPUT, "audio\0", audio, NULL); return(output); } gsequencer-0.6.37/src/ags/audio/ags_recall.c0000644000175000017500000015720412626272146015614 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void ags_recall_class_init(AgsRecallClass *recall_class); void ags_recall_connectable_interface_init(AgsConnectableInterface *connectable); void ags_recall_packable_interface_init(AgsPackableInterface *packable); void ags_recall_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable); void ags_recall_plugin_interface_init(AgsPluginInterface *plugin); void ags_recall_init(AgsRecall *recall); void ags_recall_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_recall_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_recall_add_to_registry(AgsConnectable *connectable); void ags_recall_remove_from_registry(AgsConnectable *connectable); gboolean ags_recall_is_connected(AgsConnectable *connectable); void ags_recall_connect(AgsConnectable *connectable); void ags_recall_disconnect(AgsConnectable *connectable); gboolean ags_recall_pack(AgsPackable *packable, GObject *container); gboolean ags_recall_unpack(AgsPackable *packable); void ags_recall_connect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_recall_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable); gchar* ags_recall_get_name(AgsPlugin *plugin); void ags_recall_set_name(AgsPlugin *plugin, gchar *name); gchar* ags_recall_get_version(AgsPlugin *plugin); void ags_recall_set_version(AgsPlugin *plugin, gchar *version); gchar* ags_recall_get_build_id(AgsPlugin *plugin); void ags_recall_set_build_id(AgsPlugin *plugin, gchar *build_id); gchar* ags_recall_get_xml_type(AgsPlugin *plugin); void ags_recall_set_xml_type(AgsPlugin *plugin, gchar *xml_type); GList* ags_recall_get_ports(AgsPlugin *plugin); void ags_recall_read(AgsFile *file, xmlNode *node, AgsPlugin *plugin); xmlNode* ags_recall_write(AgsFile *file, xmlNode *parent, AgsPlugin *plugin); void ags_recall_finalize(GObject *recall); void ags_recall_real_run_init_pre(AgsRecall *recall); void ags_recall_real_run_init_inter(AgsRecall *recall); void ags_recall_real_run_init_post(AgsRecall *recall); void ags_recall_real_run_pre(AgsRecall *recall); void ags_recall_real_run_inter(AgsRecall *recall); void ags_recall_real_run_post(AgsRecall *recall); void ags_recall_real_stop_persistent(AgsRecall *recall); void ags_recall_real_done(AgsRecall *recall); void ags_recall_real_cancel(AgsRecall *recall); void ags_recall_real_remove(AgsRecall *recall); AgsRecall* ags_recall_real_duplicate(AgsRecall *reall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter); void ags_recall_child_done(AgsRecall *child, AgsRecall *parent); /** * SECTION:ags_recall * @Short_description: The recall base class * @Title: AgsRecall * * #AgsRecall acts as effect processor. */ enum{ RESOLVE_DEPENDENCIES, RUN_INIT_PRE, RUN_INIT_INTER, RUN_INIT_POST, RUN_PRE, RUN_INTER, RUN_POST, STOP_PERSISTENT, DONE, CANCEL, REMOVE, DUPLICATE, NOTIFY_DEPENDENCY, CHILD_ADDED, LAST_SIGNAL, }; enum{ PROP_0, PROP_DEVOUT, PROP_CONTAINER, PROP_DEPENDENCY, PROP_RECALL_ID, PROP_PARENT, PROP_CHILD, }; static gpointer ags_recall_parent_class = NULL; static guint recall_signals[LAST_SIGNAL]; GType ags_recall_get_type (void) { static GType ags_type_recall = 0; if(!ags_type_recall){ static const GTypeInfo ags_recall_info = { sizeof (AgsRecallClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_recall_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsRecall), 0, /* n_preallocs */ (GInstanceInitFunc) ags_recall_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_recall_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_packable_interface_info = { (GInterfaceInitFunc) ags_recall_packable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_dynamic_connectable_interface_info = { (GInterfaceInitFunc) ags_recall_dynamic_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_plugin_interface_info = { (GInterfaceInitFunc) ags_recall_plugin_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_recall = g_type_register_static(G_TYPE_OBJECT, "AgsRecall\0", &ags_recall_info, 0); g_type_add_interface_static(ags_type_recall, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_recall, AGS_TYPE_PACKABLE, &ags_packable_interface_info); g_type_add_interface_static(ags_type_recall, AGS_TYPE_DYNAMIC_CONNECTABLE, &ags_dynamic_connectable_interface_info); g_type_add_interface_static(ags_type_recall, AGS_TYPE_PLUGIN, &ags_plugin_interface_info); } return(ags_type_recall); } void ags_recall_class_init(AgsRecallClass *recall) { GObjectClass *gobject; GParamSpec *param_spec; ags_recall_parent_class = g_type_class_peek_parent(recall); /* GObjectClass */ gobject = (GObjectClass *) recall; gobject->set_property = ags_recall_set_property; gobject->get_property = ags_recall_get_property; gobject->finalize = ags_recall_finalize; /* properties */ /** * AgsRecall:devout: * * The assigned devout. * * Since: 0.4 */ param_spec = g_param_spec_object("devout\0", "devout of recall\0", "The devout which this recall is packed into\0", AGS_TYPE_DEVOUT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_DEVOUT, param_spec); /** * AgsRecall:recall-container: * * The recall container packed into. * * Since: 0.4 */ param_spec = g_param_spec_object("recall-container\0", "container of recall\0", "The container which this recall is packed into\0", AGS_TYPE_RECALL_CONTAINER, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_CONTAINER, param_spec); /** * AgsRecall:dependency: * * The recall depending on. * * Since: 0.4 */ param_spec = g_param_spec_object("dependency\0", "dependency of recall\0", "The dependency that can be added\0", AGS_TYPE_RECALL_DEPENDENCY, G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_DEPENDENCY, param_spec); /** * AgsRecall:recall-id: * * The recall id running in. * * Since: 0.4 */ param_spec = g_param_spec_object("recall-id\0", "run id of recall\0", "The recall id of the recall\0", AGS_TYPE_RECALL_ID, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_RECALL_ID, param_spec); /** * AgsRecall:audio-channel: * * The parent recall. * * Since: 0.4 */ param_spec = g_param_spec_object("parent\0", "parent recall of this recall\0", "The recall should be the parent instance of this recall\0", AGS_TYPE_RECALL, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_PARENT, param_spec); /** * AgsRecall:audio-channel: * * The child recall. * * Since: 0.4 */ param_spec = g_param_spec_object("child\0", "child of recall\0", "The child that can be added\0", AGS_TYPE_RECALL, G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_CHILD, param_spec); /* AgsRecallClass */ recall->resolve_dependencies = NULL; recall->run_init_pre = ags_recall_real_run_init_pre; recall->run_init_inter = ags_recall_real_run_init_inter; recall->run_init_post = ags_recall_real_run_init_post; recall->run_pre = ags_recall_real_run_pre; recall->run_inter = ags_recall_real_run_inter; recall->run_post = ags_recall_real_run_post; recall->stop_persistent = ags_recall_real_stop_persistent; recall->done = ags_recall_real_done; recall->cancel = ags_recall_real_cancel; recall->remove = ags_recall_real_remove; recall->duplicate = ags_recall_real_duplicate; recall->notify_dependency = NULL; recall->child_added = NULL; /* signals */ /** * AgsRecall::resolve-dependencies: * @recall: the object to resolve * * The ::resolve-dependencies signal notifies about resolving * dependencies. */ recall_signals[RESOLVE_DEPENDENCIES] = g_signal_new("resolve-dependencies\0", G_TYPE_FROM_CLASS (recall), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AgsRecallClass, resolve_dependencies), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); /** * AgsRecall::run-init-pre: * @recall: the object to initialize * * The ::run-init-pre signal notifies about initializing * stage 0. */ recall_signals[RUN_INIT_PRE] = g_signal_new("run-init-pre\0", G_TYPE_FROM_CLASS (recall), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AgsRecallClass, run_init_pre), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); /** * AgsRecall::run-init-inter: * @recall: the object to initialize * * The ::run-init-inter signal notifies about initializing * stage 1. */ recall_signals[RUN_INIT_INTER] = g_signal_new("run-init-inter\0", G_TYPE_FROM_CLASS (recall), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AgsRecallClass, run_init_inter), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); /** * AgsRecall::run-init-post: * @recall: the object to initialize * * The ::run-init-post signal notifies about initializing * stage 2. */ recall_signals[RUN_INIT_POST] = g_signal_new("run-init-post\0", G_TYPE_FROM_CLASS (recall), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AgsRecallClass, run_init_post), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); /** * AgsRecall::run-pre: * @recall: the object to play * * The ::run-pre signal notifies about running * stage 0. */ recall_signals[RUN_PRE] = g_signal_new("run-pre\0", G_TYPE_FROM_CLASS (recall), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AgsRecallClass, run_pre), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); /** * AgsRecall::run-inter: * @recall: the object to play * * The ::run-inter signal notifies about running * stage 1. */ recall_signals[RUN_INTER] = g_signal_new("run-inter\0", G_TYPE_FROM_CLASS (recall), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AgsRecallClass, run_inter), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); /** * AgsRecall::run-post: * @recall: the object to play * * The ::run-post signal notifies about running * stage 2. */ recall_signals[RUN_POST] = g_signal_new("run-post\0", G_TYPE_FROM_CLASS (recall), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AgsRecallClass, run_post), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); /** * AgsRecall::stop-persistent: * @recall: the object stop playback * * The ::stop-persistent signal notifies about definitively * stopping playback. */ recall_signals[STOP_PERSISTENT] = g_signal_new("stop_persistent\0", G_TYPE_FROM_CLASS (recall), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AgsRecallClass, stop_persistent), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); /** * AgsRecall::done: * @recall: the object to finish playback * * The ::done signal notifies about stopping playback. */ recall_signals[DONE] = g_signal_new("done\0", G_TYPE_FROM_CLASS (recall), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AgsRecallClass, done), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); /** * AgsRecall::cancel: * @recall: the object to cancel playback * * The ::cancel signal notifies about cancelling playback. */ recall_signals[CANCEL] = g_signal_new("cancel\0", G_TYPE_FROM_CLASS (recall), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AgsRecallClass, cancel), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); /** * AgsRecall::remove: * @recall: the object to remove of audio loop * * The ::remove signal notifies about removing. */ recall_signals[REMOVE] = g_signal_new("remove\0", G_TYPE_FROM_CLASS (recall), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AgsRecallClass, remove), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); /** * AgsRecall::duplicate: * @recall: the object to duplicate * @recall_id: the assigned #AgsRecallID * @n_params: pointer to array length * @parameter: parameter array * * The ::duplicate signal notifies about instantiating. */ recall_signals[DUPLICATE] = g_signal_new("duplicate\0", G_TYPE_FROM_CLASS (recall), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AgsRecallClass, duplicate), NULL, NULL, g_cclosure_user_marshal_OBJECT__OBJECT_POINTER_POINTER, G_TYPE_OBJECT, 3, G_TYPE_OBJECT, G_TYPE_POINTER, G_TYPE_POINTER); /** * AgsRecall::notify-dependency: * @recall: the object to notify * @dependency: the kind of dependency * @count: the reference count * * The ::notify-dependency signal notifies about dependencies * added. */ recall_signals[NOTIFY_DEPENDENCY] = g_signal_new("notify-dependency\0", G_TYPE_FROM_CLASS (recall), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AgsRecallClass, notify_dependency), NULL, NULL, g_cclosure_user_marshal_VOID__UINT_INT, G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_INT); /** * AgsRecall::child-added: * @recall: the object to add the child * @child: the #AgsRecall to add * * The ::child-added signal notifies about children * added. */ recall_signals[CHILD_ADDED] = g_signal_new("child-added\0", G_TYPE_FROM_CLASS (recall), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AgsRecallClass, child_added), NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, G_TYPE_OBJECT); } void ags_recall_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->add_to_registry = ags_recall_add_to_registry; connectable->remove_from_registry = ags_recall_remove_from_registry; connectable->is_ready = NULL; connectable->is_connected = ags_recall_is_connected; connectable->connect = ags_recall_connect; connectable->disconnect = ags_recall_disconnect; } void ags_recall_packable_interface_init(AgsPackableInterface *packable) { packable->pack = ags_recall_pack; packable->unpack = ags_recall_unpack; } void ags_recall_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable) { dynamic_connectable->connect_dynamic = ags_recall_connect_dynamic; dynamic_connectable->disconnect_dynamic = ags_recall_disconnect_dynamic; } void ags_recall_plugin_interface_init(AgsPluginInterface *plugin) { plugin->get_name = ags_recall_get_name; plugin->set_name = ags_recall_set_name; plugin->get_version = ags_recall_get_version; plugin->set_version = ags_recall_set_version; plugin->get_build_id = ags_recall_get_build_id; plugin->set_build_id = ags_recall_set_build_id; plugin->get_xml_type = ags_recall_get_xml_type; plugin->set_xml_type = ags_recall_set_xml_type; plugin->get_ports = ags_recall_get_ports; plugin->read = ags_recall_read; plugin->write = ags_recall_write; plugin->set_ports = NULL; } void ags_recall_init(AgsRecall *recall) { recall->flags = 0; recall->devout = NULL; recall->container = NULL; recall->version = NULL; recall->build_id = NULL; recall->effect = NULL; recall->name = NULL; recall->xml_type = NULL; recall->dependencies = NULL; recall->recall_id = NULL; recall->parent = NULL; recall->children = NULL; recall->child_type = G_TYPE_NONE; recall->child_parameters = NULL; recall->n_params = 0; recall->port = NULL; recall->handlers = NULL; } void ags_recall_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsRecall *recall; recall = AGS_RECALL(gobject); switch(prop_id){ case PROP_DEVOUT: { AgsDevout *devout; GList *current; devout = (AgsDevout *) g_value_get_object(value); if(devout == ((AgsDevout *) recall->devout)) return; if(recall->devout != NULL) g_object_unref(recall->devout); if(devout != NULL) g_object_ref(G_OBJECT(devout)); recall->devout = (GObject *) devout; current = recall->children; while(current != NULL){ g_object_set(G_OBJECT(current->data), "devout\0", devout, NULL); current = current->next; } } break; case PROP_CONTAINER: { AgsRecallContainer *container; container = (AgsRecallContainer *) g_value_get_object(value); if((AgsRecallContainer *) recall->container == container || !(AGS_IS_RECALL_AUDIO(recall) || AGS_IS_RECALL_AUDIO_RUN(recall) || AGS_IS_RECALL_CHANNEL(recall) || AGS_IS_RECALL_CHANNEL_RUN(recall))) return; if(recall->container != NULL){ ags_packable_unpack(AGS_PACKABLE(recall)); g_object_unref(G_OBJECT(recall->container)); } if(container != NULL){ g_object_ref(G_OBJECT(container)); ags_packable_pack(AGS_PACKABLE(recall), G_OBJECT(container)); if(AGS_IS_RECALL_AUDIO(recall)){ g_object_set(G_OBJECT(container), "recall_audio\0", recall, NULL); }else if(AGS_IS_RECALL_AUDIO_RUN(recall)){ g_object_set(G_OBJECT(container), "recall_audio_run\0", recall, NULL); }else if(AGS_IS_RECALL_CHANNEL(recall)){ g_object_set(G_OBJECT(container), "recall_channel\0", recall, NULL); }else if(AGS_IS_RECALL_CHANNEL_RUN(recall)){ g_object_set(G_OBJECT(container), "recall_channel_run\0", recall, NULL); } } recall->container = (GObject *) container; } break; case PROP_DEPENDENCY: { AgsRecallDependency *recall_dependency; recall_dependency = (AgsRecallDependency *) g_value_get_object(value); ags_recall_add_dependency(recall, recall_dependency); } break; case PROP_RECALL_ID: { AgsRecallID *recall_id; recall_id = (AgsRecallID *) g_value_get_object(value); if(recall->recall_id == recall_id) return; if(recall->recall_id != NULL){ g_object_unref(G_OBJECT(recall->recall_id)); } if(recall_id != NULL){ g_object_ref(G_OBJECT(recall_id)); } ags_recall_set_recall_id(recall, recall_id); } break; case PROP_PARENT: { AgsRecall *parent; parent = (AgsRecall *) g_value_get_object(value); ags_recall_add_child(parent, recall); } break; case PROP_CHILD: { AgsRecall *child; child = (AgsRecall *) g_value_get_object(value); ags_recall_add_child(recall, child); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_recall_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsRecall *recall; recall = AGS_RECALL(gobject); switch(prop_id){ case PROP_DEVOUT: { g_value_set_object(value, recall->devout); } break; case PROP_CONTAINER: { g_value_set_object(value, recall->container); } break; case PROP_RECALL_ID: { g_value_set_object(value, recall->recall_id); } break; case PROP_PARENT: { g_value_set_object(value, recall->parent); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_recall_add_to_registry(AgsConnectable *connectable) { AgsMain *ags_main; AgsServer *server; AgsRecall *recall; AgsRegistryEntry *entry; GList *list; recall = AGS_RECALL(connectable); ags_main = AGS_MAIN(AGS_DEVOUT(recall->devout)->ags_main); server = ags_main->server; entry = ags_registry_entry_alloc(server->registry); g_value_set_object(&(entry->entry), (gpointer) recall); ags_registry_add(server->registry, entry); } void ags_recall_remove_from_registry(AgsConnectable *connectable) { //TODO:JK: implement me } gboolean ags_recall_is_connected(AgsConnectable *connectable) { AgsRecall *recall; recall = AGS_RECALL(connectable); if((AGS_RECALL_CONNECTED & (recall->flags)) != 0){ return(TRUE); }else{ return(FALSE); } } void ags_recall_connect(AgsConnectable *connectable) { AgsRecall *recall; AgsRecallHandler *recall_handler; GList *list; recall = AGS_RECALL(connectable); if((AGS_RECALL_CONNECTED & (recall->flags)) != 0){ return; } list = recall->children; while(list != NULL){ ags_connectable_connect(AGS_CONNECTABLE(list->data)); list = list->next; } /* handlers */ list = recall->handlers; while(list != NULL){ recall_handler = AGS_RECALL_HANDLER(list->data); recall_handler->handler = g_signal_connect_after(G_OBJECT(recall), recall_handler->signal_name, G_CALLBACK(recall_handler->callback), recall_handler->data); list = list->next; } recall->flags |= AGS_RECALL_CONNECTED; } void ags_recall_disconnect(AgsConnectable *connectable) { AgsRecall *recall; GList *list; recall = AGS_RECALL(connectable); list = recall->children; while(list != NULL){ ags_connectable_disconnect(AGS_CONNECTABLE(list->data)); list = list->next; } recall->flags &= (~AGS_RECALL_CONNECTED); } gboolean ags_recall_pack(AgsPackable *packable, GObject *container) { AgsRecall *recall; AgsRecallContainer *recall_container; recall = AGS_RECALL(packable); recall_container = AGS_RECALL_CONTAINER(container); if(recall == NULL || recall->container == container || (container != NULL && !AGS_IS_RECALL_CONTAINER(container))) return(TRUE); #ifdef AGS_DEBUG g_message("===== packing: %s\0", G_OBJECT_TYPE_NAME(recall)); #endif return(FALSE); } gboolean ags_recall_unpack(AgsPackable *packable) { AgsRecall *recall; AgsRecallContainer *recall_container; recall = AGS_RECALL(packable); if(recall == NULL || recall->container == NULL) return(TRUE); recall_container = AGS_RECALL_CONTAINER(recall->container); /* unset link */ recall->container = NULL; return(FALSE); } void ags_recall_connect_dynamic(AgsDynamicConnectable *dynamic_connectable) { AgsRecall *recall; AgsRecallHandler *recall_handler; GList *list; recall = AGS_RECALL(dynamic_connectable); if((AGS_RECALL_DYNAMIC_CONNECTED & (recall->flags)) != 0){ return; } #ifdef AGS_DEBUG g_message("dynamic connect: %s\0", G_OBJECT_TYPE_NAME(recall)); #endif /* connect children */ list = recall->children; while(list != NULL){ ags_dynamic_connectable_connect_dynamic(AGS_DYNAMIC_CONNECTABLE(list->data)); list = list->next; } /* connect handlers */ list = recall->handlers; while(list != NULL){ recall_handler = AGS_RECALL_HANDLER(list->data); recall_handler->handler = g_signal_connect_after(G_OBJECT(recall), recall_handler->signal_name, G_CALLBACK(recall_handler->callback), recall_handler->data); list = list->next; } //TODO:JK: fixme recall->flags |= AGS_RECALL_DYNAMIC_CONNECTED; } void ags_recall_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable) { AgsRecall *recall; AgsRecallHandler *recall_handler; GList *list; recall = AGS_RECALL(dynamic_connectable); if((AGS_RECALL_DYNAMIC_CONNECTED & (recall->flags)) == 0){ return; } /* disconnect children */ list = recall->children; while(list != NULL){ ags_dynamic_connectable_disconnect_dynamic(AGS_DYNAMIC_CONNECTABLE(list->data)); list = list->next; } /* disconnect handlers */ list = recall->handlers; while(list != NULL){ recall_handler = AGS_RECALL_HANDLER(list->data); g_signal_handler_disconnect(G_OBJECT(recall), recall_handler->handler); list = list->next; } recall->flags &= (~AGS_RECALL_DYNAMIC_CONNECTED); } gchar* ags_recall_get_name(AgsPlugin *plugin) { return(AGS_RECALL(plugin)->name); } void ags_recall_set_name(AgsPlugin *plugin, gchar *name) { AGS_RECALL(plugin)->name = name; } gchar* ags_recall_get_version(AgsPlugin *plugin) { return(AGS_RECALL(plugin)->version); } void ags_recall_set_version(AgsPlugin *plugin, gchar *version) { AGS_RECALL(plugin)->version = version; } gchar* ags_recall_get_build_id(AgsPlugin *plugin) { return(AGS_RECALL(plugin)->build_id); } void ags_recall_set_build_id(AgsPlugin *plugin, gchar *build_id) { AGS_RECALL(plugin)->build_id = build_id; } gchar* ags_recall_get_xml_type(AgsPlugin *plugin) { return(AGS_RECALL(plugin)->xml_type); } void ags_recall_set_xml_type(AgsPlugin *plugin, gchar *xml_type) { AGS_RECALL(plugin)->xml_type = xml_type; } GList* ags_recall_get_ports(AgsPlugin *plugin) { return(AGS_RECALL(plugin)->port); } void ags_recall_read(AgsFile *file, xmlNode *node, AgsPlugin *plugin) { AgsRecall *recall; recall = AGS_RECALL(plugin); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", recall, NULL)); } xmlNode* ags_recall_write(AgsFile *file, xmlNode *parent, AgsPlugin *plugin) { AgsRecall *recall; xmlNode *node; gchar *id; recall = AGS_RECALL(plugin); id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, AGS_RECALL(plugin)->xml_type); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", recall, NULL)); xmlAddChild(parent, node); return(node); } void ags_recall_finalize(GObject *gobject) { AgsRecall *recall; recall = AGS_RECALL(gobject); #ifdef AGS_DEBUG g_message("finalize %s\n\0", G_OBJECT_TYPE_NAME(gobject)); #endif if(recall->devout != NULL){ g_object_unref(recall->devout); } if((AGS_RECALL_CONNECTED & (recall->flags)) != 0){ // ags_connectable_disconnect(AGS_CONNECTABLE(recall)); } if((AGS_RECALL_DYNAMIC_CONNECTED & (recall->flags)) != 0){ // ags_dynamic_connectable_disconnect_dynamic(AGS_DYNAMIC_CONNECTABLE(recall)); } // if(recall->name != NULL) // g_free(recall->name); ags_list_free_and_unref_link(recall->dependencies); ags_list_free_and_unref_link(recall->children); if(recall->container != NULL){ ags_packable_unpack(recall); } if(recall->parent != NULL){ //TODO:JK: implement me } /* call parent */ G_OBJECT_CLASS(ags_recall_parent_class)->finalize(gobject); } /** * ags_recall_set_flags: * @recall: an #AgsRecall * @flags: the flags mask * * Set flags recursivly. * * Since: 0.4 */ void ags_recall_set_flags(AgsRecall *recall, guint flags) { GList *child; guint inheritated_flags_mask; /* set flags */ recall->flags |= flags; /* set recursivly - prepare mask */ inheritated_flags_mask = (AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION | AGS_RECALL_PROPAGATE_DONE | AGS_RECALL_INITIAL_RUN); if(!AGS_IS_RECALL_RECYCLING(recall)){ inheritated_flags_mask |= (AGS_RECALL_PERSISTENT | AGS_RECALL_PERSISTENT_PLAYBACK | AGS_RECALL_PERSISTENT_SEQUENCER | AGS_RECALL_PERSISTENT_NOTATION); } /* apply recursivly */ child = recall->children; while(child != NULL){ ags_recall_set_flags(AGS_RECALL(child->data), (inheritated_flags_mask & (flags))); child = child->next; } } /** * ags_recall_resolve_dependencies: * @recall: an #AgsRecall * * A signal indicating that the inheriting object should resolve * it's dependencies. * * Since: 0.4 */ void ags_recall_resolve_dependencies(AgsRecall *recall) { g_return_if_fail(AGS_IS_RECALL(recall)); #ifdef AGS_DEBUG g_message("resolving %s\0", G_OBJECT_TYPE_NAME(recall)); #endif g_object_ref(G_OBJECT(recall)); g_signal_emit(G_OBJECT(recall), recall_signals[RESOLVE_DEPENDENCIES], 0); g_object_unref(G_OBJECT(recall)); } void ags_recall_child_added(AgsRecall *parent, AgsRecall *child) { g_return_if_fail(AGS_IS_RECALL(parent)); g_object_ref(G_OBJECT(parent)); g_signal_emit(G_OBJECT(parent), recall_signals[CHILD_ADDED], 0, child); g_object_unref(G_OBJECT(parent)); } void ags_recall_real_run_init_pre(AgsRecall *recall) { GList *list; list = recall->children; while(list != NULL){ if((AGS_RECALL_TEMPLATE & (AGS_RECALL(list->data)->flags)) != 0){ g_warning("running on template\0"); } ags_recall_run_init_pre(AGS_RECALL(list->data)); list = list->next; } } /** * ags_recall_run_init_pre: * @recall: an #AgsRecall * * Prepare for run, this is the pre stage within the preparation. * * Since: 0.4 */ void ags_recall_run_init_pre(AgsRecall *recall) { g_return_if_fail(AGS_IS_RECALL(recall)); g_object_ref(G_OBJECT(recall)); g_signal_emit(G_OBJECT(recall), recall_signals[RUN_INIT_PRE], 0); g_object_unref(G_OBJECT(recall)); } void ags_recall_real_run_init_inter(AgsRecall *recall) { GList *list; list = recall->children; while(list != NULL){ if((AGS_RECALL_TEMPLATE & (AGS_RECALL(list->data)->flags)) != 0){ g_warning("running on template\0"); } ags_recall_run_init_inter(AGS_RECALL(list->data)); list = list->next; } } /** * ags_recall_run_init_inter: * @recall: an #AgsRecall * * Prepare for run, this is the inter stage within the preparation. * * Since: 0.4 */ void ags_recall_run_init_inter(AgsRecall *recall) { g_return_if_fail(AGS_IS_RECALL(recall)); g_object_ref(G_OBJECT(recall)); g_signal_emit(G_OBJECT(recall), recall_signals[RUN_INIT_INTER], 0); g_object_unref(G_OBJECT(recall)); } void ags_recall_real_run_init_post(AgsRecall *recall) { GList *list; list = recall->children; while(list != NULL){ if((AGS_RECALL_TEMPLATE & (AGS_RECALL(list->data)->flags)) != 0){ g_warning("running on template\0"); } ags_recall_run_init_post(AGS_RECALL(list->data)); list = list->next; } recall->flags |= (AGS_RECALL_INITIAL_RUN | AGS_RECALL_RUN_INITIALIZED); } /** * ags_recall_run_init_post: * @recall: an #AgsRecall * * Prepare for run, this is the post stage within the preparation. * * Since: 0.4 */ void ags_recall_run_init_post(AgsRecall *recall) { g_return_if_fail(AGS_IS_RECALL(recall)); g_object_ref(G_OBJECT(recall)); g_signal_emit(G_OBJECT(recall), recall_signals[RUN_INIT_POST], 0); g_object_unref(G_OBJECT(recall)); } void ags_recall_real_run_pre(AgsRecall *recall) { GList *list, *list_next; list = recall->children; while(list != NULL){ list_next = list->next; if((AGS_RECALL_TEMPLATE & (AGS_RECALL(list->data)->flags)) != 0){ g_warning("running on template\0"); list = list->next; continue; } ags_recall_run_pre(AGS_RECALL(list->data)); list = list_next; } } /** * ags_recall_run_pre: * @recall: an #AgsRecall * * This is the pre stage within a run. * * Since: 0.4 */ void ags_recall_run_pre(AgsRecall *recall) { g_return_if_fail(AGS_IS_RECALL(recall)); g_object_ref(G_OBJECT(recall)); g_signal_emit(G_OBJECT(recall), recall_signals[RUN_PRE], 0); g_object_unref(G_OBJECT(recall)); } void ags_recall_real_run_inter(AgsRecall *recall) { GList *list, *list_next; list = recall->children; while(list != NULL){ list_next = list->next; if((AGS_RECALL_TEMPLATE & (AGS_RECALL(list->data)->flags)) != 0){ g_warning("running on template\0"); list = list->next; continue; } ags_recall_run_inter(AGS_RECALL(list->data)); list = list_next; } } /** * ags_recall_run_inter: * @recall: an #AgsRecall * * This is the inter stage within a run. * * Since: 0.4 */ void ags_recall_run_inter(AgsRecall *recall) { g_return_if_fail(AGS_IS_RECALL(recall)); g_object_ref(G_OBJECT(recall)); g_signal_emit(G_OBJECT(recall), recall_signals[RUN_INTER], 0); g_object_unref(G_OBJECT(recall)); } void ags_recall_real_run_post(AgsRecall *recall) { GList *list, *list_next; list = recall->children; while(list != NULL){ list_next = list->next; if((AGS_RECALL_TEMPLATE & (AGS_RECALL(list->data)->flags)) != 0){ g_warning("running on template\0"); list = list->next; continue; } ags_recall_run_post(AGS_RECALL(list->data)); list = list_next; } if((AGS_RECALL_INITIAL_RUN & (recall->flags)) != 0){ recall->flags &= (~AGS_RECALL_INITIAL_RUN); } } /** * ags_recall_run_post: * @recall: an #AgsRecall * * This is the post stage within a run. * * Since: 0.4 */ void ags_recall_run_post(AgsRecall *recall) { g_return_if_fail(AGS_IS_RECALL(recall)); g_object_ref(G_OBJECT(recall)); g_signal_emit(G_OBJECT(recall), recall_signals[RUN_POST], 0); g_object_unref(G_OBJECT(recall)); } void ags_recall_real_stop_persistent(AgsRecall *recall) { g_return_if_fail(AGS_IS_RECALL(recall)); g_object_ref(G_OBJECT(recall)); g_signal_emit(G_OBJECT(recall), recall_signals[STOP_PERSISTENT], 0); g_object_unref(G_OBJECT(recall)); } /** * ags_recall_stop_persistent: * @recall: an #AgsRecall * * Unsets the %AGS_RECALL_PERSISTENT flag set and invokes ags_recall_done(). * * Since: 0.4 */ void ags_recall_stop_persistent(AgsRecall *recall) { if((AGS_RECALL_DONE & (recall->flags)) != 0){ return; } recall->flags &= (~(AGS_RECALL_PERSISTENT | AGS_RECALL_PERSISTENT_PLAYBACK | AGS_RECALL_PERSISTENT_SEQUENCER | AGS_RECALL_PERSISTENT_NOTATION)); ags_recall_done(recall); } void ags_recall_real_done(AgsRecall *recall) { if((AGS_RECALL_DONE & (recall->flags)) != 0){ return; } recall->flags |= AGS_RECALL_DONE; ags_recall_remove(recall); } /** * ags_recall_done: * @recall: an #AgsRecall * * The #AgsRecall doesn't want to run anymore, it has been done its * work. * * Since: 0.4 */ void ags_recall_done(AgsRecall *recall) { g_return_if_fail(AGS_IS_RECALL(recall)); if((AGS_RECALL_PERSISTENT & (recall->flags)) != 0 || (AGS_RECALL_TEMPLATE & (recall->flags)) != 0 || ((AGS_RECALL_PERSISTENT_PLAYBACK & (recall->flags)) != 0 && (AGS_RECALL_PLAYBACK & (recall->flags)) != 0) || ((AGS_RECALL_PERSISTENT_SEQUENCER & (recall->flags)) != 0 && (AGS_RECALL_SEQUENCER & (recall->flags)) != 0) || ((AGS_RECALL_PERSISTENT_NOTATION & (recall->flags)) != 0 && (AGS_RECALL_NOTATION & (recall->flags)) != 0)){ return; } g_object_ref(G_OBJECT(recall)); g_signal_emit(G_OBJECT(recall), recall_signals[DONE], 0); g_object_unref(G_OBJECT(recall)); } void ags_recall_real_cancel(AgsRecall *recall) { GList *list, *list_next; if((AGS_RECALL_TEMPLATE & (recall->flags)) != 0){ return; } /* call cancel for children */ list = recall->children; while(list != NULL){ list_next = list->next; ags_recall_cancel(AGS_RECALL(list->data)); list = list_next; } if((AGS_RECALL_PERSISTENT & (recall->flags)) != 0 || (AGS_RECALL_PERSISTENT_PLAYBACK & (recall->flags)) != 0){ ags_recall_stop_persistent(recall); }else{ ags_recall_done(recall); } } /** * ags_recall_cancel: * @recall: an #AgsRecall * * The #AgsRecall doesn't want to run anymore, it aborts further execution. * * Since: 0.4 */ void ags_recall_cancel(AgsRecall *recall) { g_return_if_fail(AGS_IS_RECALL(recall)); g_object_ref(G_OBJECT(recall)); g_signal_emit(G_OBJECT(recall), recall_signals[CANCEL], 0); g_object_unref(G_OBJECT(recall)); } void ags_recall_real_remove(AgsRecall *recall) { AgsRecall *parent; if(recall == NULL){ return; } g_object_ref(recall); if(recall->parent == NULL){ parent = NULL; g_object_unref(recall); return; }else{ parent = AGS_RECALL(recall->parent); ags_recall_remove_child(parent, recall); } /* propagate done */ if(parent != NULL && (AGS_RECALL_PROPAGATE_DONE & (parent->flags)) != 0 && (AGS_RECALL_PERSISTENT & (parent->flags)) == 0 && parent->children == NULL){ ags_recall_done(parent); } } /** * ags_recall_remove: * @recall: an #AgsRecall * * The #AgsRecall will be removed immediately. * * Since: 0.4 */ void ags_recall_remove(AgsRecall *recall) { g_return_if_fail(AGS_IS_RECALL(recall)); g_object_ref(G_OBJECT(recall)); g_signal_emit(G_OBJECT(recall), recall_signals[REMOVE], 0); g_object_unref(G_OBJECT(recall)); // g_object_unref(recall); } /** * ags_recall_is_done: * @recall: an #AgsRecall * @recycling_container: an #AgsRecyclingContainer * * Check if recall is over. * * Since: 0.4 */ gboolean ags_recall_is_done(GList *recalls, GObject *recycling_container) { AgsRecall *recall; if(recalls == NULL || !AGS_IS_RECYCLING_CONTAINER(recycling_container)){ return(FALSE); } while(recalls != NULL){ recall = AGS_RECALL(recalls->data); if((AGS_RECALL_TEMPLATE & (recall->flags)) == 0 && !AGS_IS_RECALL_AUDIO(recall) && !AGS_IS_RECALL_CHANNEL(recall) && recall->recall_id != NULL && recall->recall_id->recycling_container == (GObject *) recycling_container){ if((AGS_RECALL_DONE & (recall->flags)) == 0){ recall->flags &= (~AGS_RECALL_RUN_INITIALIZED); g_message("done: %s\0", G_OBJECT_TYPE_NAME(recall)); return(FALSE); } } recalls = recalls->next; } return(TRUE); } AgsRecall* ags_recall_real_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter) { AgsRecall *copy; AgsRecallClass *recall_class, *copy_class; AgsRecallContainer *recall_container; AgsRecallHandler *recall_handler, *recall_handler_copy; GList *list, *child; parameter = ags_parameter_grow(G_OBJECT_TYPE(recall), parameter, n_params, "devout\0", recall->devout, "recall_id\0", recall_id, "recall_container\0", recall->container, NULL); copy = g_object_newv(G_OBJECT_TYPE(recall), *n_params, parameter); ags_recall_set_flags(copy, (recall->flags & (~ (AGS_RECALL_TEMPLATE | AGS_RECALL_RUN_INITIALIZED | AGS_RECALL_CONNECTED | AGS_RECALL_DYNAMIC_CONNECTED)))); copy->child_type = recall->child_type; /* duplicate handlers */ list = recall->handlers; while(list != NULL){ recall_handler = AGS_RECALL_HANDLER(list->data); recall_handler_copy = ags_recall_handler_alloc(recall_handler->signal_name, recall_handler->callback, recall_handler->data); ags_recall_add_handler(copy, recall_handler_copy); list = list->next; } return(copy); } /** * ags_recall_duplicate: * @recall: an #AgsRecall * @recall_id: an #AgsRecallID * @n_params: the count of #parameter entries * @parameter: the properties to be passed for instantiating the #AgsRecall * * Should duplicate an #AgsRecall, so it can pass the runs. Mainly used for * creating duplicates from templates, see %AGS_RECALL_TEMPLATE. * * Since: 0.4 */ AgsRecall* ags_recall_duplicate(AgsRecall *recall, AgsRecallID *recall_id) /*, guint n_params, GParameter *parameter */ { AgsRecall *copy; GParameter *params; guint n_params; g_return_val_if_fail(AGS_IS_RECALL(recall), NULL); params = NULL; n_params = 0; g_object_ref(G_OBJECT(recall)); g_signal_emit(G_OBJECT(recall), recall_signals[DUPLICATE], 0, recall_id, &n_params, params, ©); g_object_unref(G_OBJECT(recall)); return(copy); } /** * ags_recall_set_recall_id: * @recall: an #AgsRecall * @recall_id: the #AgsRecallID to set * * Sets the recall id recursively. * * Since: 0.4 */ void ags_recall_set_recall_id(AgsRecall *recall, AgsRecallID *recall_id) { GList *list; list = recall->children; while(list != NULL){ if((AGS_RECALL_TEMPLATE & (AGS_RECALL(list->data)->flags)) != 0){ g_warning("running on template\0"); } ags_recall_set_recall_id(AGS_RECALL(list->data), recall_id); list = list->next; } recall->recall_id = recall_id; } /** * ags_recall_notify_dependency: * @recall: an #AgsRecall * @flags: see AgsRecallNotifyDependencyMode * @count: how many dependencies * * Notifies a recall that an other depends on it. * * Since: 0.4 */ void ags_recall_notify_dependency(AgsRecall *recall, guint flags, gint count) { g_return_if_fail(AGS_IS_RECALL(recall)); g_object_ref(G_OBJECT(recall)); g_signal_emit(G_OBJECT(recall), recall_signals[NOTIFY_DEPENDENCY], 0, flags, count); g_object_unref(G_OBJECT(recall)); } /** * ags_recall_add_dependency: * @recall: an #AgsRecall * @recall_dependency: an #AgsRecallDependency * * Associate a new dependency for this recall. * * Since: 0.4 */ void ags_recall_add_dependency(AgsRecall *recall, AgsRecallDependency *recall_dependency) { if(recall == NULL || recall_dependency == NULL) return; g_object_ref(recall_dependency); recall->dependencies = g_list_prepend(recall->dependencies, recall_dependency); ags_connectable_connect(AGS_CONNECTABLE(recall_dependency)); } /** * ags_recall_remove_dependency: * @recall: an #AgsRecall * @dependency: an #AgsRecall * * Remove a prior associated dependency. * * Since: 0.4 */ void ags_recall_remove_dependency(AgsRecall *recall, AgsRecall *dependency) { AgsRecallDependency *recall_dependency; GList *dependencies; if(recall == NULL || dependency == NULL) return; dependencies = ags_recall_dependency_find_dependency(recall->dependencies, (GObject *) dependency); if(dependencies == NULL) return; recall_dependency = AGS_RECALL_DEPENDENCY(dependencies->data); recall->dependencies = g_list_delete_link(recall->dependencies, dependencies); g_object_unref(G_OBJECT(recall_dependency)); } /** * ags_recall_get_dependencies: * @recall: an #AgsRecall * * Retrieve dependencies. * * Returns: a #GList with all dependencies. * * Since: 0.4 */ //FIXME:JK: duplicate the list GList* ags_recall_get_dependencies(AgsRecall *recall) { return(recall->dependencies); } /** * ags_recall_remove_child: * @parent: an #AgsRecall * @child: an #AgsRecall * * An #AgsRecall may have children. * * Since: 0.4 */ void ags_recall_remove_child(AgsRecall *recall, AgsRecall *child) { if(recall == NULL || child == NULL || child->parent != recall){ return; } recall->children = g_list_remove(recall->children, child); child->parent = NULL; g_object_unref(recall); g_object_unref(child); } /** * ags_recall_add_child: * @parent: an #AgsRecall * @child: an #AgsRecall * * An #AgsRecall may have children. * * Since: 0.4 */ void ags_recall_add_child(AgsRecall *parent, AgsRecall *child) { guint inheritated_flags_mask; if(child == NULL || child->parent == parent) return; inheritated_flags_mask = (AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION | AGS_RECALL_PROPAGATE_DONE | AGS_RECALL_INITIAL_RUN); if(!AGS_IS_RECALL_AUDIO_SIGNAL(child)){ inheritated_flags_mask |= (AGS_RECALL_PERSISTENT | AGS_RECALL_PERSISTENT_PLAYBACK | AGS_RECALL_PERSISTENT_SEQUENCER | AGS_RECALL_PERSISTENT_NOTATION); } /* unref old */ if(child->parent != NULL){ child->flags &= (~inheritated_flags_mask); child->parent->children = g_list_remove(child->parent->children, child); g_object_unref(child->parent); g_object_unref(child); g_object_set(G_OBJECT(child), "recall_id\0", NULL, NULL); } /* ref new */ if(parent != NULL){ g_object_ref(parent); g_object_ref(child); child->flags |= (inheritated_flags_mask & (parent->flags)); parent->children = g_list_prepend(parent->children, child); g_object_set(G_OBJECT(child), "devout\0", parent->devout, "recall_id\0", parent->recall_id, NULL); g_signal_connect(G_OBJECT(child), "done\0", G_CALLBACK(ags_recall_child_done), parent); } child->parent = parent; if(parent != NULL){ ags_recall_child_added(parent, child); } ags_connectable_connect(AGS_CONNECTABLE(child)); if(parent != NULL && (AGS_RECALL_DYNAMIC_CONNECTED & (parent->flags)) != 0 && (AGS_RECALL_DYNAMIC_CONNECTED & (child->flags)) == 0){ ags_dynamic_connectable_connect_dynamic(AGS_DYNAMIC_CONNECTABLE(child)); ags_recall_run_init_pre(AGS_RECALL(child)); ags_recall_run_init_inter(AGS_RECALL(child)); ags_recall_run_init_post(AGS_RECALL(child)); } } /** * ags_recall_get_children: * @recall: an #AgsRecall * * Retrieve children. * * Returns: a GList with all children. * * Since: 0.4 */ //FIXME:JK: duplicate the list GList* ags_recall_get_children(AgsRecall *recall) { return(recall->children); } /** * ags_recall_find_by_effect: * @list: a #GList with recalls * @recall_id: an #AgsRecallId * @effect: the effect name * * Finds next matching effect name. Intended to be used as * iteration function. * * Returns: a GList, or %NULL if not found * * Since: 0.4 */ GList* ags_recall_find_by_effect(GList *list, AgsRecallID *recall_id, char *effect) { AgsRecall *recall; while(list != NULL){ recall = AGS_RECALL(list->data); if(((recall_id != NULL && recall->recall_id != NULL && recall_id->recycling_container == recall->recall_id->recycling_container) || (recall_id == NULL && recall->recall_id == NULL)) && !g_strcmp0(G_OBJECT_TYPE_NAME(G_OBJECT(recall)), effect)) return(list); list = list->next; } return(NULL); } /** * ags_recall_find_type: * @recall_i: a #GList containing recalls * @type: a #GType * * Finds next matching recall for type. Intended to be used as * iteration function. * * Returns: a #GList containing recalls, or %NULL if not found * * Since: 0.4 */ GList* ags_recall_find_type(GList *recall_i, GType type) { AgsRecall *recall; while(recall_i != NULL){ recall = AGS_RECALL(recall_i->data); if(G_OBJECT_TYPE(recall) == type) break; recall_i = recall_i->next; } return(recall_i); } /** * ags_recall_find_template: * @recall_i a #GList containing recalls * * Finds next template, see #AGS_RECALL_TEMPLATE flag. Intended to be used as * iteration function. * * Returns: a #GList containing recalls, or %NULL if not found * * Since: 0.4 */ GList* ags_recall_find_template(GList *recall_i) { AgsRecall *recall; while(recall_i != NULL){ recall = AGS_RECALL(recall_i->data); if((AGS_RECALL_TEMPLATE & (recall->flags)) != 0) return(recall_i); recall_i = recall_i->next; } return(NULL); } /** * ags_recall_template_find_type: * @recall_i: a #GList containing recalls * @type: a #GType * * Finds next matching recall for type which is a template, see #AGS_RECALL_TEMPLATE flag. * Intended to be used as iteration function. * * Returns: a #GList containing recalls, or %NULL if not found * * Since: 0.4 */ GList* ags_recall_template_find_type(GList *recall_i, GType type) { AgsRecall *recall; while(recall_i != NULL){ recall = AGS_RECALL(recall_i->data); if((AGS_RECALL_TEMPLATE & (recall->flags)) != 0 && G_OBJECT_TYPE(recall) == type) break; recall_i = recall_i->next; } return(recall_i); } /** * ags_recall_find_type_with_recycling_container: * @recall_i: a #GList containing recalls * @type: a #GType * @recycling_container: an #AgsRecyclingContainer * * Finds next matching recall for type which has @recycling_container, see #AgsRecallId for further * details about #AgsRecyclingContainer. Intended to be used as iteration function. * * Returns: a #GList containing recalls, or %NULL if not found * * Since: 0.4 */ GList* ags_recall_find_type_with_recycling_container(GList *recall_i, GType type, GObject *recycling_container) { AgsRecall *recall; while(recall_i != NULL){ recall = AGS_RECALL(recall_i->data); if(g_type_is_a(G_OBJECT_TYPE(recall), type) && recall->recall_id != NULL && recall->recall_id->recycling_container == (GObject *) recycling_container) return(recall_i); recall_i = recall_i->next; } return(NULL); } /** * ags_recall_find_recycling_container: * @recall_i: a #GList containing recalls * @recycling_container: an #AgsRecyclingContainer * * Finds next matching recall which has @recycling_container, see #AgsRecallId for further * details about #AgsRecyclingContainer. Intended to be used as iteration function. * * Returns: a #GList containing recalls, or %NULL if not found * * Since: 0.4 */ GList* ags_recall_find_recycling_container(GList *recall_i, GObject *recycling_container) { AgsRecall *recall; #ifdef AGS_DEBUG g_message("ags_recall_find_recycling_container: recycling_container = %llx\n\0", recycling_container); #endif while(recall_i != NULL){ recall = AGS_RECALL(recall_i->data); if(recall->recall_id != NULL) #ifdef AGS_DEBUG g_message("ags_recall_find_recycling_container: recall_id->recycling_contianer = %llx\n\0", (long long unsigned int) recall->recall_id->recycling_container); #endif if(recall->recall_id != NULL && recall->recall_id->recycling_container == recycling_container){ return(recall_i); } recall_i = recall_i->next; } return(NULL); } /** * ags_recall_find_provider: * @recall_i: a #GList containing recalls * @provider: a #GObject * * Finds next matching recall for type which has @provider. The @provider may be either an #AgsChannel * or an #AgsAudio object. This function tries to find the corresponding #AgsRecallChannel and #AgsRecallAudio * objects of a #AgsRecall to find. If these recalls contains the @provider, the function will return. * * Returns: a #GList containing recalls, or %NULL if not found * * Since: 0.4 */ GList* ags_recall_find_provider(GList *recall_i, GObject *provider) { AgsRecall *recall; while(recall_i != NULL){ recall = AGS_RECALL(recall_i->data); if(AGS_IS_AUDIO(provider)){ if(AGS_IS_RECALL_AUDIO(recall)){ if(((GObject *) AGS_RECALL_AUDIO(recall)->audio) == provider) return(recall_i); }else if(AGS_IS_RECALL_AUDIO_RUN(recall)){ AgsRecallAudio *recall_audio; recall_audio = AGS_RECALL_AUDIO_RUN(recall)->recall_audio; if(recall_audio != NULL && ((GObject *) recall_audio->audio) == provider){ return(recall_i); } } }else if(AGS_IS_CHANNEL(provider)){ if(AGS_IS_RECALL_CHANNEL(recall)){ if(((GObject *) AGS_RECALL_CHANNEL(recall)->source) == provider) return(recall_i); }else if(AGS_IS_RECALL_CHANNEL_RUN(recall)){ if(((GObject *) AGS_RECALL_CHANNEL_RUN(recall)->source) == provider){ return(recall_i); } } }else if(AGS_IS_RECYCLING(provider)){ if(AGS_IS_RECALL_RECYCLING(recall)){ if(((GObject *) AGS_RECALL_RECYCLING(recall)->source) == provider){ return(recall_i); } } }else if(AGS_IS_AUDIO_SIGNAL(provider)){ if(AGS_IS_RECALL_AUDIO_SIGNAL(recall)){ if(((GObject *) AGS_RECALL_AUDIO_SIGNAL(recall)->source) == provider){ return(recall_i); } } } recall_i = recall_i->next; } return(NULL); } /** * ags_recall_find_provider: * @recall: a #GList containing recalls * @provider: a #GObject * * Finds provider eg. #AgsAudio or #AgsChannel within #GList containig #AgsRecall. * * Returns: a #GList containing recalls, or %NULL if not found * * Since: 0.4 */ GList* ags_recall_template_find_provider(GList *recall, GObject *provider) { GList *list; list = recall; while((list = (ags_recall_find_provider(list, provider))) != NULL){ if((AGS_RECALL_TEMPLATE & (AGS_RECALL(list->data)->flags)) != 0){ return(list); } list = list->next; } return(NULL); } /** * ags_recall_find_provider_with_recycling_container: * @recall_i: a #GList containing recalls * @provider: a #GObject * @recycling_container: an #AgsRecyclingContainer * * Like ags_recall_template_find_provider() but given additionally @recycling_container as search parameter. * * Returns: a #GList containing recalls, or %NULL if not found * * Since: 0.4 */ GList* ags_recall_find_provider_with_recycling_container(GList *recall_i, GObject *provider, GObject *recycling_container) { AgsRecall *recall; while((recall_i = ags_recall_find_provider(recall_i, provider)) != NULL){ recall = AGS_RECALL(recall_i->data); if(recall->recall_id != NULL && recall->recall_id->recycling_container == (GObject *) recycling_container){ return(recall_i); } recall_i = recall_i->next; } return(NULL); } void ags_recall_run_init(AgsRecall *recall, guint stage) { if(stage == 0){ ags_recall_run_init_pre(recall); }else if(stage == 1){ ags_recall_run_init_inter(recall); }else{ ags_recall_run_init_post(recall); } } /** * ags_recall_handler_alloc: * @signal_name: signal's name to connect * @callback: the #GCallback function * @data: the data to pass the callback * * Allocates #AgsRecallHandler-struct. * * Since: 0.4 */ AgsRecallHandler* ags_recall_handler_alloc(const gchar *signal_name, GCallback callback, GObject *data) { AgsRecallHandler *recall_handler; recall_handler = (AgsRecallHandler *) malloc(sizeof(AgsRecallHandler)); recall_handler->signal_name = signal_name; recall_handler->callback = callback; recall_handler->data = data; return(recall_handler); } /** * ags_recall_add_handler: * @recall: the #AgsRecall to connect * @recall_handler: the signal specs * * Connect callback to @recall specified by @recall_handler. * * Since: 0.4 */ void ags_recall_add_handler(AgsRecall *recall, AgsRecallHandler *recall_handler) { recall->handlers = g_list_prepend(recall->handlers, recall_handler); } /** * ags_recall_remove_handler: * @recall: the #AgsRecall to connect * @recall_handler: the signal specs * * Remove a #AgsRecallHandler-struct from @recall. * * Since: 0.4 */ void ags_recall_remove_handler(AgsRecall *recall, AgsRecallHandler *recall_handler) { recall->handlers = g_list_remove(recall->handlers, recall_handler); } void ags_recall_child_done(AgsRecall *child, AgsRecall *parent) { if(child == NULL || parent == NULL){ return; } ags_recall_remove(child); } /** * ags_recall_new: * * Creates an #AgsRecall. * * Returns: a new #AgsRecall. * * Since: 0.3 */ AgsRecall* ags_recall_new() { AgsRecall *recall; recall = (AgsRecall *) g_object_new(AGS_TYPE_RECALL, NULL); return(recall); } gsequencer-0.6.37/src/ags/audio/ags_recall_factory.h0000644000175000017500000000524112612232540017326 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_RECALL_FACTORY_H__ #define __AGS_RECALL_FACTORY_H__ #include #include #include #include #define AGS_TYPE_RECALL_FACTORY (ags_recall_factory_get_type()) #define AGS_RECALL_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_RECALL_FACTORY, AgsRecallFactory)) #define AGS_RECALL_FACTORY_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_RECALL_FACTORY, AgsRecallFactoryClass)) #define AGS_IS_RECALL_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_RECALL_FACTORY)) #define AGS_IS_RECALL_FACTORY_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_RECALL_FACTORY)) #define AGS_RECALL_FACTORY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_RECALL_FACTORY, AgsRecallFactoryClass)) typedef struct _AgsRecallFactory AgsRecallFactory; typedef struct _AgsRecallFactoryClass AgsRecallFactoryClass; typedef enum{ AGS_RECALL_FACTORY_OUTPUT = 1, AGS_RECALL_FACTORY_INPUT = 1 << 1, AGS_RECALL_FACTORY_REMAP = 1 << 2, AGS_RECALL_FACTORY_ADD = 1 << 3, AGS_RECALL_FACTORY_PLAY = 1 << 4, AGS_RECALL_FACTORY_RECALL = 1 << 5, }AgsRecallFactoryCreateFlags; struct _AgsRecallFactory { GObject object; }; struct _AgsRecallFactoryClass { GObjectClass object; }; GType ags_recall_factory_get_type(); GList* ags_recall_factory_create(AgsAudio *audio, AgsRecallContainer *play_container, AgsRecallContainer *recall_container, gchar *plugin_name, guint start_audio_channel, guint stop_audio_channel, guint start_pad, guint stop_pad, guint create_flags, guint recall_flags); void ags_recall_factory_remove(AgsAudio *audio, AgsRecallContainer *recall_container); /* */ AgsRecallFactory* ags_recall_factory_get_instance(); AgsRecallFactory* ags_recall_factory_new(); #endif /*__AGS_RECALL_FACTORY_H__*/ gsequencer-0.6.37/src/ags/audio/ags_port.h0000644000175000017500000000557512626272146015346 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_PORT_H__ #define __AGS_PORT_H__ #include #include #include #include #define AGS_TYPE_PORT (ags_port_get_type()) #define AGS_PORT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_PORT, AgsPort)) #define AGS_PORT_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_PORT, AgsPortClass)) #define AGS_IS_PORT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_PORT)) #define AGS_IS_PORT_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_PORT)) #define AGS_PORT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_PORT, AgsPortClass)) typedef struct _AgsPort AgsPort; typedef struct _AgsPortClass AgsPortClass; struct _AgsPort { GObject object; gchar *plugin_name; gchar *specifier; gchar *control_port; gboolean port_value_is_pointer; GType port_value_type; guint port_value_size; guint port_value_length; pthread_mutex_t mutex; union _AgsPortValue{ gboolean ags_port_boolean; gint64 ags_port_int; guint64 ags_port_uint; gfloat ags_port_float; LADSPA_Data ags_port_ladspa; gdouble ags_port_double; gboolean *ags_port_boolean_ptr; gint64 *ags_port_int_ptr; guint64 *ags_port_uint_ptr; gfloat *ags_port_float_ptr; gdouble *ags_port_double_ptr; gpointer ags_port_pointer; GObject *ags_port_object; }port_value; }; struct _AgsPortClass { GObjectClass object; void (*safe_read)(AgsPort *port, GValue *value); void (*safe_write)(AgsPort *port, GValue *value); void (*safe_get_property)(AgsPort *port, gchar *property_name, GValue *value); void (*safe_set_property)(AgsPort *port, gchar *property_name, GValue *value); }; GType ags_port_get_type(); void ags_port_safe_read(AgsPort *port, GValue *value); void ags_port_safe_write(AgsPort *port, GValue *value); void ags_port_safe_get_property(AgsPort *port, gchar *property_name, GValue *value); void ags_port_safe_set_property(AgsPort *port, gchar *property_name, GValue *value); GList* ags_port_find_specifier(GList *port, gchar *specifier); AgsPort* ags_port_new(); #endif /*__AGS_PORT_H__*/ gsequencer-0.6.37/src/ags/audio/ags_recall_ladspa.c0000644000175000017500000005030112630034560017115 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void ags_recall_ladspa_class_init(AgsRecallLadspaClass *recall_ladspa_class); void ags_recall_ladspa_connectable_interface_init(AgsConnectableInterface *connectable); void ags_recall_ladspa_plugin_interface_init(AgsPluginInterface *plugin); void ags_recall_ladspa_init(AgsRecallLadspa *recall_ladspa); void ags_recall_ladspa_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_recall_ladspa_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_recall_ladspa_connect(AgsConnectable *connectable); void ags_recall_ladspa_disconnect(AgsConnectable *connectable); void ags_recall_ladspa_set_ports(AgsPlugin *plugin, GList *port); void ags_recall_ladspa_finalize(GObject *gobject); void ags_recall_ladspa_read(AgsFile *file, xmlNode *node, AgsPlugin *plugin); xmlNode* ags_recall_ladspa_write(AgsFile *file, xmlNode *parent, AgsPlugin *plugin); void ags_recall_ladspa_load(AgsRecallLadspa *recall_ladspa); /** * SECTION:ags_recall_ladspa * @short_description: The object interfacing with LADSPA * @title: AgsRecallLadspa * @section_id: * @include: ags/audio/ags_recall_ladspa.h * * #AgsRecallLadspa provides LADSPA support. */ enum{ PROP_0, PROP_FILENAME, PROP_EFFECT, PROP_INDEX, }; extern AgsConfig *config; static gpointer ags_recall_ladspa_parent_class = NULL; static AgsConnectableInterface* ags_recall_ladspa_parent_connectable_interface; static AgsPluginInterface* ags_recall_ladspa_parent_plugin_interface; GType ags_recall_ladspa_get_type (void) { static GType ags_type_recall_ladspa = 0; if(!ags_type_recall_ladspa){ static const GTypeInfo ags_recall_ladspa_info = { sizeof (AgsRecallLadspaClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_recall_ladspa_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsRecallLadspa), 0, /* n_preallocs */ (GInstanceInitFunc) ags_recall_ladspa_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_recall_ladspa_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_plugin_interface_info = { (GInterfaceInitFunc) ags_recall_ladspa_plugin_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_recall_ladspa = g_type_register_static(AGS_TYPE_RECALL_CHANNEL, "AgsRecallLadspa\0", &ags_recall_ladspa_info, 0); g_type_add_interface_static(ags_type_recall_ladspa, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_recall_ladspa, AGS_TYPE_PLUGIN, &ags_plugin_interface_info); } return(ags_type_recall_ladspa); } void ags_recall_ladspa_class_init(AgsRecallLadspaClass *recall_ladspa) { GObjectClass *gobject; GParamSpec *param_spec; ags_recall_ladspa_parent_class = g_type_class_peek_parent(recall_ladspa); /* GObjectClass */ gobject = (GObjectClass *) recall_ladspa; gobject->set_property = ags_recall_ladspa_set_property; gobject->get_property = ags_recall_ladspa_get_property; gobject->finalize = ags_recall_ladspa_finalize; /* properties */ /** * AgsRecallLadspa:filename: * * The plugins filename. * * Since: 0.4.2 */ param_spec = g_param_spec_string("filename\0", "the object file\0", "The filename as string of object file\0", NULL, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_FILENAME, param_spec); /** * AgsRecallLadspa:recycling: * * The effect's name. * * Since: 0.4.2 */ param_spec = g_param_spec_string("effect\0", "the effect\0", "The effect's string representation\0", NULL, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_EFFECT, param_spec); /** * AgsRecallLadspa:recycling: * * The effect's index. * * Since: 0.4.2 */ param_spec = g_param_spec_ulong("index\0", "index of effect\0", "The numerical index of effect\0", 0, 65535, 0, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_INDEX, param_spec); } void ags_recall_ladspa_connectable_interface_init(AgsConnectableInterface *connectable) { ags_recall_ladspa_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_recall_ladspa_connect; connectable->disconnect = ags_recall_ladspa_disconnect; } void ags_recall_ladspa_plugin_interface_init(AgsPluginInterface *plugin) { ags_recall_ladspa_parent_plugin_interface = g_type_interface_peek_parent(plugin); plugin->read = ags_recall_ladspa_read; plugin->write = ags_recall_ladspa_write; plugin->set_ports = ags_recall_ladspa_set_ports; } void ags_recall_ladspa_init(AgsRecallLadspa *recall_ladspa) { AGS_RECALL(recall_ladspa)->name = "ags-ladspa\0"; AGS_RECALL(recall_ladspa)->version = AGS_EFFECTS_DEFAULT_VERSION; AGS_RECALL(recall_ladspa)->build_id = AGS_BUILD_ID; AGS_RECALL(recall_ladspa)->xml_type = "ags-recall-ladspa\0"; AGS_RECALL(recall_ladspa)->port = NULL; recall_ladspa->filename = NULL; recall_ladspa->effect = NULL; recall_ladspa->index = 0; recall_ladspa->plugin_descriptor = NULL; recall_ladspa->input_port = NULL; recall_ladspa->input_lines = 0; recall_ladspa->output_port = NULL; recall_ladspa->output_lines = 0; } void ags_recall_ladspa_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsRecallLadspa *recall_ladspa; recall_ladspa = AGS_RECALL_LADSPA(gobject); switch(prop_id){ case PROP_FILENAME: { AgsDevout *devout; gchar *filename; filename = g_value_get_string(value); if(filename == recall_ladspa->filename){ return; } if(recall_ladspa->filename != NULL){ g_free(recall_ladspa->filename); } recall_ladspa->filename = g_strdup(filename); } break; case PROP_EFFECT: { gchar *effect; effect = g_value_get_string(value); if(effect == recall_ladspa->effect){ return; } recall_ladspa->effect = g_strdup(effect); } break; case PROP_INDEX: { unsigned long index; index = g_value_get_ulong(value); if(index == recall_ladspa->index){ return; } recall_ladspa->index = index; } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; }; } void ags_recall_ladspa_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsRecallLadspa *recall_ladspa; recall_ladspa = AGS_RECALL_LADSPA(gobject); switch(prop_id){ case PROP_FILENAME: { g_value_set_string(value, recall_ladspa->filename); } break; case PROP_EFFECT: { g_value_set_string(value, recall_ladspa->effect); } break; case PROP_INDEX: { g_value_set_uint(value, recall_ladspa->index); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_recall_ladspa_connect(AgsConnectable *connectable) { ags_recall_ladspa_parent_connectable_interface->connect(connectable); } void ags_recall_ladspa_disconnect(AgsConnectable *connectable) { ags_recall_ladspa_parent_connectable_interface->disconnect(connectable); } void ags_recall_ladspa_set_ports(AgsPlugin *plugin, GList *port) { AgsRecallLadspa *recall_ladspa; AgsLadspaPlugin *ladspa_plugin; AgsPort *current; GList *list; gchar *path; unsigned long port_count; unsigned long i; void *plugin_so; LADSPA_Descriptor_Function ladspa_descriptor; LADSPA_Descriptor *plugin_descriptor; LADSPA_PortDescriptor *port_descriptor; LADSPA_PortRangeHintDescriptor hint_descriptor; recall_ladspa = AGS_RECALL_LADSPA(plugin); ags_ladspa_manager_load_file(recall_ladspa->filename); ladspa_plugin = ags_ladspa_manager_find_ladspa_plugin(recall_ladspa->filename); plugin_so = ladspa_plugin->plugin_so; if(plugin_so){ ladspa_descriptor = (LADSPA_Descriptor_Function) dlsym(plugin_so, "ladspa_descriptor\0"); if(dlerror() == NULL && ladspa_descriptor){ recall_ladspa->plugin_descriptor = plugin_descriptor = ladspa_descriptor(recall_ladspa->index); port_count = plugin_descriptor->PortCount; port_descriptor = plugin_descriptor->PortDescriptors; for(i = 0; i < port_count; i++){ if(LADSPA_IS_PORT_CONTROL(port_descriptor[i])){ if(LADSPA_IS_PORT_INPUT(port_descriptor[i]) || LADSPA_IS_PORT_OUTPUT(port_descriptor[i])){ gchar *plugin_name; gchar *specifier; hint_descriptor = plugin_descriptor->PortRangeHints[i].HintDescriptor; plugin_name = g_strdup_printf("ladspa-%lu\0", plugin_descriptor->UniqueID); specifier = g_strdup(plugin_descriptor->PortNames[i]); list = port; current = NULL; while(list != NULL){ g_message("%s %s\0", specifier, AGS_PORT(list->data)->specifier); if(!g_strcmp0(specifier, AGS_PORT(list->data)->specifier)){ current = list->data; break; } list = list->next; } if(current != NULL){ g_message("connecting port: %d/%d\0", i, port_count); } } }else if(LADSPA_IS_PORT_AUDIO(port_descriptor[i])){ if(LADSPA_IS_PORT_INPUT(port_descriptor[i])){ if(recall_ladspa->input_port == NULL){ recall_ladspa->input_port = (unsigned long *) malloc(sizeof(unsigned long)); recall_ladspa->input_port[0] = i; }else{ recall_ladspa->input_port = (unsigned long *) realloc(recall_ladspa->input_port, (recall_ladspa->input_lines + 1) * sizeof(unsigned long)); recall_ladspa->input_port[recall_ladspa->input_lines] = i; } recall_ladspa->input_lines += 1; }else if(LADSPA_IS_PORT_OUTPUT(port_descriptor[i])){ if(recall_ladspa->output_port == NULL){ recall_ladspa->output_port = (unsigned long *) malloc(sizeof(unsigned long)); recall_ladspa->output_port[0] = i; }else{ recall_ladspa->output_port = (unsigned long *) realloc(recall_ladspa->output_port, (recall_ladspa->output_lines + 1) * sizeof(unsigned long)); recall_ladspa->output_port[recall_ladspa->output_lines] = i; } recall_ladspa->output_lines += 1; } } } AGS_RECALL(recall_ladspa)->port = port; } } } void ags_recall_ladspa_finalize(GObject *gobject) { AgsRecallLadspa *recall_ladspa; recall_ladspa = AGS_RECALL_LADSPA(gobject); /* call parent */ G_OBJECT_CLASS(ags_recall_ladspa_parent_class)->finalize(gobject); } void ags_recall_ladspa_read(AgsFile *file, xmlNode *node, AgsPlugin *plugin) { AgsRecallLadspa *gobject; AgsLadspaPlugin *ladspa_plugin; gchar *filename, *effect; unsigned long index; gobject = AGS_RECALL_LADSPA(plugin); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", gobject, NULL)); filename = xmlGetProp(node, "filename\0"); effect = xmlGetProp(node, "effect\0"); index = g_ascii_strtoull(xmlGetProp(node, "index\0"), NULL, 10); g_object_set(gobject, "filename\0", filename, "effect\0", effect, "index\0", index, NULL); ags_recall_ladspa_load(gobject); } xmlNode* ags_recall_ladspa_write(AgsFile *file, xmlNode *parent, AgsPlugin *plugin) { AgsRecallLadspa *recall_ladspa; xmlNode *node; gchar *id; recall_ladspa = AGS_RECALL_LADSPA(plugin); id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-recall-ladspa\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", recall_ladspa, NULL)); xmlNewProp(node, "filename\0", g_strdup(recall_ladspa->filename)); xmlNewProp(node, "effect\0", g_strdup(recall_ladspa->effect)); xmlNewProp(node, "index\0", g_strdup_printf("%d\0", recall_ladspa->index)); xmlAddChild(parent, node); return(node); } /** * ags_recall_ladspa_load: * @recall_ladspa: an #AgsRecallLadspa * * Set up LADSPA handle. * * Since: 0.4 */ void ags_recall_ladspa_load(AgsRecallLadspa *recall_ladspa) { AgsLadspaPlugin *ladspa_plugin; void *plugin_so; LADSPA_Descriptor_Function ladspa_descriptor; LADSPA_Descriptor *plugin_descriptor; /* */ ags_ladspa_manager_load_file(recall_ladspa->filename); ladspa_plugin = ags_ladspa_manager_find_ladspa_plugin(recall_ladspa->filename); plugin_so = ladspa_plugin->plugin_so; if(plugin_so){ ladspa_descriptor = (LADSPA_Descriptor_Function) dlsym(plugin_so, "ladspa_descriptor\0"); if(dlerror() == NULL && ladspa_descriptor){ recall_ladspa->plugin_descriptor = plugin_descriptor = ladspa_descriptor(recall_ladspa->index); } } } /** * ags_recall_ladspa_load_ports: * @recall_ladspa: an #AgsRecallLadspa * * Set up LADSPA ports. * * Returns: a #GList containing #AgsPort. * * Since: 0.4 */ GList* ags_recall_ladspa_load_ports(AgsRecallLadspa *recall_ladspa) { AgsLadspaPlugin *ladspa_plugin; AgsPort *current; GList *port; gchar *path; unsigned long port_count; unsigned long i; void *plugin_so; LADSPA_Descriptor_Function ladspa_descriptor; LADSPA_Descriptor *plugin_descriptor; LADSPA_PortDescriptor *port_descriptor; LADSPA_PortRangeHintDescriptor hint_descriptor; ags_ladspa_manager_load_file(recall_ladspa->filename); ladspa_plugin = ags_ladspa_manager_find_ladspa_plugin(recall_ladspa->filename); port = NULL; plugin_so = ladspa_plugin->plugin_so; if(plugin_so){ ladspa_descriptor = (LADSPA_Descriptor_Function) dlsym(plugin_so, "ladspa_descriptor\0"); if(dlerror() == NULL && ladspa_descriptor){ recall_ladspa->plugin_descriptor = plugin_descriptor = ladspa_descriptor(recall_ladspa->index); port_count = plugin_descriptor->PortCount; port_descriptor = plugin_descriptor->PortDescriptors; for(i = 0; i < port_count; i++){ if(LADSPA_IS_PORT_CONTROL(port_descriptor[i])){ if(LADSPA_IS_PORT_INPUT(port_descriptor[i]) || LADSPA_IS_PORT_OUTPUT(port_descriptor[i])){ gchar *plugin_name; gchar *specifier; hint_descriptor = plugin_descriptor->PortRangeHints[i].HintDescriptor; plugin_name = g_strdup_printf("ladspa-%lu\0", plugin_descriptor->UniqueID); specifier = g_strdup(plugin_descriptor->PortNames[i]); current = g_object_new(AGS_TYPE_PORT, "plugin-name\0", plugin_name, "specifier\0", specifier, "control-port\0", g_strdup_printf("%d/%d\0", i, port_count), "port-value-is-pointer\0", FALSE, "port-value-type\0", G_TYPE_FLOAT, NULL); current->port_value.ags_port_float = plugin_descriptor->PortRangeHints[i].LowerBound; g_message("connecting port: %d/%d\0", i, port_count); port = g_list_prepend(port, current); } }else if(LADSPA_IS_PORT_AUDIO(port_descriptor[i])){ if(LADSPA_IS_PORT_INPUT(port_descriptor[i])){ if(recall_ladspa->input_port == NULL){ recall_ladspa->input_port = (unsigned long *) malloc(sizeof(unsigned long)); recall_ladspa->input_port[0] = i; }else{ recall_ladspa->input_port = (unsigned long *) realloc(recall_ladspa->input_port, (recall_ladspa->input_lines + 1) * sizeof(unsigned long)); recall_ladspa->input_port[recall_ladspa->input_lines] = i; } recall_ladspa->input_lines += 1; }else if(LADSPA_IS_PORT_OUTPUT(port_descriptor[i])){ if(recall_ladspa->output_port == NULL){ recall_ladspa->output_port = (unsigned long *) malloc(sizeof(unsigned long)); recall_ladspa->output_port[0] = i; }else{ recall_ladspa->output_port = (unsigned long *) realloc(recall_ladspa->output_port, (recall_ladspa->output_lines + 1) * sizeof(unsigned long)); recall_ladspa->output_port[recall_ladspa->output_lines] = i; } recall_ladspa->output_lines += 1; } } } AGS_RECALL(recall_ladspa)->port = g_list_reverse(port); } } return(AGS_RECALL(recall_ladspa)->port); } /** * ags_recall_ladspa_short_to_float: * @buffer: source * @destination: destination * * Convert data type. * * Since: 0.4 */ void ags_recall_ladspa_short_to_float(signed short *buffer, LADSPA_Data *destination, guint buffer_size, guint lines) { LADSPA_Data *new_buffer; guint i; new_buffer = destination; for(i = 0; i < buffer_size; i++){ new_buffer[lines * i] = (LADSPA_Data) (buffer[i] * (1.0f / 32767.5f)); } } /** * ags_recall_ladspa_float_to_short: * @buffer: source * @destination: destination * @buffer_size: buffer_size * * Convert data type. * * Since: 0.4 */ void ags_recall_ladspa_float_to_short(LADSPA_Data *buffer, signed short *destination, guint buffer_size, guint lines) { signed short *new_buffer; guint i; new_buffer = destination; for(i = 0; i < buffer_size; i++){ new_buffer[i] = (signed short) (buffer[lines * i] * 32767.5f); } } /** * ags_recall_ladpsa_find: * @recall: a #GList containing #AgsRecall * @filename: plugin filename * @effect: effect's name * * Retrieve LADSPA recall. * * Returns: Next match. * * Since: 0.4 */ GList* ags_recall_ladpsa_find(GList *recall, gchar *filename, gchar *effect) { while(recall != NULL){ if(AGS_IS_RECALL_LADSPA(recall->data)){ if(!g_strcmp0(AGS_RECALL_LADSPA(recall->data)->filename, filename) && !g_strcmp0(AGS_RECALL_LADSPA(recall->data)->effect, effect)){ return(recall); } } recall = recall->next; } return(NULL); } /** * ags_recall_ladspa_new: * @source: the source * @filename: the LADSPA plugin filename * @effect: effect's name * @index: effect's index * * Creates a #AgsRecallLadspa * * Returns: a new #AgsRecallLadspa * * Since: 0.4 */ AgsRecallLadspa* ags_recall_ladspa_new(AgsChannel *source, gchar *filename, gchar *effect, unsigned long index) { AgsDevout *devout; AgsRecallLadspa *recall_ladspa; if(source != NULL){ devout = (AgsDevout *) AGS_AUDIO(source->audio)->devout; }else{ devout = NULL; } recall_ladspa = (AgsRecallLadspa *) g_object_new(AGS_TYPE_RECALL_LADSPA, "devout\0", devout, "source\0", source, "filename\0", filename, "effect\0", effect, "index\0", index, NULL); return(recall_ladspa); } gsequencer-0.6.37/src/ags/audio/file/0000755000175000017500000000000012633241335014334 500000000000000gsequencer-0.6.37/src/ags/audio/file/ags_audio_file_xml.h0000644000175000017500000000330312626272146020244 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_AUDIO_FILE_XML_H__ #define __AGS_AUDIO_FILE_XML_H__ #include #include #include #include #define AGS_TYPE_AUDIO_FILE_XML (ags_audio_file_xml_get_type()) #define AGS_AUDIO_FILE_XML(obj) (G_TYPE_CHECK_INSTANCE_CAST(obj, AGS_TYPE_AUDIO_FILE_XML, AgsAudioFileXml)) #define AGS_AUDIO_FILE_XML_CLASS(class) (G_TYPE_CHECK_CLASS_CAST(class, AGS_TYPE_AUDIO_FILE_XML, AgsAudioFileXmlClass)) #define AGS_IS_AUDIO_FILE_XML(obj) (G_TYPE_CHECK_INSTANCE_TYPE(obj, AGS_TYPE_AUDIO_FILE_XML)) typedef struct _AgsAudioFileXml AgsAudioFileXml; typedef struct _AgsAudioFileXmlClass AgsAudioFileXmlClass; struct _AgsAudioFileXml { GObject object; }; struct _AgsAudioFileXmlClass { GObjectClass object; }; GType ags_audio_file_xml_get_type(); AgsAudioFileXml* ags_audio_file_xml_new(AgsAudioFile *audio_file); #endif /*__AGS_AUDIO_FILE_XML_H__*/ gsequencer-0.6.37/src/ags/audio/file/ags_audio_file.h0000644000175000017500000000526612626272146017376 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_AUDIO_FILE_H__ #define __AGS_AUDIO_FILE_H__ #include #include #ifndef AGS_USE_AO #include #else #include #endif #define AGS_TYPE_AUDIO_FILE (ags_audio_file_get_type()) #define AGS_AUDIO_FILE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_AUDIO_FILE, AgsAudioFile)) #define AGS_AUDIO_FILE_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_AUDIO_FILE, AgsAudioFileClass)) #define AGS_IS_AUDIO_FILE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_AUDIO_FILE)) #define AGS_IS_AUDIO_FILE_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_AUDIO_FILE)) #define AGS_AUDIO_FILE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_AUDIO_FILE, AgsAudioFileClass)) typedef struct _AgsAudioFile AgsAudioFile; typedef struct _AgsAudioFileClass AgsAudioFileClass; struct _AgsAudioFile { GObject object; AgsDevout *devout; gchar *name; guint samplerate; guint frames; guint channels; guint format; guint start_channel; guint audio_channels; GList *audio_signal; GObject *file; }; struct _AgsAudioFileClass { GObjectClass object; }; GType ags_audio_file_get_type(); gboolean ags_audio_file_open(AgsAudioFile *audio_file); gboolean ags_audio_file_open_from_data(AgsAudioFile *audio_file, gchar *data); gboolean ags_audio_file_rw_open(AgsAudioFile *audio_file, gboolean create); void ags_audio_file_close(AgsAudioFile *audio_file); void ags_audio_file_read_audio_signal(AgsAudioFile *audio_file); void ags_audio_file_seek(AgsAudioFile *audio_file, guint frames, gint whence); void ags_audio_file_write(AgsAudioFile *audio_file, signed short *buffer, guint buffer_size); void ags_audio_file_flush(AgsAudioFile *audio_file); AgsAudioFile* ags_audio_file_new(gchar *name, AgsDevout *devout, guint start_channel, guint audio_channels); #endif /*__AGS_AUDIO_FILE_H__*/ gsequencer-0.6.37/src/ags/audio/file/ags_audio_file.c0000644000175000017500000002466312626272146017373 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include void ags_audio_file_class_init(AgsAudioFileClass *audio_file); void ags_audio_file_connectable_interface_init(AgsConnectableInterface *connectable); void ags_audio_file_init(AgsAudioFile *audio_file); void ags_audio_file_connect(AgsConnectable *connectable); void ags_audio_file_disconnect(AgsConnectable *connectable); void ags_audio_file_finalize(GObject *object); extern AgsConfig *config; enum{ READ_BUFFER, LAST_SIGNAL, }; /** * SECTION:ags_audio_file * @short_description: Audio file input/output * @title: AgsAudioFile * @section_id: * @include: ags/audio/file/ags_audio_file.h * * #AgsAudioFile is the base object to read/write audio data. */ static gpointer ags_audio_file_parent_class = NULL; static AgsConnectableInterface *ags_audio_file_parent_connectable_interface; static guint signals[LAST_SIGNAL]; GType ags_audio_file_get_type() { static GType ags_type_audio_file = 0; if(!ags_type_audio_file){ static const GTypeInfo ags_audio_file_info = { sizeof (AgsAudioFileClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_audio_file_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsAudioFile), 0, /* n_preallocs */ (GInstanceInitFunc) ags_audio_file_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_audio_file_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_audio_file = g_type_register_static(G_TYPE_OBJECT, "AgsAudioFile\0", &ags_audio_file_info, 0); g_type_add_interface_static(ags_type_audio_file, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_audio_file); } void ags_audio_file_class_init(AgsAudioFileClass *audio_file) { GObjectClass *gobject; ags_audio_file_parent_class = g_type_class_peek_parent(audio_file); gobject = (GObjectClass *) audio_file; gobject->finalize = ags_audio_file_finalize; } void ags_audio_file_connectable_interface_init(AgsConnectableInterface *connectable) { ags_audio_file_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_audio_file_connect; connectable->disconnect = ags_audio_file_disconnect; } void ags_audio_file_init(AgsAudioFile *audio_file) { gchar *str; audio_file->devout = NULL; audio_file->name = NULL; str = ags_config_get(config, AGS_CONFIG_DEVOUT, "samplerate\0"); audio_file->samplerate = g_ascii_strtoull(str, NULL, 10); free(str); audio_file->frames = 0; audio_file->channels = 2; audio_file->format = SF_FORMAT_WAV | SF_FORMAT_PCM_16; audio_file->start_channel = 0; audio_file->audio_channels = 0; audio_file->audio_signal = NULL; audio_file->file = NULL; } void ags_audio_file_finalize(GObject *gobject) { AgsAudioFile *audio_file; GList *list, *list_next; audio_file = AGS_AUDIO_FILE(gobject); /* AgsAudioSignal */ list = audio_file->audio_signal; while(list != NULL){ list_next = list->next; g_object_unref(G_OBJECT(list->data)); g_list_free1(list); list = list_next; } /* file */ g_object_unref(audio_file->file); G_OBJECT_CLASS(ags_audio_file_parent_class)->finalize(gobject); } void ags_audio_file_connect(AgsConnectable *connectable) { /* empty */ } void ags_audio_file_disconnect(AgsConnectable *connectable) { /* empty */ } /** * ags_audio_file_open: * @audio_file: the #AgsAudioFile * * Open the #AgsAudioFile in read mode. * * Since: 0.3 */ gboolean ags_audio_file_open(AgsAudioFile *audio_file) { #ifdef AGS_DEBUG g_message("ags_audio_file_open: %s\0", audio_file->name); #endif if(g_file_test(audio_file->name, G_FILE_TEST_EXISTS)){ if(g_str_has_suffix(audio_file->name, ".wav\0") || g_str_has_suffix(audio_file->name, ".ogg\0") || g_str_has_suffix(audio_file->name, ".flac\0")){ GError *error; guint loop_start, loop_end; audio_file->file = (GObject *) ags_sndfile_new(); if(ags_playable_open(AGS_PLAYABLE(audio_file->file), audio_file->name)){ //FIXME:JK: this call should occure just before reading frames because of the new iterate functions of an AgsPlayable error = NULL; ags_playable_info(AGS_PLAYABLE(audio_file->file), &(audio_file->channels), &(audio_file->frames), &loop_start, &loop_end, &error); if(error != NULL){ g_error("%s\0", error->message); } return(TRUE); }else{ return(FALSE); } }else{ g_message("ags_audio_file_open: unknown file type\n\0"); return(FALSE); } } } /** * ags_audio_file_rw_open: * @audio_file: the #AgsAudioFile * @create: create the file * * Open the #AgsAudioFile in read/write mode. * * Since: 0.4 */ gboolean ags_audio_file_rw_open(AgsAudioFile *audio_file, gboolean create) { #ifdef AGS_DEBUG g_message("ags_audio_file_rw_open: %s\0", audio_file->name); #endif if(!create && !g_file_test(audio_file->name, G_FILE_TEST_EXISTS)){ return(FALSE); } if(g_str_has_suffix(audio_file->name, ".wav\0") || g_str_has_suffix(audio_file->name, ".ogg\0") || g_str_has_suffix(audio_file->name, ".flac\0")){ GError *error; guint loop_start, loop_end; audio_file->file = (GObject *) ags_sndfile_new(); if(ags_playable_rw_open(AGS_PLAYABLE(audio_file->file), audio_file->name, create, audio_file->samplerate, audio_file->channels, audio_file->frames, audio_file->format)){ error = NULL; if(error != NULL){ g_error("%s\0", error->message); } return(TRUE); }else{ return(FALSE); } }else{ g_message("ags_audio_file_open: unknown file type\n\0"); return(FALSE); } } /** * ags_audio_file_open_from_data: * @audio_file: the #AgsAudioFile * @data: the audio data * * Open #AgsAudioFile using virtual functions. * * Since: 0.4 */ gboolean ags_audio_file_open_from_data(AgsAudioFile *audio_file, gchar *data) { #ifdef AGS_DEBUG g_message("ags_audio_file_open_from_data:\0"); #endif if(data != NULL){ if(g_str_has_suffix(audio_file->name, ".wav\0") || g_str_has_suffix(audio_file->name, ".ogg\0") || g_str_has_suffix(audio_file->name, ".flac\0")){ GError *error; guint loop_start, loop_end; audio_file->file = (GObject *) ags_sndfile_new(); AGS_SNDFILE(audio_file->file)->flags = AGS_SNDFILE_VIRTUAL; if(ags_playable_open(AGS_PLAYABLE(audio_file->file), audio_file->name)){ AGS_SNDFILE(audio_file->file)->pointer = g_base64_decode(data, &(AGS_SNDFILE(audio_file->file)->length)); AGS_SNDFILE(audio_file->file)->current = AGS_SNDFILE(audio_file->file)->pointer; error = NULL; ags_playable_info(AGS_PLAYABLE(audio_file->file), &(audio_file->channels), &(audio_file->frames), &loop_start, &loop_end, &error); if(error != NULL){ g_error("%s\0", error->message); } return(TRUE); }else{ return(FALSE); } }else{ g_message("ags_audio_file_open: unknown file type\n\0"); return(FALSE); } } } /** * ags_audio_file_close: * @audio_file: the #AgsAudioFile * * Close the #AgsAudioFile. * * Since: 0.3 */ void ags_audio_file_close(AgsAudioFile *audio_file) { ags_playable_close(AGS_PLAYABLE(audio_file->file)); } /** * ags_audio_file_read_audio_signal: * @audio_file: the #AgsAudioFile * * Convert the #AgsAudioFile to a #GList of buffers. * * Since: 0.3 */ void ags_audio_file_read_audio_signal(AgsAudioFile *audio_file) { GList *list; list = ags_playable_read_audio_signal(AGS_PLAYABLE(audio_file->file), audio_file->devout, audio_file->start_channel, audio_file->audio_channels); audio_file->audio_signal = list; } /** * ags_audio_file_seek: * @audio_file: the #AgsAudioFile * @frames: number of frames to seek * @whence: SEEK_SET, SEEK_CUR, or SEEK_END * * Position the #AgsAudioFile's internal data address. * * Since: 0.4 */ void ags_audio_file_seek(AgsAudioFile *audio_file, guint frames, gint whence) { ags_playable_seek(AGS_PLAYABLE(audio_file->file), frames, whence); } /** * ags_audio_file_write: * @audio_file: the #AgsAudioFile * @buffer: the audio data * @buffer_size: the count of frames to write * * Write the buffer to #AgsAudioFile. * * Since: 0.4 */ void ags_audio_file_write(AgsAudioFile *audio_file, signed short *buffer, guint buffer_size) { ags_playable_write(AGS_PLAYABLE(audio_file->file), buffer, buffer_size); } /** * ags_audio_file_flush: * @audio_file: the #AgsAudioFile * * Flushes the #AgsAudioFile's internal buffer. * * Since: 0.4 */ void ags_audio_file_flush(AgsAudioFile *audio_file) { ags_playable_flush(AGS_PLAYABLE(audio_file->file)); } /** * ags_audio_file_new: * @name: the filename * @devout: defaults of #AgsDevout * @start_channel: ommited channels * @audio_channels: number of channels to read * * Creates an #AgsAudioFile. * * Returns: an empty #AgsAudioFile. * * Since: 0.3 */ AgsAudioFile* ags_audio_file_new(gchar *name, AgsDevout *devout, guint start_channel, guint audio_channels) { AgsAudioFile *audio_file; audio_file = (AgsAudioFile *) g_object_new(AGS_TYPE_AUDIO_FILE, NULL); audio_file->name = g_strdup(name); audio_file->devout = devout; audio_file->start_channel = start_channel; audio_file->audio_channels = audio_channels; return(audio_file); } gsequencer-0.6.37/src/ags/audio/file/ags_ipatch.c0000644000175000017500000005006012632422223016517 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include void ags_ipatch_class_init(AgsIpatchClass *ipatch); void ags_ipatch_connectable_interface_init(AgsConnectableInterface *connectable); void ags_ipatch_playable_interface_init(AgsPlayableInterface *playable); void ags_ipatch_init(AgsIpatch *ipatch); void ags_ipatch_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_ipatch_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_ipatch_finalize(GObject *gobject); void ags_ipatch_connect(AgsConnectable *connectable); void ags_ipatch_disconnect(AgsConnectable *connectable); gboolean ags_ipatch_open(AgsPlayable *playable, gchar *name); guint ags_ipatch_level_count(AgsPlayable *playable); guint ags_ipatch_nth_level(AgsPlayable *playable); gchar** ags_ipatch_sublevel_names(AgsPlayable *playable); void ags_ipatch_level_select(AgsPlayable *playable, guint nth_level, gchar *sublevel_name, GError **error); void ags_ipatch_iter_start(AgsPlayable *playable); gboolean ags_ipatch_iter_next(AgsPlayable *playable); void ags_ipatch_info(AgsPlayable *playable, guint *channels, guint *frames, guint *loop_start, guint *loop_end, GError **error); signed short* ags_ipatch_read(AgsPlayable *playable, guint channel, GError **error); void ags_ipatch_close(AgsPlayable *playable); GList* ags_ipatch_read_audio_signal(AgsPlayable *playable, AgsDevout *devout, guint start_channel, guint channels); /** * SECTION:ags_ipatch * @short_description: Libinstpatch wrapper * @title: AgsIpatch * @section_id: * @include: ags/audio/file/ags_ipatch.h * * #AgsIpatch is the base object to ineract with libinstpatch. */ static gpointer ags_ipatch_parent_class = NULL; static AgsConnectableInterface *ags_ipatch_parent_connectable_interface; static AgsPlayableInterface *ags_ipatch_parent_playable_interface; enum{ PROP_0, PROP_FILENAME, PROP_MODE, }; GType ags_ipatch_get_type() { static GType ags_type_ipatch = 0; if(!ags_type_ipatch){ static const GTypeInfo ags_ipatch_info = { sizeof (AgsIpatchClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_ipatch_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsIpatch), 0, /* n_preallocs */ (GInstanceInitFunc) ags_ipatch_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_ipatch_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_playable_interface_info = { (GInterfaceInitFunc) ags_ipatch_playable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_ipatch = g_type_register_static(G_TYPE_OBJECT, "AgsIpatch\0", &ags_ipatch_info, 0); g_type_add_interface_static(ags_type_ipatch, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_ipatch, AGS_TYPE_PLAYABLE, &ags_playable_interface_info); } return (ags_type_ipatch); } void ags_ipatch_class_init(AgsIpatchClass *ipatch) { GObjectClass *gobject; GParamSpec *param_spec; ags_ipatch_parent_class = g_type_class_peek_parent(ipatch); /* GObjectClass */ gobject = (GObjectClass *) ipatch; gobject->set_property = ags_ipatch_set_property; gobject->get_property = ags_ipatch_get_property; gobject->finalize = ags_ipatch_finalize; /* properties */ param_spec = g_param_spec_pointer("filename\0", "the filename\0", "The filename to open\0", G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_FILENAME, param_spec); param_spec = g_param_spec_pointer("mode\0", "the mode\0", "The mode to open the file\0", G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_MODE, param_spec); } void ags_ipatch_connectable_interface_init(AgsConnectableInterface *connectable) { ags_ipatch_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_ipatch_connect; connectable->disconnect = ags_ipatch_disconnect; } void ags_ipatch_playable_interface_init(AgsPlayableInterface *playable) { ags_ipatch_parent_playable_interface = g_type_interface_peek_parent(playable); playable->open = ags_ipatch_open; playable->nth_level = ags_ipatch_nth_level; playable->level_count = ags_ipatch_level_count; playable->sublevel_names = ags_ipatch_sublevel_names; playable->level_select = ags_ipatch_level_select; playable->iter_start = ags_ipatch_iter_start; playable->iter_next = ags_ipatch_iter_next; playable->info = ags_ipatch_info; playable->read = ags_ipatch_read; playable->close = ags_ipatch_close; } void ags_ipatch_init(AgsIpatch *ipatch) { ipatch->flags = 0; ipatch->devout = NULL; ipatch->audio_signal= NULL; ipatch->file = NULL; ipatch->filename = NULL; ipatch->mode = AGS_IPATCH_READ; ipatch->handle = NULL; ipatch->error = NULL; ipatch->base = NULL; ipatch->reader = NULL; ipatch->samples = NULL; ipatch->iter = NULL; ipatch->nth_level = 0; } void ags_ipatch_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsIpatch *ipatch; ipatch = AGS_IPATCH(gobject); switch(prop_id){ case PROP_FILENAME: { gchar *filename; filename = (gchar *) g_value_get_pointer(value); ags_playable_open(AGS_PLAYABLE(ipatch), filename); } break; case PROP_MODE: { gchar *mode; mode = (gchar *) g_value_get_pointer(value); ipatch->mode = mode; if(ipatch->handle != NULL){ GError *error; error = NULL; ipatch_file_default_open_method(ipatch->handle, mode, &error); if(error != NULL){ g_error("%s\0", error->message); } } } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_ipatch_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsIpatch *ipatch; ipatch = AGS_IPATCH(gobject); switch(prop_id){ case PROP_FILENAME: g_value_set_pointer(value, ipatch->filename); break; case PROP_MODE: g_value_set_pointer(value, ipatch->mode); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_ipatch_connect(AgsConnectable *connectable) { ags_ipatch_parent_connectable_interface->connect(connectable); /* empty */ } void ags_ipatch_disconnect(AgsConnectable *connectable) { ags_ipatch_parent_connectable_interface->disconnect(connectable); /* empty */ } gboolean ags_ipatch_open(AgsPlayable *playable, gchar *filename) { AgsIpatch *ipatch; IpatchFileIOFuncs *io_funcs; GError *error; #ifdef AGS_DEBUG g_message("open %s with libinstpatch.\0", filename); #endif ipatch = AGS_IPATCH(playable); ipatch->filename = filename; error = NULL; ipatch->handle = ipatch_file_identify_open(ipatch->filename, &error); if(error != NULL){ g_error("%s\0", error->message); } if(IPATCH_IS_DLS_FILE(ipatch->handle->file)){ ipatch->flags |= AGS_IPATCH_DLS2; //TODO:JK: implement me }else if(g_str_has_suffix(filename, ".sf2\0")){ /* */ ipatch->flags |= AGS_IPATCH_SF2; /* */ ipatch->reader = (GObject *) ags_ipatch_sf2_reader_new(); AGS_IPATCH_SF2_READER(ipatch->reader)->ipatch = ipatch; AGS_IPATCH_SF2_READER(ipatch->reader)->reader = ipatch_sf2_reader_new(ipatch->handle); error = NULL; ipatch->base = (IpatchBase *) ipatch_sf2_reader_load(AGS_IPATCH_SF2_READER(ipatch->reader)->reader, &error); error = NULL; AGS_IPATCH_SF2_READER(ipatch->reader)->sf2 = (IpatchSF2 *) ipatch_convert_object_to_type((GObject *) ipatch->handle->file, IPATCH_TYPE_SF2, &error); if(error != NULL){ g_warning("%s\0", error->message); } /* load samples */ ipatch->samples = (IpatchList *) ipatch_container_get_children(IPATCH_CONTAINER(ipatch->base), IPATCH_TYPE_SF2_SAMPLE); }else if(IPATCH_IS_GIG_FILE(ipatch->handle->file)){ ipatch->flags |= AGS_IPATCH_GIG; //TODO:JK: implement me } if(error == NULL){ return(TRUE); }else{ return(FALSE); } } guint ags_ipatch_nth_level(AgsPlayable *playable) { AgsIpatch *ipatch; ipatch = AGS_IPATCH(playable); return(ipatch->nth_level); } guint ags_ipatch_level_count(AgsPlayable *playable) { AgsIpatch *ipatch; ipatch = AGS_IPATCH(playable); if((AGS_IPATCH_DLS2 & (ipatch->flags)) != 0){ return(4); }else if((AGS_IPATCH_SF2 & (ipatch->flags)) != 0){ return(4); }else if((AGS_IPATCH_GIG & (ipatch->flags)) != 0){ return(4); } return(0); } gchar** ags_ipatch_sublevel_names(AgsPlayable *playable) { AgsIpatch *ipatch; AgsIpatchSF2Reader *ipatch_sf2_reader; IpatchItem *ipatch_item; IpatchList *ipatch_list; GList *list; gchar **names; gchar *name; guint sublevel; guint i; ipatch = AGS_IPATCH(playable); list = NULL; names = (gchar **) malloc(1 * sizeof(gchar*)); names[0] = NULL; if((AGS_IPATCH_SF2 & (ipatch->flags)) != 0){ ipatch_sf2_reader = AGS_IPATCH_SF2_READER(ipatch->reader); sublevel = ipatch->nth_level; switch(sublevel){ case AGS_SF2_FILENAME: { names = realloc(names, 2 * sizeof(char*)); names[0] = ipatch_sf2_reader->ipatch->filename; names[1] = NULL; return(names); } case AGS_SF2_PHDR: { ipatch_list = ipatch_container_get_children(IPATCH_CONTAINER(ipatch_sf2_reader->sf2), IPATCH_TYPE_SF2_PRESET); if(ipatch_list != NULL){ list = ipatch_list->items; }else{ return(names); } } break; case AGS_SF2_IHDR: { GList *tmp; ipatch_list = ipatch_sf2_preset_get_zones(ipatch_sf2_reader->preset); tmp = ipatch_list->items; while(tmp != NULL){ list = g_list_prepend(list, ipatch_sf2_zone_get_link_item(IPATCH_SF2_ZONE(tmp->data))); tmp = tmp->next; } if(list != NULL){ list = g_list_reverse(list); }else{ return(names); } } break; case AGS_SF2_SHDR: { GList *tmp; ipatch_list = ipatch_sf2_preset_get_zones(ipatch_sf2_reader->instrument); tmp = ipatch_list->items; while(tmp != NULL){ list = g_list_prepend(list, ipatch_sf2_zone_get_link_item(IPATCH_SF2_ZONE(tmp->data))); tmp = tmp->next; } if(list != NULL){ list = g_list_reverse(list); }else{ return(names); } } break; }; } for(i = 0; list != NULL; i++){ switch(sublevel){ case AGS_SF2_PHDR: { if(IPATCH_IS_SF2_PRESET(list->data)){ names = (gchar **) realloc(names, (i + 2) * sizeof(char*)); names[i] = ipatch_sf2_preset_get_name(IPATCH_SF2_PRESET(list->data)); } } break; case AGS_SF2_IHDR: { if(IPATCH_IS_SF2_INST(list->data)){ names = (gchar **) realloc(names, (i + 2) * sizeof(char*)); names[i] = ipatch_sf2_inst_get_name(IPATCH_SF2_INST(list->data)); } } break; case AGS_SF2_SHDR: { if(IPATCH_IS_SF2_SAMPLE(list->data)){ names = (gchar **) realloc(names, (i + 2) * sizeof(char*)); names[i] = ipatch_sf2_sample_get_name(IPATCH_SF2_SAMPLE(list->data)); } } break; }; list = list->next; } if(i > 0){ names[i] = NULL; } return(names); } void ags_ipatch_level_select(AgsPlayable *playable, guint nth_level, gchar *sublevel_name, GError **error) { AgsIpatch *ipatch; AgsIpatchSF2Reader *ipatch_sf2_reader; gboolean success; GError *this_error; ipatch = AGS_IPATCH(playable); if((AGS_IPATCH_SF2 & (ipatch->flags)) != 0){ ipatch_sf2_reader = AGS_IPATCH_SF2_READER(ipatch->reader); //TODO:JK: apply mods and gens if(sublevel_name == NULL){ ipatch->nth_level = 0; ipatch_sf2_reader->selected[0] = NULL; }else{ IpatchList *ipatch_list; IpatchItem *ipatch_item; GList *list; if(nth_level == 0 && !g_strcmp0(ipatch_sf2_reader->ipatch->filename, sublevel_name)){ ipatch->nth_level = 0; ipatch_sf2_reader->selected[0] = sublevel_name; return; } if(nth_level == 1){ ipatch->nth_level = 1; ipatch_sf2_reader->selected[1] = sublevel_name; /* preset */ ipatch_list = ipatch_container_get_children(IPATCH_CONTAINER(ipatch_sf2_reader->sf2), IPATCH_TYPE_SF2_PRESET); list = ipatch_list->items; while(list != NULL){ if(!g_strcmp0(ipatch_sf2_preset_get_name(IPATCH_SF2_PRESET(list->data)), sublevel_name)){ /* some extra code for bank and program */ // ipatch_sf2_preset_get_midi_locale(IPATCH_SF2_PRESET(list->data), // &(ipatch_sf2_reader->bank), // &(ipatch_sf2_reader->program)); // g_message("bank %d program %d\n\0", ipatch_sf2_reader->bank, ipatch_sf2_reader->program); this_error = NULL; ipatch_sf2_reader->preset = (IpatchContainer *) IPATCH_SF2_PRESET(list->data); break; } list = list->next; } ipatch->iter = list; }else{ gboolean found_first; found_first = FALSE; if(nth_level == 2){ GList *tmp; ipatch->nth_level = 2; ipatch_sf2_reader->selected[2] = sublevel_name; /* instrument */ ipatch_list = ipatch_sf2_preset_get_zones(ipatch_sf2_reader->preset); list = NULL; tmp = ipatch_list->items; while(tmp != NULL){ list = g_list_prepend(list, ipatch_sf2_zone_get_link_item(IPATCH_SF2_ZONE(tmp->data))); if(!g_strcmp0(IPATCH_SF2_INST(list->data)->name, sublevel_name)){ ipatch_sf2_reader->instrument = (IpatchContainer *) IPATCH_SF2_INST(list->data); } tmp = tmp->next; } ipatch->iter = g_list_reverse(list); }else if(ipatch->nth_level == 3){ GList *tmp; ipatch->nth_level = 3; ipatch_sf2_reader->selected[3] = sublevel_name; /* sample */ ipatch_list = ipatch_sf2_preset_get_zones(ipatch_sf2_reader->instrument); list = NULL; tmp = ipatch_list->items; while(tmp != NULL){ list = g_list_prepend(list, ipatch_sf2_zone_get_link_item(IPATCH_SF2_ZONE(tmp->data))); if(!strncmp(IPATCH_SF2_SAMPLE(list->data)->name, sublevel_name, 20)){ ipatch_sf2_reader->sample = (IpatchContainer *) IPATCH_SF2_SAMPLE(list->data); } tmp = tmp->next; } ipatch->iter = g_list_reverse(list); }else{ g_set_error(error, AGS_PLAYABLE_ERROR, AGS_PLAYABLE_ERROR_NO_SUCH_LEVEL, "no level called %s in soundfont2 file: %s\0", sublevel_name, ipatch_sf2_reader->ipatch->filename); } } } } } void ags_ipatch_level_up(AgsPlayable *playable, guint levels, GError **error) { AgsIpatch *ipatch; guint i; if(levels == 0) return; ipatch = AGS_IPATCH(playable); if(ipatch->nth_level >= levels){ ipatch->nth_level -= levels; }else{ g_set_error(error, AGS_PLAYABLE_ERROR, AGS_PLAYABLE_ERROR_NO_SUCH_LEVEL, "Not able to go %u steps higher in soundfont2 file: %s\0", levels, ipatch->filename); } } void ags_ipatch_iter_start(AgsPlayable *playable) { AgsIpatch *ipatch; ipatch = AGS_IPATCH(playable); if(ipatch->nth_level == 3){ if((AGS_IPATCH_DLS2 & (ipatch->flags)) != 0){ //TODO:JK: implement me }else if((AGS_IPATCH_SF2 & (ipatch->flags)) != 0){ //TODO:JK: implement me }else if((AGS_IPATCH_GIG & (ipatch->flags)) != 0){ //TODO:JK: implement me } } } gboolean ags_ipatch_iter_next(AgsPlayable *playable) { AgsIpatch *ipatch; ipatch = AGS_IPATCH(playable); if(ipatch->iter != NULL){ ipatch->iter = ipatch->iter->next; return(TRUE); }else{ return(FALSE); } } void ags_ipatch_info(AgsPlayable *playable, guint *channels, guint *frames, guint *loop_start, guint *loop_end, GError **error) { AgsIpatch *ipatch; IpatchSample *sample; if(playable == NULL){ return; } ipatch = AGS_IPATCH(playable); if(ipatch->iter == NULL){ if(channels != NULL){ *channels = 0; } if(frames != NULL){ *frames = 0; } if(loop_start != NULL){ *loop_start = 0; } if(loop_end != NULL){ *loop_end = 0; } if(error != NULL){ g_set_error(error, AGS_PLAYABLE_ERROR, AGS_PLAYABLE_ERROR_NO_SAMPLE, "no sample selected for file: %s\0", ipatch->filename); } return; } sample = IPATCH_SAMPLE(ipatch->iter->data); g_object_get(G_OBJECT(sample), "sample-size\0", frames, "loop-start\0", loop_start, "loop-end\0", loop_end, NULL); //TODO:JK: verify me if(channels != NULL){ *channels = AGS_IPATCH_DEFAULT_CHANNELS; } } signed short* ags_ipatch_read(AgsPlayable *playable, guint channel, GError **error) { AgsIpatch *ipatch; IpatchSample *sample; signed short *buffer, *source; guint channels, frames; guint loop_start, loop_end; guint i; GError *this_error; ipatch = AGS_IPATCH(playable); if(ipatch == NULL){ return(NULL); } this_error = NULL; ags_playable_info(playable, &channels, &frames, &loop_start, &loop_end, &this_error); if(this_error != NULL){ g_warning("%s\0", this_error->message); } buffer = (signed short *) malloc(channels * frames * sizeof(signed short)); if(ipatch->nth_level == 3){ if(ipatch->iter != NULL){ sample = IPATCH_SAMPLE(ipatch->iter->data); }else{ sample = NULL; } }else{ sample = NULL; if((AGS_IPATCH_DLS2 & (ipatch->flags)) != 0){ //TODO:JK: implement me }else if((AGS_IPATCH_SF2 & (ipatch->flags)) != 0){ AgsIpatchSF2Reader *reader; reader = AGS_IPATCH_SF2_READER(ipatch->reader); this_error = NULL; sample = (IpatchSample *) ipatch_sf2_find_sample(reader->sf2, reader->selected[3], NULL); }else if((AGS_IPATCH_GIG & (ipatch->flags)) != 0){ //TODO:JK: implement me } } this_error = NULL; ipatch_sample_read_transform(sample, 0, frames, buffer, IPATCH_SAMPLE_16BIT | IPATCH_SAMPLE_MONO | IPATCH_SAMPLE_SIGNED, IPATCH_SAMPLE_UNITY_CHANNEL_MAP, &this_error); if(this_error != NULL){ g_error("%s\0", this_error->message); } return(buffer); } void ags_ipatch_close(AgsPlayable *playable) { AgsIpatch *ipatch; ipatch = AGS_IPATCH(playable); /* empty */ } void ags_ipatch_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_ipatch_parent_class)->finalize(gobject); /* empty */ } /** * ags_ipatch_read_audio_signal: * @ipatch: an AgsIpatch * * Reads an AgsAudioSignal from current sample and iterates to the next sample. Prior, * you should have called #ags_playable_iter_start. * * Returns: */ GList* ags_ipatch_read_audio_signal(AgsPlayable *playable, AgsDevout *devout, guint start_channel, guint channels) { AgsIpatch *ipatch; GList *list; ipatch = AGS_IPATCH(playable); list = ags_playable_read_audio_signal(AGS_PLAYABLE(ipatch->reader), ipatch->devout, 0, 2); ipatch->audio_signal = list; } /** * ags_ipatch_new: * * Creates an #AgsIpatch. * * Returns: an empty #AgsIpatch. * * Since: 0.4 */ AgsIpatch* ags_ipatch_new() { AgsIpatch *ipatch; ipatch = (AgsIpatch *) g_object_new(AGS_TYPE_IPATCH, NULL); return(ipatch); } gsequencer-0.6.37/src/ags/audio/file/ags_audio_file_xml.c0000644000175000017500000000377212626272146020251 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include void ags_audio_file_xml_class_init(AgsAudioFileXmlClass *file_xml); void ags_audio_file_xml_init(AgsAudioFileXml *file_xml); void ags_audio_file_xml_destroy(GObject *object); GType ags_audio_file_xml_get_type() { static GType ags_type_audio_file_xml = 0; if(!ags_type_audio_file_xml){ static const GTypeInfo ags_audio_file_xml_info = { sizeof (AgsAudioFileXmlClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_audio_file_xml_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsAudioFile), 0, /* n_preallocs */ (GInstanceInitFunc) ags_audio_file_xml_init, }; ags_type_audio_file_xml = g_type_register_static(G_TYPE_OBJECT, "AgsAudioFileXml\0", &ags_audio_file_xml_info, 0); } return (ags_type_audio_file_xml); } void ags_audio_file_xml_class_init(AgsAudioFileXmlClass *file_xml) { } void ags_audio_file_xml_init(AgsAudioFileXml *file_xml) { } void ags_audio_file_xml_destroy(GObject *object) { } AgsAudioFileXml* ags_audio_file_xml_new(AgsAudioFile *audio_file) { AgsAudioFileXml *file_xml; file_xml = (AgsAudioFileXml *) g_object_new(AGS_TYPE_AUDIO_FILE_XML, NULL); return(file_xml); } gsequencer-0.6.37/src/ags/audio/file/ags_ipatch_sf2_reader.h0000644000175000017500000000452312620134350020621 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_IPATCH_SF2_READER_H__ #define __AGS_IPATCH_SF2_READER_H__ #include #include #include #include #define AGS_TYPE_IPATCH_SF2_READER (ags_ipatch_sf2_reader_get_type()) #define AGS_IPATCH_SF2_READER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_IPATCH_SF2_READER, AgsIpatchSF2Reader)) #define AGS_IPATCH_SF2_READER_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_IPATCH_SF2_READER, AgsIpatchSF2ReaderClass)) #define AGS_IS_IPATCH_SF2_READER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_IPATCH_SF2_READER)) #define AGS_IS_IPATCH_SF2_READER_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_IPATCH_SF2_READER)) #define AGS_IPATCH_SF2_READER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_IPATCH_SF2_READER, AgsIpatchSF2ReaderClass)) typedef struct _AgsIpatchSF2Reader AgsIpatchSF2Reader; typedef struct _AgsIpatchSF2ReaderClass AgsIpatchSF2ReaderClass; typedef enum{ AGS_SF2_FILENAME = 0, AGS_SF2_PHDR = 1, AGS_SF2_IHDR = 2, AGS_SF2_SHDR = 3, }AgsSF2Levels; struct _AgsIpatchSF2Reader { GObject object; AgsIpatch *ipatch; gchar **selected; IpatchSF2Reader *reader; IpatchSF2 *sf2; int bank; int program; IpatchContainer *preset; IpatchContainer *instrument; IpatchContainer *sample; int count; }; struct _AgsIpatchSF2ReaderClass { GObjectClass object; }; GType ags_ipatch_sf2_reader_get_type(); AgsIpatchSF2Reader* ags_ipatch_sf2_reader_new(); #endif /*__AGS_IPATCH_SF2_READER_H__*/ gsequencer-0.6.37/src/ags/audio/file/ags_sndfile.c0000644000175000017500000003062712626272146016714 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include void ags_sndfile_class_init(AgsSndfileClass *sndfile); void ags_sndfile_connectable_interface_init(AgsConnectableInterface *connectable); void ags_sndfile_playable_interface_init(AgsPlayableInterface *playable); void ags_sndfile_init(AgsSndfile *sndfile); void ags_sndfile_finalize(GObject *gobject); void ags_sndfile_connect(AgsConnectable *connectable); void ags_sndfile_disconnect(AgsConnectable *connectable); gboolean ags_sndfile_open(AgsPlayable *playable, gchar *name); gboolean ags_sndfile_rw_open(AgsPlayable *playable, gchar *name, gboolean create, guint samplerate, guint channels, guint frames, guint format); guint ags_sndfile_level_count(AgsPlayable *playable); gchar** ags_sndfile_sublevel_names(AgsPlayable *playable); void ags_sndfile_iter_start(AgsPlayable *playable); gboolean ags_sndfile_iter_next(AgsPlayable *playable); void ags_sndfile_info(AgsPlayable *playable, guint *channels, guint *frames, guint *loop_start, guint *loop_end, GError **error); signed short* ags_sndfile_read(AgsPlayable *playable, guint channel, GError **error); void ags_sndfile_write(AgsPlayable *playable, signed short *buffer, guint buffer_length); void ags_sndfile_flush(AgsPlayable *playable); void ags_sndfile_seek(AgsPlayable *playable, guint frames, gint whence); void ags_sndfile_close(AgsPlayable *playable); sf_count_t ags_sndfile_vio_get_filelen(void *user_data); sf_count_t ags_sndfile_vio_seek(sf_count_t offset, int whence, void *user_data); sf_count_t ags_sndfile_vio_read(void *ptr, sf_count_t count, void *user_data); sf_count_t ags_sndfile_vio_write(const void *ptr, sf_count_t count, void *user_data); sf_count_t ags_sndfile_vio_tell(const void *ptr, sf_count_t count, void *user_data); /** * SECTION:ags_sndfile * @short_description: Libsndfile wrapper * @title: AgsSndfile * @section_id: * @include: ags/audio/file/ags_sndfile.h * * #AgsSndfile is the base object to ineract with libsndfile. */ static gpointer ags_sndfile_parent_class = NULL; static AgsConnectableInterface *ags_sndfile_parent_connectable_interface; static AgsPlayableInterface *ags_sndfile_parent_playable_interface; static SF_VIRTUAL_IO *ags_sndfile_virtual_io = NULL; GType ags_sndfile_get_type() { static GType ags_type_sndfile = 0; if(!ags_type_sndfile){ static const GTypeInfo ags_sndfile_info = { sizeof (AgsSndfileClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_sndfile_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsSndfile), 0, /* n_preallocs */ (GInstanceInitFunc) ags_sndfile_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_sndfile_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_playable_interface_info = { (GInterfaceInitFunc) ags_sndfile_playable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_sndfile = g_type_register_static(G_TYPE_OBJECT, "AgsSndfile\0", &ags_sndfile_info, 0); g_type_add_interface_static(ags_type_sndfile, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_sndfile, AGS_TYPE_PLAYABLE, &ags_playable_interface_info); } return (ags_type_sndfile); } void ags_sndfile_class_init(AgsSndfileClass *sndfile) { GObjectClass *gobject; ags_sndfile_parent_class = g_type_class_peek_parent(sndfile); gobject = (GObjectClass *) sndfile; gobject->finalize = ags_sndfile_finalize; /* sndfile callbacks */ if(ags_sndfile_virtual_io == NULL){ ags_sndfile_virtual_io = (SF_VIRTUAL_IO *) malloc(sizeof(SF_VIRTUAL_IO)); ags_sndfile_virtual_io->get_filelen = ags_sndfile_vio_get_filelen; ags_sndfile_virtual_io->seek = ags_sndfile_vio_seek; ags_sndfile_virtual_io->read = ags_sndfile_vio_read; ags_sndfile_virtual_io->write = ags_sndfile_vio_write; ags_sndfile_virtual_io->tell = ags_sndfile_vio_tell; } } void ags_sndfile_connectable_interface_init(AgsConnectableInterface *connectable) { ags_sndfile_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_sndfile_connect; connectable->disconnect = ags_sndfile_disconnect; } void ags_sndfile_playable_interface_init(AgsPlayableInterface *playable) { ags_sndfile_parent_playable_interface = g_type_interface_peek_parent(playable); playable->open = ags_sndfile_open; playable->rw_open = ags_sndfile_rw_open; playable->level_count = ags_sndfile_level_count; playable->sublevel_names = ags_sndfile_sublevel_names; playable->level_select = NULL; playable->iter_start = ags_sndfile_iter_start; playable->iter_next = ags_sndfile_iter_next; playable->info = ags_sndfile_info; playable->read = ags_sndfile_read; playable->write = ags_sndfile_write; playable->flush = ags_sndfile_flush; playable->seek = ags_sndfile_seek; playable->close = ags_sndfile_close; } void ags_sndfile_init(AgsSndfile *sndfile) { sndfile->flags = 0; sndfile->info = NULL; sndfile->file = NULL; sndfile->pointer = NULL; sndfile->current = NULL; sndfile->length = 0; } void ags_sndfile_connect(AgsConnectable *connectable) { ags_sndfile_parent_connectable_interface->connect(connectable); /* empty */ } void ags_sndfile_disconnect(AgsConnectable *connectable) { ags_sndfile_parent_connectable_interface->disconnect(connectable); /* empty */ } gboolean ags_sndfile_open(AgsPlayable *playable, gchar *name) { AgsSndfile *sndfile; sndfile = AGS_SNDFILE(playable); sndfile->info = (SF_INFO *) malloc(sizeof(SF_INFO)); sndfile->info->format = 0; if((AGS_SNDFILE_VIRTUAL & (sndfile->flags)) == 0){ if(name != NULL){ sndfile->file = (SNDFILE *) sf_open(name, SFM_READ, sndfile->info); } }else{ sndfile->file = (SNDFILE *) sf_open_virtual(ags_sndfile_virtual_io, SFM_READ, sndfile->info, sndfile); } if(sndfile->file == NULL) return(FALSE); else return(TRUE); } gboolean ags_sndfile_rw_open(AgsPlayable *playable, gchar *name, gboolean create, guint samplerate, guint channels, guint frames, guint format) { AgsSndfile *sndfile; sf_count_t multi_frames; sndfile = AGS_SNDFILE(playable); sndfile->info = (SF_INFO *) malloc(sizeof(SF_INFO)); sndfile->info->samplerate = (int) samplerate; sndfile->info->channels = (int) channels; sndfile->info->format = (int) format; sndfile->info->frames = 0; sndfile->info->seekable = 0; sndfile->info->sections = 0; g_message("export to: %s\n samplerate: %d\n channels: %d\n format: %x\0", name, samplerate, channels, format); if(!sf_format_check(sndfile->info)){ g_warning("invalid format"); } if((AGS_SNDFILE_VIRTUAL & (sndfile->flags)) == 0){ if(name != NULL){ sndfile->file = (SNDFILE *) sf_open(name, SFM_RDWR, sndfile->info); } }else{ sndfile->file = (SNDFILE *) sf_open_virtual(ags_sndfile_virtual_io, SFM_RDWR, sndfile->info, sndfile); } multi_frames = frames * sndfile->info->channels; // sf_command(sndfile->file, SFC_FILE_TRUNCATE, &(multi_frames), sizeof(multi_frames)); // sf_command (sndfile, SFC_SET_SCALE_INT_FLOAT_WRITE, NULL, SF_TRUE); // sf_seek(sndfile->file, 0, SEEK_SET); // sndfile->info->frames = multi_frames; if(sndfile->file == NULL) return(FALSE); else return(TRUE); } guint ags_sndfile_level_count(AgsPlayable *playable) { return(1); } gchar** ags_sndfile_sublevel_names(AgsPlayable *playable) { return(NULL); } void ags_sndfile_iter_start(AgsPlayable *playable) { AgsSndfile *sndfile; sndfile = AGS_SNDFILE(playable); sndfile->flags |= AGS_SNDFILE_ITER_START; } gboolean ags_sndfile_iter_next(AgsPlayable *playable) { AgsSndfile *sndfile; sndfile = AGS_SNDFILE(playable); if((AGS_SNDFILE_ITER_START & (sndfile->flags)) != 0){ sndfile->flags &= (~AGS_SNDFILE_ITER_START); return(TRUE); }else{ return(FALSE); } } void ags_sndfile_info(AgsPlayable *playable, guint *channels, guint *frames, guint *loop_start, guint *loop_end, GError **error) { AgsSndfile *sndfile; sndfile = AGS_SNDFILE(playable); *channels = sndfile->info->channels; *frames = sndfile->info->frames; *loop_start = 0; *loop_end = 0; } signed short* ags_sndfile_read(AgsPlayable *playable, guint channel, GError **error) { AgsSndfile *sndfile; signed short *buffer, *source; guint i; sndfile = AGS_SNDFILE(playable); source = (signed short *) malloc((size_t) sndfile->info->channels * sndfile->info->frames * sizeof(signed short)); sf_seek(sndfile->file, 0, SEEK_SET); sf_read_short(sndfile->file, source, sndfile->info->frames * sndfile->info->channels); buffer = (signed short *) malloc((size_t) sndfile->info->frames * sizeof(signed short)); for(i = 0; i < sndfile->info->frames; i++){ buffer[i] = source[i * sndfile->info->channels + channel]; } free(source); return(buffer); } void ags_sndfile_write(AgsPlayable *playable, signed short *buffer, guint buffer_length) { AgsSndfile *sndfile; sf_count_t multi_frames, retval; sndfile = AGS_SNDFILE(playable); multi_frames = buffer_length * sndfile->info->channels; retval = sf_write_short(sndfile->file, buffer, multi_frames); if(retval > multi_frames){ g_warning("retval > multi_frames"); // sf_seek(sndfile->file, (multi_frames - retval), SEEK_CUR); } } void ags_sndfile_flush(AgsPlayable *playable) { AgsSndfile *sndfile; sndfile = AGS_SNDFILE(playable); sf_write_sync(sndfile->file); } void ags_sndfile_seek(AgsPlayable *playable, guint frames, gint whence) { AgsSndfile *sndfile; sndfile = AGS_SNDFILE(playable); sf_seek(sndfile->file, frames, whence); } void ags_sndfile_close(AgsPlayable *playable) { AgsSndfile *sndfile; sndfile = AGS_SNDFILE(playable); sf_close(sndfile->file); free(sndfile->info); } void ags_sndfile_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_sndfile_parent_class)->finalize(gobject); /* empty */ } sf_count_t ags_sndfile_vio_get_filelen(void *user_data) { return(AGS_SNDFILE(user_data)->length); } sf_count_t ags_sndfile_vio_seek(sf_count_t offset, int whence, void *user_data) { switch(whence){ case SEEK_CUR: AGS_SNDFILE(user_data)->current += offset; break; case SEEK_SET: AGS_SNDFILE(user_data)->current = &(AGS_SNDFILE(user_data)->pointer[offset]); break; case SEEK_END: AGS_SNDFILE(user_data)->current = &(AGS_SNDFILE(user_data)->pointer[AGS_SNDFILE(user_data)->length - offset]); break; } return(AGS_SNDFILE(user_data)->current - AGS_SNDFILE(user_data)->pointer); } sf_count_t ags_sndfile_vio_read(void *ptr, sf_count_t count, void *user_data) { guchar *retval; retval = memcpy(ptr, AGS_SNDFILE(user_data)->current, count * sizeof(guchar)); return(retval - AGS_SNDFILE(user_data)->pointer); } sf_count_t ags_sndfile_vio_write(const void *ptr, sf_count_t count, void *user_data) { guchar *retval; retval = memcpy(AGS_SNDFILE(user_data)->current, ptr, count * sizeof(guchar)); return(retval - AGS_SNDFILE(user_data)->pointer); } sf_count_t ags_sndfile_vio_tell(const void *ptr, sf_count_t count, void *user_data) { return(AGS_SNDFILE(user_data)->current - AGS_SNDFILE(user_data)->pointer); } /** * ags_sndfile_new: * * Creates an #AgsSndfile. * * Returns: an empty #AgsSndfile. * * Since: 0.3 */ AgsSndfile* ags_sndfile_new() { AgsSndfile *sndfile; sndfile = (AgsSndfile *) g_object_new(AGS_TYPE_SNDFILE, NULL); return(sndfile); } gsequencer-0.6.37/src/ags/audio/file/ags_ipatch_sf2_reader.c0000644000175000017500000001416612626272146020634 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include void ags_ipatch_sf2_reader_class_init(AgsIpatchSF2ReaderClass *ipatch_sf2_reader); void ags_ipatch_sf2_reader_connectable_interface_init(AgsConnectableInterface *connectable); void ags_ipatch_sf2_reader_init(AgsIpatchSF2Reader *ipatch_sf2_reader); void ags_ipatch_sf2_reader_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_ipatch_sf2_reader_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_ipatch_sf2_reader_finalize(GObject *gobject); void ags_ipatch_sf2_reader_connect(AgsConnectable *connectable); void ags_ipatch_sf2_reader_disconnect(AgsConnectable *connectable); /** * SECTION:ags_ipatch_sf2_reader * @short_description: interfacing Soundfont2 related API of libinstpatch * @title: AgsIpatchSF2Reader * @section_id: * @include: ags/audio/file/ags_ipatch_sf2_reader.h * * #AgsIpatchSF2Reader is the base object to ineract with Soundfont2 related API. */ static gpointer ags_ipatch_sf2_reader_parent_class = NULL; static AgsConnectableInterface *ags_ipatch_sf2_reader_parent_connectable_interface; enum{ PROP_0, PROP_IPATCH, }; GType ags_ipatch_sf2_reader_get_type() { static GType ags_type_ipatch_sf2_reader = 0; if(!ags_type_ipatch_sf2_reader){ static const GTypeInfo ags_ipatch_sf2_reader_info = { sizeof (AgsIpatchSF2ReaderClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_ipatch_sf2_reader_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsIpatchSF2Reader), 0, /* n_preallocs */ (GInstanceInitFunc) ags_ipatch_sf2_reader_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_ipatch_sf2_reader_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_ipatch_sf2_reader = g_type_register_static(G_TYPE_OBJECT, "AgsIpatchSF2Reader\0", &ags_ipatch_sf2_reader_info, 0); g_type_add_interface_static(ags_type_ipatch_sf2_reader, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_ipatch_sf2_reader); } void ags_ipatch_sf2_reader_class_init(AgsIpatchSF2ReaderClass *ipatch_sf2_reader) { GObjectClass *gobject; ags_ipatch_sf2_reader_parent_class = g_type_class_peek_parent(ipatch_sf2_reader); gobject = (GObjectClass *) ipatch_sf2_reader; gobject->set_property = ags_ipatch_sf2_reader_set_property; gobject->get_property = ags_ipatch_sf2_reader_get_property; gobject->finalize = ags_ipatch_sf2_reader_finalize; } void ags_ipatch_sf2_reader_connectable_interface_init(AgsConnectableInterface *connectable) { ags_ipatch_sf2_reader_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_ipatch_sf2_reader_connect; connectable->disconnect = ags_ipatch_sf2_reader_disconnect; } void ags_ipatch_sf2_reader_init(AgsIpatchSF2Reader *ipatch_sf2_reader) { ipatch_sf2_reader->ipatch = NULL; ipatch_sf2_reader->bank = -1; ipatch_sf2_reader->program = -1; ipatch_sf2_reader->selected = (gchar **) malloc(4 * sizeof(gchar *)); ipatch_sf2_reader->preset = NULL; ipatch_sf2_reader->instrument = NULL; ipatch_sf2_reader->sample = NULL; } void ags_ipatch_sf2_reader_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsIpatchSF2Reader *ipatch_sf2_reader; ipatch_sf2_reader = AGS_IPATCH_SF2_READER(gobject); switch(prop_id){ case PROP_IPATCH: { AgsIpatch *ipatch; ipatch = (AgsIpatch *) g_value_get_object(value); if(ipatch_sf2_reader->ipatch != NULL){ g_object_unref(ipatch_sf2_reader->ipatch); } ipatch_sf2_reader->ipatch = ipatch; if(ipatch != NULL){ g_object_ref(ipatch); ipatch->reader = (GObject *) ipatch_sf2_reader; } } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_ipatch_sf2_reader_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsIpatchSF2Reader *ipatch_sf2_reader; ipatch_sf2_reader = AGS_IPATCH_SF2_READER(gobject); switch(prop_id){ case PROP_IPATCH: g_value_set_object(value, ipatch_sf2_reader->ipatch); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_ipatch_sf2_reader_connect(AgsConnectable *connectable) { ags_ipatch_sf2_reader_parent_connectable_interface->connect(connectable); /* empty */ } void ags_ipatch_sf2_reader_disconnect(AgsConnectable *connectable) { ags_ipatch_sf2_reader_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_ipatch_sf2_reader_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_ipatch_sf2_reader_parent_class)->finalize(gobject); /* empty */ } /** * ags_ipatch_sf2_reader_new: * * Creates an #AgsIpatchSF2Reader. * * Returns: an empty #AgsIpatchSF2Reader. * * Since: 0.4 */ AgsIpatchSF2Reader* ags_ipatch_sf2_reader_new() { AgsIpatchSF2Reader *ipatch_sf2_reader; ipatch_sf2_reader = (AgsIpatchSF2Reader *) g_object_new(AGS_TYPE_IPATCH_SF2_READER, NULL); return(ipatch_sf2_reader); } gsequencer-0.6.37/src/ags/audio/file/ags_sndfile.h0000644000175000017500000000370512626272146016716 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_SNDFILE_H__ #define __AGS_SNDFILE_H__ #include #include #include #include #define AGS_TYPE_SNDFILE (ags_sndfile_get_type()) #define AGS_SNDFILE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_SNDFILE, AgsSndfile)) #define AGS_SNDFILE_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_SNDFILE, AgsSndfileClass)) #define AGS_IS_SNDFILE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_SNDFILE)) #define AGS_IS_SNDFILE_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_SNDFILE)) #define AGS_SNDFILE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_SNDFILE, AgsSndfileClass)) typedef struct _AgsSndfile AgsSndfile; typedef struct _AgsSndfileClass AgsSndfileClass; typedef enum{ AGS_SNDFILE_ITER_START = 1, AGS_SNDFILE_VIRTUAL = 1 << 1, }AgsSndfileFlags; struct _AgsSndfile { GObject object; guint flags; SF_INFO *info; SNDFILE *file; guchar *pointer; guchar *current; gsize length; }; struct _AgsSndfileClass { GObjectClass object; }; GType ags_sndfile_get_type(); AgsSndfile* ags_sndfile_new(); #endif /*__AGS_SNDFILE_H__*/ gsequencer-0.6.37/src/ags/audio/file/ags_ipatch.h0000644000175000017500000000430312626272146016535 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_IPATCH_H__ #define __AGS_IPATCH_H__ #include #include #include #include #define AGS_TYPE_IPATCH (ags_ipatch_get_type()) #define AGS_IPATCH(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_IPATCH, AgsIpatch)) #define AGS_IPATCH_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_IPATCH, AgsIpatchClass)) #define AGS_IS_IPATCH(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_IPATCH)) #define AGS_IS_IPATCH_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_IPATCH)) #define AGS_IPATCH_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_IPATCH, AgsIpatchClass)) #define AGS_IPATCH_DEFAULT_CHANNELS 2 #define AGS_IPATCH_READ "r" #define AGS_IPATCH_WRITE "w" typedef struct _AgsIpatch AgsIpatch; typedef struct _AgsIpatchClass AgsIpatchClass; typedef enum{ AGS_IPATCH_DLS2 = 1, AGS_IPATCH_SF2 = 1 << 1, AGS_IPATCH_GIG = 1 << 2, }AgsIpatchFlags; struct _AgsIpatch { GObject object; guint flags; AgsDevout *devout; GList *audio_signal; IpatchFile *file; char *filename; char *mode; IpatchFileHandle *handle; GError *error; IpatchBase *base; GObject *reader; IpatchList *samples; GList *iter; guint nth_level; }; struct _AgsIpatchClass { GObjectClass object; }; GType ags_ipatch_get_type(); AgsIpatch* ags_ipatch_new(); #endif /*__AGS_IPATCH_H__*/ gsequencer-0.6.37/src/ags/audio/ags_recycling_container.h0000644000175000017500000000734112626272146020374 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_RECYCLING_CONTAINER_H__ #define __AGS_RECYCLING_CONTAINER_H__ #include #include #define AGS_TYPE_RECYCLING_CONTAINER (ags_recycling_container_get_type()) #define AGS_RECYCLING_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_RECYCLING_CONTAINER, AgsRecyclingContainer)) #define AGS_RECYCLING_CONTAINER_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_RECYCLING_CONTAINER, AgsRecyclingContainerClass)) #define AGS_IS_RECYCLING_CONTAINER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_RECYCLING_CONTAINER)) #define AGS_IS_RECYCLING_CONTAINER_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_RECYCLING_CONTAINER)) #define AGS_RECYCLING_CONTAINER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_RECYCLING_CONTAINER, AgsRecyclingContainerClass)) typedef struct _AgsRecyclingContainer AgsRecyclingContainer; typedef struct _AgsRecyclingContainerClass AgsRecyclingContainerClass; struct _AgsRecyclingContainer { GObject object; GObject *recall_id; AgsRecycling **recycling; guint64 length; AgsRecyclingContainer *parent; GList *children; }; struct _AgsRecyclingContainerClass { GObjectClass object; }; GType ags_recycling_container_get_type(); void ags_recycling_container_replace(AgsRecyclingContainer *recycling_container, AgsRecycling *recycling, gint position); AgsRecyclingContainer* ags_recycling_container_add(AgsRecyclingContainer *recycling_container, AgsRecycling *recycling); AgsRecyclingContainer* ags_recycling_container_remove(AgsRecyclingContainer *recycling_container, AgsRecycling *recycling); AgsRecyclingContainer* ags_recycling_container_insert(AgsRecyclingContainer *recycling_container, AgsRecycling *recycling, gint position); AgsRecyclingContainer* ags_recycling_container_get_toplevel(AgsRecyclingContainer *recycling_container); gint ags_recycling_container_find(AgsRecyclingContainer *recycling_container, AgsRecycling *recycling); gint ags_recycling_container_find_child(AgsRecyclingContainer *recycling_container, AgsRecycling *recycling); gint ags_recycling_container_find_parent(AgsRecyclingContainer *recycling_container, AgsRecycling *recycling); void ags_recycling_container_add_child(AgsRecyclingContainer *parent, AgsRecyclingContainer *child); void ags_recycling_container_remove_child(AgsRecyclingContainer *parent, AgsRecyclingContainer *child); GList* ags_recycling_container_get_child_recall_id(AgsRecyclingContainer *recycling_container); AgsRecyclingContainer* ags_recycling_container_reset_recycling(AgsRecyclingContainer *recycling_container, AgsRecycling *old_first_recycling, AgsRecycling *old_last_recycling, AgsRecycling *new_first_recycling, AgsRecycling *new_last_recycling); AgsRecyclingContainer* ags_recycling_container_new(gint length); #endif /*__AGS_RECYCLING_CONTAINER_H__*/ gsequencer-0.6.37/src/ags/audio/ags_recall_audio_run.c0000644000175000017500000003373712626272146017665 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include void ags_recall_audio_run_class_init(AgsRecallAudioRunClass *recall_audio_run); void ags_recall_audio_run_connectable_interface_init(AgsConnectableInterface *connectable); void ags_recall_audio_run_packable_interface_init(AgsPackableInterface *packable); void ags_recall_audio_run_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable); void ags_recall_audio_run_init(AgsRecallAudioRun *recall_audio_run); void ags_recall_audio_run_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_recall_audio_run_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_recall_audio_run_connect(AgsConnectable *connectable); void ags_recall_audio_run_disconnect(AgsConnectable *connectable); gboolean ags_recall_audio_run_pack(AgsPackable *packable, GObject *container); gboolean ags_recall_audio_run_unpack(AgsPackable *packable); void ags_recall_audio_run_connect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_recall_audio_run_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_recall_audio_run_finalize(GObject *gobject); void ags_recall_audio_run_remove(AgsRecall *recall); AgsRecall* ags_recall_audio_run_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter); /** * SECTION:ags_recall_audio_run * @Short_description: audio context of dynamic recall * @Title: AgsRecallAudioRun * * #AgsRecallAudioRun acts as dynamic audio recall. */ enum{ LAST_SIGNAL, }; enum{ PROP_0, PROP_RECALL_AUDIO, }; static gpointer ags_recall_audio_run_parent_class = NULL; static AgsConnectableInterface* ags_recall_audio_run_parent_connectable_interface; static AgsPackableInterface* ags_recall_audio_run_parent_packable_interface; static AgsDynamicConnectableInterface *ags_recall_audio_run_parent_dynamic_connectable_interface; static guint recall_audio_run_signals[LAST_SIGNAL]; GType ags_recall_audio_run_get_type() { static GType ags_type_recall_audio_run = 0; if(!ags_type_recall_audio_run){ static const GTypeInfo ags_recall_audio_run_info = { sizeof (AgsRecallAudioRunClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_recall_audio_run_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsRecallAudioRun), 0, /* n_preallocs */ (GInstanceInitFunc) ags_recall_audio_run_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_recall_audio_run_dynamic_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_packable_interface_info = { (GInterfaceInitFunc) ags_recall_audio_run_packable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_dynamic_connectable_interface_info = { (GInterfaceInitFunc) ags_recall_audio_run_dynamic_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_recall_audio_run = g_type_register_static(AGS_TYPE_RECALL, "AgsRecallAudioRun\0", &ags_recall_audio_run_info, 0); g_type_add_interface_static(ags_type_recall_audio_run, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_recall_audio_run, AGS_TYPE_PACKABLE, &ags_packable_interface_info); g_type_add_interface_static(ags_type_recall_audio_run, AGS_TYPE_DYNAMIC_CONNECTABLE, &ags_dynamic_connectable_interface_info); } return(ags_type_recall_audio_run); } void ags_recall_audio_run_class_init(AgsRecallAudioRunClass *recall_audio_run) { GObjectClass *gobject; AgsRecallClass *recall; GParamSpec *param_spec; ags_recall_audio_run_parent_class = g_type_class_peek_parent(recall_audio_run); /* GObjectClass */ gobject = (GObjectClass *) recall_audio_run; gobject->set_property = ags_recall_audio_run_set_property; gobject->get_property = ags_recall_audio_run_get_property; gobject->finalize = ags_recall_audio_run_finalize; /* properties */ /** * AgsRecallAudioRun:recall-audio: * * The recall audio belonging to. * * Since: 0.4.0 */ param_spec = g_param_spec_object("recall-audio\0", "AgsRecallAudio of this recall\0", "The AgsRecallAudio which this recall needs\0", AGS_TYPE_RECALL_AUDIO, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_RECALL_AUDIO, param_spec); /* AgsRecallClass */ recall = (AgsRecallClass *) recall_audio_run; recall->remove= ags_recall_audio_run_remove; recall->duplicate = ags_recall_audio_run_duplicate; /* AgsRecallAudioRunClass */ } void ags_recall_audio_runconnectable_interface_init(AgsConnectableInterface *connectable) { ags_recall_audio_run_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_recall_audio_run_connect; connectable->disconnect = ags_recall_audio_run_disconnect; } void ags_recall_audio_run_packable_interface_init(AgsPackableInterface *packable) { ags_recall_audio_run_parent_packable_interface = g_type_interface_peek_parent(packable); packable->pack = ags_recall_audio_run_pack; packable->unpack = ags_recall_audio_run_unpack; } void ags_recall_audio_run_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable) { ags_recall_audio_run_parent_dynamic_connectable_interface = g_type_interface_peek_parent(dynamic_connectable); dynamic_connectable->connect_dynamic = ags_recall_audio_run_connect_dynamic; dynamic_connectable->disconnect_dynamic = ags_recall_audio_run_disconnect_dynamic; } void ags_recall_audio_run_init(AgsRecallAudioRun *recall_audio_run) { recall_audio_run->recall_audio = NULL; } void ags_recall_audio_run_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsRecallAudioRun *recall_audio_run; recall_audio_run = AGS_RECALL_AUDIO_RUN(gobject); switch(prop_id){ case PROP_RECALL_AUDIO: { AgsRecallAudio *recall_audio; recall_audio = (AgsRecallAudio *) g_value_get_object(value); if(recall_audio_run->recall_audio == recall_audio) return; if(recall_audio_run->recall_audio != NULL){ g_object_unref(G_OBJECT(recall_audio_run->recall_audio)); } if(recall_audio != NULL){ g_object_ref(G_OBJECT(recall_audio)); } recall_audio_run->recall_audio = recall_audio; } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; }; } void ags_recall_audio_run_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsRecallAudioRun *recall_audio_run; recall_audio_run = AGS_RECALL_AUDIO_RUN(gobject); switch(prop_id){ case PROP_RECALL_AUDIO: { g_value_set_object(value, recall_audio_run->recall_audio); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; }; } void ags_recall_audio_run_finalize(GObject *gobject) { AgsRecallAudioRun *recall_audio_run; recall_audio_run = AGS_RECALL_AUDIO_RUN(gobject); if(recall_audio_run->recall_audio != NULL) g_object_unref(G_OBJECT(recall_audio_run->recall_audio)); G_OBJECT_CLASS(ags_recall_audio_run_parent_class)->finalize(gobject); } void ags_recall_audio_run_connect(AgsConnectable *connectable) { if((AGS_RECALL_CONNECTED & (AGS_RECALL(connectable)->flags)) != 0){ return; } ags_recall_audio_run_parent_connectable_interface->connect(connectable); /* empty */ } void ags_recall_audio_run_disconnect(AgsConnectable *connectable) { ags_recall_audio_run_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_recall_audio_run_connect_dynamic(AgsDynamicConnectable *dynamic_connectable) { if((AGS_RECALL_DYNAMIC_CONNECTED & (AGS_RECALL(dynamic_connectable)->flags)) != 0){ return; } ags_recall_audio_run_parent_dynamic_connectable_interface->connect_dynamic(dynamic_connectable); /* empty */ } void ags_recall_audio_run_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable) { ags_recall_audio_run_parent_dynamic_connectable_interface->disconnect_dynamic(dynamic_connectable); /* empty */ } gboolean ags_recall_audio_run_pack(AgsPackable *packable, GObject *container) { AgsRecallAudioRun *recall_audio_run; AgsRecallContainer *recall_container; GList *list; AgsRecallID *recall_id; if(ags_recall_audio_run_parent_packable_interface->pack(packable, container)) return(TRUE); recall_audio_run = AGS_RECALL_AUDIO_RUN(packable); recall_container = AGS_RECALL_CONTAINER(container); /* set AgsRecallAudio */ g_object_set(G_OBJECT(recall_audio_run), "recall-audio\0", recall_container->recall_audio, NULL); /* set in AgsRecallChannelRun */ list = recall_container->recall_channel_run; if(AGS_RECALL(packable)->recall_id != NULL){ recall_id = AGS_RECALL(packable)->recall_id; while((list = ags_recall_find_recycling_container(list, (GObject *) recall_id->recycling_container)) != NULL){ g_object_set(G_OBJECT(list->data), "recall-audio-run\0", AGS_RECALL_AUDIO_RUN(packable), NULL); list= list->next; } }else if((AGS_RECALL_TEMPLATE & (AGS_RECALL(packable)->flags)) != 0){ while((list = ags_recall_find_template(list)) != NULL){ g_object_set(G_OBJECT(list->data), "recall-audio-run\0", AGS_RECALL_AUDIO_RUN(packable), NULL); list= list->next; } } g_object_set(G_OBJECT(recall_container), "recall-audio-run\0", AGS_RECALL(packable), NULL); return(FALSE); } gboolean ags_recall_audio_run_unpack(AgsPackable *packable) { AgsRecallAudioRun *recall_audio_run; AgsRecall *recall; AgsRecallContainer *recall_container; GList *list; AgsRecallID *recall_id; recall = AGS_RECALL(packable); if(recall == NULL) return(TRUE); recall_container = AGS_RECALL_CONTAINER(recall->container); if(recall_container == NULL) return(TRUE); /* ref */ g_object_ref(recall); g_object_ref(recall_container); recall_audio_run = AGS_RECALL_AUDIO_RUN(packable); /* unset AgsRecallAudio */ g_object_set(G_OBJECT(recall_audio_run), "recall_audio\0", NULL, NULL); /* unset in AgsRecallChannelRun */ list = recall_container->recall_channel_run; if(AGS_RECALL(packable)->recall_id != NULL){ recall_id = AGS_RECALL(packable)->recall_id; while((list = ags_recall_find_recycling_container(list, (GObject *) recall_id->recycling_container)) != NULL){ g_object_set(G_OBJECT(list->data), "recall_audio_run\0", NULL, NULL); list= list->next; } }else if((AGS_RECALL_TEMPLATE & (AGS_RECALL(packable)->flags)) != 0){ while((list = ags_recall_find_template(list)) != NULL){ g_object_set(G_OBJECT(list->data), "recall_audio_run\0", NULL, NULL); list= list->next; } } /* call parent */ if(ags_recall_audio_run_parent_packable_interface->unpack(packable)){ g_object_unref(recall); g_object_unref(recall_container); return(TRUE); } /* remove from list */ recall_container->recall_audio_run = g_list_remove(recall_container->recall_audio_run, recall); /* unref */ g_object_unref(recall); g_object_unref(recall_container); return(FALSE); } void ags_recall_audio_run_remove(AgsRecall *recall) { if(AGS_RECALL_AUDIO_RUN(recall)->recall_audio != NULL && AGS_RECALL_AUDIO_RUN(recall)->recall_audio->audio != NULL){ ags_audio_remove_recall(AGS_RECALL_AUDIO_RUN(recall)->recall_audio->audio, recall, ((recall->recall_id->recycling_container->parent) ? TRUE: FALSE)); } AGS_RECALL_CLASS(ags_recall_audio_run_parent_class)->remove(recall); } AgsRecall* ags_recall_audio_run_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter) { AgsRecallAudioRun *recall_audio_run, *copy; recall_audio_run = AGS_RECALL_AUDIO_RUN(recall); copy = AGS_RECALL_AUDIO_RUN(AGS_RECALL_CLASS(ags_recall_audio_run_parent_class)->duplicate(recall, recall_id, n_params, parameter)); g_object_set(G_OBJECT(copy), "recall_audio\0", recall_audio_run->recall_audio, NULL); return((AgsRecall *) copy); } /** * ags_recall_audio_run_new: * * Creates an #AgsRecallAudioRun. * * Returns: a new #AgsRecallAudioRun. * * Since: 0.4 */ AgsRecallAudioRun* ags_recall_audio_run_new() { AgsRecallAudioRun *recall_audio_run; recall_audio_run = (AgsRecallAudioRun *) g_object_new(AGS_TYPE_RECALL_AUDIO_RUN, NULL); return(recall_audio_run); } gsequencer-0.6.37/src/ags/audio/ags_note.h0000644000175000017500000000376012626272146015321 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_NOTE_H__ #define __AGS_NOTE_H__ #include #include #define AGS_TYPE_NOTE (ags_note_get_type()) #define AGS_NOTE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_NOTE, AgsNote)) #define AGS_NOTE_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_NOTE, AgsNoteClass)) #define AGS_IS_NOTE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_NOTE)) #define AGS_IS_NOTE_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_NOTE)) #define AGS_NOTE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_NOTE, AgsNoteClass)) typedef struct _AgsNote AgsNote; typedef struct _AgsNoteClass AgsNoteClass; typedef enum{ AGS_NOTE_GUI = 1, AGS_NOTE_RUNTIME = 1 << 1, AGS_NOTE_HUMAN_READABLE = 1 << 2, AGS_NOTE_DEFAULT_LENGTH = 1 << 3, AGS_NOTE_IS_SELECTED = 1 << 4, }AgsNoteFlags; struct _AgsNote { GObject object; guint flags; // gui format, convert easy to visualization guint x[2]; guint y; gchar *name; gdouble frequency; }; struct _AgsNoteClass { GObjectClass object; }; GType ags_note_get_type(); AgsNote* ags_note_duplicate(AgsNote *note); AgsNote* ags_note_new(); #endif /*__AGS_NOTE_H__*/ gsequencer-0.6.37/src/ags/audio/ags_audio.c0000644000175000017500000024011112626272146015441 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include /** * SECTION:ags_audio * @short_description: A container of channels organizing them as input or output * @title: AgsAudio * @section_id: * @include: ags/audio/ags_audio.h * * #AgsAudio organizes #AgsChannel objects either as input or output and * is responsible of their alignment. The class can contain #AgsRecall objects * in order to perform computation on all channels or in audio context. * Therefor exists #AgsRecyclingContainer acting as tree context. * * At least one #AgsRecallID is assigned to it and has one more if * %AGS_AUDIO_OUTPUT_HAS_RECYCLING is set as flag. * * If %AGS_AUDIO_HAS_NOTATION is set as flag one #AgsNotation is allocated per audio * channel. */ void ags_audio_class_init(AgsAudioClass *audio_class); void ags_audio_connectable_interface_init(AgsConnectableInterface *connectable); void ags_audio_init(AgsAudio *audio); void ags_audio_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_audio_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_audio_add_to_registry(AgsConnectable *connectable); void ags_audio_remove_from_registry(AgsConnectable *connectable); void ags_audio_connect(AgsConnectable *connectable); void ags_audio_disconnect(AgsConnectable *connectable); void ags_audio_finalize(GObject *gobject); void ags_audio_real_set_audio_channels(AgsAudio *audio, guint audio_channels, guint audio_channels_old); void ags_audio_real_set_pads(AgsAudio *audio, GType type, guint channels, guint channels_old); enum{ SET_AUDIO_CHANNELS, SET_PADS, INIT_RUN, TACT, DONE, LAST_SIGNAL, }; enum{ PROP_0, PROP_DEVOUT, }; static gpointer ags_audio_parent_class = NULL; static guint audio_signals[LAST_SIGNAL]; extern pthread_mutex_t ags_application_mutex; extern AgsConfig *config; GType ags_audio_get_type (void) { static GType ags_type_audio = 0; if(!ags_type_audio){ static const GTypeInfo ags_audio_info = { sizeof(AgsAudioClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_audio_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(AgsAudio), 0, /* n_preallocs */ (GInstanceInitFunc) ags_audio_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_audio_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_audio = g_type_register_static(G_TYPE_OBJECT, "AgsAudio\0", &ags_audio_info, 0); g_type_add_interface_static(ags_type_audio, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return(ags_type_audio); } void ags_audio_class_init(AgsAudioClass *audio) { GObjectClass *gobject; GParamSpec *param_spec; ags_audio_parent_class = g_type_class_peek_parent(audio); /* GObjectClass */ gobject = (GObjectClass *) audio; gobject->set_property = ags_audio_set_property; gobject->get_property = ags_audio_get_property; gobject->finalize = ags_audio_finalize; /* properties */ /** * AgsAudio:devout: * * The assigned #AgsDevout acting as default sink. * * Since: 0.4 */ param_spec = g_param_spec_object("devout\0", "assigned devout\0", "The devout it is assigned with\0", AGS_TYPE_DEVOUT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_DEVOUT, param_spec); /* AgsAudioClass */ audio->set_audio_channels = ags_audio_real_set_audio_channels; audio->set_pads = ags_audio_real_set_pads; audio->init_run = NULL; audio->tact = NULL; audio->done = NULL; /* signals */ /** * AgsAudio::set-audio-channels: * @audio: the object to adjust the channels. * @audio_channels_new: new audio channel count * @audio_channels_old: old audio channel count * * The ::set-audio-channels signal notifies about changes in channel * alignment. */ audio_signals[SET_AUDIO_CHANNELS] = g_signal_new("set-audio-channels\0", G_TYPE_FROM_CLASS(audio), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsAudioClass, set_audio_channels), NULL, NULL, g_cclosure_user_marshal_VOID__UINT_UINT, G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_UINT); /** * AgsAudio::set-pads: * @audio: the object to adjust pads. * @type: either #AGS_TYPE_INPUT or #AGS_TYPE_OUTPUT * @pads_new: new pad count * @pads_old: old pad count * * The ::set-pads signal notifies about changes in channel * alignment. */ audio_signals[SET_PADS] = g_signal_new("set-pads\0", G_TYPE_FROM_CLASS(audio), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsAudioClass, set_pads), NULL, NULL, g_cclosure_user_marshal_VOID__ULONG_UINT_UINT, G_TYPE_NONE, 3, G_TYPE_ULONG, G_TYPE_UINT, G_TYPE_UINT); /** * AgsAudio::init-run: * @audio: the object to init run. * * The ::init-run signal is invoked during dynamic initialization of recalls * of @audio. * * Returns: the current #AgsRecallID */ audio_signals[INIT_RUN] = g_signal_new("init-run\0", G_TYPE_FROM_CLASS(audio), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsAudioClass, init_run), NULL, NULL, g_cclosure_user_marshal_OBJECT__VOID, G_TYPE_OBJECT, 0); /** * AgsAudio::tact: * @audio: the object playing. * @recall_id: the appropriate #AgsRecallID * * The ::tact signal is invoked during playback of recalls * of @audio. */ audio_signals[TACT] = g_signal_new("tact\0", G_TYPE_FROM_CLASS(audio), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsAudioClass, tact), NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, G_TYPE_OBJECT); /** * AgsAudio::done: * @audio: the object done playing. * @recall_id: the appropriate #AgsRecallID * * The ::done signal is invoked while terminating playback * of @audio. */ audio_signals[DONE] = g_signal_new("done\0", G_TYPE_FROM_CLASS(audio), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsAudioClass, done), NULL, NULL, g_cclosure_marshal_VOID__OBJECT, G_TYPE_NONE, 1, G_TYPE_OBJECT); } void ags_audio_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->add_to_registry = ags_audio_add_to_registry; connectable->remove_from_registry = ags_audio_remove_from_registry; connectable->is_ready = NULL; connectable->is_connected = NULL; connectable->connect = ags_audio_connect; connectable->disconnect = ags_audio_disconnect; } void ags_audio_init(AgsAudio *audio) { AgsMutexManager *mutex_manager; gchar *str0, *str1; pthread_mutex_t *mutex; pthread_mutexattr_t attr; /* insert audio mutex */ //FIXME:JK: memory leak pthread_mutexattr_init(&attr); pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); mutex = (pthread_mutex_t *) malloc(sizeof(pthread_mutex_t)); pthread_mutex_init(mutex, &attr); pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); ags_mutex_manager_insert(mutex_manager, (GObject *) audio, mutex); pthread_mutex_unlock(&(ags_application_mutex)); /* base init */ audio->flags = 0; audio->devout = NULL; audio->sequence_length = 0; audio->audio_channels = 0; audio->frequence = 0; audio->output_pads = 0; audio->output_lines = 0; audio->input_pads = 0; audio->input_lines = 0; audio->output = NULL; audio->input = NULL; audio->devout_play_domain = ags_devout_play_domain_alloc(); AGS_DEVOUT_PLAY_DOMAIN(audio->devout_play_domain)->domain = (GObject *) audio; /**/ str0 = ags_config_get(config, AGS_CONFIG_THREAD, "model\0"); str1 = ags_config_get(config, AGS_CONFIG_THREAD, "super-threaded-scope\0"); if(!g_ascii_strncasecmp(str0, "super-threaded\0", 15)){ if(!g_ascii_strncasecmp(str1, "audio\0", 6) || !g_ascii_strncasecmp(ags_config_get(config, AGS_CONFIG_THREAD, "super-threaded-scope\0"), "channel\0", 8) || !g_ascii_strncasecmp(ags_config_get(config, AGS_CONFIG_THREAD, "super-threaded-scope\0"), "recycling\0", 10)){ g_atomic_int_or(&(AGS_DEVOUT_PLAY_DOMAIN(audio->devout_play_domain)->flags), AGS_DEVOUT_PLAY_DOMAIN_SUPER_THREADED_AUDIO); AGS_DEVOUT_PLAY_DOMAIN(audio->devout_play_domain)->audio_thread[0] = ags_audio_thread_new(NULL, audio); AGS_DEVOUT_PLAY_DOMAIN(audio->devout_play_domain)->audio_thread[1] = ags_audio_thread_new(NULL, audio); AGS_DEVOUT_PLAY_DOMAIN(audio->devout_play_domain)->audio_thread[2] = ags_audio_thread_new(NULL, audio); } } free(str0); free(str1); audio->notation = NULL; audio->recall_id = NULL; audio->recycling_container = NULL; audio->container = NULL; audio->recall = NULL; audio->play = NULL; audio->recall_remove= NULL; audio->play_remove = NULL; audio->machine = NULL; } void ags_audio_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsAudio *audio; audio = AGS_AUDIO(gobject); switch(prop_id){ case PROP_DEVOUT: { AgsDevout *devout; devout = (AgsDevout *) g_value_get_object(value); ags_audio_set_devout(audio, (GObject *) devout); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_audio_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsAudio *audio; audio = AGS_AUDIO(gobject); switch(prop_id){ case PROP_DEVOUT: g_value_set_object(value, audio->devout); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_audio_finalize(GObject *gobject) { AgsAudio *audio; AgsChannel *channel; AgsMutexManager *mutex_manager; pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); ags_mutex_manager_remove(mutex_manager, gobject); pthread_mutex_unlock(&(ags_application_mutex)); audio = AGS_AUDIO(gobject); if(audio->devout != NULL){ g_object_unref(audio->devout); } /* output */ channel = audio->output; if(channel != NULL){ while(channel->next != NULL){ channel = channel->next; g_object_unref((GObject *) channel->prev); } g_object_unref((GObject *) channel); } /* input */ channel = audio->input; if(channel != NULL){ while(channel->next != NULL){ channel = channel->next; g_object_unref((GObject *) channel->prev); } g_object_unref(channel); } /* free some lists */ ags_list_free_and_unref_link(audio->notation); ags_list_free_and_unref_link(audio->recall_id); ags_list_free_and_unref_link(audio->recall); ags_list_free_and_unref_link(audio->play); ags_list_free_and_unref_link(audio->recall_remove); ags_list_free_and_unref_link(audio->play_remove); /* call parent */ G_OBJECT_CLASS(ags_audio_parent_class)->finalize(gobject); } void ags_audio_add_to_registry(AgsConnectable *connectable) { AgsMain *ags_main; AgsServer *server; AgsAudio *audio; AgsChannel *channel; AgsRegistryEntry *entry; GList *list; audio = AGS_AUDIO(connectable); ags_main = AGS_MAIN(AGS_DEVOUT(audio->devout)->ags_main); server = ags_main->server; entry = ags_registry_entry_alloc(server->registry); g_value_set_object(&(entry->entry), (gpointer) audio); ags_registry_add(server->registry, entry); /* add play */ list = audio->play; while(list != NULL){ ags_connectable_add_to_registry(AGS_CONNECTABLE(list->data)); list = list->next; } /* add recall */ list = audio->recall; while(list != NULL){ ags_connectable_add_to_registry(AGS_CONNECTABLE(list->data)); list = list->next; } /* add output */ channel = audio->output; while(channel != NULL){ ags_connectable_add_to_registry(AGS_CONNECTABLE(channel)); channel = channel->next; } /* add input */ channel = audio->input; while(channel != NULL){ ags_connectable_add_to_registry(AGS_CONNECTABLE(channel)); channel = channel->next; } } void ags_audio_remove_from_registry(AgsConnectable *connectable) { //TODO:JK: implement me } void ags_audio_connect(AgsConnectable *connectable) { AgsAudio *audio; AgsChannel *channel; GList *list; audio = AGS_AUDIO(connectable); #ifdef AGS_DEBUG g_message("connecting audio\0"); #endif /* connect channels */ channel = audio->output; while(channel != NULL){ ags_connectable_connect(AGS_CONNECTABLE(channel)); channel = channel->next; } channel = audio->input; while(channel != NULL){ ags_connectable_connect(AGS_CONNECTABLE(channel)); channel = channel->next; } /* connect recall ids */ list = audio->recall_id; while(list != NULL){ ags_connectable_connect(AGS_CONNECTABLE(list->data)); list = list->next; } /* connect recall containers */ list = audio->container; while(list != NULL){ ags_connectable_connect(AGS_CONNECTABLE(list->data)); list = list->next; } /* connect recalls */ list = audio->recall; while(list != NULL){ ags_connectable_connect(AGS_CONNECTABLE(list->data)); list = list->next; } list = audio->play; while(list != NULL){ ags_connectable_connect(AGS_CONNECTABLE(list->data)); list = list->next; } /* connect remove recalls */ list = audio->recall_remove; while(list != NULL){ ags_connectable_connect(AGS_CONNECTABLE(list->data)); list = list->next; } list = audio->play_remove; while(list != NULL){ ags_connectable_connect(AGS_CONNECTABLE(list->data)); list = list->next; } /* connect notation */ if(audio->notation != NULL) ags_connectable_connect(AGS_CONNECTABLE(audio->notation)); } void ags_audio_disconnect(AgsConnectable *connectable) { /* empty */ } /** * ags_audio_set_devout: * @audio: the #AgsAudio * @devout: an #AgsDevout * * Sets a devout object on audio. * * Since: 0.4 */ void ags_audio_set_devout(AgsAudio *audio, GObject *devout) { AgsChannel *channel; GList *list; AgsMutexManager *mutex_manager; gchar *str0, *str1; pthread_mutex_t *mutex; /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(mutex); /**/ str0 = ags_config_get(config, AGS_CONFIG_THREAD, "model\0"); str1 = ags_config_get(config, AGS_CONFIG_THREAD, "super-threaded-scope\0"); if(!g_ascii_strncasecmp(str0, "super-threaded\0", 15)){ /* super threaed setup */ if(!g_ascii_strncasecmp(str1, "audio\0", 6) || !g_ascii_strncasecmp(ags_config_get(config, AGS_CONFIG_THREAD, "super-threaded-scope\0"), "channel\0", 8) || !g_ascii_strncasecmp(ags_config_get(config, AGS_CONFIG_THREAD, "super-threaded-scope\0"), "recycling\0", 10)){ /* sequencer */ g_object_set(AGS_DEVOUT_PLAY_DOMAIN(audio->devout_play_domain)->audio_thread[1], "devout\0", devout, NULL); /* notation */ g_object_set(AGS_DEVOUT_PLAY_DOMAIN(audio->devout_play_domain)->audio_thread[2], "devout\0", devout, NULL); } } free(str0); free(str1); /* audio */ if(audio->devout == devout){ pthread_mutex_unlock(mutex); return; } if(audio->devout != NULL) g_object_unref(audio->devout); if(devout != NULL) g_object_ref(devout); audio->devout = (GObject *) devout; /* recall */ list = audio->play; while(list != NULL){ g_object_set(G_OBJECT(list->data), "devout\0", devout, NULL); list = list->next; } list = audio->recall; while(list != NULL){ g_object_set(G_OBJECT(list->data), "devout\0", devout, NULL); list = list->next; } /* input */ channel = audio->input; while(channel != NULL){ g_object_set(G_OBJECT(channel), "devout\0", devout, NULL); channel = channel->next; } /* output */ channel = audio->output; while(channel != NULL){ g_object_set(G_OBJECT(channel), "devout\0", devout, NULL); channel = channel->next; } pthread_mutex_unlock(mutex); } /** * ags_audio_set_flags: * @audio: an AgsAudio * @flags: see enum AgsAudioFlags * * Enable a feature of AgsAudio. * * Since: 0.4 */ void ags_audio_set_flags(AgsAudio *audio, guint flags) { auto GParameter* ags_audio_set_flags_set_recycling_parameter(GType type); auto void ags_audio_set_flags_add_recycling_task(GParameter *parameter); GParameter* ags_audio_set_flags_set_recycling_parameter(GType type){ AgsChannel *channel, *start_channel, *end_channel; AgsRecycling *recycling, *recycling_next, *start_recycling, *end_recycling; GParameter *parameter; int i; parameter = g_new(GParameter, 4 * audio->audio_channels); for(i = 0; i < audio->audio_channels; i++){ start_channel = channel = ags_channel_nth(((g_type_is_a(type, AGS_TYPE_INPUT)) ? audio->input: audio->output), i); end_channel = NULL; start_recycling = recycling = NULL; end_recycling = NULL; if(channel != NULL){ start_recycling = recycling = ags_recycling_new(audio->devout); goto ags_audio_set_flags_OUTPUT_RECYCLING; } while(channel != NULL){ recycling->next = ags_recycling_new(audio->devout); ags_audio_set_flags_OUTPUT_RECYCLING: recycling->next->prev = recycling; recycling = recycling->next; channel = channel->next_pad; } end_channel = ags_channel_pad_last(start_channel); end_recycling = recycling; /* setting up parameters */ parameter[i].name = "start_channel"; g_value_init(&(parameter[i].value), G_TYPE_OBJECT); g_value_set_object(&(parameter[i].value), start_channel); parameter[i].name = "end_channel"; g_value_init(&(parameter[i].value), G_TYPE_OBJECT); g_value_set_object(&(parameter[i].value), end_channel); parameter[i].name = "start_recycling"; g_value_init(&(parameter[i].value), G_TYPE_OBJECT); g_value_set_object(&(parameter[i].value), start_recycling); parameter[i].name = "end_recycling"; g_value_init(&(parameter[i].value), G_TYPE_OBJECT); g_value_set_object(&(parameter[i].value), end_recycling); } return(parameter); } void ags_audio_set_flags_add_recycling_task(GParameter *parameter){ AgsAudioSetRecycling *audio_set_recycling; /* create set recycling task */ audio_set_recycling = ags_audio_set_recycling_new(audio, parameter); /* append AgsAudioSetRecycling */ // ags_task_thread_append_task(AGS_TASK_THREAD(AGS_AUDIO_LOOP(AGS_MAIN(AGS_DEVOUT(audio->devout)->ags_main)->main_loop)->task_thread), // AGS_TASK(audio_set_recycling)); } if(audio == NULL || !AGS_IS_AUDIO(audio)){ return; } if((AGS_AUDIO_INPUT_HAS_RECYCLING & (audio->flags))){ GParameter *parameter; /* check if output has already recyclings */ if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) == 0){ if(audio->output_pads > 0){ parameter = ags_audio_set_flags_set_recycling_parameter(AGS_TYPE_OUTPUT); ags_audio_set_flags_add_recycling_task(parameter); } audio->flags |= AGS_AUDIO_OUTPUT_HAS_RECYCLING; } /* check if input has already recyclings */ if((AGS_AUDIO_INPUT_HAS_RECYCLING & (audio->flags)) != 0){ if(audio->input_pads > 0){ parameter = ags_audio_set_flags_set_recycling_parameter(AGS_TYPE_INPUT); ags_audio_set_flags_add_recycling_task(parameter); } audio->flags |= AGS_AUDIO_INPUT_HAS_RECYCLING; } } //TODO:JK: automatization of setting recycling_container root } /** * ags_audio_unset_flags: * @audio: an AgsAudio * @flags: see enum AgsAudioFlags * * Disable a feature of AgsAudio. * * Since: 0.4 */ void ags_audio_unset_flags(AgsAudio *audio, guint flags) { auto GParameter* ags_audio_unset_flags_set_recycling_parameter(GType type); auto void ags_audio_unset_flags_add_recycling_task(GParameter *parameter); GParameter* ags_audio_unset_flags_set_recycling_parameter(GType type){ AgsChannel *channel, *start_channel, *end_channel; AgsRecycling *recycling, *recycling_next, *start_recycling, *end_recycling; GParameter *parameter; int i; parameter = g_new(GParameter, 4 * audio->audio_channels); for(i = 0; i < audio->audio_channels; i++){ start_channel = ags_channel_nth(((g_type_is_a(type, AGS_TYPE_INPUT)) ? audio->input: audio->output), i); end_channel = ags_channel_pad_last(start_channel); start_recycling = NULL; end_recycling = NULL; /* setting up parameters */ parameter[i].name = "start_channel"; g_value_init(&(parameter[i].value), G_TYPE_OBJECT); g_value_set_object(&(parameter[i].value), start_channel); parameter[i].name = "end_channel"; g_value_init(&(parameter[i].value), G_TYPE_OBJECT); g_value_set_object(&(parameter[i].value), end_channel); parameter[i].name = "start_recycling"; g_value_init(&(parameter[i].value), G_TYPE_OBJECT); g_value_set_object(&(parameter[i].value), start_recycling); parameter[i].name = "end_recycling"; g_value_init(&(parameter[i].value), G_TYPE_OBJECT); g_value_set_object(&(parameter[i].value), end_recycling); } return(parameter); } void ags_audio_unset_flags_add_recycling_task(GParameter *parameter){ AgsAudioSetRecycling *audio_set_recycling; /* create set recycling task */ audio_set_recycling = ags_audio_set_recycling_new(audio, parameter); /* append AgsAudioSetRecycling */ // ags_task_thread_append_task(AGS_TASK_THREAD(AGS_AUDIO_LOOP(AGS_MAIN(AGS_DEVOUT(audio->devout)->ags_main)->main_loop)->task_thread), // AGS_TASK(audio_set_recycling)); } if(audio == NULL || !AGS_IS_AUDIO(audio)){ return; } if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags))){ GParameter *parameter; /* check if input has already no recyclings */ if((AGS_AUDIO_INPUT_HAS_RECYCLING & (audio->flags)) != 0){ if(audio->input_pads > 0){ parameter = ags_audio_unset_flags_set_recycling_parameter(AGS_TYPE_INPUT); ags_audio_unset_flags_add_recycling_task(parameter); audio->flags &= (~AGS_AUDIO_INPUT_HAS_RECYCLING); } /* check if output has already recyclings */ if(audio->output_pads > 0){ parameter = ags_audio_unset_flags_set_recycling_parameter(AGS_TYPE_OUTPUT); ags_audio_unset_flags_add_recycling_task(parameter); audio->flags &= (~AGS_AUDIO_OUTPUT_HAS_RECYCLING); } } } } void ags_audio_real_set_audio_channels(AgsAudio *audio, guint audio_channels, guint audio_channels_old) { AgsMutexManager *mutex_manager; gboolean alloc_recycling; gboolean link_recycling; // affects AgsInput gboolean set_sync_link, set_async_link; // affects AgsOutput pthread_mutex_t *prev_mutex, *prev_pad_mutex, *current_mutex; auto void ags_audio_set_audio_channels_init_parameters(GType type); auto void ags_audio_set_audio_channels_grow(GType type); auto void ags_audio_set_audio_channels_shrink_zero(); auto void ags_audio_set_audio_channels_shrink(); auto void ags_audio_set_audio_channels_grow_notation(); auto void ags_audio_set_audio_channels_shrink_notation(); void ags_audio_set_audio_channels_init_parameters(GType type){ if(type == AGS_TYPE_OUTPUT){ link_recycling = FALSE; if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) != 0){ alloc_recycling = TRUE; }else{ alloc_recycling = FALSE; if((AGS_AUDIO_INPUT_HAS_RECYCLING & (audio->flags)) != 0){ if((AGS_AUDIO_SYNC & (audio->flags)) != 0 && (AGS_AUDIO_ASYNC & (audio->flags)) == 0){ set_sync_link = FALSE; set_async_link = TRUE; }else if((AGS_AUDIO_ASYNC & (audio->flags)) != 0){ set_async_link = TRUE; set_sync_link = FALSE; }else{ #ifdef AGS_DEBUG g_message("ags_audio_set_audio_channels - warning: AGS_AUDIO_SYNC nor AGS_AUDIO_ASYNC weren't defined\0"); #endif set_sync_link = FALSE; set_async_link = FALSE; } } } }else{ set_sync_link = FALSE; set_async_link = FALSE; if((AGS_AUDIO_INPUT_HAS_RECYCLING & audio->flags) != 0){ alloc_recycling = TRUE; }else{ alloc_recycling = FALSE; } if((AGS_AUDIO_ASYNC & audio->flags) != 0 && alloc_recycling){ link_recycling = TRUE; }else{ link_recycling = FALSE; } } } void ags_audio_set_audio_channels_grow(GType type){ AgsChannel *channel, *start, *current; AgsRecycling *first_recycling, *last_recycling; guint pads; guint i, j; if(type == AGS_TYPE_OUTPUT){ /* AGS_TYPE_OUTPUT */ pads = audio->output_pads; start = audio->output; }else{ /* AGS_TYPE_INPUT */ pads = audio->input_pads; start = audio->input; } /* grow */ for(j = 0; j < pads; j++){ for(i = audio_channels_old; i < audio_channels; i++){ channel = (AgsChannel *) g_object_new(type, "audio\0", (GObject *) audio, "devout\0", audio->devout, NULL); if(start == NULL){ start = channel; if(g_type_is_a(type, AGS_TYPE_OUTPUT)){ audio->output = channel; }else{ audio->input = channel; } } if(j * audio_channels + i != 0){ /* set prev */ channel->prev = ags_channel_nth(start, j * audio_channels + i - 1); pthread_mutex_lock(&(ags_application_mutex)); prev_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel->prev); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(prev_mutex); channel->prev->next = channel; pthread_mutex_unlock(prev_mutex); } if(j != 0){ /* set prev pad */ channel->prev_pad = ags_channel_pad_nth(ags_channel_nth(start, i), j - 1); pthread_mutex_lock(&(ags_application_mutex)); prev_pad_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel->prev_pad); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(prev_pad_mutex); channel->prev_pad->next_pad = channel; pthread_mutex_unlock(prev_pad_mutex); } /* set indices */ channel->pad = j; channel->audio_channel = i; channel->line = j * audio->audio_channels + i; /* reset nested AgsRecycling tree */ if(alloc_recycling){ first_recycling = last_recycling = ags_recycling_new(audio->devout); g_object_ref(first_recycling); first_recycling->channel = (GObject *) channel; ags_channel_set_recycling(channel, first_recycling, last_recycling, TRUE, TRUE); }else if(set_sync_link){ AgsChannel *input; input = ags_channel_nth(audio->input, channel->line); /* set sync link */ if(input != NULL){ first_recycling = input->first_recycling; last_recycling = input->last_recycling; ags_channel_set_recycling(channel, first_recycling, last_recycling, TRUE, TRUE); } }else if(set_async_link){ AgsChannel *input, *input_pad_last; input = ags_channel_nth(audio->input, i); /* set async link */ if(input != NULL){ input_pad_last = ags_channel_pad_last(input); first_recycling = input->first_recycling; last_recycling = input_pad_last->last_recycling; ags_channel_set_recycling(channel, first_recycling, last_recycling, TRUE, TRUE); } } } } } void ags_audio_set_audio_channels_shrink_zero(){ AgsChannel *channel, *start, *channel_next; gboolean first_run; GError *error; start = channel = audio->output; first_run = TRUE; error = NULL; ags_audio_set_audio_channel_shrink_zero0: while(channel != NULL){ ags_channel_set_link(channel, NULL, &error); ags_channel_set_recycling(channel, NULL, NULL, TRUE, TRUE); channel = channel->next; } channel = start; while(channel != NULL){ channel_next = channel->next; g_object_unref((GObject *) channel); channel = channel_next; } if(first_run){ start = channel = audio->input; first_run = FALSE; goto ags_audio_set_audio_channel_shrink_zero0; } audio->output = NULL; audio->input = NULL; } void ags_audio_set_audio_channels_shrink(){ AgsChannel *channel, *start; AgsChannel *channel0, *channel1; AgsRecycling *recycling; guint pads, i, j; gboolean first_run; GError *error; start = channel = audio->output; pads = audio->output_pads; first_run = TRUE; ags_audio_set_audio_channel_shrink0: for(i = 0; i < pads; i++){ channel = ags_channel_nth(channel, audio_channels); for(j = audio_channels; j < audio->audio_channels; j++){ ags_channel_set_link(channel, NULL, &error); channel = channel->next; } } channel = start; if(i < pads){ for(i = 0; ; i++){ for(j = 0; j < audio_channels -1; j++){ channel->pad = i; channel->audio_channel = j; channel->line = i * audio_channels + j; channel = channel->next; } channel->pad = i; channel->audio_channel = j; channel->line = i * audio_channels + j; channel0 = channel->next; for(; j < audio->audio_channels; j++){ channel1 = channel0->next; g_object_unref((GObject *) channel0); channel0 = channel1; } channel->next = channel1; if(channel1 != NULL){ channel1->prev = channel; }else{ break; } channel = channel1; } } if(first_run){ first_run = FALSE; start = channel = audio->input; pads = audio->input_pads; goto ags_audio_set_audio_channel_shrink0; } } void ags_audio_set_audio_channels_grow_notation(){ GList *list; guint i; i = audio->audio_channels; #ifdef AGS_DEBUG g_message("ags_audio_set_audio_channels_grow_notation\n\0"); #endif if(audio->audio_channels == 0){ audio->notation = list = g_list_alloc(); goto ags_audio_set_audio_channels_grow_notation0; }else{ list = g_list_nth(audio->notation, audio->audio_channels - 1); } for(; i < audio_channels; i++){ list->next = g_list_alloc(); list->next->prev = list; list = list->next; ags_audio_set_audio_channels_grow_notation0: list->data = (gpointer) ags_notation_new(i); } } void ags_audio_set_audio_channels_shrink_notation(){ GList *list, *list_next; list = g_list_nth(audio->notation, audio_channels); if(audio_channels == 0){ audio->notation = NULL; }else{ list->prev->next = NULL; } while(list != NULL){ list_next = list->next; g_object_unref((GObject *) list->data); g_list_free1(list); list = list_next; } } /* entry point */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); pthread_mutex_unlock(&(ags_application_mutex)); /* grow / shrink */ if(audio_channels > audio_channels_old){ AgsDevoutPlayDomain *devout_play_domain; AgsChannel *current; guint i; /* grow audio channels */ if((AGS_AUDIO_HAS_NOTATION & (audio->flags)) != 0){ ags_audio_set_audio_channels_grow_notation(); } if(audio->input_pads > 0){ ags_audio_set_audio_channels_init_parameters(AGS_TYPE_INPUT); ags_audio_set_audio_channels_grow(AGS_TYPE_INPUT); } audio->input_lines = audio_channels * audio->input_pads; if(audio->output_pads > 0){ ags_audio_set_audio_channels_init_parameters(AGS_TYPE_OUTPUT); ags_audio_set_audio_channels_grow(AGS_TYPE_OUTPUT); } audio->output_lines = audio_channels * audio->output_pads; /* grow devout play domain */ devout_play_domain = AGS_DEVOUT_PLAY_DOMAIN(audio->devout_play_domain); current = ags_channel_nth(audio->output, audio->audio_channels); if(current != NULL){ for(i = 0; i < audio_channels - audio_channels_old; i++){ devout_play_domain->devout_play = g_list_append(devout_play_domain->devout_play, current->devout_play); current = current->next; } } }else if(audio_channels < audio_channels_old){ AgsDevoutPlayDomain *devout_play_domain; AgsDevoutPlay *devout_play; AgsChannel *current; GList *list; guint i, j; /* shrink audio channels */ if((AGS_AUDIO_HAS_NOTATION & audio->flags) != 0) ags_audio_set_audio_channels_shrink_notation(); if(audio_channels == 0){ ags_audio_set_audio_channels_shrink_zero(); }else{ ags_audio_set_audio_channels_shrink(); } audio->input_lines = audio_channels * audio->input_pads; audio->output_lines = audio_channels * audio->output_pads; /* shrink devout play domain */ devout_play_domain = AGS_DEVOUT_PLAY_DOMAIN(audio->devout_play_domain); list = devout_play_domain->devout_play; for(j = 0; j < audio->output_pads; j++){ for(i = 0; i < audio->audio_channels - audio_channels; i++){ devout_play = g_list_nth_prev(g_list_last(list), (audio->output_pads - j - 1) * audio_channels)->data; devout_play_domain->devout_play = g_list_remove(devout_play_domain->devout_play, devout_play); } } } /* apply new sizes */ audio->audio_channels = audio_channels; // input_lines must be set earlier because set_sync_link needs it } /** * ags_audio_set_audio_channels: * @audio: the #AgsAudio * @audio_channels: new audio channels * * Resize audio channels AgsInput will be allocated first. * * Since: 0.3 */ void ags_audio_set_audio_channels(AgsAudio *audio, guint audio_channels) { AgsMutexManager *mutex_manager; pthread_mutex_t *mutex; /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); /* lock */ pthread_mutex_lock(mutex); if(!AGS_IS_AUDIO(audio)){ pthread_mutex_unlock(mutex); return; } /* emit */ g_object_ref((GObject *) audio); g_signal_emit(G_OBJECT(audio), audio_signals[SET_AUDIO_CHANNELS], 0, audio_channels, audio->audio_channels); g_object_unref((GObject *) audio); /* unlock */ pthread_mutex_unlock(mutex); } /* * resize * AgsInput has to be allocated first */ void ags_audio_real_set_pads(AgsAudio *audio, GType type, guint pads, guint pads_old) { AgsChannel *channel; AgsMutexManager *mutex_manager; gboolean alloc_recycling, link_recycling, set_sync_link, set_async_link; pthread_mutex_t *prev_mutex, *prev_pad_mutex; auto void ags_audio_set_pads_init_parameters(); auto void ags_audio_set_pads_grow(); auto void ags_audio_set_pads_unlink_all(AgsChannel *channel); auto void ags_audio_set_pads_shrink_zero(AgsChannel *channel); auto void ags_audio_set_pads_shrink(AgsChannel *channel); auto void ags_audio_set_pads_alloc_notation(); auto void ags_audio_set_pads_free_notation(); auto void ags_audio_set_pads_add_notes(); auto void ags_audio_set_pads_remove_notes(); void ags_audio_set_pads_init_parameters(){ alloc_recycling = FALSE; link_recycling = FALSE; set_sync_link = FALSE; set_async_link = FALSE; if(type == AGS_TYPE_OUTPUT){ if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) != 0){ alloc_recycling = TRUE; }else{ if((AGS_AUDIO_INPUT_HAS_RECYCLING & (audio->flags)) != 0){ if((AGS_AUDIO_SYNC & (audio->flags)) != 0 && (AGS_AUDIO_ASYNC & (audio->flags)) == 0){ set_async_link = TRUE; }else if((AGS_AUDIO_ASYNC & (audio->flags)) != 0){ set_async_link = TRUE; }else{ #ifdef AGS_DEBUG g_message("ags_audio_set_pads - warning: AGS_AUDIO_SYNC nor AGS_AUDIO_ASYNC weren't defined\0"); #endif } } } }else{ if((AGS_AUDIO_INPUT_HAS_RECYCLING & audio->flags) != 0){ alloc_recycling = TRUE; } if((AGS_AUDIO_ASYNC & audio->flags) != 0 && alloc_recycling){ link_recycling = TRUE; } } } void ags_audio_set_pads_grow(){ AgsChannel *start, *channel; AgsRecycling *first_recycling, *last_recycling; guint i, j; if(g_type_is_a(type, AGS_TYPE_OUTPUT)){ start = audio->output; }else{ start = audio->input; } for(j = pads_old; j < pads; j++){ for(i = 0; i < audio->audio_channels; i++){ channel = (AgsChannel *) g_object_new(type, "audio\0", (GObject *) audio, "devout\0", audio->devout, NULL); if(start == NULL){ /* set first channel in AgsAudio */ if(g_type_is_a(type, AGS_TYPE_OUTPUT)){ start = audio->output = channel; }else{ start = audio->input = channel; } } if(j * audio->audio_channels + i != 0){ /* set prev */ channel->prev = ags_channel_nth(start, j * audio->audio_channels + i - 1); pthread_mutex_lock(&(ags_application_mutex)); prev_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel->prev); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(prev_mutex); channel->prev->next = channel; pthread_mutex_unlock(prev_mutex); } if(j != 0){ /* set prev pad */ channel->prev_pad = ags_channel_pad_nth(ags_channel_nth(start, i), j - 1); pthread_mutex_lock(&(ags_application_mutex)); prev_pad_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel->prev_pad); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(prev_pad_mutex); channel->prev_pad->next_pad = channel; pthread_mutex_unlock(prev_pad_mutex); } /* set indices */ channel->pad = j; channel->audio_channel = i; channel->line = j * audio->audio_channels + i; /* reset nested AgsRecycling tree */ if(alloc_recycling){ first_recycling = last_recycling = ags_recycling_new(audio->devout); g_object_ref(first_recycling); first_recycling->channel = (GObject *) channel; ags_channel_set_recycling(channel, first_recycling, last_recycling, TRUE, TRUE); }else if(set_sync_link){ AgsChannel *input; input = ags_channel_nth(audio->input, channel->line); /* set sync link */ if(input != NULL){ first_recycling = input->first_recycling; last_recycling = input->last_recycling; ags_channel_set_recycling(channel, first_recycling, last_recycling, TRUE, TRUE); } }else if(set_async_link){ AgsChannel *input, *input_pad_last; input = ags_channel_nth(audio->input, i); /* set async link */ if(input != NULL){ input_pad_last = ags_channel_pad_last(input); first_recycling = input->first_recycling; last_recycling = input_pad_last->last_recycling; ags_channel_set_recycling(channel, first_recycling, last_recycling, TRUE, TRUE); } } } } } void ags_audio_set_pads_unlink_all(AgsChannel *channel){ GError *error; while(channel != NULL){ error = NULL; ags_channel_set_link(channel, NULL, &error); if(error != NULL){ g_error("%s\0", error->message); } channel = channel->next; } } void ags_audio_set_pads_shrink_zero(AgsChannel *channel){ AgsChannel *channel_next; while(channel != NULL){ channel_next = channel->next; g_object_unref((GObject *) channel); channel = channel_next; } } void ags_audio_set_pads_shrink(AgsChannel *channel){ AgsChannel *current; guint i; if(channel != NULL){ channel = channel->prev_pad; } current = ags_channel_pad_nth(channel, pads); ags_audio_set_pads_shrink_zero(channel); /* remove pads */ channel = current; if(current != NULL){ for(i = 0; i < audio->audio_channels; i++){ channel->next_pad = NULL; /* iterate */ channel = channel->next; } /* remove channel */ current = ags_channel_nth(current, audio->audio_channels - 1); current->next = NULL; } } void ags_audio_set_pads_alloc_notation(){ GList *list; guint i; #ifdef AGS_DEBUG g_message("ags_audio_set_pads_alloc_notation\n\0"); #endif if(audio->audio_channels > 0){ audio->notation = list = g_list_alloc(); i = 0; goto ags_audio_set_pads_alloc_notation0; }else{ return; } for(; i < audio->audio_channels; i++){ list->next = g_list_alloc(); list->next->prev = list; list = list->next; ags_audio_set_pads_alloc_notation0: list->data = (gpointer) ags_notation_new(i); } } void ags_audio_set_pads_free_notation(){ GList *list, *list_next; if(audio->audio_channels > 0){ list = audio->notation; audio->notation = NULL; }else{ return; } while(list != NULL){ list_next = list->next; g_object_unref(G_OBJECT(list->data)); g_list_free1(list); list = list_next; } } void ags_audio_set_pads_add_notes(){ /* -- useless -- GList *list; list = audio->notation; while(list != NULL){ AGS_NOTATION(list->data)->pads = pads; list = list->next; } */ } void ags_audio_set_pads_remove_notes(){ AgsNotation *notation; GList *notation_i, *note, *note_next; notation_i = audio->notation; while(notation_i != NULL){ notation = AGS_NOTATION(notation_i->data); note = notation->notes; while(note != NULL){ note_next = note->next; if(AGS_NOTE(note->data)->y >= pads){ if(note->prev != NULL) note->prev->next = note_next; else notation->notes = note_next; if(note_next != NULL) note_next->prev = note->prev; free(note->data); g_list_free1(note); } note = note_next; } notation_i = notation_i->next; } } /* entry point */ ags_audio_set_pads_init_parameters(); pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); pthread_mutex_unlock(&(ags_application_mutex)); if(g_type_is_a(type, AGS_TYPE_OUTPUT)){ /* output */ pads_old = audio->output_pads; if(pads_old == pads){ return; } if(audio->audio_channels == 0){ audio->output_pads = pads; return; } /* grow or shrink */ if(pads > audio->output_pads){ AgsDevoutPlayDomain *devout_play_domain; AgsChannel *current; guint i, j; /* instantiate notation */ if(pads_old == 0){ if((AGS_AUDIO_NOTATION_DEFAULT & (audio->flags)) == 0){ ags_audio_set_pads_alloc_notation(); } } /* grow channels */ ags_audio_set_pads_grow(); /* alloc devout play domain */ devout_play_domain = AGS_DEVOUT_PLAY_DOMAIN(audio->devout_play_domain); current = audio->output; current = ags_channel_pad_nth(current, pads_old); for(j = pads_old; j < pads; j++){ for(i = 0; i < audio->audio_channels; i++){ devout_play_domain->devout_play = g_list_append(devout_play_domain->devout_play, current->devout_play); current = current->next; } } }else if(pads == 0){ if((AGS_AUDIO_HAS_NOTATION & (audio->flags)) != 0 && audio->notation != NULL){ ags_audio_set_pads_free_notation(); } channel = audio->output; /* unlink and remove */ ags_audio_set_pads_unlink_all(channel); ags_audio_set_pads_shrink_zero(channel); audio->output = NULL; /* remove devout play domain */ g_list_free(AGS_DEVOUT_PLAY_DOMAIN(audio->devout_play_domain)->devout_play); AGS_DEVOUT_PLAY_DOMAIN(audio->devout_play_domain)->devout_play = NULL; }else if(pads < audio->output_pads){ AgsDevoutPlayDomain *devout_play_domain; guint i; ags_audio_set_pads_remove_notes(); channel = ags_channel_pad_nth(channel, pads); ags_audio_set_pads_unlink_all(channel); ags_audio_set_pads_shrink(channel); devout_play_domain = AGS_DEVOUT_PLAY_DOMAIN(audio->devout_play_domain); for(i = 0; i < audio->output_pads - pads; i++){ AgsDevoutPlay *devout_play; devout_play = g_list_last(devout_play_domain->devout_play); devout_play_domain->devout_play = g_list_remove(devout_play_domain->devout_play, devout_play); } } /* apply new size */ audio->output_pads = pads; audio->output_lines = pads * audio->audio_channels; if((AGS_AUDIO_SYNC & audio->flags) != 0 && (AGS_AUDIO_ASYNC & audio->flags) == 0){ //TODO:JK: fix me // audio->input_pads = pads; // audio->input_lines = pads * audio->audio_channels; } }else if(g_type_is_a(type, AGS_TYPE_INPUT)){ /* input */ if(pads_old == pads){ return; } if(audio->audio_channels == 0){ audio->input_pads = pads; return; } /* grow or shrink */ if(pads > pads_old){ /* instantiate notation */ if(pads_old == 0){ if((AGS_AUDIO_NOTATION_DEFAULT & (audio->flags)) != 0){ ags_audio_set_pads_alloc_notation(); } } /* grow channels */ ags_audio_set_pads_grow(); }else if(pads < pads_old){ if(pads == 0){ channel = audio->input; /* shrink channels */ ags_audio_set_pads_unlink_all(channel); ags_audio_set_pads_shrink_zero(channel); audio->input = NULL; }else{ channel = ags_channel_pad_nth(channel, pads); /* shrink channels */ ags_audio_set_pads_unlink_all(channel); ags_audio_set_pads_shrink(channel); } } /* apply new allocation */ audio->input_pads = pads; audio->input_lines = pads * audio->audio_channels; }else{ g_warning("unknown channel type\0"); } } /** * ags_audio_set_pads: * @audio: an #AgsAudio * @type: AGS_TYPE_INPUT or AGS_TYPE_OUTPUT * @pads: new pad count * * Sets pad count for the apropriate @type * * Since: 0.3 */ void ags_audio_set_pads(AgsAudio *audio, GType type, guint pads) { AgsMutexManager *mutex_manager; pthread_mutex_t *mutex; guint pads_old; /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(mutex); if(!AGS_IS_AUDIO(audio)){ pthread_mutex_unlock(mutex); return; } /* emit */ g_object_ref((GObject *) audio); pads_old = ((g_type_is_a(type, AGS_TYPE_OUTPUT)) ? audio->output_pads: audio->input_pads); g_signal_emit(G_OBJECT(audio), audio_signals[SET_PADS], 0, type, pads, pads_old); g_object_unref((GObject *) audio); pthread_mutex_unlock(mutex); } /** * ags_audio_set_sequence_length: * @audio: an #AgsAudio * @sequence_length: the sequence length * * Sets sequence length. * * Since: 0.4 */ void ags_audio_set_sequence_length(AgsAudio *audio, guint sequence_length) { audio->sequence_length = sequence_length; } /** * ags_audio_add_recycling_container: * @audio: an #AgsAudio * @recycling_container: the #AgsRecyclingContainer * * Adds a recycling container. * * Since: 0.4 */ void ags_audio_add_recycling_container(AgsAudio *audio, GObject *recycling_container) { AgsMutexManager *mutex_manager; pthread_mutex_t *mutex; /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); /* add recycling container */ pthread_mutex_lock(mutex); g_object_ref(recycling_container); audio->recycling_container = g_list_prepend(audio->recycling_container, recycling_container); pthread_mutex_unlock(mutex); } /** * ags_audio_remove_recycling_container: * @audio: an #AgsAudio * @recycling_container: the #AgsRecyclingContainer * * Removes a recycling container. * * Since: 0.4 */ void ags_audio_remove_recycling_container(AgsAudio *audio, GObject *recycling_container) { AgsMutexManager *mutex_manager; pthread_mutex_t *mutex; /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); /* remove recycling container */ pthread_mutex_lock(mutex); audio->recycling_container = g_list_remove(audio->recycling_container, recycling_container); g_object_unref(recycling_container); pthread_mutex_unlock(mutex); } /** * ags_audio_add_recall_id: * @audio: an #AgsAudio * @recall_id: the #AgsRecallID * * Adds a recall id. * * Since: 0.4 */ void ags_audio_add_recall_id(AgsAudio *audio, GObject *recall_id) { AgsMutexManager *mutex_manager; pthread_mutex_t *mutex; /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); /* add recall id */ pthread_mutex_lock(mutex); g_object_ref(recall_id); audio->recall_id = g_list_prepend(audio->recall_id, recall_id); pthread_mutex_unlock(mutex); } /** * ags_audio_remove_recall_id: * @audio: an #AgsAudio * @recall_id: the #AgsRecallID * * Removes a recall id. * * Since: 0.4 */ void ags_audio_remove_recall_id(AgsAudio *audio, GObject *recall_id) { AgsMutexManager *mutex_manager; pthread_mutex_t *mutex; /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); /* remove recall id */ pthread_mutex_lock(mutex); audio->recall_id = g_list_remove(audio->recall_id, recall_id); g_object_unref(recall_id); pthread_mutex_unlock(mutex); } /** * ags_audio_add_recall_container: * @audio: an #AgsAudio * @recall_container: the #AgsRecallContainer * * Adds a recall container. * * Since: 0.4 */ void ags_audio_add_recall_container(AgsAudio *audio, GObject *recall_container) { AgsMutexManager *mutex_manager; pthread_mutex_t *mutex; /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); /* add recall container */ pthread_mutex_lock(mutex); g_object_ref(recall_container); audio->container = g_list_prepend(audio->container, recall_container); pthread_mutex_unlock(mutex); } /** * ags_audio_remove_recall_container: * @audio: an #AgsAudio * @recall_container: the #AgsRecallContainer * * Removes a recall container. * * Since: 0.4 */ void ags_audio_remove_recall_container(AgsAudio *audio, GObject *recall_container) { AgsMutexManager *mutex_manager; pthread_mutex_t *mutex; /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); /* remove recall container */ pthread_mutex_lock(mutex); audio->container = g_list_remove(audio->container, recall_container); g_object_unref(recall_container); pthread_mutex_unlock(mutex); } /** * ags_audio_add_recall: * @audio: an #AgsAudio * @recall_container: the #AgsRecall * @play: %TRUE if simple playback. * * Adds a recall. * * Since: 0.4 */ void ags_audio_add_recall(AgsAudio *audio, GObject *recall, gboolean play) { AgsMutexManager *mutex_manager; pthread_mutex_t *mutex; /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); /* add recall */ pthread_mutex_lock(mutex); g_object_ref(G_OBJECT(recall)); if(play){ audio->play = g_list_prepend(audio->play, recall); }else{ audio->recall = g_list_prepend(audio->recall, recall); } pthread_mutex_unlock(mutex); } /** * ags_audio_remove_recall: * @audio: an #AgsAudio * @recall_container: the #AgsRecall * @play: %TRUE if simple playback. * * Removes a recall. * * Since: 0.4 */ void ags_audio_remove_recall(AgsAudio *audio, GObject *recall, gboolean play) { AgsMutexManager *mutex_manager; pthread_mutex_t *mutex; /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); /* remove recall */ pthread_mutex_lock(mutex); if(play){ audio->play = g_list_remove(audio->play, recall); }else{ audio->recall = g_list_remove(audio->recall, recall); } g_object_unref(G_OBJECT(recall)); pthread_mutex_unlock(mutex); } /** * ags_audio_init_run: * @audio: an #AgsAudio * * Is emitted as audio is initialized. * * Returns: the current #AgsRecallID * * Since: 0.4 */ AgsRecallID* ags_audio_init_run(AgsAudio *audio) { AgsRecallID *recall_id; AgsMutexManager *mutex_manager; pthread_mutex_t *mutex; /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(mutex); if(!AGS_IS_AUDIO(audio)){ pthread_mutex_unlock(mutex); return; } /* emit */ g_object_ref((GObject *) audio); g_signal_emit(G_OBJECT(audio), audio_signals[INIT_RUN], 0, &recall_id); g_object_unref((GObject *) audio); pthread_mutex_unlock(mutex); return(recall_id); } /** * ags_audio_duplicate_recall: * @audio: an #AgsAudio * @recall_id: an #AgsRecallID * * Duplicate all #AgsRecall templates of this #AgsAudio. * * Since: 0.4 */ void ags_audio_duplicate_recall(AgsAudio *audio, AgsRecallID *recall_id) { AgsRecall *recall, *copy; GList *list_recall_start, *list_recall; gboolean playback, sequencer, notation; AgsMutexManager *mutex_manager; pthread_mutex_t *mutex; if(audio == NULL || recall_id == NULL){ return; } /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); /* initial checks */ pthread_mutex_lock(mutex); #ifdef AGS_DEBUG g_message("ags_audio_duplicate_recall: %s - audio.lines[%u,%u]\n\0", G_OBJECT_TYPE_NAME(audio->machine), audio->output_lines, audio->input_lines); #endif playback = FALSE; sequencer = FALSE; notation = FALSE; if((AGS_RECALL_ID_PLAYBACK & (recall_id->flags)) != 0){ playback = TRUE; } if((AGS_RECALL_ID_SEQUENCER & (recall_id->flags)) != 0){ sequencer = TRUE; } if((AGS_RECALL_ID_NOTATION & (recall_id->flags)) != 0){ notation = TRUE; } /* get the appropriate list */ if(recall_id->recycling_container->parent == NULL){ list_recall = g_list_copy(audio->play); list_recall_start = list_recall = g_list_reverse(list_recall); }else{ list_recall = g_list_copy(audio->recall); list_recall_start = list_recall = g_list_reverse(list_recall); } /* notify run */ // ags_recall_notify_dependency(AGS_RECALL(list_recall->data), AGS_RECALL_NOTIFY_RUN, 1); /* return if already played */ if((AGS_RECALL_ID_PRE & (recall_id->flags)) != 0 || (AGS_RECALL_ID_INTER & (recall_id->flags)) != 0 || (AGS_RECALL_ID_POST & (recall_id->flags)) != 0){ pthread_mutex_unlock(mutex); return; } ags_recall_id_set_run_stage(recall_id, 0); ags_recall_id_set_run_stage(recall_id, 1); ags_recall_id_set_run_stage(recall_id, 2); /* duplicate */ while(list_recall != NULL){ recall = AGS_RECALL(list_recall->data); if((AGS_RECALL_RUN_INITIALIZED & (recall->flags)) != 0 || AGS_IS_RECALL_AUDIO(recall) || !((playback && (AGS_RECALL_PLAYBACK & (recall->flags)) != 0) || (sequencer && (AGS_RECALL_SEQUENCER & (recall->flags)) != 0) || (notation && (AGS_RECALL_NOTATION & (recall->flags)) != 0)) || recall->recall_id != NULL){ list_recall = list_recall->next; continue; } /* duplicate template only once */ if((AGS_RECALL_TEMPLATE & (recall->flags)) != 0){ /* duplicate the recall */ copy = ags_recall_duplicate(recall, recall_id); if(copy == NULL){ /* iterate */ list_recall = list_recall->next; continue; } /* notify run */ ags_recall_notify_dependency(copy, AGS_RECALL_NOTIFY_RUN, 1); #ifdef AGS_DEBUG g_message("recall duplicated: %s\n\0", G_OBJECT_TYPE_NAME(copy)); #endif /* set appropriate flag */ if(playback){ ags_recall_set_flags(copy, AGS_RECALL_PLAYBACK); }else if(sequencer){ ags_recall_set_flags(copy, AGS_RECALL_SEQUENCER); }else if(notation){ ags_recall_set_flags(copy, AGS_RECALL_NOTATION); } /* append to AgsAudio */ ags_audio_add_recall(audio, copy, ((recall_id->recycling_container->parent == NULL) ? TRUE: FALSE)); /* connect */ ags_connectable_connect(AGS_CONNECTABLE(copy)); } /* iterate */ list_recall = list_recall->next; } pthread_mutex_unlock(mutex); g_list_free(list_recall_start); } /** * ags_audio_init_recall: * @audio: the #AgsAudio * @stage: stage benning at 0 up to 2, or just -1 * @recall_id: the #AgsRecallID to use or #NULL * * Initializes the recalls of @audio * * Since: 0.4 */ void ags_audio_init_recall(AgsAudio *audio, gint stage, AgsRecallID *recall_id) { AgsRecall *recall; GList *list_recall; AgsMutexManager *mutex_manager; pthread_mutex_t *mutex; if(audio == NULL || recall_id == NULL){ return; } /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(mutex); /* check for init */ /* return if already initialized */ switch(stage){ case 0: if((AGS_RECALL_ID_INIT_PRE & (recall_id->flags)) != 0){ pthread_mutex_unlock(mutex); return; } break; case 1: if((AGS_RECALL_ID_INIT_INTER & (recall_id->flags)) != 0){ pthread_mutex_unlock(mutex); return; } break; case 2: if((AGS_RECALL_ID_INIT_POST & (recall_id->flags)) != 0){ pthread_mutex_unlock(mutex); return; } break; } /* retrieve appropriate recalls */ if(recall_id->recycling_container->parent == NULL) list_recall = audio->play; else list_recall = audio->recall; /* init */ while(list_recall != NULL){ recall = AGS_RECALL(list_recall->data); if(recall->recall_id == NULL || recall->recall_id->recycling_container != recall_id->recycling_container || AGS_IS_RECALL_AUDIO(recall)){ list_recall = list_recall->next; continue; } if((AGS_RECALL_TEMPLATE & (recall->flags)) == 0){ if(stage == 0){ recall_id->flags |= AGS_RECALL_ID_INIT_PRE; ags_dynamic_connectable_connect_dynamic(AGS_DYNAMIC_CONNECTABLE(recall)); recall->flags &= (~AGS_RECALL_HIDE); ags_recall_run_init_pre(recall); recall->flags &= (~AGS_RECALL_REMOVE); }else if(stage == 1){ recall_id->flags |= AGS_RECALL_ID_INIT_INTER; ags_recall_run_init_inter(recall); }else{ recall_id->flags |= AGS_RECALL_ID_INIT_POST; ags_recall_run_init_post(recall); } } list_recall = list_recall->next; } pthread_mutex_unlock(mutex); } /** * ags_audio_resolve_recall: * @audio: the #AgsAudio * @recall_id: the #AgsRecallID to use * * Performs resolving of recalls. * * Since: 0.4 */ void ags_audio_resolve_recall(AgsAudio *audio, AgsRecallID *recall_id) { AgsRecall *recall; GList *list_recall; AgsMutexManager *mutex_manager; pthread_mutex_t *mutex; if(audio == NULL || recall_id == NULL){ return; } /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(mutex); /* return if already duplicated */ if((AGS_RECALL_ID_RESOLVE & (recall_id->flags)) != 0){ pthread_mutex_unlock(mutex); return; } /* get the appropriate lists */ if(recall_id->recycling_container->parent == NULL){ list_recall = audio->play; }else{ list_recall = audio->recall; } /* resolve */ while((list_recall = ags_recall_find_recycling_container(list_recall, (GObject *) recall_id->recycling_container)) != NULL){ recall = AGS_RECALL(list_recall->data); ags_recall_resolve_dependencies(recall); list_recall = list_recall->next; } pthread_mutex_unlock(mutex); } /** * ags_audio_is_playing: * @audio: the #AgsAudio * * Determine if #AgsAudio is playing. * * Returns: TRUE if it's playing otherwise FALSE * * Since: 0.4 */ gboolean ags_audio_is_playing(AgsAudio *audio) { AgsChannel *output; AgsRecallID *recall_id; AgsDevoutPlay *devout_play; AgsMutexManager *mutex_manager; pthread_mutex_t *mutex; /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); /* check if playing */ pthread_mutex_lock(mutex); output = audio->output; while(output != NULL){ devout_play = AGS_DEVOUT_PLAY(output->devout_play); if((AGS_DEVOUT_PLAY_PLAYBACK & (g_atomic_int_get(&(devout_play->flags)))) != 0 || (AGS_DEVOUT_PLAY_SEQUENCER & (g_atomic_int_get(&(devout_play->flags)))) != 0 || (AGS_DEVOUT_PLAY_NOTATION & (g_atomic_int_get(&(devout_play->flags)))) != 0){ pthread_mutex_unlock(mutex); return(TRUE); } output = output->next; } pthread_mutex_unlock(mutex); return(FALSE); } /** * ags_audio_play: * @audio: the #AgsAudio * @recall_id: the #AgsRecallID to apply to * @stage: valid range is from 0 up to 2 * * Performs on single play call of appropriate stage. * * Since: 0.4 */ void ags_audio_play(AgsAudio *audio, AgsRecallID *recall_id, gint stage) { AgsRecall *recall; GList *list, *list_next; AgsMutexManager *mutex_manager; pthread_mutex_t *mutex; if(audio == NULL || recall_id == NULL){ return; } /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(mutex); /* check for status */ if((AGS_RECALL_ID_PRE & (recall_id->flags)) != 0 && (AGS_RECALL_ID_INTER & (recall_id->flags)) != 0 && (AGS_RECALL_ID_POST & (recall_id->flags)) != 0){ recall_id->flags &= (~(AGS_RECALL_ID_PRE | AGS_RECALL_ID_INTER | AGS_RECALL_ID_POST)); } /* return if already played */ switch(stage){ case 0: ags_recall_id_unset_run_stage(recall_id, 1); if((AGS_RECALL_ID_PRE & (recall_id->flags)) != 0){ pthread_mutex_unlock(mutex); return; } break; case 1: ags_recall_id_unset_run_stage(recall_id, 2); if((AGS_RECALL_ID_INTER & (recall_id->flags)) != 0){ pthread_mutex_unlock(mutex); return; } break; case 2: ags_recall_id_unset_run_stage(recall_id, 0); if((AGS_RECALL_ID_POST & (recall_id->flags)) != 0){ pthread_mutex_unlock(mutex); return; } break; } ags_recall_id_set_run_stage(recall_id, stage); /* retrieve appropriate recalls */ if(recall_id->recycling_container->parent == NULL) list = audio->play; else list = audio->recall; /* play */ while(list != NULL){ list_next = list->next; recall = AGS_RECALL(list->data); if(recall == NULL){ if(recall_id->recycling_container->parent != NULL){ audio->recall = g_list_remove(audio->recall, recall); }else{ audio->play = g_list_remove(audio->play, recall); } g_warning("recall == NULL\0"); list = list_next; continue; } if((AGS_RECALL_TEMPLATE & (recall->flags)) != 0 || recall->recall_id == NULL || (recall->recall_id->recycling_container != recall_id->recycling_container) || AGS_IS_RECALL_AUDIO(recall)){ list = list_next; continue; } if((AGS_RECALL_HIDE & (recall->flags)) == 0){ if(stage == 0) ags_recall_run_pre(recall); else if(stage == 1) ags_recall_run_inter(recall); else ags_recall_run_post(recall); } list = list_next; } pthread_mutex_unlock(mutex); } /** * ags_audio_tact: * @audio: an #AgsAudio * @recall_id: the current #AgsRecallID * * Is emitted as audio is played. * * Since: 0.4 */ void ags_audio_tact(AgsAudio *audio, AgsRecallID *recall_id) { AgsMutexManager *mutex_manager; pthread_mutex_t *mutex; /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(mutex); if(!AGS_IS_AUDIO(audio)){ pthread_mutex_unlock(mutex); return; } /* emit */ g_object_ref((GObject *) audio); g_signal_emit(G_OBJECT(audio), audio_signals[TACT], 0, recall_id); g_object_unref((GObject *) audio); pthread_mutex_unlock(mutex); } /** * ags_audio_done: * @audio: an #AgsAudio * @recall_id: the current #AgsRecallID * * Is emitted as playing audio is done. * * Since: 0.4 */ void ags_audio_done(AgsAudio *audio, AgsRecallID *recall_id) { AgsMutexManager *mutex_manager; pthread_mutex_t *mutex; /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(mutex); if(!AGS_IS_AUDIO(audio)){ pthread_mutex_unlock(mutex); return; } /* emit */ g_object_ref((GObject *) audio); g_signal_emit(G_OBJECT(audio), audio_signals[DONE], 0, recall_id); g_object_unref((GObject *) audio); pthread_mutex_unlock(mutex); } /** * ags_audio_cancel: * @audio: the #AgsAudio * @recall_id: the #AgsRecallID to apply to * * Cancel processing audio data. * * Since: 0.4 */ void ags_audio_cancel(AgsAudio *audio, AgsRecallID *recall_id) { AgsRecall *recall; GList *list, *list_next; AgsMutexManager *mutex_manager; pthread_mutex_t *mutex; if(audio == NULL || recall_id == NULL){ return; } /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); /* cancel recalls */ pthread_mutex_lock(mutex); if(recall_id->recycling_container->parent == NULL){ list = audio->play; }else{ list = audio->recall; } g_object_ref(recall_id); while(list != NULL){ list_next = list->next; recall = AGS_RECALL(list->data); if((AGS_RECALL_TEMPLATE & (recall->flags)) || recall->recall_id == NULL || recall->recall_id->recycling_container != recall_id->recycling_container){ list = list_next; continue; } g_object_ref(recall_id); g_object_ref(recall); ags_recall_cancel(recall); list = list_next; } pthread_mutex_unlock(mutex); } /** * ags_audio_remove: * @audio: the #AgsAudio * @recall_id: the #AgsRecallID to apply to * * Remove processing audio data. * * Since: 0.4 */ void ags_audio_remove(AgsAudio *audio, AgsRecallID *recall_id) { AgsRecall *recall; GList *list, *list_next; gboolean play; AgsMutexManager *mutex_manager; pthread_mutex_t *mutex; if(audio == NULL || recall_id == NULL){ return; } /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); /* remove recalls */ pthread_mutex_lock(mutex); if(recall_id->recycling_container->parent == NULL){ list = audio->play; play = TRUE; }else{ list = audio->recall; play = FALSE; } while(list != NULL){ list_next = list->next; recall = AGS_RECALL(list->data); if((AGS_RECALL_TEMPLATE & (recall->flags)) || recall->recall_id == NULL || recall->recall_id->recycling_container != recall_id->recycling_container){ list = list_next; continue; } ags_recall_remove(recall); ags_audio_remove_recall(audio, recall, play); list = list_next; } audio->recall_id = g_list_remove(audio->recall_id, recall_id); g_object_unref(recall_id); pthread_mutex_unlock(mutex); } /** * ags_audio_find_port: * @audio: an #AgsAudio * * Retrieve all ports of #AgsAudio. * * Returns: a new #GList containing #AgsPort * * Since: 0.4 */ GList* ags_audio_find_port(AgsAudio *audio) { GList *recall; GList *list; AgsMutexManager *mutex_manager; pthread_mutex_t *mutex; pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(mutex); list = NULL; /* collect port of playing recall */ recall = audio->play; while(recall != NULL){ if(AGS_RECALL(recall->data)->port != NULL){ if(list == NULL){ list = g_list_copy(AGS_RECALL(recall->data)->port); }else{ if(AGS_RECALL(recall->data)->port != NULL){ list = g_list_concat(list, g_list_copy(AGS_RECALL(recall->data)->port)); } } } recall = recall->next; } /* the same for true recall */ recall = audio->recall; while(recall != NULL){ if(AGS_RECALL(recall->data)->port != NULL){ if(list == NULL){ list = g_list_copy(AGS_RECALL(recall->data)->port); }else{ if(AGS_RECALL(recall->data)->port != NULL){ list = g_list_concat(list, g_list_copy(AGS_RECALL(recall->data)->port)); } } } recall = recall->next; } /* */ list = g_list_reverse(list); pthread_mutex_unlock(mutex); return(list); } /** * ags_audio_open_files: * @audio: the #AgsAudio * @filenames: the files to open * @overwrite_channels: if existing channels should be assigned * @create_channels: if new channels should be created as not fitting if combined with @overwrite_channels * * Open some files. * * Since: 0.4 */ void ags_audio_open_files(AgsAudio *audio, GSList *filenames, gboolean overwrite_channels, gboolean create_channels) { AgsChannel *channel; AgsAudioFile *audio_file; AgsAudioSignal *audio_signal_source_old; AgsMutexManager *mutex_manager; GList *audio_signal_list; guint i, j; guint list_length; GError *error; pthread_mutex_t *mutex, *channel_mutex, *recycling_mutex; /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(mutex); channel = audio->input; /* overwriting existing channels */ if(overwrite_channels){ if(channel != NULL){ for(i = 0; i < audio->input_pads && filenames != NULL; i++){ audio_file = ags_audio_file_new((gchar *) filenames->data, (AgsDevout *) audio->devout, 0, audio->audio_channels); if(!ags_audio_file_open(audio_file)){ filenames = filenames->next; continue; } ags_audio_file_read_audio_signal(audio_file); ags_audio_file_close(audio_file); audio_signal_list = audio_file->audio_signal; for(j = 0; j < audio->audio_channels && audio_signal_list != NULL; j++){ /* create task */ error = NULL; ags_channel_set_link(channel, NULL, &error); if(error != NULL){ g_warning("%s\0", error->message); } /* lock channel and recycling */ pthread_mutex_lock(&(ags_application_mutex)); channel_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); recycling_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel->first_recycling); pthread_mutex_unlock(&(ags_application_mutex)); /* replace template audio signal */ pthread_mutex_lock(channel_mutex); pthread_mutex_lock(recycling_mutex); AGS_AUDIO_SIGNAL(audio_signal_list->data)->flags |= AGS_AUDIO_SIGNAL_TEMPLATE; AGS_AUDIO_SIGNAL(audio_signal_list->data)->recycling = (GObject *) channel->first_recycling; audio_signal_source_old = ags_audio_signal_get_template(channel->first_recycling->audio_signal); ags_recycling_remove_audio_signal(channel->first_recycling, (gpointer) audio_signal_source_old); ags_recycling_add_audio_signal(channel->first_recycling, audio_signal_list->data); g_object_unref(G_OBJECT(audio_signal_source_old)); /* iterate */ audio_signal_list = audio_signal_list->next; channel = channel->next; pthread_mutex_unlock(recycling_mutex); pthread_mutex_unlock(channel_mutex); } if(audio_file->channels < audio->audio_channels) channel = ags_channel_nth(channel, audio->audio_channels - audio_file->channels); filenames = filenames->next; } } } /* appending to channels */ if(create_channels && filenames != NULL){ list_length = g_slist_length(filenames); ags_audio_set_pads((AgsAudio *) audio, AGS_TYPE_INPUT, list_length + AGS_AUDIO(audio)->input_pads); channel = ags_channel_nth(AGS_AUDIO(audio)->input, (AGS_AUDIO(audio)->input_pads - list_length) * AGS_AUDIO(audio)->audio_channels); while(filenames != NULL){ audio_file = ags_audio_file_new((gchar *) filenames->data, (AgsDevout *) audio->devout, 0, audio->audio_channels); if(!ags_audio_file_open(audio_file)){ filenames = filenames->next; continue; } ags_audio_file_read_audio_signal(audio_file); ags_audio_file_close(audio_file); audio_signal_list = audio_file->audio_signal; for(j = 0; j < audio->audio_channels && audio_signal_list != NULL; j++){ /* lock channel and recycling */ pthread_mutex_lock(&(ags_application_mutex)); channel_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); recycling_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel->first_recycling); pthread_mutex_unlock(&(ags_application_mutex)); /* replace template audio signal */ pthread_mutex_lock(channel_mutex); pthread_mutex_lock(recycling_mutex); AGS_AUDIO_SIGNAL(audio_signal_list->data)->flags |= AGS_AUDIO_SIGNAL_TEMPLATE; AGS_AUDIO_SIGNAL(audio_signal_list->data)->recycling = (GObject *) channel->first_recycling; audio_signal_source_old = ags_audio_signal_get_template(channel->first_recycling->audio_signal); ags_recycling_remove_audio_signal(channel->first_recycling, (gpointer) audio_signal_source_old); ags_recycling_add_audio_signal(channel->first_recycling, audio_signal_list->data); g_object_unref(G_OBJECT(audio_signal_source_old)); /* iterate */ audio_signal_list = audio_signal_list->next; channel = channel->next; pthread_mutex_unlock(recycling_mutex); pthread_mutex_unlock(channel_mutex); } if(audio->audio_channels > audio_file->channels) channel = ags_channel_nth(channel, audio->audio_channels - audio_file->channels); filenames = filenames->next; } } pthread_mutex_unlock(mutex); } /** * ags_audio_recursive_play_init: * @audio: the #AgsAudio object * @playback: if doing playback * @sequencer: if doing sequencer * @notation: if doing notation * * Initializes #AgsAudio in order to do playback, sequencer or notation. * * Returns: a list containing all #AgsRecallID * * Since: 0.4 */ GList* ags_audio_recursive_play_init(AgsAudio *audio, gboolean playback, gboolean sequencer, gboolean notation) { AgsChannel *channel; AgsRecallID *recall_id; AgsMutexManager *mutex_manager; GList *list, *list_start; gint stage; gboolean arrange_recall_id, duplicate_templates, resolve_dependencies; pthread_mutex_t *mutex, *channel_mutex; if(audio == NULL){ return; } /* lookup mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); /* recurisive init playback */ pthread_mutex_lock(mutex); list = NULL; list_start = NULL; for(stage = 0; stage < 3; stage++){ channel = audio->output; list = list_start; if(stage == 0){ arrange_recall_id = TRUE; duplicate_templates = TRUE; resolve_dependencies = TRUE; }else{ arrange_recall_id = FALSE; duplicate_templates = FALSE; resolve_dependencies = FALSE; } while(channel != NULL){ if(stage == 0){ recall_id = ags_channel_recursive_play_init(channel, stage, arrange_recall_id, duplicate_templates, playback, sequencer, notation, resolve_dependencies, NULL); list_start = g_list_append(list_start, recall_id); }else{ ags_channel_recursive_play_init(channel, stage, arrange_recall_id, duplicate_templates, playback, sequencer, notation, resolve_dependencies, AGS_RECALL_ID(list->data)); list = list->next; } /* iterate */ pthread_mutex_lock(&(ags_application_mutex)); channel_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(channel_mutex); channel = channel->next; pthread_mutex_unlock(channel_mutex); } } pthread_mutex_unlock(mutex); return(list_start); } /** * ags_audio_new: * @devout: an #AgsDevout * * Creates an #AgsAudio, with defaults of @devout. * * Returns: a new #AgsAudio * * Since: 0.3 */ AgsAudio* ags_audio_new(AgsDevout *devout) { AgsAudio *audio; audio = (AgsAudio *) g_object_new(AGS_TYPE_AUDIO, "devout\0", devout, NULL); return(audio); } gsequencer-0.6.37/src/ags/audio/ags_timestamp.h0000644000175000017500000000374312626272146016360 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_TIMESTAMP_H__ #define __AGS_TIMESTAMP_H__ #include #include #define AGS_TYPE_TIMESTAMP (ags_timestamp_get_type()) #define AGS_TIMESTAMP(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_TIMESTAMP, AgsTimestamp)) #define AGS_TIMESTAMP_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_TIMESTAMP, AgsTimestampClass)) #define AGS_IS_TIMESTAMP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_TIMESTAMP)) #define AGS_IS_TIMESTAMP_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_TIMESTAMP)) #define AGS_TIMESTAMP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_TIMESTAMP, AgsTimestampClass)) typedef struct _AgsTimestamp AgsTimestamp; typedef struct _AgsTimestampClass AgsTimestampClass; typedef enum{ AGS_TIMESTAMP_UNIX = 1, AGS_TIMESTAMP_OUTDATED = 1 << 1, }AgsTimestampFlags; struct _AgsTimestamp { GObject object; guint flags; union{ struct _unix{ time_t time_val; }unix_time; }timer; guint delay; guint attack; }; struct _AgsTimestampClass { GObjectClass object; }; GType ags_timestamp_get_type(void); /* */ AgsTimestamp* ags_timestamp_new(); #endif /*__AGS_TIMESTAMP_H__*/ gsequencer-0.6.37/src/ags/audio/ags_config.c0000644000175000017500000003436212626272146015616 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include void ags_config_class_init(AgsConfigClass *config_class); void ags_config_connectable_interface_init(AgsConnectableInterface *connectable); void ags_config_init(AgsConfig *config); void ags_config_add_to_registry(AgsConnectable *connectable); void ags_config_remove_from_registry(AgsConnectable *connectable); gboolean ags_config_is_connected(AgsConnectable *connectable); void ags_config_connect(AgsConnectable *connectable); void ags_config_disconnect(AgsConnectable *connectable); void ags_config_finalize(GObject *gobject); gchar* ags_config_get_version(AgsConfig *config); void ags_config_set_version(AgsConfig *config, gchar *version); gchar* ags_config_get_build_id(AgsConfig *config); void ags_config_set_build_id(AgsConfig *config, gchar *build_id); /** * SECTION:ags_config * @short_description: Config Advanced Gtk+ Sequencer * @title: AgsConfig * @section_id: * @include: ags/audio/ags_config.h * * #AgsConfig provides configuration to Advanced Gtk+ Sequencer. */ AgsConfig *config; static gpointer ags_config_parent_class = NULL; static const gchar *ags_config_generic = AGS_CONFIG_GENERIC; static const gchar *ags_config_thread = AGS_CONFIG_THREAD; static const gchar *ags_config_devout = AGS_CONFIG_DEVOUT; static const gchar *ags_config_recall = AGS_CONFIG_RECALL; GType ags_config_get_type (void) { static GType ags_type_config = 0; if(!ags_type_config){ static const GTypeInfo ags_config_info = { sizeof (AgsConfigClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_config_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsConfig), 0, /* n_preallocs */ (GInstanceInitFunc) ags_config_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_config_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_config = g_type_register_static(G_TYPE_OBJECT, "AgsConfig\0", &ags_config_info, 0); g_type_add_interface_static(ags_type_config, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return(ags_type_config); } void ags_config_class_init(AgsConfigClass *config) { GObjectClass *gobject; ags_config_parent_class = g_type_class_peek_parent(config); /* GObjectClass */ gobject = (GObjectClass *) config; gobject->finalize = ags_config_finalize; } void ags_config_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->add_to_registry = ags_config_add_to_registry; connectable->remove_from_registry = ags_config_remove_from_registry; connectable->is_ready = NULL; connectable->is_connected = ags_config_is_connected; connectable->connect = ags_config_connect; connectable->disconnect = ags_config_disconnect; } void ags_config_init(AgsConfig *config) { config->version = AGS_CONFIG_DEFAULT_VERSION; config->build_id = AGS_CONFIG_DEFAULT_BUILD_ID; config->ags_main == NULL; config->key_file = g_key_file_new(); } void ags_config_add_to_registry(AgsConnectable *connectable) { //TODO:JK: implement me } void ags_config_remove_from_registry(AgsConnectable *connectable) { //TODO:JK: implement me } gboolean ags_config_is_connected(AgsConnectable *connectable) { //TODO:JK: implement me } void ags_config_connect(AgsConnectable *connectable) { //TODO:JK: implement me } void ags_config_disconnect(AgsConnectable *connectable) { //TODO:JK: implement me } void ags_config_finalize(GObject *gobject) { //TODO:JK: implement me G_OBJECT_CLASS(ags_config_parent_class)->finalize(gobject); } gchar* ags_config_get_version(AgsConfig *config) { return(config->version); } void ags_config_set_version(AgsConfig *config, gchar *version) { config->version = version; } gchar* ags_config_get_build_id(AgsConfig *config) { return(config->build_id); } void ags_config_set_build_id(AgsConfig *config, gchar *build_id) { config->build_id = build_id; } /** * ags_config_load_defaults: * @config: the #AgsConfig * * Load configuration from default values. * * Since: 0.4 */ void ags_config_load_defaults(AgsConfig *config) { ags_config_set(config, ags_config_generic, "builtin-theme\0", "false\0"); ags_config_set(config, ags_config_generic, "autosave-thread\0", "false\0"); ags_config_set(config, ags_config_generic, "segmentation\0", "4/4\0"); ags_config_set(config, ags_config_thread, "model\0", "super-threaded\0"); ags_config_set(config, ags_config_thread, "super-threaded-scope\0", "channel\0"); ags_config_set(config, ags_config_thread, "lock-global\0", "ags-thread\0"); ags_config_set(config, ags_config_thread, "lock-parent\0", "ags-recycling-thread\0"); ags_config_set(config, ags_config_devout, "samplerate\0", "44100\0"); ags_config_set(config, ags_config_devout, "buffer-size\0", "940\0"); ags_config_set(config, ags_config_devout, "pcm-channels\0", "2\0"); ags_config_set(config, ags_config_devout, "dsp-channels\0", "2\0"); ags_config_set(config, ags_config_devout, "alsa-handle\0", "hw:0,0\0"); ags_config_set(config, ags_config_recall, "auto-sense\0", "true\0"); } /** * ags_config_load_from_file: * @config: the #AgsConfig * @filename: the configuration file * * Load configuration from @filename. * * Since: 0.4 */ void ags_config_load_from_file(AgsConfig *config, gchar *filename) { GFile *file; file = g_file_new_for_path(filename); g_message("loading preferences for: %s\0", filename); if(!g_file_query_exists(file, NULL)){ ags_config_load_defaults(config); }else{ GKeyFile *key_file; gchar **groups, **groups_start; gchar **keys, **keys_start; gchar *value; GError *error; error = NULL; key_file = g_key_file_new(); g_key_file_load_from_file(key_file, filename, G_KEY_FILE_NONE, &error); groups = groups_start = g_key_file_get_groups(key_file, NULL); while(*groups != NULL){ keys = keys_start = g_key_file_get_keys(key_file, *groups, NULL, NULL); while(*keys != NULL){ value = g_key_file_get_value(key_file, *groups, *keys, NULL); ags_config_set(config, *groups, *keys, value); keys++; } g_strfreev(keys_start); groups++; } g_strfreev(groups_start); g_key_file_unref(key_file); } g_object_unref(file); } /** * ags_config_load_from_data: * @config: the #AgsConfig * @buffer: the data buffer * @buffer_length: the size of the buffer * * Read configuration in memory. * * Since: 0.5.4 */ void ags_config_load_from_data(AgsConfig *config, char *buffer, gsize buffer_length) { g_message("loading preferences from data[0x%x]\0", buffer); if(buffer == NULL){ ags_config_load_defaults(config); }else{ GKeyFile *key_file; gchar **groups, **groups_start; gchar **keys, **keys_start; gchar *value; GError *error; error = NULL; key_file = g_key_file_new(); g_key_file_load_from_data(key_file, buffer, buffer_length, G_KEY_FILE_NONE, &error); groups = groups_start = g_key_file_get_groups(key_file, NULL); while(*groups != NULL){ keys = keys_start = g_key_file_get_keys(key_file, *groups, NULL, NULL); while(*keys != NULL){ value = g_key_file_get_value(key_file, *groups, *keys, NULL); ags_config_set(config, *groups, *keys, value); keys++; } g_strfreev(keys_start); groups++; } g_strfreev(groups_start); g_key_file_unref(key_file); } } /** * ags_config_to_data: * @config: the #AgsConfig * @buffer: the data buffer * @buffer_length: the size of the buffer * * Save configuration. * * Since: 0.5.4 */ void ags_config_to_data(AgsConfig *config, char **buffer, gsize *buffer_length) { char *data; gsize length; GError *error; error = NULL; data = g_key_file_to_data(config->key_file, &length, &error); if(error != NULL){ g_warning("%s\0", error->message); } if(buffer != NULL){ *buffer = data; } if(buffer_length != NULL){ *buffer_length = length; } } /** * ags_config_save: * @config: the #AgsConfig * * Save configuration. * * Since: 0.4 */ void ags_config_save(AgsConfig *config) { struct passwd *pw; uid_t uid; gchar *path, *filename; gchar *content; gsize length; GError *error; uid = getuid(); pw = getpwuid(uid); /* open conf dir */ path = g_strdup_printf("%s/%s\0", pw->pw_dir, AGS_DEFAULT_DIRECTORY); if(!g_mkdir_with_parents(path, 0755)){ filename = g_strdup_printf("%s/%s", path, AGS_DEFAULT_CONFIG); /* get content */ error = NULL; content = g_key_file_to_data(config->key_file, &length, &error); if(error != NULL){ g_warning("%s\0", error->message); //TODO:JK: do recovery goto ags_config_save_END; } /* write content */ error = NULL; g_file_set_contents(filename, content, length, &error); ags_config_save_END: g_free(filename); } g_free(path); } /** * ags_config_set: * @config: the #AgsConfig * @group: the config group identifier * @key: the key of the property * @value: the value to set * * Set config by @group and @key, applying @value. * * Since: 0.4 */ void ags_config_set(AgsConfig *config, gchar *group, gchar *key, gchar *value) { AgsMain *ags_main; gchar *old_value; GError *error; ags_main = (AgsMain *) config->ags_main; error = NULL; old_value = g_key_file_get_value(config->key_file, group, key, &error); if(error != NULL && old_value != NULL){ g_free(old_value); } g_key_file_set_value(config->key_file, group, key, g_strdup(value)); if(!strncmp(group, ags_config_generic, 8)){ if(!strncmp(key, "autosave-thread\0", 15)){ AgsAutosaveThread *autosave_thread; if(ags_main == NULL || ags_main->autosave_thread == NULL){ return; } autosave_thread = (AgsAutosaveThread *) ags_main->autosave_thread; if(!strncmp(value, "true\0", 5)){ ags_thread_start((AgsThread *) autosave_thread); }else{ ags_thread_stop((AgsThread *) autosave_thread); } }else if(!strncmp(key, "segmentation\0", 13)){ AgsDevout *devout; guint discriminante, nominante; gdouble factor; if(ags_main == NULL || ags_main->devout == NULL){ return; } devout = ags_main->devout->data; sscanf(value, "%d/%d\0", &discriminante, &nominante); factor = 1.0 / nominante * (nominante / discriminante); g_object_set(devout, "delay-factor\0", factor, NULL); } }else if(!strncmp(group, ags_config_thread, 7)){ if(!strncmp(key, "model\0", 6)){ //TODO:JK: implement me }else if(!strncmp(key, "lock-global\0", 11)){ //TODO:JK: implement me }else if(!strncmp(key, "lock-parent\0", 11)){ //TODO:JK: implement me } }else if(!strncmp(group, ags_config_devout, 7)){ AgsDevout *devout; if(ags_main == NULL || ags_main->devout == NULL){ return; } devout = ags_main->devout->data; if(!strncmp(key, "samplerate\0", 10)){ guint samplerate; samplerate = strtoul(value, NULL, 10); g_object_set(G_OBJECT(devout), "frequency\0", samplerate, NULL); }else if(!strncmp(key, "buffer-size\0", 11)){ guint buffer_size; buffer_size = strtoul(value, NULL, 10); g_object_set(G_OBJECT(devout), "buffer-size\0", buffer_size, NULL); }else if(!strncmp(key, "pcm-channels\0", 12)){ guint pcm_channels; pcm_channels = strtoul(value, NULL, 10); g_object_set(G_OBJECT(devout), "pcm-channels\0", pcm_channels, NULL); }else if(!strncmp(key, "dsp-channels\0", 12)){ guint dsp_channels; dsp_channels = strtoul(value, NULL, 10); g_object_set(G_OBJECT(devout), "dsp-channels\0", dsp_channels, NULL); }else if(!strncmp(key, "alsa-handle\0", 11)){ gchar *alsa_handle; alsa_handle = value; g_object_set(G_OBJECT(devout), "device\0", g_strdup_printf("%s\0", alsa_handle), NULL); } } } /** * ags_config_get: * @config: the #AgsConfig * @group: the config group identifier * @key: the key of the property * * Retrieve config by @group and @key. * * Returns: the property's value * * Since: 0.4 */ gchar* ags_config_get(AgsConfig *config, gchar *group, gchar *key) { gchar *str; GError *error; pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_lock(&mutex); error = NULL; str = g_key_file_get_value(config->key_file, group, key, &error); pthread_mutex_unlock(&mutex); return(str); } /** * ags_config_new: * * Creates an #AgsConfig. * * Returns: a new #AgsConfig. * * Since: 0.4 */ AgsConfig* ags_config_new() { AgsConfig *config; config = (AgsConfig *) g_object_new(AGS_TYPE_CONFIG, NULL); return(config); } gsequencer-0.6.37/src/ags/audio/ags_effect.h0000644000175000017500000000172312612232537015600 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_EFFECT_H__ #define __AGS_EFFECT_H__ #define AGS_EFFECT_COPY_STREAM "copy_stream" #define AGS_EFFECT_COPY_BUFFER "copy_buffer" #define AGS_EFFECT_DOWN_MIX "down_mix" #endif /*__AGS_EFFECT_H__*/ gsequencer-0.6.37/src/ags/audio/ags_recall_recycling_dummy.h0000644000175000017500000000434112612232537021057 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_RECALL_RECYCLING_DUMMY_H__ #define __AGS_RECALL_RECYCLING_DUMMY_H__ #include #include #include #include #define AGS_TYPE_RECALL_RECYCLING_DUMMY (ags_recall_recycling_dummy_get_type()) #define AGS_RECALL_RECYCLING_DUMMY(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_RECALL_RECYCLING_DUMMY, AgsRecallRecyclingDummy)) #define AGS_RECALL_RECYCLING_DUMMY_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_RECALL_RECYCLING_DUMMY, AgsRecallRecyclingDummyClass)) #define AGS_IS_RECALL_RECYCLING_DUMMY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_RECALL_RECYCLING_DUMMY)) #define AGS_IS_RECALL_RECYCLING_DUMMY_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_RECALL_RECYCLING_DUMMY)) #define AGS_RECALL_RECYCLING_DUMMY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_RECALL_RECYCLING_DUMMY, AgsRecallRecyclingDummyClass)) typedef struct _AgsRecallRecyclingDummy AgsRecallRecyclingDummy; typedef struct _AgsRecallRecyclingDummyClass AgsRecallRecyclingDummyClass; struct _AgsRecallRecyclingDummy { AgsRecallRecycling recall_recycling; }; struct _AgsRecallRecyclingDummyClass { AgsRecallRecyclingClass recall_recycling; }; GType ags_recall_recycling_dummy_get_type(); AgsRecallRecyclingDummy* ags_recall_recycling_dummy_new(AgsRecycling *recycling, GType child_type); #endif /*__AGS_RECALL_RECYCLING_DUMMY_H__*/ gsequencer-0.6.37/src/ags/audio/ags_devout.c0000644000175000017500000012663112626613600015652 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include /** * SECTION:ags_devout * @short_description: Outputting to soundcard * @title: AgsDevout * @section_id: * @include: ags/audio/ags_devout.h * * #AgsDevout represents a soundcard and supports output. */ void ags_devout_class_init(AgsDevoutClass *devout); void ags_devout_connectable_interface_init(AgsConnectableInterface *connectable); void ags_devout_init(AgsDevout *devout); void ags_devout_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_devout_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_devout_disconnect(AgsConnectable *connectable); void ags_devout_connect(AgsConnectable *connectable); void ags_devout_finalize(GObject *gobject); void ags_devout_real_change_bpm(AgsDevout *devout, double bpm); void ags_devout_switch_buffer_flag(AgsDevout *devout); void ags_devout_play_functions(AgsDevout *devout); void ags_devout_alsa_init(AgsDevout *devout, GError **error); void ags_devout_alsa_play(AgsDevout *devout, GError **error); void ags_devout_alsa_free(AgsDevout *devout); enum{ PROP_0, PROP_MAIN, PROP_DEVICE, PROP_DSP_CHANNELS, PROP_PCM_CHANNELS, PROP_BITS, PROP_BUFFER_SIZE, PROP_FREQUENCY, PROP_BUFFER, PROP_BPM, PROP_DELAY_FACTOR, PROP_ATTACK, }; enum{ RUN, STOP, TIC, LAST_SIGNAL, }; static gpointer ags_devout_parent_class = NULL; static guint devout_signals[LAST_SIGNAL]; /* dangerous - produces a lot of output */ static gboolean DEBUG_DEVOUT = FALSE; extern pthread_mutex_t ags_application_mutex; extern AgsConfig *config; GType ags_devout_get_type (void) { static GType ags_type_devout = 0; if(!ags_type_devout){ static const GTypeInfo ags_devout_info = { sizeof (AgsDevoutClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_devout_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsDevout), 0, /* n_preallocs */ (GInstanceInitFunc) ags_devout_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_devout_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_devout = g_type_register_static(G_TYPE_OBJECT, "AgsDevout\0", &ags_devout_info, 0); g_type_add_interface_static(ags_type_devout, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_devout); } void ags_devout_class_init(AgsDevoutClass *devout) { GObjectClass *gobject; GParamSpec *param_spec; ags_devout_parent_class = g_type_class_peek_parent(devout); /* GObjectClass */ gobject = (GObjectClass *) devout; gobject->set_property = ags_devout_set_property; gobject->get_property = ags_devout_get_property; gobject->finalize = ags_devout_finalize; /* properties */ /** * AgsDevout:main: * * The assigned #AgsMain * * Since: 0.4.0 */ param_spec = g_param_spec_object("main\0", "the main object\0", "The main object\0", AGS_TYPE_MAIN, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_MAIN, param_spec); /** * AgsDevout:device: * * The alsa soundcard indentifier * * Since: 0.4.0 */ param_spec = g_param_spec_string("device\0", "the device identifier\0", "The device to perform output to\0", "hw:0\0", G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_DEVICE, param_spec); /** * AgsDevout:dsp-channels: * * The dsp channel count * * Since: 0.4.0 */ param_spec = g_param_spec_uint("dsp-channels\0", "count of DSP channels\0", "The count of DSP channels to use\0", 1, 64, 2, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_DSP_CHANNELS, param_spec); /** * AgsDevout:pcm-channels: * * The pcm channel count * * Since: 0.4.0 */ param_spec = g_param_spec_uint("pcm-channels\0", "count of PCM channels\0", "The count of PCM channels to use\0", 1, 64, 2, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_PCM_CHANNELS, param_spec); /* * TODO:JK: add support for other quality than 16 bit */ /** * AgsDevout:bits: * * The precision of the buffer * * Since: 0.4.0 */ param_spec = g_param_spec_uint("bits\0", "precision of buffer\0", "The precision to use for a frame\0", 1, 64, AGS_DEVOUT_DEFAULT_FORMAT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_BITS, param_spec); /** * AgsDevout:buffer-size: * * The buffer size * * Since: 0.4.0 */ param_spec = g_param_spec_uint("buffer-size\0", "frame count of a buffer\0", "The count of frames a buffer contains\0", 1, 44100, 940, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_BUFFER_SIZE, param_spec); /** * AgsDevout:frequency: * * The samplerate * * Since: 0.4.0 */ param_spec = g_param_spec_uint("frequency\0", "frames per second\0", "The frames count played during a second\0", 8000, 96000, 44100, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_FREQUENCY, param_spec); /** * AgsDevout:buffer: * * The buffer * * Since: 0.4.0 */ param_spec = g_param_spec_pointer("buffer\0", "the buffer\0", "The buffer to play\0", G_PARAM_READABLE); g_object_class_install_property(gobject, PROP_BUFFER, param_spec); /** * AgsDevout:bpm: * * Beats per minute * * Since: 0.4.0 */ param_spec = g_param_spec_double("bpm\0", "beats per minute\0", "Beats per minute to use\0", 1.0, 240.0, 120.0, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_BPM, param_spec); /** * AgsDevout:delay-factor: * * tact * * Since: 0.4.2 */ param_spec = g_param_spec_double("delay-factor\0", "delay factor\0", "The delay factor\0", 0.0, 16.0, 1.0, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_DELAY_FACTOR, param_spec); /** * AgsDevout:attack: * * Attack of the buffer * * Since: 0.4.0 */ param_spec = g_param_spec_pointer("attack\0", "attack of buffer\0", "The attack to use for the buffer\0", G_PARAM_READABLE); g_object_class_install_property(gobject, PROP_ATTACK, param_spec); /* AgsDevoutClass */ devout->play_init = ags_devout_alsa_init; devout->play = ags_devout_alsa_play; devout->stop = ags_devout_alsa_free; devout->tic = NULL; devout->note_offset_changed = NULL; /* signals */ /** * AgsDevout::tic: * @devout: the object tics * * The ::tic signal is emited during playback after buffer time interval. */ devout_signals[TIC] = g_signal_new("tic\0", G_TYPE_FROM_CLASS (devout), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AgsDevoutClass, tic), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); } GQuark ags_devout_error_quark() { return(g_quark_from_static_string("ags-devout-error-quark\0")); } void ags_devout_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->is_ready = NULL; connectable->is_connected = NULL; connectable->connect = ags_devout_connect; connectable->disconnect = ags_devout_disconnect; } void ags_devout_init(AgsDevout *devout) { AgsMutexManager *mutex_manager; gchar *segmentation; gdouble delay; guint default_tact_frames; guint default_period; guint i; gchar *str; pthread_mutex_t *mutex; pthread_mutexattr_t attr; //FIXME:JK: memory leak pthread_mutexattr_init(&attr); pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); mutex = (pthread_mutex_t *) malloc(sizeof(pthread_mutex_t)); pthread_mutex_init(mutex, &attr); pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); ags_mutex_manager_insert(mutex_manager, (GObject *) devout, mutex); pthread_mutex_unlock(&(ags_application_mutex)); /* flags */ devout->flags = (AGS_DEVOUT_ALSA); /* quality */ str = ags_config_get(config, AGS_CONFIG_DEVOUT, "dsp-channels\0"); devout->dsp_channels = g_ascii_strtoull(str, NULL, 10); free(str); str = ags_config_get(config, AGS_CONFIG_DEVOUT, "pcm-channels\0"); devout->pcm_channels = g_ascii_strtoull(str, NULL, 10); free(str); devout->bits = AGS_DEVOUT_DEFAULT_FORMAT; str = ags_config_get(config, AGS_CONFIG_DEVOUT, "buffer-size\0"); devout->buffer_size = g_ascii_strtoull(str, NULL, 10); free(str); str = ags_config_get(config, AGS_CONFIG_DEVOUT, "samplerate\0"); devout->frequency = g_ascii_strtoull(str, NULL, 10); free(str); // devout->out.oss.device = NULL; devout->out.alsa.handle = NULL; devout->out.alsa.device = g_strdup(ags_config_get(config, AGS_CONFIG_DEVOUT, "alsa-handle\0")); /* buffer */ devout->buffer = (signed short **) malloc(4 * sizeof(signed short*)); devout->buffer[0] = (signed short *) malloc(devout->dsp_channels * devout->buffer_size * sizeof(signed short)); devout->buffer[1] = (signed short *) malloc(devout->dsp_channels * devout->buffer_size * sizeof(signed short)); devout->buffer[2] = (signed short *) malloc(devout->dsp_channels * devout->buffer_size * sizeof(signed short)); devout->buffer[3] = (signed short *) malloc(devout->dsp_channels * devout->buffer_size * sizeof(signed short)); /* bpm */ devout->bpm = AGS_DEVOUT_DEFAULT_BPM; /* delay factor */ segmentation = ags_config_get(config, AGS_CONFIG_DEVOUT, "segmentation\0"); if(segmentation != NULL){ guint discriminante, nominante; sscanf(segmentation, "%d/%d\0", &discriminante, &nominante); devout->delay_factor = 1.0 / nominante * (nominante / discriminante); free(segmentation); }else{ devout->delay_factor = 1.0 / 4.0; } /* delay and attack */ devout->delay = (gdouble *) malloc((int) 2 * AGS_DEVOUT_DEFAULT_PERIOD * sizeof(gdouble)); devout->attack = (guint *) malloc((int) 2 * AGS_DEVOUT_DEFAULT_PERIOD * sizeof(guint)); delay = ((gdouble) devout->frequency / (gdouble) devout->buffer_size) * (gdouble)(60.0 / devout->bpm) * devout->delay_factor; // g_message("delay : %f\0", delay); default_tact_frames = (guint) (delay * devout->buffer_size); default_period = (1.0 / AGS_DEVOUT_DEFAULT_PERIOD) * (default_tact_frames); devout->attack[0] = 0; devout->delay[0] = delay; for(i = 1; i < (int) 2.0 * AGS_DEVOUT_DEFAULT_PERIOD; i++){ devout->attack[i] = (guint) ((i * default_tact_frames + devout->attack[i - 1]) / (AGS_DEVOUT_DEFAULT_PERIOD / (delay * i))) % (guint) (devout->buffer_size); // g_message("%d\0", devout->attack[i]); } for(i = 1; i < (int) 2.0 * AGS_DEVOUT_DEFAULT_PERIOD; i++){ devout->delay[i] = ((gdouble) (default_tact_frames + devout->attack[i])) / (gdouble) devout->buffer_size; // g_message("%f\0", devout->delay[i]); } /* */ devout->tact_counter = 0.0; devout->delay_counter = 0; devout->tic_counter = 0; /* parent */ devout->ags_main = NULL; /* all AgsAudio */ devout->audio = NULL; } void ags_devout_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsDevout *devout; devout = AGS_DEVOUT(gobject); //TODO:JK: implement set functionality switch(prop_id){ case PROP_MAIN: { AgsMain *ags_main; ags_main = (AgsMain *) g_value_get_object(value); if(devout->ags_main == ags_main){ return; } if(devout->ags_main != NULL){ g_object_unref(G_OBJECT(devout->ags_main)); } if(ags_main != NULL){ g_object_ref(G_OBJECT(ags_main)); } devout->ags_main = (GObject *) ags_main; } break; case PROP_DEVICE: { char *device; device = (char *) g_value_get_string(value); if((AGS_DEVOUT_LIBAO & (devout->flags)) != 0){ //TODO:JK: implement me }else if((AGS_DEVOUT_OSS & (devout->flags)) != 0){ devout->out.oss.device = g_strdup(device); }else if((AGS_DEVOUT_ALSA & (devout->flags)) != 0){ devout->out.alsa.device = g_strdup(device); } } break; case PROP_DSP_CHANNELS: { guint dsp_channels; dsp_channels = g_value_get_uint(value); if(dsp_channels == devout->dsp_channels){ return; } devout->dsp_channels = dsp_channels; } break; case PROP_PCM_CHANNELS: { guint pcm_channels; pcm_channels = g_value_get_uint(value); if(pcm_channels == devout->pcm_channels){ return; } devout->pcm_channels = pcm_channels; free(devout->buffer[0]); free(devout->buffer[1]); free(devout->buffer[2]); free(devout->buffer[3]); devout->buffer[0] = (signed short *) malloc((pcm_channels * devout->buffer_size) * sizeof(signed short)); devout->buffer[1] = (signed short *) malloc((pcm_channels * devout->buffer_size) * sizeof(signed short)); devout->buffer[2] = (signed short *) malloc((pcm_channels * devout->buffer_size) * sizeof(signed short)); devout->buffer[3] = (signed short *) malloc((pcm_channels * devout->buffer_size) * sizeof(signed short)); } break; case PROP_BITS: { //TODO:JK: implement me } break; case PROP_BUFFER_SIZE: { guint buffer_size; buffer_size = g_value_get_uint(value); if(buffer_size == devout->buffer_size){ return; } devout->buffer_size = buffer_size; free(devout->buffer[0]); free(devout->buffer[1]); free(devout->buffer[2]); free(devout->buffer[3]); devout->buffer[0] = (signed short *) malloc((devout->pcm_channels * buffer_size) * sizeof(signed short)); devout->buffer[1] = (signed short *) malloc((devout->pcm_channels * buffer_size) * sizeof(signed short)); devout->buffer[2] = (signed short *) malloc((devout->pcm_channels * buffer_size) * sizeof(signed short)); devout->buffer[3] = (signed short *) malloc((devout->pcm_channels * buffer_size) * sizeof(signed short)); } break; case PROP_FREQUENCY: { guint frequency; frequency = g_value_get_uint(value); if(frequency == devout->frequency){ return; } devout->frequency = frequency; } break; case PROP_BUFFER: { //TODO:JK: implement me } break; case PROP_BPM: { gdouble bpm; gdouble delay; guint default_tact_frames; guint default_period; guint i; bpm = g_value_get_double(value); devout->bpm = bpm; /* delay and attack */ devout->delay = (gdouble *) malloc((int) 2 * AGS_DEVOUT_DEFAULT_PERIOD * sizeof(gdouble)); devout->attack = (guint *) malloc((int) 2 * AGS_DEVOUT_DEFAULT_PERIOD * sizeof(guint)); delay = ((gdouble) devout->frequency / (gdouble) devout->buffer_size) * (gdouble)(60.0 / devout->bpm) * devout->delay_factor; default_tact_frames = (guint) (delay * devout->buffer_size); default_period = (1.0 / AGS_DEVOUT_DEFAULT_PERIOD) * (default_tact_frames); devout->attack[0] = 0; devout->delay[0] = delay; for(i = 1; i < (int) 2.0 * AGS_DEVOUT_DEFAULT_PERIOD; i++){ devout->attack[i] = (guint) ((i * default_tact_frames + devout->attack[i - 1]) / (AGS_DEVOUT_DEFAULT_PERIOD / (delay * i))) % (guint) (devout->buffer_size); } for(i = 1; i < (int) 2.0 * AGS_DEVOUT_DEFAULT_PERIOD; i++){ devout->delay[i] = ((gdouble) (default_tact_frames + devout->attack[i])) / (gdouble) devout->buffer_size; } } break; case PROP_DELAY_FACTOR: { gdouble delay_factor; gdouble delay; guint default_tact_frames; guint default_period; guint i; delay_factor = g_value_get_double(value); devout->delay_factor = delay_factor; /* delay and attack */ devout->delay = (gdouble *) malloc((int) 2 * AGS_DEVOUT_DEFAULT_PERIOD * sizeof(gdouble)); devout->attack = (guint *) malloc((int) 2 * AGS_DEVOUT_DEFAULT_PERIOD * sizeof(guint)); delay = ((gdouble) devout->frequency / (gdouble) devout->buffer_size) * (gdouble)(60.0 / devout->bpm) * devout->delay_factor; default_tact_frames = (guint) (delay * devout->buffer_size); default_period = (1.0 / AGS_DEVOUT_DEFAULT_PERIOD) * (default_tact_frames); devout->attack[0] = 0; devout->delay[0] = delay; for(i = 1; i < (int) 2.0 * AGS_DEVOUT_DEFAULT_PERIOD; i++){ devout->attack[i] = (guint) ((i * default_tact_frames + devout->attack[i - 1]) / (AGS_DEVOUT_DEFAULT_PERIOD / (delay * i))) % (guint) (devout->buffer_size); } for(i = 1; i < (int) 2.0 * AGS_DEVOUT_DEFAULT_PERIOD; i++){ devout->delay[i] = ((gdouble) (default_tact_frames + devout->attack[i])) / (gdouble) devout->buffer_size; } } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_devout_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsDevout *devout; devout = AGS_DEVOUT(gobject); switch(prop_id){ case PROP_DEVICE: { if((AGS_DEVOUT_LIBAO & (devout->flags)) != 0){ //TODO:JK: implement me }else if((AGS_DEVOUT_OSS & (devout->flags)) != 0){ g_value_set_string(value, devout->out.oss.device); }else if((AGS_DEVOUT_ALSA & (devout->flags)) != 0){ g_value_set_string(value, devout->out.alsa.device); } } break; case PROP_DSP_CHANNELS: { g_value_set_uint(value, devout->dsp_channels); } break; case PROP_PCM_CHANNELS: { g_value_set_uint(value, devout->pcm_channels); } break; case PROP_BITS: { g_value_set_uint(value, devout->bits); } break; case PROP_BUFFER_SIZE: { g_value_set_uint(value, devout->buffer_size); } break; case PROP_FREQUENCY: { g_value_set_uint(value, devout->frequency); } break; case PROP_BUFFER: { g_value_set_pointer(value, devout->buffer); } break; case PROP_BPM: { g_value_set_double(value, devout->bpm); } break; case PROP_DELAY_FACTOR: { g_value_set_double(value, devout->delay_factor); } break; case PROP_ATTACK: { g_value_set_pointer(value, devout->attack); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_devout_finalize(GObject *gobject) { AgsDevout *devout; AgsMutexManager *mutex_manager; GList *list, *list_next; devout = AGS_DEVOUT(gobject); pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); ags_mutex_manager_remove(mutex_manager, gobject); pthread_mutex_unlock(&(ags_application_mutex)); /* free output buffer */ free(devout->buffer[0]); free(devout->buffer[1]); free(devout->buffer[2]); free(devout->buffer[3]); /* free buffer array */ free(devout->buffer); /* free AgsAttack */ free(devout->attack); /* call parent */ G_OBJECT_CLASS(ags_devout_parent_class)->finalize(gobject); } void ags_devout_connect(AgsConnectable *connectable) { AgsDevout *devout; GList *list; devout = AGS_DEVOUT(connectable); list = devout->audio; while(list != NULL){ ags_connectable_connect(AGS_CONNECTABLE(list->data)); list = list->next; } } void ags_devout_disconnect(AgsConnectable *connectable) { //TODO:JK: implement me } /** * ags_devout_play_domain_alloc: * * Allocs an #AgsDevoutPlayDomain. * * Returns: the devout play domain * * Since: 0.4 */ AgsDevoutPlayDomain* ags_devout_play_domain_alloc() { AgsDevoutPlayDomain *devout_play_domain; devout_play_domain = (AgsDevoutPlayDomain *) malloc(sizeof(AgsDevoutPlayDomain)); g_atomic_int_set(&(devout_play_domain->flags), 0); /* super threaded audio */ devout_play_domain->audio_thread = (AgsThread **) malloc(3 * sizeof(AgsThread *)); devout_play_domain->audio_thread[0] = NULL; devout_play_domain->audio_thread[1] = NULL; devout_play_domain->audio_thread[2] = NULL; /* domain */ devout_play_domain->domain = NULL; devout_play_domain->devout_play = NULL; return(devout_play_domain); } /** * ags_devout_play_domain_free: * @devout_play_domain: the devout play domain * * Frees an #AgsDevoutPlayDomain. * * Since: 0.4 */ void ags_devout_play_domain_free(AgsDevoutPlayDomain *devout_play_domain) { g_list_free(devout_play_domain->devout_play); free(devout_play_domain); } /** * ags_devout_play_alloc: * * Allocs an #AgsDevoutPlay. * * Returns: the devout play * * Since: 0.4 */ AgsDevoutPlay* ags_devout_play_alloc() { AgsDevoutPlay *play; play = (AgsDevoutPlay *) malloc(sizeof(AgsDevoutPlay)); g_atomic_int_set(&(play->flags), 0); /* super threaded channel */ play->channel_thread = (AgsThread **) malloc(3 * sizeof(AgsThread *)); play->channel_thread[0] = NULL; play->channel_thread[1] = NULL; play->channel_thread[2] = NULL; /* fully super threaded recycling */ play->iterator_thread = (AgsIteratorThread **) malloc(3 * sizeof(AgsIteratorThread *)); play->iterator_thread[0] = NULL; play->iterator_thread[1] = NULL; play->iterator_thread[2] = NULL; /* recycling thread */ play->recycling_thread = (AgsRecyclingThread **) malloc(3 * sizeof(AgsRecyclingThread *)); play->recycling_thread[0] = NULL; play->recycling_thread[1] = NULL; play->recycling_thread[2] = NULL; /* source */ play->source = NULL; play->audio_channel = 0; /* playback, sequencer and notation */ play->recall_id = (AgsDevoutPlay **) malloc(3 * sizeof(AgsDevoutPlay *)); play->recall_id[0] = NULL; play->recall_id[1] = NULL; play->recall_id[2] = NULL; return(play); } /** * ags_devout_play_free: * @devout_play: the devout play * * Frees an #AgsDevoutPlay. * * Since: 0.4 */ void ags_devout_play_free(AgsDevoutPlay *play) { /* channel thread */ g_object_unref(G_OBJECT(play->channel_thread[0])); g_object_unref(G_OBJECT(play->channel_thread[1])); g_object_unref(G_OBJECT(play->channel_thread[2])); free(play->channel_thread); /* iterator thread */ g_object_unref(G_OBJECT(play->iterator_thread[0])); g_object_unref(G_OBJECT(play->iterator_thread[1])); g_object_unref(G_OBJECT(play->iterator_thread[2])); free(play->iterator_thread); /* recycling thread */ g_object_unref(G_OBJECT(play->recycling_thread[0])); g_object_unref(G_OBJECT(play->recycling_thread[1])); g_object_unref(G_OBJECT(play->recycling_thread[2])); free(play->recycling_thread); } /** * ags_devout_play_find_source: * @devout_play: a #GList containing #AgsDevoutPlay-struct * * Find source * * Returns: the matching devout play * * Since: 0.4 */ AgsDevoutPlay* ags_devout_play_find_source(GList *devout_play, GObject *source) { while(devout_play != NULL){ if(AGS_DEVOUT_PLAY(devout_play->data)->source == source){ return(devout_play->data); } devout_play = devout_play->next; } return(NULL); } /** * ags_devout_list_cards: * @card_id: alsa identifier * @card_name: card name * * List available soundcards. * * Since: 0.4 */ void ags_devout_list_cards(GList **card_id, GList **card_name) { snd_ctl_t *card_handle; snd_ctl_card_info_t *card_info; char *name; gchar *str, *tmp; int card_num, dev_num; int error; *card_id = NULL; *card_name = NULL; card_num = -1; while(TRUE){ error = snd_card_next(&card_num); if(card_num < 0){ break; } if(error < 0){ continue; } tmp = str = g_strdup_printf("hw:%i\0", card_num); error = snd_ctl_open(&card_handle, str, 0); if(error < 0){ continue; } snd_ctl_card_info_alloca(&card_info); error = snd_ctl_card_info(card_handle, card_info); if(error < 0){ continue; } *card_id = g_list_prepend(*card_id, str); *card_name = g_list_prepend(*card_name, g_strdup(snd_ctl_card_info_get_name(card_info))); snd_ctl_close(card_handle); } snd_config_update_free_global(); *card_id = g_list_reverse(*card_id); *card_name = g_list_reverse(*card_name); } /** * ags_devout_pcm_info: * @card_id: alsa identifier * @channels_min: minimum channels supported * @channels_max: maximum channels supported * @rate_min: minimum samplerate supported * @rate_max: maximum samplerate supported * @buffer_size_min: minimum buffer size supported * @buffer_size_max maximum buffer size supported * @error: on success %NULL * * List soundcard settings. * * Since: 0.4 */ void ags_devout_pcm_info(char *card_id, guint *channels_min, guint *channels_max, guint *rate_min, guint *rate_max, guint *buffer_size_min, guint *buffer_size_max, GError **error) { char *str; int rc; snd_pcm_t *handle; snd_pcm_hw_params_t *params; unsigned int val; int dir; snd_pcm_uframes_t frames; int card_num; int err; /* Open PCM device for playback. */ handle = NULL; rc = snd_pcm_open(&handle, card_id, SND_PCM_STREAM_PLAYBACK, 0); if(rc < 0) { g_message("unable to open pcm device: %s\n\0", snd_strerror(rc)); g_set_error(error, AGS_DEVOUT_ERROR, AGS_DEVOUT_ERROR_LOCKED_SOUNDCARD, "unable to open pcm device: %s\n\0", snd_strerror(rc)); return; } /* Allocate a hardware parameters object. */ snd_pcm_hw_params_alloca(¶ms); /* Fill it in with default values. */ snd_pcm_hw_params_any(handle, params); /* channels */ snd_pcm_hw_params_get_channels_min(params, &val); *channels_min = val; snd_pcm_hw_params_get_channels_max(params, &val); *channels_max = val; /* samplerate */ dir = 0; snd_pcm_hw_params_get_rate_min(params, &val, &dir); *rate_min = val; dir = 0; snd_pcm_hw_params_get_rate_max(params, &val, &dir); *rate_max = val; /* buffer size */ dir = 0; snd_pcm_hw_params_get_buffer_size_min(params, &frames); *buffer_size_min = frames; dir = 0; snd_pcm_hw_params_get_buffer_size_max(params, &frames); *buffer_size_max = frames; snd_pcm_close(handle); } /** * ags_devout_add_audio: * @devout: an #AgsDevout * @audio: the #AgsAudio to add * * Add audio to devout. * * Since: 0.4 */ void ags_devout_add_audio(AgsDevout *devout, GObject *audio) { AgsMutexManager *mutex_manager; pthread_mutex_t *mutex; pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) devout); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(mutex); if(g_list_find(devout->audio, audio) != NULL){ pthread_mutex_unlock(mutex); return; } g_object_ref(G_OBJECT(audio)); devout->audio = g_list_prepend(devout->audio, audio); pthread_mutex_unlock(mutex); } /** * ags_devout_remove_audio: * @devout: an #AgsDevout * @audio: the #AgsAudio to remove * * Remove audio of devout. * * Since: 0.4 */ void ags_devout_remove_audio(AgsDevout *devout, GObject *audio) { AgsMutexManager *mutex_manager; pthread_mutex_t *mutex; pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) devout); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(mutex); devout->audio = g_list_remove(devout->audio, audio); g_object_unref(G_OBJECT(audio)); pthread_mutex_unlock(mutex); } /** * ags_devout_tic: * @devout: an #AgsDevout * * The tic of devout. * * Since: 0.4 */ void ags_devout_tic(AgsDevout *devout) { AgsMutexManager *mutex_manager; pthread_mutex_t *mutex; pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) devout); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(mutex); if(!AGS_IS_DEVOUT(devout)){ pthread_mutex_unlock(mutex); return; } if((AGS_DEVOUT_PLAY & devout->flags) == 0){ g_message("ags_devout_tic: not playing\0"); pthread_mutex_unlock(mutex); return; } g_object_ref((GObject *) devout); g_signal_emit(G_OBJECT(devout), devout_signals[TIC], 0); g_object_unref((GObject *) devout); pthread_mutex_unlock(mutex); } /** * ags_devout_switch_buffer_flag: * @devout: an #AgsDevout * * The buffer flag indicates the currently played buffer. * * Since: 0.3 */ void ags_devout_switch_buffer_flag(AgsDevout *devout) { AgsMutexManager *mutex_manager; pthread_mutex_t *mutex; pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) devout); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(mutex); if((AGS_DEVOUT_BUFFER0 & (devout->flags)) != 0){ devout->flags &= (~AGS_DEVOUT_BUFFER0); devout->flags |= AGS_DEVOUT_BUFFER1; }else if((AGS_DEVOUT_BUFFER1 & (devout->flags)) != 0){ devout->flags &= (~AGS_DEVOUT_BUFFER1); devout->flags |= AGS_DEVOUT_BUFFER2; }else if((AGS_DEVOUT_BUFFER2 & (devout->flags)) != 0){ devout->flags &= (~AGS_DEVOUT_BUFFER2); devout->flags |= AGS_DEVOUT_BUFFER3; }else if((AGS_DEVOUT_BUFFER3 & (devout->flags)) != 0){ devout->flags &= (~AGS_DEVOUT_BUFFER3); devout->flags |= AGS_DEVOUT_BUFFER0; } pthread_mutex_unlock(mutex); } void ags_devout_alsa_init(AgsDevout *devout, GError **error) { AgsMutexManager *mutex_manager; static unsigned int period_time = 100000; static snd_pcm_format_t format = SND_PCM_FORMAT_S16; int rc; snd_pcm_t *handle; snd_pcm_hw_params_t *hwparams; unsigned int val; snd_pcm_uframes_t frames; unsigned int rate; unsigned int rrate; unsigned int channels; snd_pcm_uframes_t size; snd_pcm_sframes_t buffer_size; snd_pcm_sframes_t period_size; snd_pcm_sw_params_t *swparams; int period_event = 0; int err, dir; pthread_mutex_t *mutex; pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) devout); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(mutex); /* Open PCM device for playback. */ if ((err = snd_pcm_open(&handle, devout->out.alsa.device, SND_PCM_STREAM_PLAYBACK, 0)) < 0) { pthread_mutex_unlock(mutex); printf("Playback open error: %s\n", snd_strerror(err)); g_set_error(error, AGS_DEVOUT_ERROR, AGS_DEVOUT_ERROR_LOCKED_SOUNDCARD, "unable to open pcm device: %s\n\0", snd_strerror(err)); return; } snd_pcm_hw_params_alloca(&hwparams); snd_pcm_sw_params_alloca(&swparams); /* choose all parameters */ err = snd_pcm_hw_params_any(handle, hwparams); if (err < 0) { pthread_mutex_unlock(mutex); printf("Broken configuration for playback: no configurations available: %s\n", snd_strerror(err)); return; } /* set hardware resampling */ err = snd_pcm_hw_params_set_rate_resample(handle, hwparams, 1); if (err < 0) { pthread_mutex_unlock(mutex); printf("Resampling setup failed for playback: %s\n", snd_strerror(err)); return; } /* set the interleaved read/write format */ err = snd_pcm_hw_params_set_access(handle, hwparams, SND_PCM_ACCESS_RW_INTERLEAVED); if (err < 0) { pthread_mutex_unlock(mutex); printf("Access type not available for playback: %s\n", snd_strerror(err)); return; } /* set the sample format */ err = snd_pcm_hw_params_set_format(handle, hwparams, format); if (err < 0) { pthread_mutex_unlock(mutex); printf("Sample format not available for playback: %s\n", snd_strerror(err)); return; } /* set the count of channels */ channels = devout->dsp_channels; err = snd_pcm_hw_params_set_channels(handle, hwparams, channels); if (err < 0) { pthread_mutex_unlock(mutex); printf("Channels count (%i) not available for playbacks: %s\n", channels, snd_strerror(err)); return; } /* set the stream rate */ rate = devout->frequency; rrate = rate; err = snd_pcm_hw_params_set_rate_near(handle, hwparams, &rrate, 0); if (err < 0) { pthread_mutex_unlock(mutex); printf("Rate %iHz not available for playback: %s\n", rate, snd_strerror(err)); return; } if (rrate != rate) { pthread_mutex_unlock(mutex); printf("Rate doesn't match (requested %iHz, get %iHz)\n", rate, err); // exit(-EINVAL); return; } /* set the buffer size */ size = devout->buffer_size; err = snd_pcm_hw_params_set_buffer_size(handle, hwparams, size); if (err < 0) { pthread_mutex_unlock(mutex); printf("Unable to set buffer size %i for playback: %s\n", size, snd_strerror(err)); return; } buffer_size = size; /* set the period time */ period_time = MSEC_PER_SEC / devout->frequency; dir = -1; err = snd_pcm_hw_params_set_period_time_near(handle, hwparams, &period_time, &dir); if (err < 0) { pthread_mutex_unlock(mutex); printf("Unable to set period time %i for playback: %s\n", period_time, snd_strerror(err)); return; } err = snd_pcm_hw_params_get_period_size(hwparams, &size, &dir); if (err < 0) { pthread_mutex_unlock(mutex); printf("Unable to get period size for playback: %s\n", snd_strerror(err)); return; } period_size = size; /* write the parameters to device */ err = snd_pcm_hw_params(handle, hwparams); if (err < 0) { pthread_mutex_unlock(mutex); printf("Unable to set hw params for playback: %s\n", snd_strerror(err)); return; } /* get the current swparams */ err = snd_pcm_sw_params_current(handle, swparams); if (err < 0) { pthread_mutex_unlock(mutex); printf("Unable to determine current swparams for playback: %s\n", snd_strerror(err)); return; } /* start the transfer when the buffer is almost full: */ /* (buffer_size / avail_min) * avail_min */ err = snd_pcm_sw_params_set_start_threshold(handle, swparams, (buffer_size / period_size) * period_size); if (err < 0) { pthread_mutex_unlock(mutex); printf("Unable to set start threshold mode for playback: %s\n", snd_strerror(err)); return; } /* allow the transfer when at least period_size samples can be processed */ /* or disable this mechanism when period event is enabled (aka interrupt like style processing) */ err = snd_pcm_sw_params_set_avail_min(handle, swparams, period_event ? buffer_size : period_size); if (err < 0) { pthread_mutex_unlock(mutex); printf("Unable to set avail min for playback: %s\n", snd_strerror(err)); return; } /* write the parameters to the playback device */ err = snd_pcm_sw_params(handle, swparams); if (err < 0) { pthread_mutex_unlock(mutex); printf("Unable to set sw params for playback: %s\n", snd_strerror(err)); return; } /* */ devout->out.alsa.handle = handle; devout->tact_counter = 0.0; devout->delay_counter = 0.0; devout->tic_counter = 0; devout->flags |= AGS_DEVOUT_INITIALIZED; pthread_mutex_unlock(mutex); } void ags_devout_alsa_play(AgsDevout *devout, GError **error) { AgsMutexManager *mutex_manager; gdouble delay; pthread_mutex_t *mutex; pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) devout); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(mutex); if((AGS_DEVOUT_INITIALIZED & (devout->flags)) == 0){ pthread_mutex_unlock(mutex); return; } /* */ if((AGS_DEVOUT_BUFFER0 & (devout->flags)) != 0){ memset(devout->buffer[3], 0, (size_t) devout->dsp_channels * devout->buffer_size * sizeof(signed short)); devout->out.alsa.rc = snd_pcm_writei(devout->out.alsa.handle, devout->buffer[0], (snd_pcm_uframes_t) (devout->buffer_size)); if((AGS_DEVOUT_NONBLOCKING & (devout->flags)) == 0){ if(devout->out.alsa.rc == -EPIPE){ /* EPIPE means underrun */ snd_pcm_prepare(devout->out.alsa.handle); #ifdef AGS_DEBUG g_message("underrun occurred\0"); #endif }else if(devout->out.alsa.rc == -ESTRPIPE){ static const struct timespec idle = { 0, 4000, }; int err; while((err = snd_pcm_resume(devout->out.alsa.handle)) == -EAGAIN) nanosleep(&idle, NULL); /* wait until the suspend flag is released */ if(err < 0){ err = snd_pcm_prepare(devout->out.alsa.handle); } }else if(devout->out.alsa.rc < 0){ g_message("xrun\0"); g_message("error from writei: %s\0", snd_strerror(devout->out.alsa.rc)); }else if(devout->out.alsa.rc != (int) devout->buffer_size) { g_message("short write, write %d frames\0", devout->out.alsa.rc); } } // g_message("ags_devout_play 0\0"); }else if((AGS_DEVOUT_BUFFER1 & (devout->flags)) != 0){ memset(devout->buffer[0], 0, (size_t) devout->dsp_channels * devout->buffer_size * sizeof(signed short)); devout->out.alsa.rc = snd_pcm_writei(devout->out.alsa.handle, devout->buffer[1], (snd_pcm_uframes_t) (devout->buffer_size)); if((AGS_DEVOUT_NONBLOCKING & (devout->flags)) == 0){ if(devout->out.alsa.rc == -EPIPE){ /* EPIPE means underrun */ snd_pcm_prepare(devout->out.alsa.handle); #ifdef AGS_DEBUG g_message("underrun occurred\0"); #endif }else if(devout->out.alsa.rc == -ESTRPIPE){ static const struct timespec idle = { 0, 4000, }; int err; while((err = snd_pcm_resume(devout->out.alsa.handle)) == -EAGAIN) nanosleep(&idle, NULL); /* wait until the suspend flag is released */ if(err < 0){ g_message("xrun\0"); err = snd_pcm_prepare(devout->out.alsa.handle); } }else if(devout->out.alsa.rc < 0){ g_message("error from writei: %s\0", snd_strerror(devout->out.alsa.rc)); }else if(devout->out.alsa.rc != (int) devout->buffer_size) { g_message("short write, write %d frames\0", devout->out.alsa.rc); } } // g_message("ags_devout_play 1\0"); }else if((AGS_DEVOUT_BUFFER2 & (devout->flags)) != 0){ memset(devout->buffer[1], 0, (size_t) devout->dsp_channels * devout->buffer_size * sizeof(signed short)); devout->out.alsa.rc = snd_pcm_writei(devout->out.alsa.handle, devout->buffer[2], (snd_pcm_uframes_t) (devout->buffer_size)); if((AGS_DEVOUT_NONBLOCKING & (devout->flags)) == 0){ if(devout->out.alsa.rc == -EPIPE){ /* EPIPE means underrun */ snd_pcm_prepare(devout->out.alsa.handle); #ifdef AGS_DEBUG g_message("underrun occurred\0"); #endif }else if(devout->out.alsa.rc == -ESTRPIPE){ static const struct timespec idle = { 0, 4000, }; int err; while((err = snd_pcm_resume(devout->out.alsa.handle)) == -EAGAIN) nanosleep(&idle, NULL); /* wait until the suspend flag is released */ if(err < 0){ g_message("xrun\0"); err = snd_pcm_prepare(devout->out.alsa.handle); } }else if(devout->out.alsa.rc < 0){ g_message("error from writei: %s\0", snd_strerror(devout->out.alsa.rc)); }else if(devout->out.alsa.rc != (int) devout->buffer_size) { g_message("short write, write %d frames\0", devout->out.alsa.rc); } } // g_message("ags_devout_play 2\0"); }else if((AGS_DEVOUT_BUFFER3 & devout->flags) != 0){ memset(devout->buffer[2], 0, (size_t) devout->dsp_channels * devout->buffer_size * sizeof(signed short)); devout->out.alsa.rc = snd_pcm_writei(devout->out.alsa.handle, devout->buffer[3], (snd_pcm_uframes_t) (devout->buffer_size)); if((AGS_DEVOUT_NONBLOCKING & (devout->flags)) == 0){ if(devout->out.alsa.rc == -EPIPE){ snd_pcm_prepare(devout->out.alsa.handle); #ifdef AGS_DEBUG g_message("underrun occurred\0"); #endif }else if(devout->out.alsa.rc == -ESTRPIPE){ static const struct timespec idle = { 0, 4000, }; int err; while((err = snd_pcm_resume(devout->out.alsa.handle)) == -EAGAIN) nanosleep(&idle, NULL); /* wait until the suspend flag is released */ if(err < 0){ g_message("xrun\0"); err = snd_pcm_prepare(devout->out.alsa.handle); } }else if(devout->out.alsa.rc < 0){ g_message("error from writei: %s\0", snd_strerror(devout->out.alsa.rc)); }else if(devout->out.alsa.rc != (int) devout->buffer_size) { g_message("short write, write %d frames\0", devout->out.alsa.rc); } } // g_message("ags_devout_play 3\0"); } /* determine if attack should be switched */ delay = devout->delay[devout->tic_counter]; devout->delay_counter += 1.0; ///TODO:JK: fix me if(devout->delay_counter >= floor(delay)){ //devout->delay[devout->tic_counter] devout->tic_counter += 1; if(devout->tic_counter == AGS_DEVOUT_DEFAULT_PERIOD){ devout->tic_counter = 0; } /* delay */ devout->delay_counter = 0.0; devout->tact_counter += 1.0; } /* tic */ ags_devout_tic(devout); /* switch buffer flags */ ags_devout_switch_buffer_flag(devout); snd_pcm_prepare(devout->out.alsa.handle); pthread_mutex_unlock(mutex); } void ags_devout_alsa_free(AgsDevout *devout) { AgsMutexManager *mutex_manager; pthread_mutex_t *mutex; pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) devout); pthread_mutex_unlock(&(ags_application_mutex)); if((AGS_DEVOUT_INITIALIZED & (devout->flags)) == 0){ return; } // pthread_mutex_lock(mutex); snd_pcm_drain(devout->out.alsa.handle); snd_pcm_close(devout->out.alsa.handle); devout->out.alsa.handle = NULL; devout->tact_counter = 0.0; devout->flags &= (~AGS_DEVOUT_INITIALIZED); // pthread_mutex_unlock(mutex); } /** * ags_devout_new: * @ags_main: the #AgsMain * * Creates an #AgsDevout, refering to @ags_main. * * Returns: a new #AgsDevout * * Since: 0.3 */ AgsDevout* ags_devout_new(GObject *ags_main) { AgsDevout *devout; devout = (AgsDevout *) g_object_new(AGS_TYPE_DEVOUT, NULL); if(ags_main != NULL){ //TODO:JK: use set_property g_object_ref(G_OBJECT(ags_main)); devout->ags_main = ags_main; } return(devout); } gsequencer-0.6.37/src/ags/audio/ags_libao.h0000644000175000017500000001400012626272146015427 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_LIBAO_H__ #define __AGS_LIBAO_H__ #include #include #include #include #include #include #include #include #include #include #include #define AGS_TYPE_LIBAO (ags_libao_get_type()) #define AGS_LIBAO(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_LIBAO, AgsLibao)) #define AGS_LIBAO_CLASS(class) (G_TYPE_CHECK_CLASS_CAST(class, AGS_TYPE_LIBAO, AgsLibao)) #define AGS_IS_LIBAO(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_LIBAO)) #define AGS_IS_LIBAO_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_LIBAO)) #define AGS_LIBAO_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS(obj, AGS_TYPE_LIBAO, AgsLibaoClass)) #define AGS_LIBAO_PLAY_DOMAIN(ptr) ((AgsLibaoPlayDomain *)(ptr)) #define AGS_LIBAO_PLAY(ptr) ((AgsLibaoPlay *)(ptr)) #define AGS_LIBAO_DEFAULT_SAMPLERATE (44100.0) #define AGS_LIBAO_DEFAULT_BUFFER_SIZE (940) #define AGS_LIBAO_DEFAULT_BPM (120.0) #define AGS_LIBAO_DEFAULT_JIFFIE ((double) AGS_LIBAO_DEFAULT_SAMPLERATE / (double) AGS_LIBAO_DEFAULT_BUFFER_SIZE) #define AGS_LIBAO_DEFAULT_TACT (1.0) #define AGS_LIBAO_DEFAULT_TACT_JIFFIE (60.0 / AGS_LIBAO_DEFAULT_BPM * AGS_LIBAO_DEFAULT_TACT) #define AGS_LIBAO_DEFAULT_TACTRATE (1.0 / AGS_LIBAO_DEFAULT_TACT_JIFFIE) #define AGS_LIBAO_DEFAULT_DELAY (AGS_LIBAO_DEFAULT_JIFFIE / AGS_LIBAO_DEFAULT_TACTRATE) typedef struct _AgsLibao AgsLibao; typedef struct _AgsLibaoClass AgsLibaoClass; typedef struct _AgsLibaoPlay AgsLibaoPlay; typedef struct _AgsLibaoPlayDomain AgsLibaoPlayDomain; typedef enum { AGS_LIBAO_BUFFER0 = 1, AGS_LIBAO_BUFFER1 = 1 << 1, AGS_LIBAO_BUFFER2 = 1 << 2, AGS_LIBAO_BUFFER3 = 1 << 3, AGS_LIBAO_ATTACK_FIRST = 1 << 4, AGS_LIBAO_PLAY = 1 << 5, AGS_LIBAO_LIBAO = 1 << 6, AGS_LIBAO_OSS = 1 << 7, AGS_LIBAO_ALSA = 1 << 8, AGS_LIBAO_SHUTDOWN = 1 << 9, AGS_LIBAO_START_PLAY = 1 << 10, AGS_LIBAO_NONBLOCKING = 1 << 11, AGS_LIBAO_TIMING_SET_0 = 1 << 12, AGS_LIBAO_TIMING_SET_1 = 1 << 13, }AgsLibaoFlags; typedef enum { AGS_LIBAO_PLAY_DONE = 1, AGS_LIBAO_PLAY_REMOVE = 1 << 1, AGS_LIBAO_PLAY_CHANNEL = 1 << 2, AGS_LIBAO_PLAY_PAD = 1 << 3, AGS_LIBAO_PLAY_AUDIO = 1 << 4, AGS_LIBAO_PLAY_PLAYBACK = 1 << 5, AGS_LIBAO_PLAY_SEQUENCER = 1 << 6, AGS_LIBAO_PLAY_NOTATION = 1 << 7, AGS_LIBAO_PLAY_SUPER_THREADED = 1 << 8, }AgsLibaoPlayFlags; typedef enum{ AGS_LIBAO_RESOLUTION_8_BIT = 8, AGS_LIBAO_RESOLUTION_16_BIT = 16, AGS_LIBAO_RESOLUTION_24_BIT = 24, AGS_LIBAO_RESOLUTION_32_BIT = 32, AGS_LIBAO_RESOLUTION_64_BIT = 64, }AgsLibaoResolutionMode; #define AGS_LIBAO_ERROR (ags_libao_error_quark()) typedef enum{ AGS_LIBAO_ERROR_LOCKED_SOUNDCARD, }AgsLibaoError; struct _AgsLibao { GObject object; guint flags; guint dsp_channels; guint pcm_channels; guint bits; guint buffer_size; guint frequency; // sample_rate signed short** buffer; double bpm; // beats per minute gdouble *delay; // count of tics within buffer size guint *attack; // where currently tic resides in the stream's offset, measured in 1/64 of bpm gdouble delay_counter; // next time attack changeing when delay_counter == delay guint tic_counter; union{ struct _AgsAO{ ao_device *device; ao_sample_format *format; int driver_ao; }ao; }out; GObject *ags_main; GList *audio; }; struct _AgsLibaoClass { GObjectClass object; void (*play_init)(AgsLibao *libao, GError **error); void (*play)(AgsLibao *libao, GError **error); void (*stop)(AgsLibao *libao); void (*tic)(AgsLibao *libao); void (*note_offset_changed)(AgsLibao *libao, guint note_offset); }; struct _AgsLibaoPlayDomain { GObject *domain; gboolean playback; gboolean sequencer; gboolean notation; GList *libao_play; }; struct _AgsLibaoPlay { guint flags; AgsIteratorThread **iterator_thread; GObject *source; guint audio_channel; AgsRecallID *recall_id[3]; }; GType ags_libao_get_type(); GQuark ags_libao_error_quark(); AgsLibaoPlayDomain* ags_libao_play_domain_alloc(); void ags_libao_play_domain_free(AgsLibaoPlayDomain *libao_play_domain); AgsLibaoPlay* ags_libao_play_alloc(); void ags_libao_play_free(AgsLibaoPlay *libao_play); void ags_libao_list_cards(GList **card_id, GList **card_name); void ags_libao_pcm_info(char *card_id, guint *channels_min, guint *channels_max, guint *rate_min, guint *rate_max, guint *buffer_size_min, guint *buffer_size_max, GError **error); void ags_libao_tic(AgsLibao *libao); void ags_libao_note_offset_changed(AgsLibao *libao, guint note_offset); AgsLibao* ags_libao_new(GObject *ags_main); #endif /*__AGS_LIBAO_H__*/ gsequencer-0.6.37/src/ags/audio/ags_recall_audio_signal.c0000644000175000017500000004307612626272146020333 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include void ags_recall_audio_signal_class_init(AgsRecallAudioSignalClass *recall_audio_signal); void ags_recall_audio_signal_connectable_interface_init(AgsConnectableInterface *connectable); void ags_recall_audio_signal_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable); void ags_recall_audio_signal_init(AgsRecallAudioSignal *recall_audio_signal); void ags_recall_audio_signal_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_recall_audio_signal_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_recall_audio_signal_connect(AgsConnectable *connectable); void ags_recall_audio_signal_disconnect(AgsConnectable *connectable); void ags_recall_audio_signal_connect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_recall_audio_signal_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_recall_audio_signal_finalize(GObject *gobject); void ags_recall_audio_signal_run_init_pre(AgsRecall *recall); void ags_recall_audio_signal_run_init_inter(AgsRecall *recall); void ags_recall_audio_signal_run_init_post(AgsRecall *recall); void ags_recall_audio_signal_run_pre(AgsRecall *recall); void ags_recall_audio_signal_run_inter(AgsRecall *recall); void ags_recall_audio_signal_run_post(AgsRecall *recall); void ags_recall_audio_signal_done(AgsRecall *recall); AgsRecall* ags_recall_audio_signal_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter); void ags_recall_audio_signal_notify_devout(AgsRecallAudioSignal *recall_audio_signal, GParamSpec *param, gpointer data); void ags_recall_audio_signal_notify_devout_after(AgsRecallAudioSignal *recall_audio_signal, GParamSpec *param, gpointer data); /** * SECTION:ags_recall_audio_signal * @Short_description: audio signal context of recall * @Title: AgsRecallAudioSignal * * #AgsRecallAudioSignal acts as audio signal recall. */ enum{ PROP_0, PROP_AUDIO_CHANNEL, PROP_DESTINATION, PROP_SOURCE, }; static gpointer ags_recall_audio_signal_parent_class = NULL; static AgsConnectableInterface *ags_recall_audio_signal_parent_connectable_interface; static AgsDynamicConnectableInterface *ags_recall_audio_signal_parent_dynamic_connectable_interface; GType ags_recall_audio_signal_get_type() { static GType ags_type_recall_audio_signal = 0; if(!ags_type_recall_audio_signal){ static const GTypeInfo ags_recall_audio_signal_info = { sizeof (AgsRecallAudioSignalClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_recall_audio_signal_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsRecallAudioSignal), 0, /* n_preallocs */ (GInstanceInitFunc) ags_recall_audio_signal_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_recall_audio_signal_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_dynamic_connectable_interface_info = { (GInterfaceInitFunc) ags_recall_audio_signal_dynamic_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_recall_audio_signal = g_type_register_static(AGS_TYPE_RECALL, "AgsRecallAudioSignal\0", &ags_recall_audio_signal_info, 0); g_type_add_interface_static(ags_type_recall_audio_signal, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_recall_audio_signal, AGS_TYPE_DYNAMIC_CONNECTABLE, &ags_dynamic_connectable_interface_info); } return(ags_type_recall_audio_signal); } void ags_recall_audio_signal_class_init(AgsRecallAudioSignalClass *recall_audio_signal) { GObjectClass *gobject; AgsRecallClass *recall; GParamSpec *param_spec; ags_recall_audio_signal_parent_class = g_type_class_peek_parent(recall_audio_signal); /* GObjectClass */ gobject = (GObjectClass *) recall_audio_signal; gobject->set_property = ags_recall_audio_signal_set_property; gobject->get_property = ags_recall_audio_signal_get_property; gobject->finalize = ags_recall_audio_signal_finalize; /* for debugging purpose */ recall = (AgsRecallClass *) recall_audio_signal; recall->run_init_pre = ags_recall_audio_signal_run_init_pre; recall->run_init_inter = ags_recall_audio_signal_run_init_inter; recall->run_init_post = ags_recall_audio_signal_run_init_post; recall->run_pre = ags_recall_audio_signal_run_pre; recall->run_inter = ags_recall_audio_signal_run_inter; recall->run_post = ags_recall_audio_signal_run_post; /* properties */ /** * AgsRecallAudioSignal:audio-channel: * * The audio channel to write use. * * Since: 0.4.0 */ param_spec = g_param_spec_uint("audio-channel\0", "output to audio channel\0", "The audio channel to which it should write\0", 0, 65536, 0, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_AUDIO_CHANNEL, param_spec); /** * AgsRecallAudioSignal:destination: * * The destination audio signal * * Since: 0.4.0 */ param_spec = g_param_spec_object("destination\0", "destination of output\0", "The destination where this recall will write the audio signal to\0", AGS_TYPE_AUDIO_SIGNAL, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_DESTINATION, param_spec); /** * AgsRecallAudioSignal:source: * * The source audio signal * * Since: 0.4.0 */ param_spec = g_param_spec_object("source\0", "source of input\0", "The source where this recall will take the audio signal from\0", AGS_TYPE_AUDIO_SIGNAL, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_SOURCE, param_spec); /* AgsRecallClass */ recall = (AgsRecallClass *) recall_audio_signal; recall->done = ags_recall_audio_signal_done; recall->duplicate = ags_recall_audio_signal_duplicate; } void ags_recall_audio_signal_connectable_interface_init(AgsConnectableInterface *connectable) { ags_recall_audio_signal_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_recall_audio_signal_connect; connectable->disconnect = ags_recall_audio_signal_disconnect; } void ags_recall_audio_signal_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable) { ags_recall_audio_signal_parent_dynamic_connectable_interface = g_type_interface_peek_parent(dynamic_connectable); dynamic_connectable->connect_dynamic = ags_recall_audio_signal_connect_dynamic; dynamic_connectable->disconnect_dynamic = ags_recall_audio_signal_disconnect_dynamic; } void ags_recall_audio_signal_init(AgsRecallAudioSignal *recall_audio_signal) { // g_signal_connect(G_OBJECT(recall_audio_signal), "notify::devout\0", // G_CALLBACK(ags_recall_audio_signal_notify_devout), NULL); // g_signal_connect_after(G_OBJECT(recall_audio_signal), "notify::devout\0", // G_CALLBACK(ags_recall_audio_signal_notify_devout_after), NULL); recall_audio_signal->flags = AGS_RECALL_INITIAL_RUN; recall_audio_signal->audio_channel = 0; recall_audio_signal->source = NULL; recall_audio_signal->destination = NULL; } void ags_recall_audio_signal_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsRecallAudioSignal *recall_audio_signal; recall_audio_signal = AGS_RECALL_AUDIO_SIGNAL(gobject); switch(prop_id){ case PROP_AUDIO_CHANNEL: { guint audio_channel; audio_channel = (guint) g_value_get_uint(value); recall_audio_signal->audio_channel = audio_channel; } break; case PROP_DESTINATION: { AgsAudioSignal *destination; destination = (AgsAudioSignal *) g_value_get_object(value); if(recall_audio_signal->destination == destination) return; if(recall_audio_signal->destination != NULL) g_object_unref(recall_audio_signal->destination); if(destination != NULL) g_object_ref(G_OBJECT(destination)); recall_audio_signal->destination = destination; } break; case PROP_SOURCE: { AgsAudioSignal *source; source = (AgsAudioSignal *) g_value_get_object(value); if(recall_audio_signal->source == source) return; if(recall_audio_signal->source != NULL) g_object_unref(recall_audio_signal->source); if(source != NULL) g_object_ref(G_OBJECT(source)); recall_audio_signal->source = source; } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_recall_audio_signal_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsRecallAudioSignal *recall_audio_signal; recall_audio_signal = AGS_RECALL_AUDIO_SIGNAL(gobject); switch(prop_id){ case PROP_AUDIO_CHANNEL: { g_value_set_uint(value, recall_audio_signal->audio_channel); } break; case PROP_DESTINATION: { g_value_set_object(value, recall_audio_signal->destination); } break; case PROP_SOURCE: { g_value_set_object(value, recall_audio_signal->source); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_recall_audio_signal_connect(AgsConnectable *connectable) { AgsRecallAudioSignal *recall_audio_signal; ags_recall_audio_signal_parent_connectable_interface->connect(connectable); /* empty */ } void ags_recall_audio_signal_disconnect(AgsConnectable *connectable) { ags_recall_audio_signal_parent_connectable_interface->disconnect(connectable); } void ags_recall_audio_signal_connect_dynamic(AgsDynamicConnectable *dynamic_connectable) { ags_recall_audio_signal_parent_dynamic_connectable_interface->connect_dynamic(dynamic_connectable); } void ags_recall_audio_signal_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable) { ags_recall_audio_signal_parent_dynamic_connectable_interface->disconnect_dynamic(dynamic_connectable); } void ags_recall_audio_signal_finalize(GObject *gobject) { AgsRecallAudioSignal *recall_audio_signal; recall_audio_signal = AGS_RECALL_AUDIO_SIGNAL(gobject); if(recall_audio_signal->destination != NULL){ g_object_unref(recall_audio_signal->destination); recall_audio_signal->destination = NULL; } if(recall_audio_signal->source != NULL){ g_object_unref(recall_audio_signal->source); recall_audio_signal->source = NULL; } /* call parent */ G_OBJECT_CLASS(ags_recall_audio_signal_parent_class)->finalize(gobject); } AgsRecall* ags_recall_audio_signal_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter) { AgsRecallAudioSignal *recall_audio_signal, *copy; recall_audio_signal = AGS_RECALL_AUDIO_SIGNAL(recall); parameter = ags_parameter_grow(G_OBJECT_TYPE(recall), parameter, n_params, "devout\0", AGS_RECALL(recall_audio_signal)->devout, "audio_channel\0", recall_audio_signal->audio_channel, "destination\0", recall_audio_signal->destination, "source\0", recall_audio_signal->source, NULL); copy = (AgsRecallAudioSignal *) AGS_RECALL_CLASS(ags_recall_audio_signal_parent_class)->duplicate(recall, recall_id, n_params, parameter); return((AgsRecall *) copy); } void ags_recall_audio_signal_run_init_pre(AgsRecall *recall){ AgsAudioSignal *source, *destination; source = AGS_RECALL_AUDIO_SIGNAL(recall)->source; destination = AGS_RECALL_AUDIO_SIGNAL(recall)->destination; AGS_RECALL_CLASS(ags_recall_audio_signal_parent_class)->run_init_pre(recall); if(source != NULL && (AGS_AUDIO_SIGNAL_TEMPLATE & (source->flags)) != 0) g_warning("AgsRecallAudioSignal@source - AGS_AUDIO_SIGNAL_TEMPLATE: run_init_pre\n\0"); if(destination != NULL && (AGS_AUDIO_SIGNAL_TEMPLATE & (destination->flags)) != 0) g_warning("AgsRecallAudioSignal@destination - AGS_AUDIO_SIGNAL_TEMPLATE: run_init_pre\n\0"); } void ags_recall_audio_signal_run_init_inter(AgsRecall *recall){ AgsAudioSignal *source, *destination; source = AGS_RECALL_AUDIO_SIGNAL(recall)->source; destination = AGS_RECALL_AUDIO_SIGNAL(recall)->destination; AGS_RECALL_CLASS(ags_recall_audio_signal_parent_class)->run_init_inter(recall); if(source != NULL && (AGS_AUDIO_SIGNAL_TEMPLATE & (source->flags)) != 0) g_warning("AgsRecallAudioSignal@source - AGS_AUDIO_SIGNAL_TEMPLATE: run_init_inter\n\0"); if(destination != NULL && (AGS_AUDIO_SIGNAL_TEMPLATE & (destination->flags)) != 0) g_warning("AgsRecallAudioSignal@destination - AGS_AUDIO_SIGNAL_TEMPLATE: run_init_inter\n\0"); } void ags_recall_audio_signal_run_init_post(AgsRecall *recall){ AgsAudioSignal *source, *destination; source = AGS_RECALL_AUDIO_SIGNAL(recall)->source; destination = AGS_RECALL_AUDIO_SIGNAL(recall)->destination; AGS_RECALL_CLASS(ags_recall_audio_signal_parent_class)->run_init_post(recall); if(source != NULL && (AGS_AUDIO_SIGNAL_TEMPLATE & (source->flags)) != 0) g_warning("AgsRecallAudioSignal@source - AGS_AUDIO_SIGNAL_TEMPLATE: run_init_post\n\0"); if(destination != NULL && (AGS_AUDIO_SIGNAL_TEMPLATE & (destination->flags)) != 0) g_warning("AgsRecallAudioSignal@destination - AGS_AUDIO_SIGNAL_TEMPLATE: run_init_post\n\0"); } void ags_recall_audio_signal_run_pre(AgsRecall *recall){ AgsAudioSignal *source, *destination; source = AGS_RECALL_AUDIO_SIGNAL(recall)->source; destination = AGS_RECALL_AUDIO_SIGNAL(recall)->destination; AGS_RECALL_CLASS(ags_recall_audio_signal_parent_class)->run_pre(recall); if(source != NULL && (AGS_AUDIO_SIGNAL_TEMPLATE & (source->flags)) != 0) g_warning("AgsRecallAudioSignal@source - AGS_AUDIO_SIGNAL_TEMPLATE: run_pre\n\0"); if(destination != NULL && (AGS_AUDIO_SIGNAL_TEMPLATE & (destination->flags)) != 0) g_warning("AgsRecallAudioSignal@destination - AGS_AUDIO_SIGNAL_TEMPLATE: run_pre\n\0"); } void ags_recall_audio_signal_run_inter(AgsRecall *recall){ AgsAudioSignal *source, *destination; source = AGS_RECALL_AUDIO_SIGNAL(recall)->source; destination = AGS_RECALL_AUDIO_SIGNAL(recall)->destination; AGS_RECALL_CLASS(ags_recall_audio_signal_parent_class)->run_inter(recall); if(source != NULL && (AGS_AUDIO_SIGNAL_TEMPLATE & (source->flags)) != 0) g_warning("AgsRecallAudioSignal@source - AGS_AUDIO_SIGNAL_TEMPLATE: run_inter\n\0"); if(destination != NULL && (AGS_AUDIO_SIGNAL_TEMPLATE & (destination->flags)) != 0) g_warning("AgsRecallAudioSignal@destination - AGS_AUDIO_SIGNAL_TEMPLATE: run_inter\n\0"); } void ags_recall_audio_signal_run_post(AgsRecall *recall){ AgsAudioSignal *source, *destination; source = AGS_RECALL_AUDIO_SIGNAL(recall)->source; destination = AGS_RECALL_AUDIO_SIGNAL(recall)->destination; AGS_RECALL_CLASS(ags_recall_audio_signal_parent_class)->run_post(recall); if(source != NULL && (AGS_AUDIO_SIGNAL_TEMPLATE & (source->flags)) != 0) g_warning("AgsRecallAudioSignal@source - AGS_AUDIO_SIGNAL_TEMPLATE: run_post\n\0"); if(destination != NULL && (AGS_AUDIO_SIGNAL_TEMPLATE & (destination->flags)) != 0) g_warning("AgsRecallAudioSignal@destination - AGS_AUDIO_SIGNAL_TEMPLATE: run_post\n\0"); } void ags_recall_audio_signal_done(AgsRecall *recall) { g_object_unref(G_OBJECT(recall)); } void ags_recall_audio_signal_notify_devout(AgsRecallAudioSignal *recall_audio_signal, GParamSpec *param, gpointer data) { //TODO:JK: implement me } void ags_recall_audio_signal_notify_devout_after(AgsRecallAudioSignal *recall_audio_signal, GParamSpec *param, gpointer data) { //TODO:JK: implement me } /** * ags_recall_audio_signal_new: * @destination: destination #AgsAudioSignal * @source: source #AgsAudioSignal * @devout: default sink #AgsDevout * * Creates an #AgsRecallAudioSignal. * * Returns: a new #AgsRecallAudioSignal. * * Since: 0.4 */ AgsRecallAudioSignal* ags_recall_audio_signal_new(AgsAudioSignal *destination, AgsAudioSignal *source, AgsDevout *devout) { AgsRecallAudioSignal *recall_audio_signal; recall_audio_signal = (AgsRecallAudioSignal *) g_object_new(AGS_TYPE_RECALL_AUDIO_SIGNAL, "devout\0", devout, "destination\0", destination, "source\0", source, NULL); return(recall_audio_signal); } gsequencer-0.6.37/src/ags/audio/ags_recall_container.c0000644000175000017500000004075612626272146017661 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include void ags_recall_container_class_init(AgsRecallContainerClass *recall_class); void ags_recall_container_connectable_interface_init(AgsConnectableInterface *connectable); void ags_recall_container_init(AgsRecallContainer *recall); void ags_recall_container_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_recall_container_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_recall_container_connect(AgsConnectable *connectable); void ags_recall_container_disconnect(AgsConnectable *connectable); void ags_recall_container_finalize(GObject *recall); /** * SECTION:ags_recall_container * @short_description: Container to group recalls * @title: AgsRecallContainer * @section_id: * @include: ags/audio/ags_recall_container.h * * #AgsRecallContainer groups recalls of different context. */ enum{ PROP_0, PROP_RECALL_AUDIO_TYPE, PROP_RECALL_AUDIO, PROP_RECALL_AUDIO_RUN_TYPE, PROP_RECALL_AUDIO_RUN, PROP_RECALL_CHANNEL_TYPE, PROP_RECALL_CHANNEL, PROP_RECALL_CHANNEL_RUN_TYPE, PROP_RECALL_CHANNEL_RUN, }; static gpointer ags_recall_container_parent_class = NULL; GType ags_recall_container_get_type (void) { static GType ags_type_recall_container = 0; if(!ags_type_recall_container){ static const GTypeInfo ags_recall_container_info = { sizeof (AgsRecallContainerClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_recall_container_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsRecallContainer), 0, /* n_preallocs */ (GInstanceInitFunc) ags_recall_container_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_recall_container_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_recall_container = g_type_register_static(G_TYPE_OBJECT, "AgsRecallContainer\0", &ags_recall_container_info, 0); g_type_add_interface_static(ags_type_recall_container, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return(ags_type_recall_container); } void ags_recall_container_class_init(AgsRecallContainerClass *recall_container) { GObjectClass *gobject; GParamSpec *param_spec; ags_recall_container_parent_class = g_type_class_peek_parent(recall_container); /* GObjectClass */ gobject = (GObjectClass *) recall_container; gobject->finalize = ags_recall_container_finalize; gobject->set_property = ags_recall_container_set_property; gobject->get_property = ags_recall_container_get_property; /* properties */ /** * RecallContainer:recall-audio-type: * * The associated recall type within audio context. * * Since: 0.4.0 */ param_spec = g_param_spec_gtype("recall-audio-type\0", "audio level recall type\0", "The recall type which this recall container has on audio level\0", G_TYPE_NONE, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_RECALL_AUDIO_TYPE, param_spec); /** * RecallContainer:recall-audio: * * The associated recall within audio context. * * Since: 0.4.0 */ param_spec = g_param_spec_object("recall-audio\0", "audio level recall\0", "The recall which this recall container has on audio level\0", AGS_TYPE_RECALL_AUDIO, G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_RECALL_AUDIO, param_spec); /** * RecallContainer:recall-audio-run-type: * * The associated recall type within dynamic audio context. * * Since: 0.4.0 */ param_spec = g_param_spec_gtype("recall-audio-run-type\0", "audio runlevel recall type\0", "The recall type which this recall container has on audio level during a run\0", G_TYPE_NONE, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_RECALL_AUDIO_RUN_TYPE, param_spec); /** * RecallContainer:recall-audio-run: * * The associated recall within dynamic audio context. * * Since: 0.4.0 */ param_spec = g_param_spec_object("recall-audio-run\0", "audio runlevel recall\0", "The recall which this recall container has on audio level during a run\0", AGS_TYPE_RECALL_AUDIO_RUN, G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_RECALL_AUDIO_RUN, param_spec); /** * RecallContainer:recall-channel-type: * * The associated recall type within channel context. * * Since: 0.4.0 */ param_spec = g_param_spec_gtype("recall-channel-type\0", "channel level recall type\0", "The recall type which this recall container has on channel level\0", G_TYPE_NONE, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_RECALL_CHANNEL_TYPE, param_spec); /** * RecallContainer:recall-channel: * * The associated recall within channel context. * * Since: 0.4.0 */ param_spec = g_param_spec_object("recall-channel\0", "channel level recall\0", "The recall which this recall container has on channel level\0", AGS_TYPE_RECALL_CHANNEL, G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_RECALL_CHANNEL, param_spec); /** * RecallContainer:recall-channel-run-type: * * The associated recall type within dynamic channel context. * * Since: 0.4.0 */ param_spec = g_param_spec_gtype("recall_channel_run_type\0", "channel runlevel recall type\0", "The recall type which this recall container has on audio level during a run\0", G_TYPE_NONE, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_RECALL_CHANNEL_RUN_TYPE, param_spec); /** * RecallContainer:recall-audio-run: * * The associated recall within dynamic channel context. * * Since: 0.4.0 */ param_spec = g_param_spec_object("recall_channel_run\0", "channel runlevel recall\0", "The recall which this recall container has on audio level during a run\0", AGS_TYPE_RECALL_CHANNEL_RUN, G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_RECALL_CHANNEL_RUN, param_spec); } void ags_recall_container_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->connect = ags_recall_container_connect; connectable->disconnect = ags_recall_container_disconnect; } void ags_recall_container_init(AgsRecallContainer *recall_container) { recall_container->flags = 0; recall_container->recall_audio = NULL; recall_container->recall_audio_run = NULL; recall_container->recall_channel = NULL; recall_container->recall_channel_run = NULL; } void ags_recall_container_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsRecallContainer *recall_container; recall_container = AGS_RECALL_CONTAINER(gobject); switch(prop_id){ case PROP_RECALL_AUDIO_TYPE: { GType recall_audio_type; recall_audio_type = (GType) g_value_get_gtype(value); recall_container->recall_audio_type = recall_audio_type; } break; case PROP_RECALL_AUDIO: { AgsRecallAudio *recall_audio; recall_audio = (AgsRecallAudio *) g_value_get_object(value); if(recall_container->recall_audio == (AgsRecall *) recall_audio) return; if(recall_container->recall_audio != NULL){ g_object_unref(G_OBJECT(recall_container->recall_audio)); } if(recall_audio != NULL){ g_object_ref(G_OBJECT(recall_audio)); } recall_container->recall_audio = (AgsRecall *) recall_audio; } break; case PROP_RECALL_AUDIO_RUN_TYPE: { GType recall_audio_run_type; recall_audio_run_type = g_value_get_gtype(value); recall_container->recall_audio_run_type = recall_audio_run_type; } break; case PROP_RECALL_AUDIO_RUN: { AgsRecallAudioRun *recall_audio_run; recall_audio_run = (AgsRecallAudioRun *) g_value_get_object(value); if(recall_audio_run == NULL || g_list_find(recall_container->recall_audio_run, recall_audio_run) != NULL) return; if(recall_audio_run != NULL){ g_object_ref(G_OBJECT(recall_audio_run)); } recall_container->recall_audio_run = g_list_prepend(recall_container->recall_audio_run, recall_audio_run); } break; case PROP_RECALL_CHANNEL_TYPE: { GType recall_channel_type; recall_channel_type = (GType) g_value_get_gtype(value); recall_container->recall_channel_type = recall_channel_type; } break; case PROP_RECALL_CHANNEL: { AgsRecallChannel *recall_channel; recall_channel = (AgsRecallChannel *) g_value_get_object(value); if(recall_channel == NULL || g_list_find(recall_container->recall_channel, recall_channel) != NULL) return; g_object_ref(G_OBJECT(recall_channel)); recall_container->recall_channel = g_list_prepend(recall_container->recall_channel, recall_channel); } break; case PROP_RECALL_CHANNEL_RUN_TYPE: { GType recall_channel_run_type; recall_channel_run_type = (GType) g_value_get_gtype(value); recall_container->recall_channel_run_type = recall_channel_run_type; } break; case PROP_RECALL_CHANNEL_RUN: { AgsRecallChannelRun *recall_channel_run; recall_channel_run = (AgsRecallChannelRun *) g_value_get_object(value); if(recall_channel_run == NULL || g_list_find(recall_container->recall_channel_run, recall_channel_run) != NULL) return; g_object_ref(G_OBJECT(recall_channel_run)); recall_container->recall_channel_run = g_list_prepend(recall_container->recall_channel_run, recall_channel_run); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_recall_container_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsRecallContainer *recall_container; recall_container = AGS_RECALL_CONTAINER(gobject); switch(prop_id){ case PROP_RECALL_AUDIO_TYPE: g_value_set_gtype(value, recall_container->recall_audio_type); break; case PROP_RECALL_AUDIO_RUN_TYPE: g_value_set_gtype(value, recall_container->recall_audio_run_type); break; case PROP_RECALL_CHANNEL_TYPE: g_value_set_gtype(value, recall_container->recall_channel_type); break; case PROP_RECALL_CHANNEL_RUN_TYPE: g_value_set_gtype(value, recall_container->recall_channel_run_type); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_recall_container_connect(AgsConnectable *connectable) { /* empty */ } void ags_recall_container_disconnect(AgsConnectable *connectable) { /* empty */ } void ags_recall_container_finalize(GObject *gobject) { AgsRecallContainer *container; GList *list, *list_next; container = AGS_RECALL_CONTAINER(gobject); ags_packable_unpack(AGS_PACKABLE(container->recall_audio)); list = container->recall_audio_run; while(list != NULL){ list_next = list->next; ags_packable_unpack(AGS_PACKABLE(container->recall_audio_run)); list = list_next; } list = container->recall_channel; while(list != NULL){ list_next = list->next; ags_packable_unpack(AGS_PACKABLE(container->recall_channel)); list = list_next; } list = container->recall_channel_run; while(list != NULL){ list_next = list->next; ags_packable_unpack(AGS_PACKABLE(container->recall_channel_run)); list = list_next; } /* call parent */ G_OBJECT_CLASS(ags_recall_container_parent_class)->finalize(gobject); } /** * ags_recall_container_get_recall_audio: * @container: the #AgsRecallContainer * * Retrieve recall audio of container. * * Returns: the #AgsRecallAudio * * Since: 0.4 */ AgsRecall* ags_recall_container_get_recall_audio(AgsRecallContainer *container) { return(container->recall_audio); } /** * ags_recall_container_get_recall_audio_run: * @container: the #AgsRecallContainer * * Retrieve recall audio run of container. * * Returns: the #AgsRecallAudioRun as list * * Since: 0.4 */ GList* ags_recall_container_get_recall_audio_run(AgsRecallContainer *container) { return(container->recall_audio_run); } /** * ags_recall_container_get_recall_channel: * @container: the #AgsRecallContainer * * Retrieve the recall channel of container. * * Returns: the #AgsRecallChannel * * Since: 0.4 */ GList* ags_recall_container_get_recall_channel(AgsRecallContainer *container) { return(container->recall_channel); } /** * ags_recall_container_get_recall_channel_run: * @container: the #AgsRecallContainer * * Retrieve the recall channel run of container. * * Returns: the #AgsRecall * * Since: 0.4 */ GList* ags_recall_container_get_recall_channel_run(AgsRecallContainer *container) { return(container->recall_channel_run); } /** * ags_recall_container_find: * @recall_container: the #AgsRecallContainer * @type: recall type * @find_flags: search mask * @recall_id: an #AgsRecallID * * Finds #AgsRecall for appropriate search criteria. * * Returns: the matching recalls * * Since: 0.4 */ GList* ags_recall_container_find(GList *recall_container, GType type, guint find_flags, AgsRecallID *recall_id) { AgsRecallContainer *current; AgsRecall *recall; guint mode; if(g_type_is_a(type, AGS_TYPE_RECALL_AUDIO)){ mode = 0; }else if(g_type_is_a(type, AGS_TYPE_RECALL_AUDIO_RUN)){ mode = 1; }else if(g_type_is_a(type, AGS_TYPE_RECALL_CHANNEL)){ mode = 2; }else if(g_type_is_a(type, AGS_TYPE_RECALL_CHANNEL_RUN)){ mode = 3; }else{ g_message("ags_recall_container_find: invalid type\n\0"); return(NULL); } while(recall_container != NULL){ current = AGS_RECALL_CONTAINER(recall_container->data); if(mode == 0){ recall = ags_recall_container_get_recall_audio(current); }else if(mode == 1){ GList *list; list = ags_recall_container_get_recall_audio_run(current); if(list == NULL) recall = NULL; else recall = AGS_RECALL(list->data); }else if(mode == 2){ GList *list; list = ags_recall_container_get_recall_channel(current); if(list == NULL) recall = NULL; else recall = AGS_RECALL(list->data); }else if(mode == 3){ GList *list; list = ags_recall_container_get_recall_channel_run(current); if(list == NULL) recall = NULL; else recall = AGS_RECALL(list->data); } if(recall != NULL){ if(((AGS_RECALL_CONTAINER_FIND_TYPE & find_flags) == 0 || G_OBJECT_TYPE(recall) == type) && ((AGS_RECALL_CONTAINER_FIND_TEMPLATE & find_flags) == 0 || (AGS_RECALL_TEMPLATE & (recall->flags)) != 0) && ((AGS_RECALL_CONTAINER_FIND_RECALL_ID & find_flags) == 0 || (recall->recall_id != NULL && recall->recall_id == recall_id))){ break; } } recall_container = recall_container->next; } return(recall_container); } /** * ags_recall_container_new: * * Creates an #AgsRecallContainer * * Returns: a new #AgsRecallContainer * * Since: 0.4 */ AgsRecallContainer* ags_recall_container_new() { AgsRecallContainer *recall_container; recall_container = (AgsRecallContainer *) g_object_new(AGS_TYPE_RECALL_CONTAINER, NULL); return(recall_container); } gsequencer-0.6.37/src/ags/audio/ags_recall_factory.c0000644000175000017500000027467112626272146017353 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void ags_recall_factory_class_init(AgsRecallFactoryClass *recall_factory_class); void ags_recall_factory_connectable_interface_init(AgsConnectableInterface *connectable); void ags_recall_factory_init(AgsRecallFactory *recall_factory); void ags_recall_factory_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_recall_factory_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_recall_factory_connect(AgsConnectable *connectable); void ags_recall_factory_disconnect(AgsConnectable *connectable); GList* ags_recall_factory_create_play(AgsAudio *audio, AgsRecallContainer *play_container, AgsRecallContainer *recall_container, gchar *plugin_name, guint start_audio_channel, guint stop_audio_channel, guint start_pad, guint stop_pad, guint create_flags, guint recall_flags); GList* ags_recall_factory_create_play_master(AgsAudio *audio, AgsRecallContainer *play_container, AgsRecallContainer *recall_container, gchar *plugin_name, guint start_audio_channel, guint stop_audio_channel, guint start_pad, guint stop_pad, guint create_flags, guint recall_flags); GList* ags_recall_factory_create_copy(AgsAudio *audio, AgsRecallContainer *play_container, AgsRecallContainer *recall_container, gchar *plugin_name, guint start_audio_channel, guint stop_audio_channel, guint start_pad, guint stop_pad, guint create_flags, guint recall_flags); GList* ags_recall_factory_create_stream(AgsAudio *audio, AgsRecallContainer *play_container, AgsRecallContainer *recall_container, gchar *plugin_name, guint start_audio_channel, guint stop_audio_channel, guint start_pad, guint stop_pad, guint create_flags, guint recall_flags); GList* ags_recall_factory_create_buffer(AgsAudio *audio, AgsRecallContainer *play_container, AgsRecallContainer *recall_container, gchar *plugin_name, guint start_audio_channel, guint stop_audio_channel, guint start_pad, guint stop_pad, guint create_flags, guint recall_flags); GList* ags_recall_factory_create_delay(AgsAudio *audio, AgsRecallContainer *play_container, AgsRecallContainer *recall_container, gchar *plugin_name, guint start_audio_channel, guint stop_audio_channel, guint start_pad, guint stop_pad, guint create_flags, guint recall_flags); GList* ags_recall_factory_create_count_beats(AgsAudio *audio, AgsRecallContainer *play_container, AgsRecallContainer *recall_container, gchar *plugin_name, guint start_audio_channel, guint stop_audio_channel, guint start_pad, guint stop_pad, guint create_flags, guint recall_flags); GList* ags_recall_factory_create_loop(AgsAudio *audio, AgsRecallContainer *play_container, AgsRecallContainer *recall_container, gchar *plugin_name, guint start_audio_channel, guint stop_audio_channel, guint start_pad, guint stop_pad, guint create_flags, guint recall_flags); GList* ags_recall_factory_create_copy_pattern(AgsAudio *audio, AgsRecallContainer *play_container, AgsRecallContainer *recall_container, gchar *plugin_name, guint start_audio_channel, guint stop_audio_channel, guint start_pad, guint stop_pad, guint create_flags, guint recall_flags); GList* ags_recall_factory_create_play_notation(AgsAudio *audio, AgsRecallContainer *play_container, AgsRecallContainer *recall_container, gchar *plugin_name, guint start_audio_channel, guint stop_audio_channel, guint start_pad, guint stop_pad, guint create_flags, guint recall_flags); GList* ags_recall_factory_create_peak(AgsAudio *audio, AgsRecallContainer *play_container, AgsRecallContainer *recall_container, gchar *plugin_name, guint start_audio_channel, guint stop_audio_channel, guint start_pad, guint stop_pad, guint create_flags, guint recall_flags); GList* ags_recall_factory_create_mute(AgsAudio *audio, AgsRecallContainer *play_container, AgsRecallContainer *recall_container, gchar *plugin_name, guint start_audio_channel, guint stop_audio_channel, guint start_pad, guint stop_pad, guint create_flags, guint recall_flags); GList* ags_recall_factory_create_volume(AgsAudio *audio, AgsRecallContainer *play_container, AgsRecallContainer *recall_container, gchar *plugin_name, guint start_audio_channel, guint stop_audio_channel, guint start_pad, guint stop_pad, guint create_flags, guint recall_flags); GList* ags_recall_factory_create_ladspa(AgsAudio *audio, AgsRecallContainer *play_container, AgsRecallContainer *recall_container, gchar *plugin_name, guint start_audio_channel, guint stop_audio_channel, guint start_pad, guint stop_pad, guint create_flags, guint recall_flags); /** * SECTION:ags_recall_factory * @short_description: Factory pattern * @title: AgsRecallFactory * @section_id: * @include: ags/audio/ags_recall_factory.h * * #AgsRecallFactory instantiates and sets up recalls. */ static gpointer ags_recall_factory_parent_class = NULL; extern pthread_mutex_t ags_application_mutex; GType ags_recall_factory_get_type (void) { static GType ags_type_recall_factory = 0; if(!ags_type_recall_factory){ static const GTypeInfo ags_recall_factory_info = { sizeof (AgsRecallFactoryClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_recall_factory_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsRecallFactory), 0, /* n_preallocs */ (GInstanceInitFunc) ags_recall_factory_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_recall_factory_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_recall_factory = g_type_register_static(G_TYPE_OBJECT, "AgsRecallFactory\0", &ags_recall_factory_info, 0); g_type_add_interface_static(ags_type_recall_factory, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return(ags_type_recall_factory); } void ags_recall_factory_class_init(AgsRecallFactoryClass *recall_factory) { GObjectClass *gobject; GParamSpec *param_spec; ags_recall_factory_parent_class = g_type_class_peek_parent(recall_factory); /* GObjectClass */ gobject = (GObjectClass *) recall_factory; gobject->set_property = ags_recall_factory_set_property; gobject->get_property = ags_recall_factory_get_property; } void ags_recall_factory_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->add_to_registry = NULL; connectable->remove_from_registry = NULL; connectable->connect = ags_recall_factory_connect; connectable->disconnect = ags_recall_factory_disconnect; } void ags_recall_factory_init(AgsRecallFactory *recall_factory) { } void ags_recall_factory_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsRecallFactory *recall_factory; recall_factory = AGS_RECALL_FACTORY(gobject); switch(prop_id){ default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_recall_factory_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsRecallFactory *recall_factory; recall_factory = AGS_RECALL_FACTORY(gobject); switch(prop_id){ default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_recall_factory_connect(AgsConnectable *connectable) { AgsRecallFactory *recall_factory; recall_factory = AGS_RECALL_FACTORY(connectable); } void ags_recall_factory_disconnect(AgsConnectable *connectable) { AgsRecallFactory *recall_factory; recall_factory = AGS_RECALL_FACTORY(connectable); } GList* ags_recall_factory_create_play(AgsAudio *audio, AgsRecallContainer *play_container, AgsRecallContainer *recall_container, gchar *plugin_name, guint start_audio_channel, guint stop_audio_channel, guint start_pad, guint stop_pad, guint create_flags, guint recall_flags) { AgsPlayChannel *play_channel; AgsPlayChannelRun *play_channel_run; AgsChannel *start, *channel; AgsPort *port; GList *list; guint i, j; if(audio == NULL){ return(NULL); } if((AGS_RECALL_FACTORY_OUTPUT & (create_flags)) != 0){ start = channel = ags_channel_nth(audio->output, start_pad * audio->audio_channels); }else{ start = channel = ags_channel_nth(audio->input, start_pad * audio->audio_channels); } list = NULL; /* play */ if((AGS_RECALL_FACTORY_PLAY & (create_flags)) != 0){ if(play_container == NULL){ play_container = ags_recall_container_new(); } play_container->flags |= AGS_RECALL_CONTAINER_PLAY; ags_audio_add_recall_container(audio, (GObject *) play_container); for(i = 0; i < stop_pad - start_pad; i++){ channel = ags_channel_nth(channel, start_audio_channel); for(j = 0; j < stop_audio_channel - start_audio_channel; j++){ ags_channel_add_recall_container(channel, (GObject *) play_container); /* AgsPlayChannel */ play_channel = (AgsPlayChannel *) g_object_new(AGS_TYPE_PLAY_CHANNEL, "devout\0", audio->devout, "source\0", channel, "recall_container\0", play_container, NULL); ags_recall_set_flags(AGS_RECALL(play_channel), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK)); play_channel->audio_channel->port_value.ags_port_uint = start_audio_channel + j; ags_channel_add_recall(channel, (GObject *) play_channel, TRUE); ags_connectable_connect(AGS_CONNECTABLE(play_channel)); /* AgsPlayChannelRun */ play_channel_run = (AgsPlayChannelRun *) g_object_new(AGS_TYPE_PLAY_CHANNEL_RUN, "devout\0", audio->devout, "source\0", channel, "recall_channel\0", play_channel, "recall_container\0", play_container, NULL); ags_recall_set_flags(AGS_RECALL(play_channel_run), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK)); ags_channel_add_recall(channel, (GObject *) play_channel_run, TRUE); ags_connectable_connect(AGS_CONNECTABLE(play_channel_run)); /* iterate */ channel = channel->next; } channel = ags_channel_nth(channel, audio->audio_channels - stop_audio_channel); } } /* recall */ if((AGS_RECALL_FACTORY_RECALL & (create_flags)) != 0){ channel = start; if(recall_container == NULL){ recall_container = ags_recall_container_new(); } ags_audio_add_recall_container(audio, (GObject *) recall_container); for(i = 0; i < stop_pad - start_pad; i++){ channel = ags_channel_nth(channel, start_audio_channel); for(j = 0; j < stop_audio_channel - start_audio_channel; j++){ ags_channel_add_recall_container(channel, (GObject *) recall_container); /* AgsPlayChannel */ play_channel = (AgsPlayChannel *) g_object_new(AGS_TYPE_PLAY_CHANNEL, "devout\0", AGS_DEVOUT(audio->devout), "source\0", channel, "recall_container\0", recall_container, NULL); ags_recall_set_flags(AGS_RECALL(play_channel), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK)); play_channel->audio_channel->port_value.ags_port_uint = start_audio_channel + j; ags_channel_add_recall(channel, (GObject *) play_channel, FALSE); ags_connectable_connect(AGS_CONNECTABLE(play_channel)); /* AgsPlayChannelRun */ play_channel_run = (AgsPlayChannelRun *) g_object_new(AGS_TYPE_PLAY_CHANNEL_RUN, "devout\0", audio->devout, "source\0", channel, "recall_channel\0", play_channel, "recall_container\0", recall_container, NULL); ags_recall_set_flags(AGS_RECALL(play_channel_run), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK)); ags_channel_add_recall(channel, (GObject *) play_channel_run, FALSE); ags_connectable_connect(AGS_CONNECTABLE(play_channel_run)); /* iterate */ channel = channel->next; } channel = ags_channel_nth(channel, audio->audio_channels - stop_audio_channel); } } } GList* ags_recall_factory_create_play_master(AgsAudio *audio, AgsRecallContainer *play_container, AgsRecallContainer *recall_container, gchar *plugin_name, guint start_audio_channel, guint stop_audio_channel, guint start_pad, guint stop_pad, guint create_flags, guint recall_flags) { AgsPlayAudio *play_audio; AgsPlayChannel *play_channel; AgsPlayChannelRunMaster *play_channel_run_master; AgsChannel *start, *channel; AgsPort *port; GList *list; guint i, j; if(audio == NULL){ return(NULL); } if((AGS_RECALL_FACTORY_OUTPUT & (create_flags)) != 0){ start = channel = ags_channel_nth(audio->output, start_pad * audio->audio_channels); }else{ start = channel = ags_channel_nth(audio->input, start_pad * audio->audio_channels); } list = NULL; /* play */ if((AGS_RECALL_FACTORY_PLAY & (create_flags)) != 0){ if((AGS_RECALL_FACTORY_REMAP & (create_flags)) == 0){ if(play_container == NULL){ play_container = ags_recall_container_new(); } play_container->flags |= AGS_RECALL_CONTAINER_PLAY; ags_audio_add_recall_container(audio, (GObject *) play_container); /* */ play_audio = (AgsPlayAudio *) g_object_new(AGS_TYPE_PLAY_AUDIO, "devout\0", audio->devout, "audio\0", audio, "recall_container\0", play_container, NULL); AGS_RECALL(play_audio)->flags |= (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION); ags_audio_add_recall(audio, (GObject *) play_audio, TRUE); }else{ GList *list; if(play_container == NULL){ list = ags_recall_find_type(audio->play, AGS_TYPE_PLAY_AUDIO); play_audio = AGS_PLAY_AUDIO(list->data); play_container = AGS_RECALL_CONTAINER(AGS_RECALL(play_audio)->container); }else{ play_audio = AGS_PLAY_AUDIO(play_container->recall_audio); } } for(i = 0; i < stop_pad - start_pad; i++){ channel = ags_channel_nth(channel, start_audio_channel); for(j = 0; j < stop_audio_channel - start_audio_channel; j++){ ags_channel_add_recall_container(channel, (GObject *) play_container); /* AgsPlayChannel */ play_channel = (AgsPlayChannel *) g_object_new(AGS_TYPE_PLAY_CHANNEL, "devout\0", AGS_DEVOUT(audio->devout), "source\0", channel, "recall_container\0", play_container, NULL); ags_recall_set_flags(AGS_RECALL(play_channel), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION)); play_channel->audio_channel->port_value.ags_port_uint = start_audio_channel + j; ags_channel_add_recall(channel, (GObject *) play_channel, TRUE); ags_connectable_connect(AGS_CONNECTABLE(play_channel)); /* AgsPlayChannelRun */ play_channel_run_master = (AgsPlayChannelRunMaster *) g_object_new(AGS_TYPE_PLAY_CHANNEL_RUN_MASTER, "devout\0", audio->devout, "source\0", channel, "recall_channel\0", play_channel, "recall_container\0", play_container, NULL); ags_recall_set_flags(AGS_RECALL(play_channel_run_master), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION)); ags_channel_add_recall(channel, (GObject *) play_channel_run_master, TRUE); ags_connectable_connect(AGS_CONNECTABLE(play_channel_run_master)); /* iterate */ channel = channel->next; } channel = ags_channel_nth(channel, audio->audio_channels - stop_audio_channel); } } /* recall */ if((AGS_RECALL_FACTORY_RECALL & (create_flags)) != 0){ channel = start; if((AGS_RECALL_FACTORY_REMAP & (create_flags)) == 0){ if(recall_container == NULL){ recall_container = ags_recall_container_new(); } ags_audio_add_recall_container(audio, (GObject *) recall_container); /* */ play_audio = (AgsPlayAudio *) g_object_new(AGS_TYPE_PLAY_AUDIO, "devout\0", audio->devout, "audio\0", audio, "recall_container\0", recall_container, NULL); AGS_RECALL(play_audio)->flags |= (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION); ags_audio_add_recall(audio, (GObject *) play_audio, FALSE); }else{ GList *list; if(recall_container == NULL){ list = ags_recall_find_type(audio->recall, AGS_TYPE_PLAY_AUDIO); play_audio = AGS_PLAY_AUDIO(list->data); recall_container = AGS_RECALL_CONTAINER(AGS_RECALL(play_audio)->container); }else{ play_audio = AGS_PLAY_AUDIO(recall_container->recall_audio); } } for(i = 0; i < stop_pad - start_pad; i++){ channel = ags_channel_nth(channel, start_audio_channel); for(j = 0; j < stop_audio_channel - start_audio_channel; j++){ ags_channel_add_recall_container(channel, (GObject *) recall_container); /* AgsPlayChannel */ play_channel = (AgsPlayChannel *) g_object_new(AGS_TYPE_PLAY_CHANNEL, "devout\0", AGS_DEVOUT(audio->devout), "source\0", channel, "recall_container\0", recall_container, NULL); ags_recall_set_flags(AGS_RECALL(play_channel), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION)); play_channel->audio_channel->port_value.ags_port_uint = start_audio_channel + j; ags_channel_add_recall(channel, (GObject *) play_channel, FALSE); ags_connectable_connect(AGS_CONNECTABLE(play_channel)); /* AgsPlayChannelRun */ play_channel_run_master = (AgsPlayChannelRunMaster *) g_object_new(AGS_TYPE_PLAY_CHANNEL_RUN_MASTER, "devout\0", audio->devout, "source\0", channel, "recall_channel\0", play_channel, "recall_container\0", recall_container, NULL); ags_recall_set_flags(AGS_RECALL(play_channel_run_master), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION)); ags_channel_add_recall(channel, (GObject *) play_channel_run_master, FALSE); ags_connectable_connect(AGS_CONNECTABLE(play_channel_run_master)); /* iterate */ channel = channel->next; } channel = ags_channel_nth(channel, audio->audio_channels - stop_audio_channel); } } } GList* ags_recall_factory_create_copy(AgsAudio *audio, AgsRecallContainer *play_container, AgsRecallContainer *recall_container, gchar *plugin_name, guint start_audio_channel, guint stop_audio_channel, guint start_pad, guint stop_pad, guint create_flags, guint recall_flags) { AgsCopyChannel *copy_channel; AgsCopyChannelRun *copy_channel_run; AgsChannel *start, *channel; AgsPort *port; GList *list; guint i, j; if(audio == NULL){ return(NULL); } if((AGS_RECALL_FACTORY_OUTPUT & (create_flags)) != 0){ start = channel = ags_channel_nth(audio->output, start_pad * audio->audio_channels); }else{ start = channel = ags_channel_nth(audio->input, start_pad * audio->audio_channels); } list = NULL; /* play */ if((AGS_RECALL_FACTORY_PLAY & (create_flags)) != 0){ if(play_container == NULL){ play_container = ags_recall_container_new(); } play_container->flags |= AGS_RECALL_CONTAINER_PLAY; ags_audio_add_recall_container(audio, (GObject *) play_container); for(i = 0; i < stop_pad - start_pad; i++){ channel = ags_channel_nth(channel, start_audio_channel); for(j = 0; j < stop_audio_channel - start_audio_channel; j++){ ags_channel_add_recall_container(channel, (GObject *) play_container); /* AgsCopyChannel */ copy_channel = (AgsCopyChannel *) g_object_new(AGS_TYPE_COPY_CHANNEL, "devout\0", audio->devout, "source\0", channel, "recall_container\0", play_container, NULL); ags_recall_set_flags(AGS_RECALL(copy_channel), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION)); ags_channel_add_recall(channel, (GObject *) copy_channel, TRUE); ags_connectable_connect(AGS_CONNECTABLE(copy_channel)); /* AgsCopyChannelRun */ copy_channel_run = (AgsCopyChannelRun *) g_object_new(AGS_TYPE_COPY_CHANNEL_RUN, "devout\0", audio->devout, "source\0", channel, "recall_channel\0", copy_channel, "recall_container\0", play_container, NULL); ags_recall_set_flags(AGS_RECALL(copy_channel_run), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION)); ags_channel_add_recall(channel, (GObject *) copy_channel_run, TRUE); ags_connectable_connect(AGS_CONNECTABLE(copy_channel_run)); /* iterate */ channel = channel->next; } channel = ags_channel_nth(channel, audio->audio_channels - stop_audio_channel); } } /* recall */ if((AGS_RECALL_FACTORY_RECALL & (create_flags)) != 0){ channel = start; if(recall_container == NULL){ recall_container = ags_recall_container_new(); } ags_audio_add_recall_container(audio, (GObject *) recall_container); for(i = 0; i < stop_pad - start_pad; i++){ channel = ags_channel_nth(channel, start_audio_channel); for(j = 0; j < stop_audio_channel - start_audio_channel; j++){ ags_channel_add_recall_container(channel, (GObject *) recall_container); /* AgsCopyChannel */ copy_channel = (AgsCopyChannel *) g_object_new(AGS_TYPE_COPY_CHANNEL, "devout\0", AGS_DEVOUT(audio->devout), "source\0", channel, "recall_container\0", recall_container, NULL); ags_recall_set_flags(AGS_RECALL(copy_channel), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION)); ags_channel_add_recall(channel, (GObject *) copy_channel, FALSE); ags_connectable_connect(AGS_CONNECTABLE(copy_channel)); /* AgsCopyChannelRun */ copy_channel_run = (AgsCopyChannelRun *) g_object_new(AGS_TYPE_COPY_CHANNEL_RUN, "devout\0", audio->devout, "source\0", channel, "recall_channel\0", copy_channel, "recall_container\0", recall_container, NULL); ags_recall_set_flags(AGS_RECALL(copy_channel_run), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION)); ags_channel_add_recall(channel, (GObject *) copy_channel_run, FALSE); ags_connectable_connect(AGS_CONNECTABLE(copy_channel_run)); /* iterate */ channel = channel->next; } channel = ags_channel_nth(channel, audio->audio_channels - stop_audio_channel); } } } GList* ags_recall_factory_create_stream(AgsAudio *audio, AgsRecallContainer *play_container, AgsRecallContainer *recall_container, gchar *plugin_name, guint start_audio_channel, guint stop_audio_channel, guint start_pad, guint stop_pad, guint create_flags, guint recall_flags) { AgsStreamChannel *stream_channel; AgsStreamChannelRun *stream_channel_run; AgsChannel *start, *channel; AgsPort *port; GList *list; guint i, j; if(audio == NULL){ return(NULL); } if((AGS_RECALL_FACTORY_OUTPUT & (create_flags)) != 0){ start = channel = ags_channel_nth(audio->output, start_pad * audio->audio_channels); }else{ start = channel = ags_channel_nth(audio->input, start_pad * audio->audio_channels); } list = NULL; /* play */ if((AGS_RECALL_FACTORY_PLAY & (create_flags)) != 0){ if(play_container == NULL){ play_container = ags_recall_container_new(); } play_container->flags |= AGS_RECALL_CONTAINER_PLAY; ags_audio_add_recall_container(audio, (GObject *) play_container); for(i = 0; i < stop_pad - start_pad; i++){ channel = ags_channel_nth(channel, start_audio_channel); for(j = 0; j < stop_audio_channel - start_audio_channel; j++){ ags_channel_add_recall_container(channel, (GObject *) play_container); /* AgsStreamChannel */ stream_channel = (AgsStreamChannel *) g_object_new(AGS_TYPE_STREAM_CHANNEL, "devout\0", audio->devout, "source\0", channel, "recall_container\0", play_container, NULL); ags_recall_set_flags(AGS_RECALL(stream_channel), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION)); ags_channel_add_recall(channel, (GObject *) stream_channel, TRUE); ags_connectable_connect(AGS_CONNECTABLE(stream_channel)); /* AgsStreamChannelRun */ stream_channel_run = (AgsStreamChannelRun *) g_object_new(AGS_TYPE_STREAM_CHANNEL_RUN, "devout\0", audio->devout, "recall-channel\0", stream_channel, "source\0", channel, "recall_container\0", play_container, NULL); ags_recall_set_flags(AGS_RECALL(stream_channel_run), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION)); ags_channel_add_recall(channel, (GObject *) stream_channel_run, TRUE); ags_connectable_connect(AGS_CONNECTABLE(stream_channel_run)); /* iterate */ channel = channel->next; } channel = ags_channel_nth(channel, audio->audio_channels - stop_audio_channel); } } /* recall */ if((AGS_RECALL_FACTORY_RECALL & (create_flags)) != 0){ channel = start; if(recall_container == NULL){ recall_container = ags_recall_container_new(); } ags_audio_add_recall_container(audio, (GObject *) recall_container); for(i = 0; i < stop_pad - start_pad; i++){ channel = ags_channel_nth(channel, start_audio_channel); for(j = 0; j < stop_audio_channel - start_audio_channel; j++){ ags_channel_add_recall_container(channel, (GObject *) recall_container); /* AgsStreamChannel */ stream_channel = (AgsStreamChannel *) g_object_new(AGS_TYPE_STREAM_CHANNEL, "devout\0", audio->devout, "source\0", channel, "recall_container\0", recall_container, NULL); ags_recall_set_flags(AGS_RECALL(stream_channel), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION)); ags_channel_add_recall(channel, (GObject *) stream_channel, FALSE); ags_connectable_connect(AGS_CONNECTABLE(stream_channel)); /* AgsStreamChannelRun */ stream_channel_run = (AgsStreamChannelRun *) g_object_new(AGS_TYPE_STREAM_CHANNEL_RUN, "devout\0", audio->devout, "recall_channel\0", stream_channel, "source\0", channel, "recall_container\0", recall_container, NULL); ags_recall_set_flags(AGS_RECALL(stream_channel_run), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION)); ags_channel_add_recall(channel, (GObject *) stream_channel_run, FALSE); ags_connectable_connect(AGS_CONNECTABLE(stream_channel_run)); /* iterate */ channel = channel->next; } channel = ags_channel_nth(channel, audio->audio_channels - stop_audio_channel); } } } GList* ags_recall_factory_create_buffer(AgsAudio *audio, AgsRecallContainer *play_container, AgsRecallContainer *recall_container, gchar *plugin_name, guint start_audio_channel, guint stop_audio_channel, guint start_pad, guint stop_pad, guint create_flags, guint recall_flags) { AgsBufferChannel *buffer_channel; AgsBufferChannelRun *buffer_channel_run; AgsChannel *start, *channel, *output; AgsPort *port; GList *list; guint i, j; if(audio == NULL){ return(NULL); } if((AGS_RECALL_FACTORY_OUTPUT & (create_flags)) != 0){ start = channel = ags_channel_nth(audio->output, start_pad * audio->audio_channels); }else{ start = channel = ags_channel_nth(audio->input, start_pad * audio->audio_channels); } list = NULL; /* play */ if((AGS_RECALL_FACTORY_PLAY & (create_flags)) != 0){ GList *recall; gboolean found_buffer; channel = start; for(i = 0; i < stop_pad - start_pad; i++){ channel = ags_channel_nth(channel, start_audio_channel); for(j = 0; j < stop_audio_channel - start_audio_channel; j++){ output = ags_channel_nth(audio->output, start_audio_channel + j); while(output != NULL){ found_buffer = FALSE; recall = channel->recall; while((recall = ags_recall_template_find_type(recall, AGS_TYPE_BUFFER_CHANNEL)) != NULL){ if(AGS_RECALL_CHANNEL(recall->data)->destination == output){ found_buffer = TRUE; break; } recall = recall->next; } if(found_buffer){ output = output->next_pad; continue; } if(play_container == NULL){ play_container = ags_recall_container_new(); play_container->flags |= AGS_RECALL_CONTAINER_PLAY; ags_audio_add_recall_container(audio, (GObject *) play_container); } ags_channel_add_recall_container(channel, (GObject *) play_container); /* AgsBufferChannel */ buffer_channel = (AgsBufferChannel *) g_object_new(AGS_TYPE_BUFFER_CHANNEL, "devout\0", audio->devout, "source\0", channel, "destination\0", output, "recall_container\0", play_container, NULL); ags_recall_set_flags(AGS_RECALL(buffer_channel), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION)); g_object_ref(buffer_channel); channel->play = g_list_append(channel->play, buffer_channel); ags_connectable_connect(AGS_CONNECTABLE(buffer_channel)); /* AgsBufferChannelRun */ buffer_channel_run = (AgsBufferChannelRun *) g_object_new(AGS_TYPE_BUFFER_CHANNEL_RUN, "devout\0", audio->devout, "recall_channel\0", buffer_channel, "source\0", channel, "destination\0", output, "recall_container\0", play_container, NULL); ags_recall_set_flags(AGS_RECALL(buffer_channel_run), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION)); g_object_ref(buffer_channel); channel->play = g_list_append(channel->play, buffer_channel_run); ags_connectable_connect(AGS_CONNECTABLE(buffer_channel_run)); /* iterate */ output = output->next_pad; } channel = channel->next; } channel = ags_channel_nth(channel, audio->audio_channels - stop_audio_channel); } } /* recall */ if((AGS_RECALL_FACTORY_RECALL & (create_flags)) != 0){ GList *recall; gboolean found_buffer; channel = start; for(i = 0; i < stop_pad - start_pad; i++){ channel = ags_channel_nth(channel, start_audio_channel); for(j = 0; j < stop_audio_channel - start_audio_channel; j++){ output = ags_channel_nth(audio->output, start_audio_channel + j); while(output != NULL){ recall = channel->recall; found_buffer = FALSE; while((recall = ags_recall_template_find_type(recall, AGS_TYPE_BUFFER_CHANNEL)) != NULL){ if(AGS_RECALL_CHANNEL(recall->data)->destination == output){ found_buffer = TRUE; break; } recall = recall->next; } if(found_buffer){ output = output->next_pad; continue; } if(recall_container == NULL){ recall_container = ags_recall_container_new(); ags_audio_add_recall_container(audio, (GObject *) recall_container); } ags_channel_add_recall_container(channel, (GObject *) recall_container); /* AgsBufferChannel */ buffer_channel = (AgsBufferChannel *) g_object_new(AGS_TYPE_BUFFER_CHANNEL, "devout\0", audio->devout, "source\0", channel, "destination\0", output, "recall_container\0", recall_container, NULL); ags_recall_set_flags(AGS_RECALL(buffer_channel), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION)); g_object_ref(buffer_channel); channel->recall = g_list_append(channel->recall, buffer_channel); ags_connectable_connect(AGS_CONNECTABLE(buffer_channel)); /* AgsBufferChannelRun */ buffer_channel_run = (AgsBufferChannelRun *) g_object_new(AGS_TYPE_BUFFER_CHANNEL_RUN, "devout\0", audio->devout, "recall_channel\0", buffer_channel, "source\0", channel, "destination\0", output, "recall_container\0", recall_container, NULL); ags_recall_set_flags(AGS_RECALL(buffer_channel_run), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION)); g_object_ref(buffer_channel); channel->recall = g_list_append(channel->recall, buffer_channel_run); ags_connectable_connect(AGS_CONNECTABLE(buffer_channel_run)); /* iterate */ output = output->next_pad; } channel = channel->next; } channel = ags_channel_nth(channel, audio->audio_channels - stop_audio_channel); } } } GList* ags_recall_factory_create_delay(AgsAudio *audio, AgsRecallContainer *play_container, AgsRecallContainer *recall_container, gchar *plugin_name, guint start_audio_channel, guint stop_audio_channel, guint start_pad, guint stop_pad, guint create_flags, guint recall_flags) { AgsDelayAudio *delay_audio; AgsDelayAudioRun *delay_audio_run; AgsChannel *start, *channel; AgsPort *port; GList *list; guint i, j; if(audio == NULL){ return(NULL); } if((AGS_RECALL_FACTORY_OUTPUT & (create_flags)) != 0){ start = channel = ags_channel_nth(audio->output, start_pad * audio->audio_channels); }else{ start = channel = ags_channel_nth(audio->input, start_pad * audio->audio_channels); } list = NULL; /* play */ if((AGS_RECALL_FACTORY_PLAY & (create_flags)) != 0){ if(play_container == NULL){ play_container = ags_recall_container_new(); } play_container->flags |= AGS_RECALL_CONTAINER_PLAY; ags_audio_add_recall_container(audio, (GObject *) play_container); delay_audio = (AgsDelayAudio *) g_object_new(AGS_TYPE_DELAY_AUDIO, "devout\0", audio->devout, "audio\0", audio, "recall_container\0", play_container, NULL); ags_recall_set_flags(AGS_RECALL(delay_audio), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION)); ags_audio_add_recall(audio, (GObject *) delay_audio, TRUE); ags_connectable_connect(AGS_CONNECTABLE(delay_audio)); delay_audio_run = (AgsDelayAudioRun *) g_object_new(AGS_TYPE_DELAY_AUDIO_RUN, "devout\0", audio->devout, "recall_audio\0", delay_audio, "recall_container\0", play_container, NULL); ags_recall_set_flags(AGS_RECALL(delay_audio_run), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION)); ags_audio_add_recall(audio, (GObject *) delay_audio_run, TRUE); ags_connectable_connect(AGS_CONNECTABLE(delay_audio_run)); } /* recall */ if((AGS_RECALL_FACTORY_RECALL & (create_flags)) != 0){ if(recall_container == NULL){ recall_container = ags_recall_container_new(); } ags_audio_add_recall_container(audio, (GObject *) recall_container); delay_audio = (AgsDelayAudio *) g_object_new(AGS_TYPE_DELAY_AUDIO, "devout\0", audio->devout, "audio\0", audio, "recall_container\0", recall_container, NULL); ags_recall_set_flags(AGS_RECALL(delay_audio), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION)); ags_audio_add_recall(audio, (GObject *) delay_audio, FALSE); ags_connectable_connect(AGS_CONNECTABLE(delay_audio)); delay_audio_run = (AgsDelayAudioRun *) g_object_new(AGS_TYPE_DELAY_AUDIO_RUN, "devout\0", audio->devout, "recall_audio\0", delay_audio, "recall_container\0", recall_container, //TODO:JK: add missing dependency "delay-audio\0" NULL); ags_recall_set_flags(AGS_RECALL(delay_audio_run), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION)); ags_audio_add_recall(audio, (GObject *) delay_audio_run, FALSE); ags_connectable_connect(AGS_CONNECTABLE(delay_audio_run)); } } GList* ags_recall_factory_create_count_beats(AgsAudio *audio, AgsRecallContainer *play_container, AgsRecallContainer *recall_container, gchar *plugin_name, guint start_audio_channel, guint stop_audio_channel, guint start_pad, guint stop_pad, guint create_flags, guint recall_flags) { AgsCountBeatsAudio *count_beats_audio; AgsCountBeatsAudioRun *count_beats_audio_run; AgsChannel *start, *channel; AgsPort *port; GList *list; guint i, j; if(audio == NULL){ return(NULL); } if((AGS_RECALL_FACTORY_OUTPUT & (create_flags)) != 0){ start = channel = ags_channel_nth(audio->output, start_pad * audio->audio_channels); }else{ start = channel = ags_channel_nth(audio->input, start_pad * audio->audio_channels); } list = NULL; /* play */ if((AGS_RECALL_FACTORY_PLAY & (create_flags)) != 0){ if(play_container == NULL){ play_container = ags_recall_container_new(); } play_container->flags |= AGS_RECALL_CONTAINER_PLAY; ags_audio_add_recall_container(audio, (GObject *) play_container); count_beats_audio = (AgsCountBeatsAudio *) g_object_new(AGS_TYPE_COUNT_BEATS_AUDIO, "devout\0", audio->devout, "audio\0", audio, "recall_container\0", play_container, NULL); ags_recall_set_flags(AGS_RECALL(count_beats_audio), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION)); ags_audio_add_recall(audio, (GObject *) count_beats_audio, TRUE); ags_connectable_connect(AGS_CONNECTABLE(count_beats_audio)); count_beats_audio_run = (AgsCountBeatsAudioRun *) g_object_new(AGS_TYPE_COUNT_BEATS_AUDIO_RUN, "devout\0", audio->devout, "recall_audio\0", count_beats_audio, "recall_container\0", play_container, NULL); ags_recall_set_flags(AGS_RECALL(count_beats_audio_run), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION)); ags_audio_add_recall(audio, (GObject *) count_beats_audio_run, TRUE); ags_connectable_connect(AGS_CONNECTABLE(count_beats_audio_run)); } /* recall */ if((AGS_RECALL_FACTORY_RECALL & (create_flags)) != 0){ if(recall_container == NULL){ recall_container = ags_recall_container_new(); } ags_audio_add_recall_container(audio, (GObject *) recall_container); count_beats_audio = (AgsCountBeatsAudio *) g_object_new(AGS_TYPE_COUNT_BEATS_AUDIO, "devout\0", audio->devout, "audio\0", audio, "recall_container\0", recall_container, NULL); ags_recall_set_flags(AGS_RECALL(count_beats_audio), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION)); ags_audio_add_recall(audio, (GObject *) count_beats_audio, FALSE); ags_connectable_connect(AGS_CONNECTABLE(count_beats_audio)); count_beats_audio_run = (AgsCountBeatsAudioRun *) g_object_new(AGS_TYPE_COUNT_BEATS_AUDIO_RUN, "devout\0", audio->devout, "recall_audio\0", count_beats_audio, "recall_container\0", recall_container, //TODO:JK: add missing dependency "delay-audio\0" NULL); ags_recall_set_flags(AGS_RECALL(count_beats_audio_run), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION)); ags_audio_add_recall(audio, (GObject *) count_beats_audio_run, FALSE); ags_connectable_connect(AGS_CONNECTABLE(count_beats_audio_run)); } } GList* ags_recall_factory_create_loop(AgsAudio *audio, AgsRecallContainer *play_container, AgsRecallContainer *recall_container, gchar *plugin_name, guint start_audio_channel, guint stop_audio_channel, guint start_pad, guint stop_pad, guint create_flags, guint recall_flags) { AgsLoopChannel *loop_channel; AgsLoopChannelRun *loop_channel_run; AgsChannel *start, *channel; AgsPort *port; GList *list; guint i, j; if(audio == NULL){ return(NULL); } if((AGS_RECALL_FACTORY_OUTPUT & (create_flags)) != 0){ start = channel = ags_channel_nth(audio->output, start_pad * audio->audio_channels); }else{ start = channel = ags_channel_nth(audio->input, start_pad * audio->audio_channels); } list = NULL; /* play */ if((AGS_RECALL_FACTORY_PLAY & (create_flags)) != 0){ if((AGS_RECALL_FACTORY_REMAP & (create_flags)) == 0){ if(play_container == NULL){ play_container = ags_recall_container_new(); } play_container->flags |= AGS_RECALL_CONTAINER_PLAY; ags_audio_add_recall_container(audio, (GObject *) play_container); }else{ //TODO:JK: implement me } for(i = 0; i < stop_pad - start_pad; i++){ channel = ags_channel_nth(channel, start_audio_channel); for(j = 0; j < stop_audio_channel - start_audio_channel; j++){ ags_channel_add_recall_container(channel, (GObject *) play_container); /* AgsLoopChannel */ loop_channel = (AgsLoopChannel *) g_object_new(AGS_TYPE_LOOP_CHANNEL, "devout\0", audio->devout, "source\0", channel, "recall_container\0", play_container, //TODO:JK: add missing dependency "delay_audio\0" NULL); ags_recall_set_flags(AGS_RECALL(loop_channel), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION)); ags_channel_add_recall(channel, (GObject *) loop_channel, TRUE); ags_connectable_connect(AGS_CONNECTABLE(loop_channel)); /* AgsLoopChannelRun */ loop_channel_run = (AgsLoopChannelRun *) g_object_new(AGS_TYPE_LOOP_CHANNEL_RUN, "devout\0", audio->devout, "source\0", channel, "recall_channel\0", loop_channel, "recall_container\0", play_container, //TODO:JK: add missing dependency "count_beats_audio_run\0" NULL); ags_recall_set_flags(AGS_RECALL(loop_channel_run), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION)); ags_channel_add_recall(channel, (GObject *) loop_channel_run, TRUE); ags_connectable_connect(AGS_CONNECTABLE(loop_channel_run)); /* iterate */ channel = channel->next; } channel = ags_channel_nth(channel, audio->audio_channels - stop_audio_channel); } } /* recall */ if((AGS_RECALL_FACTORY_RECALL & (create_flags)) != 0){ channel = start; if((AGS_RECALL_FACTORY_REMAP & (create_flags)) == 0){ if(recall_container == NULL){ recall_container = ags_recall_container_new(); } ags_audio_add_recall_container(audio, (GObject *) recall_container); }else{ //TODO:JK: implement me } for(i = 0; i < stop_pad - start_pad; i++){ channel = ags_channel_nth(channel, start_audio_channel); for(j = 0; j < stop_audio_channel - start_audio_channel; j++){ ags_channel_add_recall_container(channel, (GObject *) recall_container); /* AgsLoopChannel */ loop_channel = (AgsLoopChannel *) g_object_new(AGS_TYPE_LOOP_CHANNEL, "devout\0", audio->devout, "source\0", channel, "recall_container\0", recall_container, //TODO:JK: add missing dependency "delay_audio\0" NULL); ags_recall_set_flags(AGS_RECALL(loop_channel), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION)); ags_channel_add_recall(channel, (GObject *) loop_channel, FALSE); ags_connectable_connect(AGS_CONNECTABLE(loop_channel)); /* AgsLoopChannelRun */ loop_channel_run = (AgsLoopChannelRun *) g_object_new(AGS_TYPE_LOOP_CHANNEL_RUN, "devout\0", audio->devout, "source\0", channel, "recall_channel\0", loop_channel, "recall_container\0", recall_container, //TODO:JK: add missing dependency "count_beats_audio_run\0" NULL); ags_recall_set_flags(AGS_RECALL(loop_channel_run), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION)); ags_channel_add_recall(channel, (GObject *) loop_channel_run, FALSE); ags_connectable_connect(AGS_CONNECTABLE(loop_channel_run)); /* iterate */ channel = channel->next; } channel = ags_channel_nth(channel, audio->audio_channels - stop_audio_channel); } } } GList* ags_recall_factory_create_copy_pattern(AgsAudio *audio, AgsRecallContainer *play_container, AgsRecallContainer *recall_container, gchar *plugin_name, guint start_audio_channel, guint stop_audio_channel, guint start_pad, guint stop_pad, guint create_flags, guint recall_flags) { AgsCopyPatternAudio *copy_pattern_audio; AgsCopyPatternAudioRun *copy_pattern_audio_run; AgsCopyPatternChannel *copy_pattern_channel; AgsCopyPatternChannelRun *copy_pattern_channel_run; AgsChannel *start, *channel; AgsPort *port; GList *list; guint i, j; if(audio == NULL){ return(NULL); } if((AGS_RECALL_FACTORY_OUTPUT & (create_flags)) != 0){ start = channel = ags_channel_nth(audio->output, start_pad * audio->audio_channels); }else{ start = channel = ags_channel_nth(audio->input, start_pad * audio->audio_channels); } list = NULL; /* play */ if((AGS_RECALL_FACTORY_PLAY & (create_flags)) != 0){ if((AGS_RECALL_FACTORY_REMAP & (create_flags)) == 0){ if(play_container == NULL){ play_container = ags_recall_container_new(); } play_container->flags |= AGS_RECALL_CONTAINER_PLAY; ags_audio_add_recall_container(audio, (GObject *) play_container); /* AgsCopyPatternAudio */ copy_pattern_audio = (AgsCopyPatternAudio *) g_object_new(AGS_TYPE_COPY_PATTERN_AUDIO, "devout\0", audio->devout, "audio\0", audio, "recall_container\0", play_container, NULL); AGS_RECALL(copy_pattern_audio)->flags |= (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_SEQUENCER); ags_audio_add_recall(audio, (GObject *) copy_pattern_audio, TRUE); /* AgsCopyPatternAudioRun */ copy_pattern_audio_run = (AgsCopyPatternAudioRun *) g_object_new(AGS_TYPE_COPY_PATTERN_AUDIO_RUN, "devout\0", audio->devout, // "recall_audio\0", copy_pattern_audio, "recall_container\0", play_container, //TODO:JK: add missing dependency "count_beats_audio_run\0" NULL); AGS_RECALL(copy_pattern_audio_run)->flags |= (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_SEQUENCER); ags_audio_add_recall(audio, (GObject *) copy_pattern_audio_run, TRUE); }else{ GList *list; if(play_container == NULL){ list = ags_recall_find_type(audio->play, AGS_TYPE_COPY_PATTERN_AUDIO); copy_pattern_audio = AGS_COPY_PATTERN_AUDIO(list->data); play_container = AGS_RECALL_CONTAINER(AGS_RECALL(copy_pattern_audio)->container); list = ags_recall_find_template(play_container->recall_audio_run); copy_pattern_audio_run = AGS_COPY_PATTERN_AUDIO_RUN(list->data); }else{ copy_pattern_audio = AGS_COPY_PATTERN_AUDIO(play_container->recall_audio); list = ags_recall_find_template(play_container->recall_audio_run); copy_pattern_audio_run = AGS_COPY_PATTERN_AUDIO_RUN(list->data); } } for(i = 0; i < stop_pad - start_pad; i++){ channel = ags_channel_nth(channel, start_audio_channel); for(j = 0; j < stop_audio_channel - start_audio_channel; j++){ ags_channel_add_recall_container(channel, (GObject *) play_container); /* AgsCopyPatternChannel in channel->recall */ copy_pattern_channel = (AgsCopyPatternChannel *) g_object_new(AGS_TYPE_COPY_PATTERN_CHANNEL, "devout\0", AGS_DEVOUT(audio->devout), "source\0", channel, // "destination\0", destination, "recall_container\0", play_container, // "pattern\0", channel->pattern->data, NULL); ags_recall_set_flags(AGS_RECALL(copy_pattern_channel), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_SEQUENCER)); ags_channel_add_recall(channel, (GObject *) copy_pattern_channel, TRUE); ags_connectable_connect(AGS_CONNECTABLE(copy_pattern_channel)); /* AgsCopyPatternChannelRun */ copy_pattern_channel_run = (AgsCopyPatternChannelRun *) g_object_new(AGS_TYPE_COPY_PATTERN_CHANNEL_RUN, "devout\0", audio->devout, "source\0", channel, // "destination\0", destination, // "recall_channel\0", copy_pattern_channel, // "recall_audio_run\0", copy_pattern_audio_run, "recall_container\0", play_container, NULL); ags_recall_set_flags(AGS_RECALL(copy_pattern_channel_run), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_SEQUENCER)); ags_channel_add_recall(channel, (GObject *) copy_pattern_channel_run, TRUE); ags_connectable_connect(AGS_CONNECTABLE(copy_pattern_channel_run)); /* iterate */ channel = channel->next; } channel = ags_channel_nth(channel, audio->audio_channels - stop_audio_channel); } } /* recall */ if((AGS_RECALL_FACTORY_RECALL & (create_flags)) != 0){ channel = start; if((AGS_RECALL_FACTORY_REMAP & (create_flags)) == 0){ if(recall_container == NULL){ recall_container = ags_recall_container_new(); } ags_audio_add_recall_container(audio, (GObject *) recall_container); /* AgsCopyPatternAudio */ copy_pattern_audio = (AgsCopyPatternAudio *) g_object_new(AGS_TYPE_COPY_PATTERN_AUDIO, "devout\0", audio->devout, "audio\0", audio, "recall_container\0", recall_container, NULL); AGS_RECALL(copy_pattern_audio)->flags |= (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_SEQUENCER); ags_audio_add_recall(audio, (GObject *) copy_pattern_audio, FALSE); /* AgsCopyPatternAudioRun */ copy_pattern_audio_run = (AgsCopyPatternAudioRun *) g_object_new(AGS_TYPE_COPY_PATTERN_AUDIO_RUN, "devout\0", audio->devout, // "recall_audio\0", copy_pattern_audio, "recall_container\0", recall_container, //TODO:JK: add missing dependency "count_beats_audio_run\0" NULL); AGS_RECALL(copy_pattern_audio_run)->flags |= (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_SEQUENCER); ags_audio_add_recall(audio, (GObject *) copy_pattern_audio_run, FALSE); }else{ GList *list; if(recall_container == NULL){ list = ags_recall_template_find_type(audio->recall, AGS_TYPE_COPY_PATTERN_AUDIO); if(list != NULL){ copy_pattern_audio = AGS_COPY_PATTERN_AUDIO(list->data); recall_container = AGS_RECALL_CONTAINER(AGS_RECALL(copy_pattern_audio)->container); list = ags_recall_find_template(recall_container->recall_audio_run); if(list != NULL){ copy_pattern_audio_run = AGS_COPY_PATTERN_AUDIO_RUN(list->data); } } }else{ copy_pattern_audio = AGS_COPY_PATTERN_AUDIO(recall_container->recall_audio); list = ags_recall_find_template(recall_container->recall_audio_run); copy_pattern_audio_run = AGS_COPY_PATTERN_AUDIO_RUN(list->data); } } for(i = 0; i < stop_pad - start_pad; i++){ channel = ags_channel_nth(channel, start_audio_channel); for(j = 0; j < stop_audio_channel - start_audio_channel; j++){ ags_channel_add_recall_container(channel, (GObject *) recall_container); /* AgsCopyPatternChannel in channel->recall */ copy_pattern_channel = (AgsCopyPatternChannel *) g_object_new(AGS_TYPE_COPY_PATTERN_CHANNEL, "devout\0", AGS_DEVOUT(audio->devout), "source\0", channel, // "destination\0", destination, "recall_container\0", recall_container, //"pattern\0", channel->pattern->data, NULL); ags_recall_set_flags(AGS_RECALL(copy_pattern_channel), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_SEQUENCER)); ags_channel_add_recall(channel, (GObject *) copy_pattern_channel, FALSE); ags_connectable_connect(AGS_CONNECTABLE(copy_pattern_channel)); /* AgsCopyPatternChannelRun */ copy_pattern_channel_run = (AgsCopyPatternChannelRun *) g_object_new(AGS_TYPE_COPY_PATTERN_CHANNEL_RUN, "devout\0", audio->devout, "source\0", channel, // "destination\0", destination, // "recall_channel\0", copy_pattern_channel, // "recall_audio_run\0", copy_pattern_audio_run, "recall_container\0", recall_container, NULL); ags_recall_set_flags(AGS_RECALL(copy_pattern_channel_run), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_SEQUENCER)); ags_channel_add_recall(channel, (GObject *) copy_pattern_channel_run, FALSE); ags_connectable_connect(AGS_CONNECTABLE(copy_pattern_channel_run)); /* iterate */ channel = channel->next; } channel = ags_channel_nth(channel, audio->audio_channels - stop_audio_channel); } } } GList* ags_recall_factory_create_play_notation(AgsAudio *audio, AgsRecallContainer *play_container, AgsRecallContainer *recall_container, gchar *plugin_name, guint start_audio_channel, guint stop_audio_channel, guint start_pad, guint stop_pad, guint create_flags, guint recall_flags) { AgsPlayNotationAudio *play_notation_audio; AgsPlayNotationAudioRun *play_notation_audio_run; AgsChannel *start, *channel; AgsPort *port; GList *list; guint i, j; if(audio == NULL){ return(NULL); } if((AGS_RECALL_FACTORY_OUTPUT & (create_flags)) != 0){ start = channel = ags_channel_nth(audio->output, start_pad * audio->audio_channels); }else{ start = channel = ags_channel_nth(audio->input, start_pad * audio->audio_channels); } list = NULL; /* play */ if((AGS_RECALL_FACTORY_PLAY & (create_flags)) != 0){ if(play_container == NULL){ play_container = ags_recall_container_new(); } play_container->flags |= AGS_RECALL_CONTAINER_PLAY; ags_audio_add_recall_container(audio, (GObject *) play_container); play_notation_audio = (AgsPlayNotationAudio *) g_object_new(AGS_TYPE_PLAY_NOTATION_AUDIO, "devout\0", audio->devout, "audio\0", audio, "recall_container\0", play_container, NULL); ags_recall_set_flags(AGS_RECALL(play_notation_audio), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_NOTATION)); ags_audio_add_recall(audio, (GObject *) play_notation_audio, TRUE); ags_connectable_connect(AGS_CONNECTABLE(play_notation_audio)); play_notation_audio_run = (AgsPlayNotationAudioRun *) g_object_new(AGS_TYPE_PLAY_NOTATION_AUDIO_RUN, "devout\0", audio->devout, "recall_audio\0", play_notation_audio, "recall_container\0", play_container, NULL); ags_recall_set_flags(AGS_RECALL(play_notation_audio_run), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_NOTATION)); ags_audio_add_recall(audio, (GObject *) play_notation_audio_run, TRUE); ags_connectable_connect(AGS_CONNECTABLE(play_notation_audio_run)); } /* recall */ if((AGS_RECALL_FACTORY_RECALL & (create_flags)) != 0){ if(recall_container == NULL){ recall_container = ags_recall_container_new(); } ags_audio_add_recall_container(audio, (GObject *) recall_container); play_notation_audio = (AgsPlayNotationAudio *) g_object_new(AGS_TYPE_PLAY_NOTATION_AUDIO, "devout\0", audio->devout, "audio\0", audio, "recall_container\0", recall_container, NULL); ags_recall_set_flags(AGS_RECALL(play_notation_audio), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_NOTATION)); ags_audio_add_recall(audio, (GObject *) play_notation_audio, FALSE); ags_connectable_connect(AGS_CONNECTABLE(play_notation_audio)); play_notation_audio_run = (AgsPlayNotationAudioRun *) g_object_new(AGS_TYPE_PLAY_NOTATION_AUDIO_RUN, "devout\0", audio->devout, "recall_audio\0", play_notation_audio, "recall_container\0", recall_container, //TODO:JK: add missing dependency "delay-audio\0" NULL); ags_recall_set_flags(AGS_RECALL(play_notation_audio_run), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_NOTATION)); ags_audio_add_recall(audio, (GObject *) play_notation_audio_run, FALSE); ags_connectable_connect(AGS_CONNECTABLE(play_notation_audio_run)); } } GList* ags_recall_factory_create_peak(AgsAudio *audio, AgsRecallContainer *play_container, AgsRecallContainer *recall_container, gchar *plugin_name, guint start_audio_channel, guint stop_audio_channel, guint start_pad, guint stop_pad, guint create_flags, guint recall_flags) { AgsPeakChannel *peak_channel; AgsPeakChannelRun *peak_channel_run; AgsChannel *start, *channel; AgsPort *port; GList *list; guint i, j; if(audio == NULL){ return(NULL); } if((AGS_RECALL_FACTORY_OUTPUT & (create_flags)) != 0){ start = channel = ags_channel_nth(audio->output, start_pad * audio->audio_channels); }else{ start = channel = ags_channel_nth(audio->input, start_pad * audio->audio_channels); } list = NULL; /* play */ if((AGS_RECALL_FACTORY_PLAY & (create_flags)) != 0){ if(play_container == NULL){ play_container = ags_recall_container_new(); } play_container->flags |= AGS_RECALL_CONTAINER_PLAY; ags_audio_add_recall_container(audio, (GObject *) play_container); for(i = 0; i < stop_pad - start_pad; i++){ channel = ags_channel_nth(channel, start_audio_channel); for(j = 0; j < stop_audio_channel - start_audio_channel; j++){ ags_channel_add_recall_container(channel, (GObject *) play_container); /* AgsPeakChannel */ peak_channel = (AgsPeakChannel *) g_object_new(AGS_TYPE_PEAK_CHANNEL, "devout\0", audio->devout, "source\0", channel, "recall_container\0", play_container, NULL); ags_recall_set_flags(AGS_RECALL(peak_channel), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION)); ags_channel_add_recall(channel, (GObject *) peak_channel, TRUE); ags_connectable_connect(AGS_CONNECTABLE(peak_channel)); /* AgsPeakChannelRun */ peak_channel_run = (AgsPeakChannelRun *) g_object_new(AGS_TYPE_PEAK_CHANNEL_RUN, "devout\0", audio->devout, "recall-channel\0", peak_channel, "source\0", channel, "recall_container\0", play_container, NULL); ags_recall_set_flags(AGS_RECALL(peak_channel_run), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION)); ags_channel_add_recall(channel, (GObject *) peak_channel_run, TRUE); ags_connectable_connect(AGS_CONNECTABLE(peak_channel_run)); /* iterate */ channel = channel->next; } channel = ags_channel_nth(channel, audio->audio_channels - stop_audio_channel); } } /* recall */ if((AGS_RECALL_FACTORY_RECALL & (create_flags)) != 0){ channel = start; if(recall_container == NULL){ recall_container = ags_recall_container_new(); } ags_audio_add_recall_container(audio, (GObject *) recall_container); for(i = 0; i < stop_pad - start_pad; i++){ channel = ags_channel_nth(channel, start_audio_channel); for(j = 0; j < stop_audio_channel - start_audio_channel; j++){ ags_channel_add_recall_container(channel, (GObject *) recall_container); /* AgsPeakChannel */ peak_channel = (AgsPeakChannel *) g_object_new(AGS_TYPE_PEAK_CHANNEL, "devout\0", audio->devout, "source\0", channel, "recall_container\0", recall_container, NULL); ags_recall_set_flags(AGS_RECALL(peak_channel), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION)); ags_channel_add_recall(channel, (GObject *) peak_channel, FALSE); ags_connectable_connect(AGS_CONNECTABLE(peak_channel)); /* AgsPeakChannelRun */ peak_channel_run = (AgsPeakChannelRun *) g_object_new(AGS_TYPE_PEAK_CHANNEL_RUN, "devout\0", audio->devout, "recall-channel\0", peak_channel, "source\0", channel, "recall_container\0", recall_container, NULL); ags_recall_set_flags(AGS_RECALL(peak_channel_run), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION)); ags_channel_add_recall(channel, (GObject *) peak_channel_run, FALSE); ags_connectable_connect(AGS_CONNECTABLE(peak_channel_run)); /* iterate */ channel = channel->next; } channel = ags_channel_nth(channel, audio->audio_channels - stop_audio_channel); } } } GList* ags_recall_factory_create_mute(AgsAudio *audio, AgsRecallContainer *play_container, AgsRecallContainer *recall_container, gchar *plugin_name, guint start_audio_channel, guint stop_audio_channel, guint start_pad, guint stop_pad, guint create_flags, guint recall_flags) { AgsMuteAudio *mute_audio; AgsMuteAudioRun *mute_audio_run; AgsMuteChannel *mute_channel; AgsMuteChannelRun *mute_channel_run; AgsChannel *start, *channel; AgsPort *port; GList *list; guint i, j; if(audio == NULL){ return(NULL); } if((AGS_RECALL_FACTORY_OUTPUT & (create_flags)) != 0){ start = channel = ags_channel_nth(audio->output, start_pad * audio->audio_channels); }else{ start = channel = ags_channel_nth(audio->input, start_pad * audio->audio_channels); } list = NULL; /* play */ if((AGS_RECALL_FACTORY_PLAY & (create_flags)) != 0){ if((AGS_RECALL_FACTORY_REMAP & (create_flags)) == 0){ if(play_container == NULL){ play_container = ags_recall_container_new(); } play_container->flags |= AGS_RECALL_CONTAINER_PLAY; ags_audio_add_recall_container(audio, (GObject *) play_container); /* AgsMuteAudio */ mute_audio = (AgsMuteAudio *) g_object_new(AGS_TYPE_MUTE_AUDIO, "devout\0", audio->devout, "audio\0", audio, "recall_container\0", play_container, NULL); AGS_RECALL(mute_audio)->flags |= (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION); ags_audio_add_recall(audio, (GObject *) mute_audio, TRUE); /* AgsMuteAudioRun */ mute_audio_run = (AgsMuteAudioRun *) g_object_new(AGS_TYPE_MUTE_AUDIO_RUN, "devout\0", audio->devout, // "recall_audio\0", mute_audio, "recall_container\0", play_container, //TODO:JK: add missing dependency "count_beats_audio_run\0" NULL); AGS_RECALL(mute_audio_run)->flags |= (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION); ags_audio_add_recall(audio, (GObject *) mute_audio_run, TRUE); }else{ GList *list; if(play_container == NULL){ list = ags_recall_find_type(audio->play, AGS_TYPE_MUTE_AUDIO); mute_audio = AGS_MUTE_AUDIO(list->data); play_container = AGS_RECALL_CONTAINER(AGS_RECALL(mute_audio)->container); list = ags_recall_find_template(play_container->recall_audio_run); mute_audio_run = AGS_MUTE_AUDIO_RUN(list->data); }else{ mute_audio = AGS_MUTE_AUDIO(play_container->recall_audio); list = ags_recall_find_template(play_container->recall_audio_run); mute_audio_run = AGS_MUTE_AUDIO_RUN(list->data); } } } if((AGS_RECALL_FACTORY_PLAY & (create_flags)) != 0){ if(play_container == NULL){ play_container = ags_recall_container_new(); } play_container->flags |= AGS_RECALL_CONTAINER_PLAY; ags_audio_add_recall_container(audio, (GObject *) play_container); for(i = 0; i < stop_pad - start_pad; i++){ channel = ags_channel_nth(channel, start_audio_channel); for(j = 0; j < stop_audio_channel - start_audio_channel; j++){ ags_channel_add_recall_container(channel, (GObject *) play_container); /* AgsMuteChannel */ mute_channel = (AgsMuteChannel *) g_object_new(AGS_TYPE_MUTE_CHANNEL, "devout\0", audio->devout, "source\0", channel, "recall_container\0", play_container, NULL); ags_recall_set_flags(AGS_RECALL(mute_channel), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION)); ags_channel_add_recall(channel, (GObject *) mute_channel, TRUE); ags_connectable_connect(AGS_CONNECTABLE(mute_channel)); /* AgsMuteChannelRun */ mute_channel_run = (AgsMuteChannelRun *) g_object_new(AGS_TYPE_MUTE_CHANNEL_RUN, "devout\0", audio->devout, "recall-channel\0", mute_channel, "source\0", channel, "recall_container\0", play_container, NULL); ags_recall_set_flags(AGS_RECALL(mute_channel_run), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION)); ags_channel_add_recall(channel, (GObject *) mute_channel_run, TRUE); ags_connectable_connect(AGS_CONNECTABLE(mute_channel_run)); /* iterate */ channel = channel->next; } channel = ags_channel_nth(channel, audio->audio_channels - stop_audio_channel); } } /* recall */ if((AGS_RECALL_FACTORY_RECALL & (create_flags)) != 0){ channel = start; if((AGS_RECALL_FACTORY_REMAP & (create_flags)) == 0){ if(recall_container == NULL){ recall_container = ags_recall_container_new(); } ags_audio_add_recall_container(audio, (GObject *) recall_container); /* AgsMuteAudio */ mute_audio = (AgsMuteAudio *) g_object_new(AGS_TYPE_MUTE_AUDIO, "devout\0", audio->devout, "audio\0", audio, "recall_container\0", recall_container, NULL); AGS_RECALL(mute_audio)->flags |= (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_SEQUENCER); ags_audio_add_recall(audio, (GObject *) mute_audio, FALSE); /* AgsMuteAudioRun */ mute_audio_run = (AgsMuteAudioRun *) g_object_new(AGS_TYPE_MUTE_AUDIO_RUN, "devout\0", audio->devout, // "recall_audio\0", mute_audio, "recall_container\0", recall_container, //TODO:JK: add missing dependency "count_beats_audio_run\0" NULL); AGS_RECALL(mute_audio_run)->flags |= (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION); ags_audio_add_recall(audio, (GObject *) mute_audio_run, FALSE); }else{ GList *list; if(recall_container == NULL){ list = ags_recall_template_find_type(audio->recall, AGS_TYPE_MUTE_AUDIO); if(list != NULL){ mute_audio = AGS_MUTE_AUDIO(list->data); recall_container = AGS_RECALL_CONTAINER(AGS_RECALL(mute_audio)->container); list = ags_recall_find_template(recall_container->recall_audio_run); if(list != NULL){ mute_audio_run = AGS_MUTE_AUDIO_RUN(list->data); } } }else{ mute_audio = AGS_MUTE_AUDIO(recall_container->recall_audio); list = ags_recall_find_template(recall_container->recall_audio_run); mute_audio_run = AGS_MUTE_AUDIO_RUN(list->data); } } for(i = 0; i < stop_pad - start_pad; i++){ channel = ags_channel_nth(channel, start_audio_channel); for(j = 0; j < stop_audio_channel - start_audio_channel; j++){ ags_channel_add_recall_container(channel, (GObject *) recall_container); /* AgsMuteChannel */ mute_channel = (AgsMuteChannel *) g_object_new(AGS_TYPE_MUTE_CHANNEL, "devout\0", audio->devout, "source\0", channel, "recall_container\0", recall_container, NULL); ags_recall_set_flags(AGS_RECALL(mute_channel), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION)); ags_channel_add_recall(channel, (GObject *) mute_channel, FALSE); ags_connectable_connect(AGS_CONNECTABLE(mute_channel)); /* AgsMuteChannelRun */ mute_channel_run = (AgsMuteChannelRun *) g_object_new(AGS_TYPE_MUTE_CHANNEL_RUN, "devout\0", audio->devout, "recall_channel\0", mute_channel, "source\0", channel, "recall_container\0", recall_container, NULL); ags_recall_set_flags(AGS_RECALL(mute_channel_run), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION)); ags_channel_add_recall(channel, (GObject *) mute_channel_run, FALSE); ags_connectable_connect(AGS_CONNECTABLE(mute_channel_run)); /* iterate */ channel = channel->next; } channel = ags_channel_nth(channel, audio->audio_channels - stop_audio_channel); } } } GList* ags_recall_factory_create_volume(AgsAudio *audio, AgsRecallContainer *play_container, AgsRecallContainer *recall_container, gchar *plugin_name, guint start_audio_channel, guint stop_audio_channel, guint start_pad, guint stop_pad, guint create_flags, guint recall_flags) { AgsVolumeChannel *volume_channel; AgsVolumeChannelRun *volume_channel_run; AgsChannel *start, *channel; AgsPort *port; GList *list; guint i, j; if(audio == NULL){ return(NULL); } if((AGS_RECALL_FACTORY_OUTPUT & (create_flags)) != 0){ start = channel = ags_channel_nth(audio->output, start_pad * audio->audio_channels); }else{ start = channel = ags_channel_nth(audio->input, start_pad * audio->audio_channels); } list = NULL; /* play */ if((AGS_RECALL_FACTORY_PLAY & (create_flags)) != 0){ if(play_container == NULL){ play_container = ags_recall_container_new(); } play_container->flags |= AGS_RECALL_CONTAINER_PLAY; ags_audio_add_recall_container(audio, (GObject *) play_container); for(i = 0; i < stop_pad - start_pad; i++){ channel = ags_channel_nth(channel, start_audio_channel); for(j = 0; j < stop_audio_channel - start_audio_channel; j++){ ags_channel_add_recall_container(channel, (GObject *) play_container); /* AgsVolumeChannel */ volume_channel = (AgsVolumeChannel *) g_object_new(AGS_TYPE_VOLUME_CHANNEL, "devout\0", audio->devout, "source\0", channel, "recall_container\0", play_container, NULL); ags_recall_set_flags(AGS_RECALL(volume_channel), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION)); ags_channel_add_recall(channel, (GObject *) volume_channel, TRUE); ags_connectable_connect(AGS_CONNECTABLE(volume_channel)); /* AgsVolumeChannelRun */ volume_channel_run = (AgsVolumeChannelRun *) g_object_new(AGS_TYPE_VOLUME_CHANNEL_RUN, "devout\0", audio->devout, "recall-channel\0", volume_channel, "source\0", channel, "recall_container\0", play_container, NULL); ags_recall_set_flags(AGS_RECALL(volume_channel_run), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION)); ags_channel_add_recall(channel, (GObject *) volume_channel_run, TRUE); ags_connectable_connect(AGS_CONNECTABLE(volume_channel_run)); /* iterate */ channel = channel->next; } channel = ags_channel_nth(channel, audio->audio_channels - stop_audio_channel); } } /* recall */ if((AGS_RECALL_FACTORY_RECALL & (create_flags)) != 0){ channel = start; if(recall_container == NULL){ recall_container = ags_recall_container_new(); } ags_audio_add_recall_container(audio, (GObject *) recall_container); for(i = 0; i < stop_pad - start_pad; i++){ channel = ags_channel_nth(channel, start_audio_channel); for(j = 0; j < stop_audio_channel - start_audio_channel; j++){ ags_channel_add_recall_container(channel, (GObject *) recall_container); /* AgsVolumeChannel */ volume_channel = (AgsVolumeChannel *) g_object_new(AGS_TYPE_VOLUME_CHANNEL, "devout\0", audio->devout, "source\0", channel, "recall_container\0", recall_container, NULL); ags_recall_set_flags(AGS_RECALL(volume_channel), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION)); ags_channel_add_recall(channel, (GObject *) volume_channel, FALSE); ags_connectable_connect(AGS_CONNECTABLE(volume_channel)); /* AgsVolumeChannelRun */ volume_channel_run = (AgsVolumeChannelRun *) g_object_new(AGS_TYPE_VOLUME_CHANNEL_RUN, "devout\0", audio->devout, "recall_channel\0", volume_channel, "source\0", channel, "recall_container\0", recall_container, NULL); ags_recall_set_flags(AGS_RECALL(volume_channel_run), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION)); ags_channel_add_recall(channel, (GObject *) volume_channel_run, FALSE); ags_connectable_connect(AGS_CONNECTABLE(volume_channel_run)); /* iterate */ channel = channel->next; } channel = ags_channel_nth(channel, audio->audio_channels - stop_audio_channel); } } } GList* ags_recall_factory_create_ladspa(AgsAudio *audio, AgsRecallContainer *play_container, AgsRecallContainer *recall_container, gchar *plugin_name, guint start_audio_channel, guint stop_audio_channel, guint start_pad, guint stop_pad, guint create_flags, guint recall_flags) { AgsRecallLadspa *recall_ladspa; AgsRecallChannelRunDummy *recall_channel_run_dummy; AgsChannel *start, *channel; AgsPort *port; GList *list; guint i, j; if(audio == NULL){ return(NULL); } if((AGS_RECALL_FACTORY_OUTPUT & (create_flags)) != 0){ start = channel = ags_channel_nth(audio->output, start_pad * audio->audio_channels); }else{ start = channel = ags_channel_nth(audio->input, start_pad * audio->audio_channels); } list = NULL; /* play */ if((AGS_RECALL_FACTORY_PLAY & (create_flags)) != 0){ if(play_container == NULL){ play_container = ags_recall_container_new(); } play_container->flags |= AGS_RECALL_CONTAINER_PLAY; ags_audio_add_recall_container(audio, (GObject *) play_container); for(i = 0; i < stop_pad - start_pad; i++){ channel = ags_channel_nth(channel, start_audio_channel); for(j = 0; j < stop_audio_channel - start_audio_channel; j++){ ags_channel_add_recall_container(channel, (GObject *) play_container); /* AgsRecallLadspa */ recall_ladspa = (AgsRecallLadspa *) g_object_new(AGS_TYPE_RECALL_LADSPA, "devout\0", audio->devout, "source\0", channel, "recall_container\0", play_container, NULL); ags_recall_set_flags(AGS_RECALL(recall_ladspa), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION)); ags_channel_add_recall(channel, (GObject *) recall_ladspa, TRUE); ags_connectable_connect(AGS_CONNECTABLE(recall_ladspa)); /* AgsRecallChannelRunDummy */ recall_channel_run_dummy = ags_recall_channel_run_dummy_new(channel, AGS_TYPE_RECALL_RECYCLING_DUMMY, AGS_TYPE_RECALL_LADSPA_RUN); g_object_set(recall_channel_run_dummy, "devout\0", audio->devout, // "recall_channel\0", recall_ladspa, "source\0", channel, "recall_container\0", play_container, NULL); ags_recall_set_flags(AGS_RECALL(recall_channel_run_dummy), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION)); ags_channel_add_recall(channel, (GObject *) recall_channel_run_dummy, TRUE); ags_connectable_connect(AGS_CONNECTABLE(recall_channel_run_dummy)); /* iterate */ channel = channel->next; } channel = ags_channel_nth(channel, audio->audio_channels - stop_audio_channel); } } /* recall */ if((AGS_RECALL_FACTORY_RECALL & (create_flags)) != 0){ channel = start; if(recall_container == NULL){ recall_container = ags_recall_container_new(); } ags_audio_add_recall_container(audio, (GObject *) recall_container); for(i = 0; i < stop_pad - start_pad; i++){ channel = ags_channel_nth(channel, start_audio_channel); for(j = 0; j < stop_audio_channel - start_audio_channel; j++){ ags_channel_add_recall_container(channel, (GObject *) recall_container); /* AgsRecallLadspa */ recall_ladspa = (AgsRecallLadspa *) g_object_new(AGS_TYPE_RECALL_LADSPA, "devout\0", audio->devout, "source\0", channel, "recall_container\0", recall_container, NULL); ags_recall_set_flags(AGS_RECALL(recall_ladspa), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION)); ags_channel_add_recall(channel, (GObject *) recall_ladspa, FALSE); ags_connectable_connect(AGS_CONNECTABLE(recall_ladspa)); /* AgsRecallChannelRunDummy */ recall_channel_run_dummy = ags_recall_channel_run_dummy_new(channel, AGS_TYPE_RECALL_RECYCLING_DUMMY, AGS_TYPE_RECALL_LADSPA_RUN); g_object_set(recall_channel_run_dummy, "devout\0", audio->devout, // "recall_channel\0", recall_ladspa, "source\0", channel, "recall_container\0", recall_container, NULL); ags_recall_set_flags(AGS_RECALL(recall_channel_run_dummy), (AGS_RECALL_TEMPLATE | (((AGS_RECALL_FACTORY_OUTPUT & create_flags) != 0) ? AGS_RECALL_OUTPUT_ORIENTATED: AGS_RECALL_INPUT_ORIENTATED) | AGS_RECALL_PLAYBACK | AGS_RECALL_SEQUENCER | AGS_RECALL_NOTATION)); ags_channel_add_recall(channel, (GObject *) recall_channel_run_dummy, FALSE); ags_connectable_connect(AGS_CONNECTABLE(recall_channel_run_dummy)); /* iterate */ channel = channel->next; } channel = ags_channel_nth(channel, audio->audio_channels - stop_audio_channel); } } } /** * ags_recall_factory_create: * @audio: an #AgsAudio that should keep the recalls * @recall_container: an #AgsRecallContainer to indetify what recall to use * @plugin_name: the plugin identifier to instantiate * @start_audio_channel: the first audio channel to apply * @stop_audio_channel: the last audio channel to apply * @start_pad: the first pad to apply * @stop_pad: the last pad to apply * @create_flags: modify the behaviour of this function * @recall_flags: flags to be set for #AgsRecall * * Instantiate #AgsRecall by this factory. * * Returns: The available AgsPort objects of the plugin to modify. * * Since: 0.4 */ GList* ags_recall_factory_create(AgsAudio *audio, AgsRecallContainer *play_container, AgsRecallContainer *recall_container, gchar *plugin_name, guint start_audio_channel, guint stop_audio_channel, guint start_pad, guint stop_pad, guint create_flags, guint recall_flags) { GList *list; AgsMutexManager *mutex_manager; pthread_mutex_t *audio_mutex; pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(audio_mutex); list = NULL; #ifdef AGS_DEBUG g_message("AgsRecallFactory creating: %s[%d,%d]\0", plugin_name, stop_pad, stop_audio_channel); #endif if(!strncmp(plugin_name, "ags-delay\0", 10)){ ags_recall_factory_create_delay(audio, play_container, recall_container, plugin_name, start_audio_channel, stop_audio_channel, start_pad, stop_pad, create_flags, recall_flags); }else if(!strncmp(plugin_name, "ags-count-beats\0", 16)){ ags_recall_factory_create_count_beats(audio, play_container, recall_container, plugin_name, start_audio_channel, stop_audio_channel, start_pad, stop_pad, create_flags, recall_flags); }else if(!strncmp(plugin_name, "ags-stream\0", 11)){ ags_recall_factory_create_stream(audio, play_container, recall_container, plugin_name, start_audio_channel, stop_audio_channel, start_pad, stop_pad, create_flags, recall_flags); }else if(!strncmp(plugin_name, "ags-loop\0", 9)){ ags_recall_factory_create_loop(audio, play_container, recall_container, plugin_name, start_audio_channel, stop_audio_channel, start_pad, stop_pad, create_flags, recall_flags); }else if(!strncmp(plugin_name, "ags-play-master\0", 16)){ ags_recall_factory_create_play_master(audio, play_container, recall_container, plugin_name, start_audio_channel, stop_audio_channel, start_pad, stop_pad, create_flags, recall_flags); }else if(!strncmp(plugin_name, "ags-copy\0", 9)){ ags_recall_factory_create_copy(audio, play_container, recall_container, plugin_name, start_audio_channel, stop_audio_channel, start_pad, stop_pad, create_flags, recall_flags); }else if(!strncmp(plugin_name, "ags-buffer\0", 11)){ ags_recall_factory_create_buffer(audio, play_container, recall_container, plugin_name, start_audio_channel, stop_audio_channel, start_pad, stop_pad, create_flags, recall_flags); }else if(!strncmp(plugin_name, "ags-play\0", 9)){ ags_recall_factory_create_play(audio, play_container, recall_container, plugin_name, start_audio_channel, stop_audio_channel, start_pad, stop_pad, create_flags, recall_flags); }else if(!strncmp(plugin_name, "ags-copy-pattern\0", 17)){ ags_recall_factory_create_copy_pattern(audio, play_container, recall_container, plugin_name, start_audio_channel, stop_audio_channel, start_pad, stop_pad, create_flags, recall_flags); }else if(!strncmp(plugin_name, "ags-play-notation\0", 18)){ ags_recall_factory_create_play_notation(audio, play_container, recall_container, plugin_name, start_audio_channel, stop_audio_channel, start_pad, stop_pad, create_flags, recall_flags); }else if(!strncmp(plugin_name, "ags-peak\0", 9)){ ags_recall_factory_create_peak(audio, play_container, recall_container, plugin_name, start_audio_channel, stop_audio_channel, start_pad, stop_pad, create_flags, recall_flags); }else if(!strncmp(plugin_name, "ags-mute\0", 9)){ ags_recall_factory_create_mute(audio, play_container, recall_container, plugin_name, start_audio_channel, stop_audio_channel, start_pad, stop_pad, create_flags, recall_flags); }else if(!strncmp(plugin_name, "ags-volume\0", 11)){ ags_recall_factory_create_volume(audio, play_container, recall_container, plugin_name, start_audio_channel, stop_audio_channel, start_pad, stop_pad, create_flags, recall_flags); }else if(!strncmp(plugin_name, "ags-ladspa\0", 11)){ ags_recall_factory_create_ladspa(audio, play_container, recall_container, plugin_name, start_audio_channel, stop_audio_channel, start_pad, stop_pad, create_flags, recall_flags); } pthread_mutex_unlock(audio_mutex); return(list); } void ags_recall_factory_remove(AgsAudio *audio, AgsRecallContainer *recall_container) { //TODO:JK: implement me } /** * ags_recall_factory_new: * @factory: the #AgsRecall depending on * * Creates a #AgsRecallFactory * * Returns: a new #AgsRecallFactory * * Since: 0.4 */ AgsRecallFactory* ags_recall_factory_new() { AgsRecallFactory *recall_factory; recall_factory = (AgsRecallFactory *) g_object_new(AGS_TYPE_RECALL_FACTORY, NULL); return(recall_factory); } gsequencer-0.6.37/src/ags/audio/ags_recycling_container.c0000644000175000017500000004607412626272146020375 00000000000000/* AGS - Advanced GTK Sequencer * Copyright (C) 2014 Joël Krähemann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include void ags_recycling_container_class_init(AgsRecyclingContainerClass *recycling_container_class); void ags_recycling_container_init(AgsRecyclingContainer *recycling_container); void ags_recycling_container_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_recycling_container_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_recycling_container_finalize(GObject *gobject); /** * SECTION:ags_recycling_container * @short_description: A container of recycling acting as dynamic context. * @title: AgsRecyclingContainer * @section_id: * @include: ags/audio/ags_recycling_container.h * * #AgsRecyclingContainer organizes #AgsRecycling objects as dynamic context * within nested tree. */ enum{ PROP_0, PROP_PARENT, PROP_LENGTH, PROP_RECALL_ID, }; static gpointer ags_recycling_container_parent_class = NULL; GType ags_recycling_container_get_type (void) { static GType ags_type_recycling_container = 0; if(!ags_type_recycling_container){ static const GTypeInfo ags_recycling_container_info = { sizeof (AgsRecyclingContainerClass), (GBaseInitFunc) NULL, /* base_init */ (GBaseFinalizeFunc) NULL, /* base_finalize */ (GClassInitFunc) ags_recycling_container_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsRecyclingContainer), 0, /* n_preallocs */ (GInstanceInitFunc) ags_recycling_container_init, }; ags_type_recycling_container = g_type_register_static(G_TYPE_OBJECT, "AgsRecyclingContainer\0", &ags_recycling_container_info, 0); } return (ags_type_recycling_container); } void ags_recycling_container_class_init(AgsRecyclingContainerClass *recycling_container) { GObjectClass *gobject; GParamSpec *param_spec; ags_recycling_container_parent_class = g_type_class_peek_parent(recycling_container); gobject = (GObjectClass *) recycling_container; gobject->set_property = ags_recycling_container_set_property; gobject->get_property = ags_recycling_container_get_property; gobject->finalize = ags_recycling_container_finalize; /* properties */ /** * AgsRecyclingContainer:parent: * * The parent recycling container within tree. * * Since: 0.4.0 */ param_spec = g_param_spec_object("parent\0", "parent container\0", "The container this one is packed into\0", AGS_TYPE_RECYCLING_CONTAINER, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_PARENT, param_spec); /** * AgsRecyclingContainer:length: * * Boundary length. * * Since: 0.4.0 */ param_spec = g_param_spec_uint64("length\0", "length of the array of assigned recycling\0", "The recycling array length\0", 0, G_MAXUINT64, 0, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_LENGTH, param_spec); /** * AgsRecyclingContainer:recall-id: * * The assigned #AgsRecallID. * * Since: 0.4.0 */ param_spec = g_param_spec_object("recall-id\0", "the default recall id\0", "The recall id located in audio object as destiny\0", AGS_TYPE_RECALL_ID, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_RECALL_ID, param_spec); } void ags_recycling_container_init(AgsRecyclingContainer *recycling_container) { recycling_container->recall_id = NULL; recycling_container->recycling = NULL; recycling_container->length = 0; recycling_container->parent = NULL; recycling_container->children = NULL; } void ags_recycling_container_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsRecyclingContainer *recycling_container; guint i; recycling_container = AGS_RECYCLING_CONTAINER(gobject); switch(prop_id){ case PROP_PARENT: { AgsRecyclingContainer *parent; parent = (AgsRecyclingContainer *) g_value_get_object(value); if(recycling_container->parent == parent){ return; } if(recycling_container->parent != NULL){ ags_recycling_container_remove_child(recycling_container->parent, recycling_container); } if(parent != NULL){ ags_recycling_container_add_child(parent, recycling_container); } recycling_container->parent = parent; } break; case PROP_LENGTH: { guint64 length; length = g_value_get_uint64(value); recycling_container->recycling = (AgsRecycling **) malloc(length * sizeof(AgsRecycling *)); recycling_container->length = length; for(i = 0; i < length; i++){ recycling_container->recycling[i] = NULL; } } break; case PROP_RECALL_ID: { AgsRecallID *recall_id; recall_id = (AgsRecallID *) g_value_get_object(value); if((AgsRecallID *) recall_id == recycling_container->recall_id){ return; } if(recycling_container->recall_id != NULL){ g_object_unref(G_OBJECT(recycling_container->recall_id)); } if(recall_id != NULL){ g_object_ref(G_OBJECT(recall_id)); } recycling_container->recall_id = recall_id; } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_recycling_container_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsRecyclingContainer *recycling_container; recycling_container = AGS_RECYCLING_CONTAINER(gobject); switch(prop_id){ case PROP_PARENT: { g_value_set_object(value, recycling_container->parent); } break; case PROP_LENGTH: { g_value_set_uint64(value, recycling_container->length); } break; case PROP_RECALL_ID: { g_value_set_object(value, recycling_container->recall_id); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_recycling_container_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_recycling_container_parent_class)->finalize(gobject); } /** * ags_recycling_container_replace: * @recycling_container: the #AgsRecyclingContainer * @recycling: the #AgsRecycling to add * @position: the index of @recycling * * Replaces one recycling entry in a container. * * Returns: the new recycling container * * Since: 0.4 */ void ags_recycling_container_replace(AgsRecyclingContainer *recycling_container, AgsRecycling *recycling, gint position) { if(recycling_container == NULL || position >= recycling_container->length){ return; } recycling_container->recycling[position] = recycling; } /** * ags_recycling_container_add: * @recycling_container: the #AgsRecyclingContainer * @recycling: the #AgsRecycling to add * * Adds a recycling to a container. * * Returns: the new recycling container * * Since: 0.4 */ AgsRecyclingContainer* ags_recycling_container_add(AgsRecyclingContainer *recycling_container, AgsRecycling *recycling) { AgsRecyclingContainer *new_recycling_container; gint new_length; if(recycling_container == NULL){ return; } new_length = recycling_container->length + 1; new_recycling_container = (AgsRecyclingContainer *) g_object_new(AGS_TYPE_RECYCLING_CONTAINER, "length\0", new_length, NULL); memcpy(new_recycling_container->recycling, recycling_container->recycling, new_length * sizeof(AgsRecycling *)); new_recycling_container->recycling[new_length] = recycling; return(new_recycling_container); } /** * ags_recycling_container_remove: * @recycling_container: the #AgsRecyclingContainer * @recycling: the #AgsRecycling to remove * * Removes a recycling in a container. * * Returns: the new recycling container * * Since: 0.4 */ AgsRecyclingContainer* ags_recycling_container_remove(AgsRecyclingContainer *recycling_container, AgsRecycling *recycling) { AgsRecyclingContainer *new_recycling_container; gint new_length; gint position; new_recycling_container = (AgsRecyclingContainer *) g_object_new(AGS_TYPE_RECYCLING_CONTAINER, NULL); new_length = recycling_container->length - 1; new_recycling_container->recycling = (AgsRecycling **) malloc(new_length * sizeof(AgsRecycling *)); for(position = 0; recycling_container->recycling[position] != recycling; position++); memcpy(new_recycling_container->recycling, recycling_container->recycling, (new_length - position) * sizeof(AgsRecycling *)); memcpy(&(new_recycling_container->recycling[position + 1]), recycling_container->recycling, (-1 * (position - new_length)) * sizeof(AgsRecycling *)); return(new_recycling_container); } /** * ags_recycling_container_insert: * @recycling_container: the #AgsRecyclingContainer * @recycling: the #AgsRecycling to insert * @position: the index to insert at * * Inserts a recycling to a container. * * Returns: the new recycling container * * Since: 0.4 */ AgsRecyclingContainer* ags_recycling_container_insert(AgsRecyclingContainer *recycling_container, AgsRecycling *recycling, gint position) { AgsRecyclingContainer *new_recycling_container; gint new_length; new_recycling_container = (AgsRecyclingContainer *) g_object_new(AGS_TYPE_RECYCLING_CONTAINER, NULL); new_length = recycling_container->length + 1; new_recycling_container->recycling = (AgsRecycling **) malloc(new_length * sizeof(AgsRecycling *)); memcpy(new_recycling_container->recycling, recycling_container->recycling, (new_length - position) * sizeof(AgsRecycling *)); new_recycling_container->recycling[position] = recycling; memcpy(&(new_recycling_container->recycling[position + 1]), recycling_container->recycling, (-1 * (position - new_length)) * sizeof(AgsRecycling *)); return(new_recycling_container); } /** * ags_recycling_container_get_toplevel: * @recycling_container: the #AgsRecyclingContainer * * Iterates the tree up to highest level. * * Returns: the topmost recycling container * * Since: 0.4 */ AgsRecyclingContainer* ags_recycling_container_get_toplevel(AgsRecyclingContainer *recycling_container) { if(recycling_container == NULL){ return(NULL); } while(recycling_container->parent != NULL){ recycling_container = recycling_container->parent; } return(recycling_container); } /** * ags_recycling_container_find: * @recycling_container: the #AgsRecyclingContainer * @recycling: the #AgsRecycling to look up * * Find position of recycling within array. * * Returns: recycling array index * * Since: 0.4 */ gint ags_recycling_container_find(AgsRecyclingContainer *recycling_container, AgsRecycling *recycling) { gint i; for(i = 0; i < recycling_container->length; i++){ if(recycling_container->recycling[i] == recycling){ return(i); } } return(-1); } /** * ags_recycling_container_find_child: * @recycling_container: the #AgsRecyclingContainer * @recycling: the #AgsRecycling to look up * * Find position of recycling within arrays. * * Returns: recycling array index * * Since: 0.4 */ gint ags_recycling_container_find_child(AgsRecyclingContainer *recycling_container, AgsRecycling *recycling) { GList *child; gint i; child = recycling_container->children; for(i = 0; child != NULL; i++){ if(ags_recycling_container_find(AGS_RECYCLING_CONTAINER(child->data), recycling) != -1){ return(i); } child = child->next; } return(-1); } /** * ags_recycling_container_find_parent: * @recycling_container: the #AgsRecyclingContainer * @recycling: the #AgsRecycling to look up * * Find position of recycling within array. * * Returns: recycling array index * * Since: 0.4 */ gint ags_recycling_container_find_parent(AgsRecyclingContainer *recycling_container, AgsRecycling *recycling) { gint i; for(i = 0; i < recycling_container->parent->length; i++){ if(recycling_container->parent->recycling[i] == recycling){ return(i); } } return(-1); } /** * ags_recycling_container_add_child: * @parent: the parental #AgsRecyclingContainer * @child: the child * * Adds a recycling container as child. * * Since: 0.4 */ void ags_recycling_container_add_child(AgsRecyclingContainer *parent, AgsRecyclingContainer *child) { if(parent == NULL || child == NULL){ return; } g_object_ref(G_OBJECT(parent)); g_object_ref(G_OBJECT(child)); child->parent = parent; parent->children = g_list_append(parent->children, child); } /** * ags_recycling_container_remove_child: * @parent: the #AgsRecyclingContainer * @child: the child to remove * * Removes a recycling container of its parent. * * Since: 0.4 */ void ags_recycling_container_remove_child(AgsRecyclingContainer *parent, AgsRecyclingContainer *child) { if(parent == NULL || child == NULL){ return; } child->parent = NULL; parent->children = g_list_remove(parent->children, child); g_object_unref(G_OBJECT(parent)); g_object_unref(G_OBJECT(child)); } /** * ags_recycling_container_get_child_recall_id: * @recycling_container: the #AgsRecyclingContainer * * Retrieve all child recall ids. * * Returns: the #AgsRecallID as #GList * * Since: 0.4 */ GList* ags_recycling_container_get_child_recall_id(AgsRecyclingContainer *recycling_container) { GList *child; GList *recall_id_list; if(recycling_container == NULL){ return(NULL); } child = recycling_container->children; recall_id_list = NULL; while(child != NULL){ if(AGS_RECYCLING_CONTAINER(child->data)->recall_id != NULL){ recall_id_list = g_list_append(recall_id_list, AGS_RECYCLING_CONTAINER(child->data)->recall_id); } child = child->next; } return(recall_id_list); } /** * ags_recycling_container_reset_recycling: * @recycling_container: the #AgsRecyclingContainer * @old_first_recycling: the first recycling to replace * @old_last_recycling: the last recycling to replace * @new_first_recycling: the first recycling to insert * @new_last_recycling: the last recycling to insert * * Modify recycling of container. * * Since: 0.4 */ AgsRecyclingContainer* ags_recycling_container_reset_recycling(AgsRecyclingContainer *recycling_container, AgsRecycling *old_first_recycling, AgsRecycling *old_last_recycling, AgsRecycling *new_first_recycling, AgsRecycling *new_last_recycling) { AgsRecyclingContainer *new_recycling_container; AgsRecycling *recycling; gint new_length; gint first_index, last_index; guint i; gboolean new_context; if(old_first_recycling != NULL){ if(ags_recycling_position(old_first_recycling, old_last_recycling->next, new_first_recycling) == -1){ if(old_first_recycling->prev == new_last_recycling){ new_context = FALSE; }else if(old_first_recycling->next == new_first_recycling){ new_context = FALSE; }else{ new_context = TRUE; } }else{ new_context = FALSE; } }else{ new_context = FALSE; } /* retrieve new length of recycling array */ if(new_first_recycling != NULL){ new_length = ags_recycling_position(new_first_recycling, new_last_recycling->next, new_last_recycling); new_length++; }else{ return(NULL); } /* retrieve indices to replace */ if(new_context){ first_index = 0; last_index = 0; }else if(old_first_recycling != NULL){ first_index = ags_recycling_container_find(recycling_container, old_first_recycling); last_index = ags_recycling_container_find(recycling_container, old_last_recycling); }else{ if(recycling_container->recycling == NULL || recycling_container->length == 0 || recycling_container->recycling[0]->prev == new_first_recycling){ first_index = 0; last_index = 0; }else{ first_index = ags_recycling_position(recycling_container->recycling[0], recycling_container->recycling[recycling_container->length - 1]->next, new_first_recycling); last_index = first_index; } } /* instantiate */ if(new_context){ new_recycling_container = g_object_new(AGS_TYPE_RECYCLING_CONTAINER, "length\0", new_length, NULL); }else{ new_recycling_container = g_object_new(AGS_TYPE_RECYCLING_CONTAINER, "length\0", (recycling_container->length - (last_index - first_index) + new_length), NULL); } if(recycling_container->parent != NULL){ GList *list; list = g_list_find(recycling_container->parent->children, recycling_container); list->data = new_recycling_container; g_object_ref(new_recycling_container); new_recycling_container->parent = recycling_container->parent; g_object_ref(new_recycling_container->parent); new_recycling_container->recall_id = recycling_container->recall_id; g_object_ref(recycling_container->recall_id); } new_recycling_container->children = g_list_copy(recycling_container->children); /* copy heading */ if(!new_context){ if(first_index > 0){ memcpy(new_recycling_container->recycling, recycling_container->recycling, first_index * sizeof(AgsRecycling *)); } } /* insert new */ recycling = new_first_recycling; for(i = 0; i < new_length; i++){ ags_recycling_container_replace(new_recycling_container, recycling, first_index + i); recycling = recycling->next; } /* copy trailing */ if(!new_context){ if(new_recycling_container->length - first_index > 0){ memcpy(&(new_recycling_container->recycling[first_index + new_length]), &(recycling_container->recycling[first_index]), (new_recycling_container->length - first_index - new_length) * sizeof(AgsRecycling *)); } } return(new_recycling_container); } /** * ags_recycling_container_new: * @length: array dimension of context * * Creates a #AgsRecyclingContainer, boundaries are specified by @length * * Returns: a new #AgsRecyclingContainer * * Since: 0.4 */ AgsRecyclingContainer* ags_recycling_container_new(gint length) { AgsRecyclingContainer *recycling_container; gint i; recycling_container = g_object_new(AGS_TYPE_RECYCLING_CONTAINER, "length\0", length, NULL); return(recycling_container); } gsequencer-0.6.37/src/ags/audio/ags_devout.h0000644000175000017500000001750612626272146015665 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_DEVOUT_H__ #define __AGS_DEVOUT_H__ #include #include #include #include #include #include #include #include #include #include #include #define AGS_TYPE_DEVOUT (ags_devout_get_type()) #define AGS_DEVOUT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_DEVOUT, AgsDevout)) #define AGS_DEVOUT_CLASS(class) (G_TYPE_CHECK_CLASS_CAST(class, AGS_TYPE_DEVOUT, AgsDevout)) #define AGS_IS_DEVOUT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_DEVOUT)) #define AGS_IS_DEVOUT_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_DEVOUT)) #define AGS_DEVOUT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS(obj, AGS_TYPE_DEVOUT, AgsDevoutClass)) #define AGS_DEVOUT_PLAY_DOMAIN(ptr) ((AgsDevoutPlayDomain *)(ptr)) #define AGS_DEVOUT_PLAY(ptr) ((AgsDevoutPlay *)(ptr)) #define AGS_DEVOUT_DEFAULT_SAMPLERATE (44100.0) #define AGS_DEVOUT_DEFAULT_FORMAT (AGS_DEVOUT_RESOLUTION_16_BIT) #define AGS_DEVOUT_DEFAULT_BUFFER_SIZE (944) #define AGS_DEVOUT_DEFAULT_BPM (120.0) #define AGS_DEVOUT_DEFAULT_JIFFIE ((double) AGS_DEVOUT_DEFAULT_SAMPLERATE / (double) AGS_DEVOUT_DEFAULT_BUFFER_SIZE) #define AGS_DEVOUT_DEFAULT_TACT (1.0 / 1.0) #define AGS_DEVOUT_DEFAULT_TACT_JIFFIE (60.0 / AGS_DEVOUT_DEFAULT_BPM * AGS_DEVOUT_DEFAULT_TACT) #define AGS_DEVOUT_DEFAULT_TACTRATE (1.0 / AGS_DEVOUT_DEFAULT_TACT_JIFFIE) #define AGS_DEVOUT_DEFAULT_SCALE (1.0) #define AGS_DEVOUT_DEFAULT_DELAY (AGS_DEVOUT_DEFAULT_JIFFIE * (60.0 / AGS_DEVOUT_DEFAULT_BPM)) #define AGS_DEVOUT_DEFAULT_PERIOD (64.0) typedef struct _AgsDevout AgsDevout; typedef struct _AgsDevoutClass AgsDevoutClass; typedef struct _AgsDevoutPlay AgsDevoutPlay; typedef struct _AgsDevoutPlayDomain AgsDevoutPlayDomain; typedef enum { AGS_DEVOUT_BUFFER0 = 1, AGS_DEVOUT_BUFFER1 = 1 << 1, AGS_DEVOUT_BUFFER2 = 1 << 2, AGS_DEVOUT_BUFFER3 = 1 << 3, AGS_DEVOUT_ATTACK_FIRST = 1 << 4, AGS_DEVOUT_PLAY = 1 << 5, AGS_DEVOUT_LIBAO = 1 << 6, AGS_DEVOUT_OSS = 1 << 7, AGS_DEVOUT_ALSA = 1 << 8, AGS_DEVOUT_SHUTDOWN = 1 << 9, AGS_DEVOUT_START_PLAY = 1 << 10, AGS_DEVOUT_NONBLOCKING = 1 << 11, AGS_DEVOUT_INITIALIZED = 1 << 14, }AgsDevoutFlags; typedef enum { AGS_DEVOUT_PLAY_DONE = 1, AGS_DEVOUT_PLAY_REMOVE = 1 << 1, AGS_DEVOUT_PLAY_CHANNEL = 1 << 2, AGS_DEVOUT_PLAY_PAD = 1 << 3, AGS_DEVOUT_PLAY_AUDIO = 1 << 4, AGS_DEVOUT_PLAY_PLAYBACK = 1 << 5, AGS_DEVOUT_PLAY_SEQUENCER = 1 << 6, AGS_DEVOUT_PLAY_NOTATION = 1 << 7, AGS_DEVOUT_PLAY_SINGLE_THREADED = 1 << 8, AGS_DEVOUT_PLAY_SUPER_THREADED_CHANNEL = 1 << 9, AGS_DEVOUT_PLAY_SUPER_THREADED_RECYCLING = 1 << 10, }AgsDevoutPlayFlags; typedef enum{ AGS_DEVOUT_PLAY_DOMAIN_PLAYBACK = 1, AGS_DEVOUT_PLAY_DOMAIN_SEQUENCER = 1 << 1, AGS_DEVOUT_PLAY_DOMAIN_NOTATION = 1 << 2, AGS_DEVOUT_PLAY_DOMAIN_SINGLE_THREADED = 1 << 3, AGS_DEVOUT_PLAY_DOMAIN_SUPER_THREADED_AUDIO = 1 << 4, }AgsDevoutPlayDomainFlags; typedef enum{ AGS_DEVOUT_RESOLUTION_8_BIT = 8, AGS_DEVOUT_RESOLUTION_16_BIT = 16, AGS_DEVOUT_RESOLUTION_24_BIT = 24, AGS_DEVOUT_RESOLUTION_32_BIT = 32, AGS_DEVOUT_RESOLUTION_64_BIT = 64, }AgsDevoutResolutionMode; #define AGS_DEVOUT_ERROR (ags_devout_error_quark()) typedef enum{ AGS_DEVOUT_ERROR_LOCKED_SOUNDCARD, }AgsDevoutError; struct _AgsDevout { GObject object; guint flags; guint dsp_channels; guint pcm_channels; guint bits; guint buffer_size; guint frequency; // sample_rate signed short** buffer; double bpm; // beats per minute gdouble delay_factor; gdouble *delay; // count of tics within buffer size guint *attack; // where currently tic resides in the stream's offset, measured in 1/64 of bpm gdouble tact_counter; gdouble delay_counter; // next time attack changeing when delay_counter == delay guint tic_counter; // in the range of default period union{ struct _AgsOss{ int device_fd; char *device; }oss; struct _AgsAlsa{ char *device; int rc; snd_pcm_t *handle; snd_async_handler_t *ahandler; snd_pcm_hw_params_t *params; }alsa; }out; GObject *ags_main; GList *audio; }; struct _AgsDevoutClass { GObjectClass object; void (*play_init)(AgsDevout *devout, GError **error); void (*play)(AgsDevout *devout, GError **error); void (*stop)(AgsDevout *devout); void (*tic)(AgsDevout *devout); void (*note_offset_changed)(AgsDevout *devout, guint note_offset); }; /** * AgsDevoutPlayDomain: * @domain: the source * @playback: if %TRUE playback is on * @sequencer: if %TRUE sequencer is on * @notation: if %TRUE notation is on * @devout_play: a #GList of #AgsDevoutPlay-struct * * A #AgsDevoutPlayDomain-struct represents the entire possible play/recall * context. */ struct _AgsDevoutPlayDomain { volatile guint flags; AgsThread **audio_thread; GObject *domain; GList *devout_play; }; /** * AgsDevoutPlay: * @flags: the internal state * @iterator_thread: Super-threaded related #AgsThread. Index 0 playback, 1 sequencer and 2 notation. * @source: either #AgsChannel or #AgsRecall * @audio_channel: destination audio channel * @recall_id: array pointing to appropriate #AgsRecallID. Index 0 playback, 1 sequencer and 2 notation. * * A #AgsDevoutPlay-struct represents the play/recall in #AgsChannel or #AgsRecall * scope to do output to device. */ struct _AgsDevoutPlay { volatile guint flags; AgsThread **channel_thread; AgsIteratorThread **iterator_thread; AgsThread **recycling_thread; GObject *source; guint audio_channel; AgsRecallID **recall_id; }; GType ags_devout_get_type(); GQuark ags_devout_error_quark(); AgsDevoutPlayDomain* ags_devout_play_domain_alloc(); void ags_devout_play_domain_free(AgsDevoutPlayDomain *devout_play_domain); AgsDevoutPlay* ags_devout_play_alloc(); void ags_devout_play_free(AgsDevoutPlay *devout_play); AgsDevoutPlay* ags_devout_play_find_source(GList *devout_play, GObject *source); void ags_devout_list_cards(GList **card_id, GList **card_name); void ags_devout_pcm_info(char *card_id, guint *channels_min, guint *channels_max, guint *rate_min, guint *rate_max, guint *buffer_size_min, guint *buffer_size_max, GError **error); void ags_devout_tic(AgsDevout *devout); void ags_devout_note_offset_changed(AgsDevout *devout, guint note_offset); AgsDevout* ags_devout_new(GObject *ags_main); #endif /*__AGS_DEVOUT_H__*/ gsequencer-0.6.37/src/ags/audio/ags_task.c0000644000175000017500000001210512626272146015302 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_task_class_init(AgsTaskClass *task); void ags_task_connectable_interface_init(AgsConnectableInterface *connectable); void ags_task_init(AgsTask *task); void ags_task_connect(AgsConnectable *connectable); void ags_task_disconnect(AgsConnectable *connectable); void ags_task_finalize(GObject *gobject); /** * SECTION:ags_task * @short_description: Perform operations in a thread safe context. * @title: AgsTask * @section_id: * @include: ags/audio/ags_task.h * * #AgsTask object acts an interceptor in a thread safe context. */ enum{ LAUNCH, FAILURE, LAST_SIGNAL, }; static gpointer ags_task_parent_class = NULL; static guint task_signals[LAST_SIGNAL]; GType ags_task_get_type() { static GType ags_type_task = 0; if(!ags_type_task){ static const GTypeInfo ags_task_info = { sizeof (AgsTaskClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_task_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsTask), 0, /* n_preallocs */ (GInstanceInitFunc) ags_task_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_task_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_task = g_type_register_static(G_TYPE_OBJECT, "AgsTask\0", &ags_task_info, 0); g_type_add_interface_static(ags_type_task, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_task); } void ags_task_class_init(AgsTaskClass *task) { GObjectClass *gobject; ags_task_parent_class = g_type_class_peek_parent(task); /* GObjectClass */ gobject = (GObjectClass *) task; gobject->finalize = ags_task_finalize; /* AgsTaskClass */ task->launch = NULL; task->failure = NULL; /* signals */ /** * AgsTask::launch: * @task: the object to launch. * * The ::launch signal is emited in a thread safe context */ task_signals[LAUNCH] = g_signal_new("launch\0", G_TYPE_FROM_CLASS (task), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AgsTaskClass, launch), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); /** * AgsTask::failure: * @task: the object failed to do its work. * @error: the error * * The ::failure signal is emited if ::launch fails */ task_signals[FAILURE] = g_signal_new("failure\0", G_TYPE_FROM_CLASS (task), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AgsTaskClass, failure), NULL, NULL, g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER); } void ags_task_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->is_ready = NULL; connectable->is_connected = NULL; connectable->connect = ags_task_connect; connectable->disconnect = ags_task_disconnect; } void ags_task_init(AgsTask *task) { task->flags = 0; task->name = NULL; task->delay = 0; pthread_cond_init(&(task->wait_sync_task_cond), NULL); } void ags_task_connect(AgsConnectable *connectable) { /* empty */ } void ags_task_disconnect(AgsConnectable *connectable) { /* empty */ } void ags_task_finalize(GObject *gobject) { AgsTask *task; task = AGS_TASK(gobject); if(task->name != NULL){ g_free(task->name); } pthread_cond_destroy(&(task->wait_sync_task_cond)); G_OBJECT_CLASS(ags_task_parent_class)->finalize(gobject); } /** * ags_task_launch: * @task: an #AgsTask * * Intercept task. * * Since: 0.4 */ void ags_task_launch(AgsTask *task) { g_return_if_fail(AGS_IS_TASK(task)); g_object_ref(G_OBJECT(task)); g_signal_emit(G_OBJECT(task), task_signals[LAUNCH], 0); g_object_unref(G_OBJECT(task)); } /** * ags_task_failure: * @task: an #AgsTask * @error: is %NULL on success * * Signals failure of task. * * Since: 0.4 */ void ags_task_failure(AgsTask *task, GError *error) { g_return_if_fail(AGS_IS_TASK(task)); g_object_ref(G_OBJECT(task)); g_signal_emit(G_OBJECT(task), task_signals[FAILURE], 0, error); g_object_unref(G_OBJECT(task)); } /** * ags_task_new: * * Creates a #AgsTask * * Returns: a new #AgsTask * * Since: 0.4 */ AgsTask* ags_task_new() { AgsTask *task; task = (AgsTask *) g_object_new(AGS_TYPE_TASK, NULL); return(task); } gsequencer-0.6.37/src/ags/audio/recall/0000755000175000017500000000000012633241335014657 500000000000000gsequencer-0.6.37/src/ags/audio/recall/ags_amplifier.h0000644000175000017500000000172212626272146017562 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_AMPLIFIER_H__ #define __AGS_AMPLIFIER_H__ #include #include #include void ags_amplifier(AgsRecall *recall); #endif /*__AGS_AMPLIFIER_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_volume_audio_signal.h0000644000175000017500000000415612612232540021630 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_VOLUME_AUDIO_SIGNAL_H__ #define __AGS_VOLUME_AUDIO_SIGNAL_H__ #include #include #include #define AGS_TYPE_VOLUME_AUDIO_SIGNAL (ags_volume_audio_signal_get_type()) #define AGS_VOLUME_AUDIO_SIGNAL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_VOLUME_AUDIO_SIGNAL, AgsVolumeAudioSignal)) #define AGS_VOLUME_AUDIO_SIGNAL_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_VOLUME_AUDIO_SIGNAL, AgsVolumeAudioSignalClass)) #define AGS_IS_VOLUME_AUDIO_SIGNAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_VOLUME_AUDIO_SIGNAL)) #define AGS_IS_VOLUME_AUDIO_SIGNAL_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_VOLUME_AUDIO_SIGNAL)) #define AGS_VOLUME_AUDIO_SIGNAL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_VOLUME_AUDIO_SIGNAL, AgsVolumeAudioSignalClass)) typedef struct _AgsVolumeAudioSignal AgsVolumeAudioSignal; typedef struct _AgsVolumeAudioSignalClass AgsVolumeAudioSignalClass; struct _AgsVolumeAudioSignal { AgsRecallAudioSignal recall_audio_signal; }; struct _AgsVolumeAudioSignalClass { AgsRecallAudioSignalClass recall_audio_signal; }; GType ags_volume_audio_signal_get_type(); AgsVolumeAudioSignal* ags_volume_audio_signal_new(AgsAudioSignal *audio_signal); #endif /*__AGS_VOLUME_AUDIO_SIGNAL_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_clone_channel.c0000644000175000017500000001531212626272146020375 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include void ags_clone_channel_class_init(AgsCloneChannelClass *clone_channel); void ags_clone_channel_connectable_interface_init(AgsConnectableInterface *connectable); void ags_clone_channel_plugin_interface_init(AgsPluginInterface *plugin); void ags_clone_channel_init(AgsCloneChannel *clone_channel); void ags_clone_channel_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_clone_channel_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_clone_channel_connect(AgsConnectable *connectable); void ags_clone_channel_disconnect(AgsConnectable *connectable); void ags_clone_channel_finalize(GObject *gobject); void ags_clone_channel_set_ports(AgsPlugin *plugin, GList *port); enum{ PROP_0, PROP_AUDIO_CHANNEL, }; static gpointer ags_clone_channel_parent_class = NULL; static AgsConnectableInterface *ags_clone_channel_parent_connectable_interface; static AgsPluginInterface *ags_clone_channel_parent_plugin_interface; GType ags_clone_channel_get_type() { static GType ags_type_clone_channel = 0; if(!ags_type_clone_channel){ static const GTypeInfo ags_clone_channel_info = { sizeof (AgsCloneChannelClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_clone_channel_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsCloneChannel), 0, /* n_preallocs */ (GInstanceInitFunc) ags_clone_channel_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_clone_channel_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_plugin_interface_info = { (GInterfaceInitFunc) ags_clone_channel_plugin_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_clone_channel = g_type_register_static(AGS_TYPE_RECALL_CHANNEL, "AgsCloneChannel\0", &ags_clone_channel_info, 0); g_type_add_interface_static(ags_type_clone_channel, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_clone_channel, AGS_TYPE_PLUGIN, &ags_plugin_interface_info); } return(ags_type_clone_channel); } void ags_clone_channel_class_init(AgsCloneChannelClass *clone_channel) { GObjectClass *gobject; AgsRecallClass *recall; GParamSpec *param_spec; ags_clone_channel_parent_class = g_type_class_peek_parent(clone_channel); /* GObjectClass */ gobject = (GObjectClass *) clone_channel; gobject->set_property = ags_clone_channel_set_property; gobject->get_property = ags_clone_channel_get_property; gobject->finalize = ags_clone_channel_finalize; /* properties */ param_spec = g_param_spec_uint("audio_channel\0", "assigned audio Channel\0", "The audio channel this recall does output to\0", 0, 65536, 0, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_AUDIO_CHANNEL, param_spec); } void ags_clone_channel_connectable_interface_init(AgsConnectableInterface *connectable) { ags_clone_channel_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_clone_channel_connect; connectable->disconnect = ags_clone_channel_disconnect; } void ags_clone_channel_plugin_interface_init(AgsPluginInterface *plugin) { ags_clone_channel_parent_plugin_interface = g_type_interface_peek_parent(plugin); plugin->set_ports = ags_clone_channel_set_ports; } void ags_clone_channel_init(AgsCloneChannel *clone_channel) { clone_channel->audio_channel = 0; } void ags_clone_channel_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsCloneChannel *clone_channel; clone_channel = AGS_CLONE_CHANNEL(gobject); switch(prop_id){ case PROP_AUDIO_CHANNEL: { clone_channel->audio_channel = g_value_get_uint(value); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_clone_channel_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsCloneChannel *clone_channel; clone_channel = AGS_CLONE_CHANNEL(gobject); switch(prop_id){ case PROP_AUDIO_CHANNEL: { g_value_set_uint(value, clone_channel->audio_channel); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_clone_channel_finalize(GObject *gobject) { AgsCloneChannel *clone_channel; clone_channel = AGS_CLONE_CHANNEL(gobject); /* call parent */ G_OBJECT_CLASS(ags_clone_channel_parent_class)->finalize(gobject); } void ags_clone_channel_connect(AgsConnectable *connectable) { AgsCloneChannel *clone_channel; ags_clone_channel_parent_connectable_interface->connect(connectable); /* empty */ } void ags_clone_channel_disconnect(AgsConnectable *connectable) { ags_clone_channel_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_clone_channel_set_ports(AgsPlugin *plugin, GList *port) { while(port != NULL){ if(!strncmp(AGS_PORT(port->data)->specifier, "muted[0]\0", 9)){ g_object_set(G_OBJECT(plugin), "muted\0", AGS_PORT(port->data), NULL); } port = port->next; } } AgsCloneChannel* ags_clone_channel_new(AgsDevout *devout, guint audio_channel) { AgsCloneChannel *clone_channel; clone_channel = (AgsCloneChannel *) g_object_new(AGS_TYPE_CLONE_CHANNEL, "devout\0", devout, "audio_channel\0", audio_channel, NULL); return(clone_channel); } gsequencer-0.6.37/src/ags/audio/recall/ags_peak_recycling.c0000644000175000017500000001621612626272146020570 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include void ags_peak_recycling_class_init(AgsPeakRecyclingClass *peak_recycling); void ags_peak_recycling_connectable_interface_init(AgsConnectableInterface *connectable); void ags_peak_recycling_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable); void ags_peak_recycling_init(AgsPeakRecycling *peak_recycling); void ags_peak_recycling_connect(AgsConnectable *connectable); void ags_peak_recycling_disconnect(AgsConnectable *connectable); void ags_peak_recycling_connect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_peak_recycling_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_peak_recycling_finalize(GObject *gobject); AgsRecall* ags_peak_recycling_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter); /** * SECTION:ags_peak_recycling * @short_description: peaks recycling * @title: AgsPeakRecycling * @section_id: * @include: ags/audio/recall/ags_peak_recycling.h * * The #AgsPeakRecycling class peaks the recycling. */ static gpointer ags_peak_recycling_parent_class = NULL; static AgsConnectableInterface *ags_peak_recycling_parent_connectable_interface; static AgsDynamicConnectableInterface *ags_peak_recycling_parent_dynamic_connectable_interface; GType ags_peak_recycling_get_type() { static GType ags_type_peak_recycling = 0; if(!ags_type_peak_recycling){ static const GTypeInfo ags_peak_recycling_info = { sizeof (AgsPeakRecyclingClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_peak_recycling_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsPeakRecycling), 0, /* n_preallocs */ (GInstanceInitFunc) ags_peak_recycling_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_peak_recycling_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_dynamic_connectable_interface_info = { (GInterfaceInitFunc) ags_peak_recycling_dynamic_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_peak_recycling = g_type_register_static(AGS_TYPE_RECALL_RECYCLING, "AgsPeakRecycling\0", &ags_peak_recycling_info, 0); g_type_add_interface_static(ags_type_peak_recycling, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_peak_recycling, AGS_TYPE_DYNAMIC_CONNECTABLE, &ags_dynamic_connectable_interface_info); } return (ags_type_peak_recycling); } void ags_peak_recycling_class_init(AgsPeakRecyclingClass *peak_recycling) { GObjectClass *gobject; AgsRecallClass *recall; GParamSpec *param_spec; ags_peak_recycling_parent_class = g_type_class_peek_parent(peak_recycling); /* GObjectClass */ gobject = (GObjectClass *) peak_recycling; gobject->finalize = ags_peak_recycling_finalize; /* AgsRecallClass */ recall = (AgsRecallClass *) peak_recycling; recall->duplicate = ags_peak_recycling_duplicate; } void ags_peak_recycling_connectable_interface_init(AgsConnectableInterface *connectable) { ags_peak_recycling_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_peak_recycling_connect; connectable->disconnect = ags_peak_recycling_disconnect; } void ags_peak_recycling_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable) { ags_peak_recycling_parent_dynamic_connectable_interface = g_type_interface_peek_parent(dynamic_connectable); dynamic_connectable->connect_dynamic = ags_peak_recycling_connect_dynamic; dynamic_connectable->disconnect_dynamic = ags_peak_recycling_disconnect_dynamic; } void ags_peak_recycling_init(AgsPeakRecycling *peak_recycling) { AGS_RECALL(peak_recycling)->name = "ags-peak\0"; AGS_RECALL(peak_recycling)->version = AGS_EFFECTS_DEFAULT_VERSION; AGS_RECALL(peak_recycling)->build_id = AGS_BUILD_ID; AGS_RECALL(peak_recycling)->xml_type = "ags-peak-recycling\0"; AGS_RECALL(peak_recycling)->port = NULL; AGS_RECALL(peak_recycling)->child_type = AGS_TYPE_PEAK_AUDIO_SIGNAL; AGS_RECALL_RECYCLING(peak_recycling)->flags |= (AGS_RECALL_RECYCLING_MAP_CHILD_SOURCE); } void ags_peak_recycling_finalize(GObject *gobject) { /* empty */ /* call parent */ G_OBJECT_CLASS(ags_peak_recycling_parent_class)->finalize(gobject); } void ags_peak_recycling_connect(AgsConnectable *connectable) { /* call parent */ ags_peak_recycling_parent_connectable_interface->connect(connectable); /* empty */ } void ags_peak_recycling_disconnect(AgsConnectable *connectable) { /* call parent */ ags_peak_recycling_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_peak_recycling_connect_dynamic(AgsDynamicConnectable *dynamic_connectable) { /* call parent */ ags_peak_recycling_parent_dynamic_connectable_interface->connect_dynamic(dynamic_connectable); /* empty */ } void ags_peak_recycling_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable) { /* call parent */ ags_peak_recycling_parent_dynamic_connectable_interface->disconnect_dynamic(dynamic_connectable); /* empty */ } AgsRecall* ags_peak_recycling_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter) { AgsPeakRecycling *copy; copy = (AgsPeakRecycling *) AGS_RECALL_CLASS(ags_peak_recycling_parent_class)->duplicate(recall, recall_id, n_params, parameter); return((AgsRecall *) copy); } /** * ags_peak_recycling_new: * @recycling: the source #AgsRecycling * * Creates an #AgsPeakRecycling * * Returns: a new #AgsPeakRecycling * * Since: 0.4 */ AgsPeakRecycling* ags_peak_recycling_new(AgsRecycling *recycling) { AgsPeakRecycling *peak_recycling; peak_recycling = (AgsPeakRecycling *) g_object_new(AGS_TYPE_PEAK_RECYCLING, "source\0", recycling, NULL); return(peak_recycling); } gsequencer-0.6.37/src/ags/audio/recall/ags_volume_recycling.c0000644000175000017500000001654012626272146021157 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include void ags_volume_recycling_class_init(AgsVolumeRecyclingClass *volume_recycling); void ags_volume_recycling_connectable_interface_init(AgsConnectableInterface *connectable); void ags_volume_recycling_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable); void ags_volume_recycling_init(AgsVolumeRecycling *volume_recycling); void ags_volume_recycling_connect(AgsConnectable *connectable); void ags_volume_recycling_disconnect(AgsConnectable *connectable); void ags_volume_recycling_connect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_volume_recycling_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_volume_recycling_finalize(GObject *gobject); AgsRecall* ags_volume_recycling_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter); /** * SECTION:ags_volume_recycling * @short_description: volumes recycling * @title: AgsVolumeRecycling * @section_id: * @include: ags/audio/recall/ags_volume_recycling.h * * The #AgsVolumeRecycling class volumes the recycling. */ static gpointer ags_volume_recycling_parent_class = NULL; static AgsConnectableInterface *ags_volume_recycling_parent_connectable_interface; static AgsDynamicConnectableInterface *ags_volume_recycling_parent_dynamic_connectable_interface; GType ags_volume_recycling_get_type() { static GType ags_type_volume_recycling = 0; if(!ags_type_volume_recycling){ static const GTypeInfo ags_volume_recycling_info = { sizeof (AgsVolumeRecyclingClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_volume_recycling_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsVolumeRecycling), 0, /* n_preallocs */ (GInstanceInitFunc) ags_volume_recycling_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_volume_recycling_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_dynamic_connectable_interface_info = { (GInterfaceInitFunc) ags_volume_recycling_dynamic_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_volume_recycling = g_type_register_static(AGS_TYPE_RECALL_RECYCLING, "AgsVolumeRecycling\0", &ags_volume_recycling_info, 0); g_type_add_interface_static(ags_type_volume_recycling, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_volume_recycling, AGS_TYPE_DYNAMIC_CONNECTABLE, &ags_dynamic_connectable_interface_info); } return (ags_type_volume_recycling); } void ags_volume_recycling_class_init(AgsVolumeRecyclingClass *volume_recycling) { GObjectClass *gobject; AgsRecallClass *recall; GParamSpec *param_spec; ags_volume_recycling_parent_class = g_type_class_peek_parent(volume_recycling); /* GObjectClass */ gobject = (GObjectClass *) volume_recycling; gobject->finalize = ags_volume_recycling_finalize; /* AgsRecallClass */ recall = (AgsRecallClass *) volume_recycling; recall->duplicate = ags_volume_recycling_duplicate; } void ags_volume_recycling_connectable_interface_init(AgsConnectableInterface *connectable) { ags_volume_recycling_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_volume_recycling_connect; connectable->disconnect = ags_volume_recycling_disconnect; } void ags_volume_recycling_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable) { ags_volume_recycling_parent_dynamic_connectable_interface = g_type_interface_peek_parent(dynamic_connectable); dynamic_connectable->connect_dynamic = ags_volume_recycling_connect_dynamic; dynamic_connectable->disconnect_dynamic = ags_volume_recycling_disconnect_dynamic; } void ags_volume_recycling_init(AgsVolumeRecycling *volume_recycling) { AGS_RECALL(volume_recycling)->name = "ags-volume\0"; AGS_RECALL(volume_recycling)->version = AGS_EFFECTS_DEFAULT_VERSION; AGS_RECALL(volume_recycling)->build_id = AGS_BUILD_ID; AGS_RECALL(volume_recycling)->xml_type = "ags-volume-recycling\0"; AGS_RECALL(volume_recycling)->port = NULL; AGS_RECALL(volume_recycling)->child_type = AGS_TYPE_VOLUME_AUDIO_SIGNAL; AGS_RECALL_RECYCLING(volume_recycling)->flags |= (AGS_RECALL_RECYCLING_MAP_CHILD_SOURCE); } void ags_volume_recycling_finalize(GObject *gobject) { /* empty */ /* call parent */ G_OBJECT_CLASS(ags_volume_recycling_parent_class)->finalize(gobject); } void ags_volume_recycling_connect(AgsConnectable *connectable) { /* call parent */ ags_volume_recycling_parent_connectable_interface->connect(connectable); /* empty */ } void ags_volume_recycling_disconnect(AgsConnectable *connectable) { /* call parent */ ags_volume_recycling_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_volume_recycling_connect_dynamic(AgsDynamicConnectable *dynamic_connectable) { /* call parent */ ags_volume_recycling_parent_dynamic_connectable_interface->connect_dynamic(dynamic_connectable); /* empty */ } void ags_volume_recycling_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable) { /* call parent */ ags_volume_recycling_parent_dynamic_connectable_interface->disconnect_dynamic(dynamic_connectable); /* empty */ } AgsRecall* ags_volume_recycling_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter) { AgsVolumeRecycling *copy; copy = (AgsVolumeRecycling *) AGS_RECALL_CLASS(ags_volume_recycling_parent_class)->duplicate(recall, recall_id, n_params, parameter); return((AgsRecall *) copy); } /** * ags_volume_recycling_new: * @recycling: the source #AgsRecycling * * Creates an #AgsVolumeRecycling * * Returns: a new #AgsVolumeRecycling * * Since: 0.4 */ AgsVolumeRecycling* ags_volume_recycling_new(AgsRecycling *recycling) { AgsVolumeRecycling *volume_recycling; volume_recycling = (AgsVolumeRecycling *) g_object_new(AGS_TYPE_VOLUME_RECYCLING, "source\0", recycling, NULL); return(volume_recycling); } gsequencer-0.6.37/src/ags/audio/recall/ags_buffer_channel_run.h0000644000175000017500000000414112612232540021422 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_BUFFER_CHANNEL_RUN_H__ #define __AGS_BUFFER_CHANNEL_RUN_H__ #include #include #include #include #define AGS_TYPE_BUFFER_CHANNEL_RUN (ags_buffer_channel_run_get_type()) #define AGS_BUFFER_CHANNEL_RUN(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_BUFFER_CHANNEL_RUN, AgsBufferChannelRun)) #define AGS_BUFFER_CHANNEL_RUN_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_BUFFER_CHANNEL_RUN, AgsBufferChannelRunClass)) #define AGS_IS_BUFFER_CHANNEL_RUN(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_BUFFER_CHANNEL_RUN)) #define AGS_IS_BUFFER_CHANNEL_RUN_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_BUFFER_CHANNEL_RUN)) #define AGS_BUFFER_CHANNEL_RUN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_BUFFER_CHANNEL_RUN, AgsBufferChannelRunClass)) typedef struct _AgsBufferChannelRun AgsBufferChannelRun; typedef struct _AgsBufferChannelRunClass AgsBufferChannelRunClass; struct _AgsBufferChannelRun { AgsRecallChannelRun recall_channel_run; }; struct _AgsBufferChannelRunClass { AgsRecallChannelRunClass recall_channel_run; }; GType ags_buffer_channel_run_get_type(); AgsBufferChannelRun* ags_buffer_channel_run_new(); #endif /*__AGS_BUFFER_CHANNEL_RUN_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_mute_channel_run.h0000644000175000017500000000412112626272146021134 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_MUTE_CHANNEL_RUN_H__ #define __AGS_MUTE_CHANNEL_RUN_H__ #include #include #include #include #include #define AGS_TYPE_MUTE_CHANNEL_RUN (ags_mute_channel_run_get_type()) #define AGS_MUTE_CHANNEL_RUN(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_MUTE_CHANNEL_RUN, AgsMuteChannelRun)) #define AGS_MUTE_CHANNEL_RUN_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_MUTE_CHANNEL_RUN, AgsMuteChannelRunClass)) #define AGS_IS_MUTE_CHANNEL_RUN(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_MUTE_CHANNEL_RUN)) #define AGS_IS_MUTE_CHANNEL_RUN_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_MUTE_CHANNEL_RUN)) #define AGS_MUTE_CHANNEL_RUN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_MUTE_CHANNEL_RUN, AgsMuteChannelRunClass)) typedef struct _AgsMuteChannelRun AgsMuteChannelRun; typedef struct _AgsMuteChannelRunClass AgsMuteChannelRunClass; struct _AgsMuteChannelRun { AgsRecallChannelRun recall_channel_run; }; struct _AgsMuteChannelRunClass { AgsRecallChannelRunClass recall_channel_run; }; GType ags_mute_channel_run_get_type(); AgsMuteChannelRun* ags_mute_channel_run_new(AgsChannel *source); #endif /*__AGS_MUTE_CHANNEL_RUN_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_copy_recycling.h0000644000175000017500000000420312626272146020620 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_COPY_RECYCLING_H__ #define __AGS_COPY_RECYCLING_H__ #include #include #include #include #include #include #define AGS_TYPE_COPY_RECYCLING (ags_copy_recycling_get_type()) #define AGS_COPY_RECYCLING(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_COPY_RECYCLING, AgsCopyRecycling)) #define AGS_COPY_RECYCLING_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_COPY_RECYCLING, AgsCopyRecyclingClass)) #define AGS_IS_COPY_RECYCLING(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_COPY_RECYCLING)) #define AGS_IS_COPY_RECYCLING_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_COPY_RECYCLING)) #define AGS_COPY_RECYCLING_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_COPY_RECYCLING, AgsCopyRecyclingClass)) typedef struct _AgsCopyRecycling AgsCopyRecycling; typedef struct _AgsCopyRecyclingClass AgsCopyRecyclingClass; struct _AgsCopyRecycling { AgsRecallRecycling recall_recycling; }; struct _AgsCopyRecyclingClass { AgsRecallRecyclingClass recall_recycling; }; GType ags_copy_recycling_get_type(); AgsCopyRecycling* ags_copy_recycling_new(AgsRecycling *destination, AgsRecycling *source, AgsDevout *devout); #endif /*__AGS_COPY_RECYCLING_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_play_audio.h0000644000175000017500000000352612612232540017731 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_PLAY_AUDIO_H__ #define __AGS_PLAY_AUDIO_H__ #include #include #include #define AGS_TYPE_PLAY_AUDIO (ags_play_audio_get_type()) #define AGS_PLAY_AUDIO(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_PLAY_AUDIO, AgsPlayAudio)) #define AGS_PLAY_AUDIO_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_PLAY_AUDIO, AgsPlayAudio)) #define AGS_IS_PLAY_AUDIO(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_PLAY_AUDIO)) #define AGS_IS_PLAY_AUDIO_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_PLAY_AUDIO)) #define AGS_PLAY_AUDIO_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_PLAY_AUDIO, AgsPlayAudioClass)) typedef struct _AgsPlayAudio AgsPlayAudio; typedef struct _AgsPlayAudioClass AgsPlayAudioClass; struct _AgsPlayAudio { AgsRecallAudio recall_audio; AgsPort *muted; }; struct _AgsPlayAudioClass { AgsRecallAudioClass recall_audio; }; GType ags_play_audio_get_type(); AgsPlayAudio* ags_play_audio_new(); #endif /*__AGS_PLAY_AUDIO_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_mute_audio_signal.h0000644000175000017500000000417612612232540021275 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_MUTE_AUDIO_SIGNAL_H__ #define __AGS_MUTE_AUDIO_SIGNAL_H__ #include #include #include #include #include #define AGS_TYPE_MUTE_AUDIO_SIGNAL (ags_mute_audio_signal_get_type()) #define AGS_MUTE_AUDIO_SIGNAL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_MUTE_AUDIO_SIGNAL, AgsMuteAudioSignal)) #define AGS_MUTE_AUDIO_SIGNAL_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_MUTE_AUDIO_SIGNAL, AgsMuteAudioSignalClass)) #define AGS_IS_MUTE_AUDIO_SIGNAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_MUTE_AUDIO_SIGNAL)) #define AGS_IS_MUTE_AUDIO_SIGNAL_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_MUTE_AUDIO_SIGNAL)) #define AGS_MUTE_AUDIO_SIGNAL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_MUTE_AUDIO_SIGNAL, AgsMuteAudioSignalClass)) typedef struct _AgsMuteAudioSignal AgsMuteAudioSignal; typedef struct _AgsMuteAudioSignalClass AgsMuteAudioSignalClass; struct _AgsMuteAudioSignal { AgsRecallAudioSignal recall_audio_signal; }; struct _AgsMuteAudioSignalClass { AgsRecallAudioSignalClass recall_audio_signal; }; GType ags_mute_audio_signal_get_type(); AgsMuteAudioSignal* ags_mute_audio_signal_new(AgsAudioSignal *source); #endif /*__AGS_MUTE_AUDIO_SIGNAL_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_peak_channel.h0000644000175000017500000000405012612232540020204 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_PEAK_CHANNEL_H__ #define __AGS_PEAK_CHANNEL_H__ #include #include #include #include #define AGS_TYPE_PEAK_CHANNEL (ags_peak_channel_get_type()) #define AGS_PEAK_CHANNEL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_PEAK_CHANNEL, AgsPeakChannel)) #define AGS_PEAK_CHANNEL_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_PEAK_CHANNEL, AgsPeakChannel)) #define AGS_IS_PEAK_CHANNEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_PEAK_CHANNEL)) #define AGS_IS_PEAK_CHANNEL_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_PEAK_CHANNEL)) #define AGS_PEAK_CHANNEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_PEAK_CHANNEL, AgsPeakChannelClass)) typedef struct _AgsPeakChannel AgsPeakChannel; typedef struct _AgsPeakChannelClass AgsPeakChannelClass; struct _AgsPeakChannel { AgsRecallChannel recall_channel; AgsPort *peak; }; struct _AgsPeakChannelClass { AgsRecallChannelClass recall_channel; }; GType ags_peak_channel_get_type(); void ags_peak_channel_retrieve_peak(AgsPeakChannel *peak_channel, gboolean is_play); AgsPeakChannel* ags_peak_channel_new(AgsChannel *source); #endif /*__AGS_PEAK_CHANNEL_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_clone_channel_run.h0000644000175000017500000000406612626272146021272 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_CLONE_CHANNEL_RUN_H__ #define __AGS_CLONE_CHANNEL_RUN_H__ #include #include #include #include #define AGS_TYPE_CLONE_CHANNEL_RUN (ags_clone_channel_run_get_type()) #define AGS_CLONE_CHANNEL_RUN(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_CLONE_CHANNEL_RUN, AgsCloneChannelRun)) #define AGS_CLONE_CHANNEL_RUN_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_CLONE_CHANNEL_RUN, AgsCloneChannelRunClass)) #define AGS_IS_CLONE_CHANNEL_RUN(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_CLONE_CHANNEL_RUN)) #define AGS_IS_CLONE_CHANNEL_RUN_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_CLONE_CHANNEL_RUN)) #define AGS_CLONE_CHANNEL_RUN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_CLONE_CHANNEL_RUN, AgsCloneChannelRunClass)) typedef struct _AgsCloneChannelRun AgsCloneChannelRun; typedef struct _AgsCloneChannelRunClass AgsCloneChannelRunClass; struct _AgsCloneChannelRun { AgsRecallChannelRun recall_channel_run; }; struct _AgsCloneChannelRunClass { AgsRecallChannelRunClass recall_channel_run; }; GType ags_clone_channel_run_get_type(); AgsCloneChannelRun* ags_clone_channel_run_new(); #endif /*__AGS_CLONE_CHANNEL_RUN_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_mute_channel.h0000644000175000017500000000367112612232540020246 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_MUTE_CHANNEL_H__ #define __AGS_MUTE_CHANNEL_H__ #include #include #include #include #define AGS_TYPE_MUTE_CHANNEL (ags_mute_channel_get_type()) #define AGS_MUTE_CHANNEL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_MUTE_CHANNEL, AgsMuteChannel)) #define AGS_MUTE_CHANNEL_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_MUTE_CHANNEL, AgsMuteChannel)) #define AGS_IS_MUTE_CHANNEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_MUTE_CHANNEL)) #define AGS_IS_MUTE_CHANNEL_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_MUTE_CHANNEL)) #define AGS_MUTE_CHANNEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_MUTE_CHANNEL, AgsMuteChannelClass)) typedef struct _AgsMuteChannel AgsMuteChannel; typedef struct _AgsMuteChannelClass AgsMuteChannelClass; struct _AgsMuteChannel { AgsRecallChannel recall_channel; AgsPort *muted; }; struct _AgsMuteChannelClass { AgsRecallChannelClass recall_channel; }; GType ags_mute_channel_get_type(); AgsMuteChannel* ags_mute_channel_new(); #endif /*__AGS_MUTE_CHANNEL_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_copy_pattern_channel.c0000644000175000017500000002060212626272146022002 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include void ags_copy_pattern_channel_class_init(AgsCopyPatternChannelClass *copy_pattern_channel); void ags_copy_pattern_channel_plugin_interface_init(AgsPluginInterface *plugin); void ags_copy_pattern_channel_init(AgsCopyPatternChannel *copy_pattern_channel); void ags_copy_pattern_channel_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_copy_pattern_channel_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_copy_pattern_channel_set_ports(AgsPlugin *plugin, GList *port); void ags_copy_pattern_channel_finalize(GObject *gobject); /** * SECTION:ags_copy_pattern_channel * @short_description: copy patterns channel * @title: AgsCopyPatternChannel * @section_id: * @include: ags/audio/recall/ags_copy_pattern_channel.h * * The #AgsCopyPatternChannel class provides ports to the effect processor. */ enum{ PROP_0, PROP_PATTERN, }; static gpointer ags_copy_pattern_channel_parent_class = NULL; static const gchar *ags_copy_pattern_channel_plugin_name = "ags-copy-pattern\0"; static const gchar *ags_copy_pattern_channel_specifier[] = { "./pattern[0]\0" }; static const gchar *ags_copy_pattern_channel_control_port[] = { "1/1\0" }; GType ags_copy_pattern_channel_get_type() { static GType ags_type_copy_pattern_channel = 0; if(!ags_type_copy_pattern_channel){ static const GTypeInfo ags_copy_pattern_channel_info = { sizeof (AgsCopyPatternChannelClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_copy_pattern_channel_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsCopyPatternChannel), 0, /* n_preallocs */ (GInstanceInitFunc) ags_copy_pattern_channel_init, }; static const GInterfaceInfo ags_plugin_interface_info = { (GInterfaceInitFunc) ags_copy_pattern_channel_plugin_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_copy_pattern_channel = g_type_register_static(AGS_TYPE_RECALL_CHANNEL, "AgsCopyPatternChannel\0", &ags_copy_pattern_channel_info, 0); g_type_add_interface_static(ags_type_copy_pattern_channel, AGS_TYPE_PLUGIN, &ags_plugin_interface_info); } return(ags_type_copy_pattern_channel); } void ags_copy_pattern_channel_plugin_interface_init(AgsPluginInterface *plugin) { plugin->set_ports = ags_copy_pattern_channel_set_ports; } void ags_copy_pattern_channel_class_init(AgsCopyPatternChannelClass *copy_pattern_channel) { GObjectClass *gobject; GParamSpec *param_spec; ags_copy_pattern_channel_parent_class = g_type_class_peek_parent(copy_pattern_channel); /* GObjectClass */ gobject = (GObjectClass *) copy_pattern_channel; gobject->set_property = ags_copy_pattern_channel_set_property; gobject->get_property = ags_copy_pattern_channel_get_property; gobject->finalize = ags_copy_pattern_channel_finalize; /* properties */ param_spec = g_param_spec_object("pattern\0", "pattern to play\0", "The pattern which has to be played\0", AGS_TYPE_PORT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_PATTERN, param_spec); } void ags_copy_pattern_channel_init(AgsCopyPatternChannel *copy_pattern_channel) { GList *port; AGS_RECALL(copy_pattern_channel)->name = "ags-copy-pattern\0"; AGS_RECALL(copy_pattern_channel)->version = AGS_EFFECTS_DEFAULT_VERSION; AGS_RECALL(copy_pattern_channel)->build_id = AGS_BUILD_ID; AGS_RECALL(copy_pattern_channel)->xml_type = "ags-copy-pattern-channel\0"; port = NULL; copy_pattern_channel->pattern = g_object_new(AGS_TYPE_PORT, "plugin-name\0", ags_copy_pattern_channel_plugin_name, "specifier\0", ags_copy_pattern_channel_specifier[0], "control-port\0", ags_copy_pattern_channel_control_port[0], "port-value-is-pointer\0", FALSE, "port-value-type\0", G_TYPE_OBJECT, NULL); copy_pattern_channel->pattern->port_value.ags_port_object = NULL; port = g_list_prepend(port, copy_pattern_channel->pattern); AGS_RECALL(copy_pattern_channel)->port = port; } void ags_copy_pattern_channel_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsCopyPatternChannel *copy_pattern_channel; copy_pattern_channel = AGS_COPY_PATTERN_CHANNEL(gobject); switch(prop_id){ case PROP_PATTERN: { AgsPort *pattern; pattern = (AgsPort *) g_value_get_object(value); if(copy_pattern_channel->pattern == pattern) return; if(copy_pattern_channel->pattern != NULL) g_object_unref(G_OBJECT(copy_pattern_channel->pattern)); if(pattern != NULL) g_object_ref(G_OBJECT(pattern)); copy_pattern_channel->pattern = pattern; } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; }; } void ags_copy_pattern_channel_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsCopyPatternChannel *copy_pattern_channel; copy_pattern_channel = AGS_COPY_PATTERN_CHANNEL(gobject); switch(prop_id){ case PROP_PATTERN: { g_value_set_object(value, copy_pattern_channel->pattern); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_copy_pattern_channel_set_ports(AgsPlugin *plugin, GList *port) { while(port != NULL){ if(!strncmp(AGS_PORT(port->data)->specifier, "./pattern[0]\0", 11)){ g_object_set(G_OBJECT(plugin), "pattern\0", AGS_PORT(port->data), NULL); } port = port->next; } } void ags_copy_pattern_channel_finalize(GObject *gobject) { AgsCopyPatternChannel *copy_pattern_channel; copy_pattern_channel = AGS_COPY_PATTERN_CHANNEL(gobject); if(copy_pattern_channel->pattern != NULL){ g_object_unref(copy_pattern_channel->pattern); } G_OBJECT_CLASS(ags_copy_pattern_channel_parent_class)->finalize(gobject); } GList* ags_copy_pattern_channel_template_find_source_and_destination(GList *recall, AgsChannel *destination, AgsChannel *source) { AgsCopyPatternChannel *copy_pattern_channel; while(recall != NULL){ recall = ags_recall_template_find_type(recall, AGS_TYPE_COPY_PATTERN_CHANNEL); if(recall == NULL) break; copy_pattern_channel = AGS_COPY_PATTERN_CHANNEL(recall->data); if(AGS_RECALL_CHANNEL(copy_pattern_channel)->destination == destination && AGS_RECALL_CHANNEL(copy_pattern_channel)->source == source) break; recall = recall->next; } return(recall); } /** * ags_copy_pattern_channel_new: * @destination: the destination #AgsChannel * @source: the source #AgsChannel * @pattern: the pattern port * * Creates an #AgsCopyPatternChannel * * Returns: a new #AgsCopyPatternChannel * * Since: 0.4 */ AgsCopyPatternChannel* ags_copy_pattern_channel_new(AgsChannel *destination, AgsChannel *source, AgsPort *pattern) { AgsCopyPatternChannel *copy_pattern_channel; copy_pattern_channel = (AgsCopyPatternChannel *) g_object_new(AGS_TYPE_COPY_PATTERN_CHANNEL, "destination\0", destination, "channel\0", source, "pattern\0", pattern, NULL); return(copy_pattern_channel); } gsequencer-0.6.37/src/ags/audio/recall/ags_play_note.c0000644000175000017500000001702612626272146017603 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include void ags_play_note_class_init(AgsPlayNoteClass *play_note); void ags_play_note_init(AgsPlayNote *play_note); void ags_play_note_finalize(GObject *gobject); void ags_play_note_connect(AgsPlayNote *play_note); void ags_play_note_map_play_audio_signal(AgsRecall *recall, AgsRecallID *recall_id, gpointer data); void ags_play_note(AgsRecall *recall, AgsRecallID *recall_id, gpointer data); void ags_play_note_stop(AgsRecall *recall, AgsRecallID *recall_id, gpointer data); void ags_play_note_cancel(AgsRecall *recall, AgsRecallID *recall_id, gpointer data); void ags_play_note_play_audio_signal_done(AgsRecall *recall, AgsRecallID *recall_id, gpointer data); static gpointer ags_play_note_parent_class = NULL; GType ags_play_note_get_type() { static GType ags_type_play_note = 0; if(!ags_type_play_note){ static const GTypeInfo ags_play_note_info = { sizeof (AgsPlayNoteClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_play_note_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsPlayNote), 0, /* n_preallocs */ (GInstanceInitFunc) ags_play_note_init, }; ags_type_play_note = g_type_register_static(AGS_TYPE_RECALL, "AgsPlayNote\0", &ags_play_note_info, 0); } return (ags_type_play_note); } void ags_play_note_class_init(AgsPlayNoteClass *play_note) { GObjectClass *gobject; ags_play_note_parent_class = g_type_class_peek_parent(play_note); gobject = (GObjectClass *) play_note; gobject->finalize = ags_play_note_finalize; } void ags_play_note_init(AgsPlayNote *play_note) { play_note->devout = NULL; play_note->note = NULL; play_note->channel = NULL; } void ags_play_note_finalize(GObject *gobject) { /* AgsPlayNote *play_note; GList *list, *list_next; play_note = AGS_PLAY_NOTE(gobject); list = play_note->recall.recall; while(list != NULL){ list_next = list->next; g_object_unref(G_OBJECT(list->data)); g_list_free1(list); list = list_next; } */ G_OBJECT_CLASS(ags_play_note_parent_class)->finalize(gobject); } void ags_play_note_connect(AgsPlayNote *play_note) { // ags_recall_connect(AGS_RECALL(play_note)); g_signal_connect((GObject *) play_note, "run_inter\0", G_CALLBACK(ags_play_note), NULL); g_signal_connect((GObject *) play_note, "stop\0", G_CALLBACK(ags_play_note_stop), NULL); g_signal_connect((GObject *) play_note, "cancel\0", G_CALLBACK(ags_play_note_cancel), NULL); } void ags_play_note_map_play_audio_signal(AgsRecall *recall, AgsRecallID *recall_id, gpointer data) { AgsPlayNotationAudioRun *play_notation_audio_run; AgsPlayNote *play_note; AgsChannel *channel; AgsRecycling *recycling; AgsAudioSignal *audio_signal; AgsPlayAudioSignal *play_audio_signal; GList *start_play_audio_signal, *list_play_audio_signal; gboolean first_recall; /* void ags_play_note_map_play_audio_signal_real(){ audio_signal->flags |= AGS_AUDIO_SIGNAL_PLAY; audio_signal->audio_channel = channel->audio_channel; play_audio_signal = ags_play_audio_signal_new(); play_audio_signal->devout = play_note->devout; play_audio_signal->audio_signal = audio_signal; AGS_RECALL(play_audio_signal)->parent = (GObject *) play_note; ags_play_audio_signal_connect(play_audio_signal); g_signal_connect((GObject *) play_audio_signal, "done\0", G_CALLBACK(ags_play_note_play_audio_signal_done), NULL); if(first_recall){ start_play_audio_signal = list_play_audio_signal = g_list_alloc(); first_recall = FALSE; }else{ list_play_audio_signal->next = g_list_alloc(); list_play_audio_signal->next->prev = list_play_audio_signal; list_play_audio_signal = list_play_audio_signal->next; } list_play_audio_signal->data = (gpointer) play_audio_signal; } play_notation_audio_run = (AgsPlayNotationAudioRun *) recall->parent; play_note = (AgsPlayNote *) recall; channel = ags_channel_nth_pad(play_notation_audio_run->channel, play_note->note->y); if(channel != NULL){ recycling = channel->first_recycling; first_recall = TRUE; start_play_audio_signal = NULL; if((AGS_NOTE_DEFAULT_LENGTH & play_note->note->flags) != 0){ while(recycling != channel->last_recycling->next){ audio_signal = ags_recycling_add_audio_signal(recycling); ags_play_note_map_play_audio_signal_real(); recycling = recycling->next; } }else{ guint length; length = ((double) (play_note->note->x[1] - play_note->note->x[0]) * ((double) play_note->devout->frequence * 60.0 / play_notation_audio_run->bpm[0] / 16.0)); while(recycling != channel->last_recycling->next){ audio_signal = ags_recycling_add_audio_signal_with_length(recycling, length); ags_play_note_map_play_audio_signal_real(); recycling = recycling->next; } } play_note->recall.recall = g_list_concat(play_note->recall.recall, start_play_audio_signal); }else{ g_signal_emit_by_name((GObject *) recall, "done\0", recall_id); } */ } void ags_play_note(AgsRecall *recall, AgsRecallID *recall_id, gpointer data) { /* GList *list, *list_next; GStaticMutex mutex = G_STATIC_MUTEX_INIT; g_static_mutex_lock(&mutex); if(recall->recall == NULL){ g_signal_emit_by_name((GObject *) recall, "done\0", recall_id); g_static_mutex_unlock(&mutex); }else{ g_static_mutex_unlock(&mutex); list = recall->recall; while(list != NULL){ list_next = list->next; g_signal_emit_by_name(G_OBJECT(list->data), "run_inter\0", recall_id); list = list_next; } } */ } void ags_play_note_stop(AgsRecall *recall, AgsRecallID *recall_id, gpointer data) { /* GList *list, *list_next; list = recall->recall; recall->recall = NULL; while(list != NULL){ list_next = list->next; g_object_unref(G_OBJECT(list->data)); g_list_free1(list); list = list_next; } */ } void ags_play_note_cancel(AgsRecall *recall, AgsRecallID *recall_id, gpointer data) { } void ags_play_note_play_audio_signal_done(AgsRecall *recall, AgsRecallID *recall_id, gpointer data) { /* AgsPlayNote *play_note; AgsPlayAudioSignal *play_audio_signal; play_note = AGS_PLAY_NOTE(recall->parent); play_audio_signal = AGS_PLAY_AUDIO_SIGNAL(recall); AGS_RECALL(play_note)->recall = g_list_remove(AGS_RECALL(play_note)->recall, recall); g_object_unref(G_OBJECT(play_audio_signal)); if(play_note->recall.recall == NULL){ g_signal_emit_by_name((GObject *) play_note, "done\0", recall_id); } */ } AgsPlayNote* ags_play_note_new() { AgsPlayNote *play_note; play_note = (AgsPlayNote *) g_object_new(AGS_TYPE_PLAY_NOTE, NULL); return(play_note); } gsequencer-0.6.37/src/ags/audio/recall/ags_copy_pattern_audio.h0000644000175000017500000000424312626272146021503 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_COPY_PATTERN_AUDIO_H__ #define __AGS_COPY_PATTERN_AUDIO_H__ #include #include #include #include #define AGS_TYPE_COPY_PATTERN_AUDIO (ags_copy_pattern_audio_get_type()) #define AGS_COPY_PATTERN_AUDIO(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_COPY_PATTERN_AUDIO, AgsCopyPatternAudio)) #define AGS_COPY_PATTERN_AUDIO_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_COPY_PATTERN_AUDIO, AgsCopyPatternAudio)) #define AGS_IS_COPY_PATTERN_AUDIO(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_COPY_PATTERN_AUDIO)) #define AGS_IS_COPY_PATTERN_AUDIO_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_COPY_PATTERN_AUDIO)) #define AGS_COPY_PATTERN_AUDIO_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_COPY_PATTERN_AUDIO, AgsCopyPatternAudioClass)) typedef struct _AgsCopyPatternAudio AgsCopyPatternAudio; typedef struct _AgsCopyPatternAudioClass AgsCopyPatternAudioClass; struct _AgsCopyPatternAudio { AgsRecallAudio recall_audio; AgsPort *bank_index_0; AgsPort *bank_index_1; }; struct _AgsCopyPatternAudioClass { AgsRecallAudioClass recall_audio; }; GType ags_copy_pattern_audio_get_type(); AgsCopyPatternAudio* ags_copy_pattern_audio_new(AgsDevout *devout, gdouble tact, guint i, guint j); #endif /*__AGS_COPY_PATTERN_AUDIO_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_down_mix.h0000644000175000017500000000155212626272146017437 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_DOWN_MIX_H__ #define __AGS_DOWN_MIX_H__ #include #endif /*__AGS_DOWN_MIX_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_copy_audio_signal.h0000644000175000017500000000422712626272146021305 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_COPY_AUDIO_SIGNAL_H__ #define __AGS_COPY_AUDIO_SIGNAL_H__ #include #include #include #define AGS_TYPE_COPY_AUDIO_SIGNAL (ags_copy_audio_signal_get_type()) #define AGS_COPY_AUDIO_SIGNAL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_COPY_AUDIO_SIGNAL, AgsCopyAudioSignal)) #define AGS_COPY_AUDIO_SIGNAL_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_COPY_AUDIO_SIGNAL, AgsCopyAudioSignalClass)) #define AGS_IS_COPY_AUDIO_SIGNAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_COPY_AUDIO_SIGNAL)) #define AGS_IS_COPY_AUDIO_SIGNAL_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_COPY_AUDIO_SIGNAL)) #define AGS_COPY_AUDIO_SIGNAL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_COPY_AUDIO_SIGNAL, AgsCopyAudioSignalClass)) typedef struct _AgsCopyAudioSignal AgsCopyAudioSignal; typedef struct _AgsCopyAudioSignalClass AgsCopyAudioSignalClass; struct _AgsCopyAudioSignal { AgsRecallAudioSignal recall_audio_signal; }; struct _AgsCopyAudioSignalClass { AgsRecallAudioSignalClass recall_audio_signal; }; GType ags_copy_audio_signal_get_type(); AgsCopyAudioSignal* ags_copy_audio_signal_new(AgsAudioSignal *destination, AgsAudioSignal *source, AgsDevout *devout, AgsAttack *attack); #endif /*__AGS_COPY_AUDIO_SIGNAL_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_copy_notation_audio.h0000644000175000017500000000454012626272146021661 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_COPY_NOTATION_AUDIO_H__ #define __AGS_COPY_NOTATION_AUDIO_H__ #include #include #include #include #define AGS_TYPE_COPY_NOTATION_AUDIO (ags_copy_notation_audio_get_type()) #define AGS_COPY_NOTATION_AUDIO(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_COPY_NOTATION_AUDIO, AgsCopyNotationAudio)) #define AGS_COPY_NOTATION_AUDIO_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_COPY_NOTATION_AUDIO, AgsCopyNotationAudio)) #define AGS_IS_COPY_NOTATION_AUDIO(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_COPY_NOTATION_AUDIO)) #define AGS_IS_COPY_NOTATION_AUDIO_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_COPY_NOTATION_AUDIO)) #define AGS_COPY_NOTATION_AUDIO_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_COPY_NOTATION_AUDIO, AgsCopyNotationAudioClass)) typedef struct _AgsCopyNotationAudio AgsCopyNotationAudio; typedef struct _AgsCopyNotationAudioClass AgsCopyNotationAudioClass; typedef enum{ AGS_COPY_NOTATION_AUDIO_FIT_AUDIO_SIGNAL = 1, }AgsCopyNotationAudioFlags; struct _AgsCopyNotationAudio { AgsRecallAudio recall_audio; guint flags; AgsDevout *devout; AgsNotation *notation; guint audio_channel; }; struct _AgsCopyNotationAudioClass { AgsRecallAudioClass recall_audio; }; GType ags_copy_notation_audio_get_type(); AgsCopyNotationAudio* ags_copy_notation_audio_new(AgsDevout *devout, AgsNotation *notation, guint audio_channel); #endif /*__AGS_COPY_NOTATION_AUDIO_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_count_beats_audio_run.c0000644000175000017500000013507612626272146022172 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void ags_count_beats_audio_run_class_init(AgsCountBeatsAudioRunClass *count_beats_audio_run); void ags_count_beats_audio_run_connectable_interface_init(AgsConnectableInterface *connectable); void ags_count_beats_audio_run_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable); void ags_count_beats_audio_run_seekable_interface_init(AgsSeekableInterface *seekable); void ags_count_beats_audio_run_countable_interface_init(AgsCountableInterface *countable); void ags_count_beats_audio_run_plugin_interface_init(AgsPluginInterface *plugin); void ags_count_beats_audio_run_init(AgsCountBeatsAudioRun *count_beats_audio_run); void ags_count_beats_audio_run_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_count_beats_audio_run_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_count_beats_audio_run_finalize(GObject *gobject); void ags_count_beats_audio_run_connect(AgsConnectable *connectable); void ags_count_beats_audio_run_disconnect(AgsConnectable *connectable); void ags_count_beats_audio_run_connect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_count_beats_audio_run_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_count_beats_audio_run_seek(AgsSeekable *seekable, guint steps, gboolean forward); guint ags_count_beats_audio_run_get_notation_counter(AgsCountable *countable); guint ags_count_beats_audio_run_get_sequencer_counter(AgsCountable *countable); void ags_count_beats_audio_run_read(AgsFile *file, xmlNode *node, AgsPlugin *plugin); xmlNode* ags_count_beats_audio_run_write(AgsFile *file, xmlNode *parent, AgsPlugin *plugin); void ags_count_beats_audio_run_resolve_dependencies(AgsRecall *recall); AgsRecall* ags_count_beats_audio_run_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter); void ags_count_beats_audio_run_notify_dependency(AgsRecall *recall, guint notify_mode, gint count); void ags_count_beats_audio_run_run_init_pre(AgsRecall *recall); void ags_count_beats_audio_run_done(AgsRecall *recall); void ags_count_beats_audio_run_notation_alloc_output_callback(AgsDelayAudioRun *delay_audio_run, guint run_order, gdouble delay, guint attack, AgsCountBeatsAudioRun *count_beats_audio_run); void ags_count_beats_audio_run_notation_count_callback(AgsDelayAudioRun *delay_audio_run, guint run_order, gdouble delay, guint attack, AgsCountBeatsAudioRun *count_beats_audio_run); void ags_count_beats_audio_run_sequencer_alloc_output_callback(AgsDelayAudioRun *delay_audio_run, guint run_order, gdouble delay, guint attack, AgsCountBeatsAudioRun *count_beats_audio_run); void ags_count_beats_audio_run_sequencer_count_callback(AgsDelayAudioRun *delay_audio_run, guint run_order, gdouble delay, guint attack, AgsCountBeatsAudioRun *count_beats_audio_run); void ags_count_beats_audio_run_write_resolve_dependency(AgsFileLookup *file_lookup, GObject *recall); void ags_count_beats_audio_run_read_resolve_dependency(AgsFileLookup *file_lookup, GObject *recall); void ags_count_beats_audio_run_stream_audio_signal_done_callback(AgsRecall *recall, AgsCountBeatsAudioRun *count_beats_audio_run); void ags_count_beats_audio_run_stop(AgsCountBeatsAudioRun *count_beats_audio_run, gboolean notation); /** * SECTION:ags_count_beats_audio_run * @short_description: count beats * @title: AgsCountBeatsAudioRun * @section_id: * @include: ags/audio/recall/ags_count_beats_audio_run.h * * The #AgsCountBeatsAudioRun class count beats. */ enum{ NOTATION_LOOP, NOTATION_START, NOTATION_STOP, SEQUENCER_LOOP, SEQUENCER_START, SEQUENCER_STOP, LAST_SIGNAL, }; enum{ PROP_0, PROP_DELAY_AUDIO_RUN, PROP_NOTATION_COUNTER, PROP_SEQUENCER_COUNTER, }; static gpointer ags_count_beats_audio_run_parent_class = NULL; static AgsConnectableInterface* ags_count_beats_audio_run_parent_connectable_interface; static AgsDynamicConnectableInterface *ags_count_beats_audio_run_parent_dynamic_connectable_interface; static AgsPluginInterface *ags_count_beats_audio_run_parent_plugin_interface; static guint count_beats_audio_run_signals[LAST_SIGNAL]; extern pthread_mutex_t ags_application_mutex; GType ags_count_beats_audio_run_get_type() { static GType ags_type_count_beats_audio_run = 0; if(!ags_type_count_beats_audio_run){ static const GTypeInfo ags_count_beats_audio_run_info = { sizeof (AgsCountBeatsAudioRunClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_count_beats_audio_run_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsCountBeatsAudioRun), 0, /* n_preallocs */ (GInstanceInitFunc) ags_count_beats_audio_run_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_count_beats_audio_run_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_dynamic_connectable_interface_info = { (GInterfaceInitFunc) ags_count_beats_audio_run_dynamic_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_seekable_interface_info = { (GInterfaceInitFunc) ags_count_beats_audio_run_seekable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_countable_interface_info = { (GInterfaceInitFunc) ags_count_beats_audio_run_countable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_plugin_interface_info = { (GInterfaceInitFunc) ags_count_beats_audio_run_plugin_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_count_beats_audio_run = g_type_register_static(AGS_TYPE_RECALL_AUDIO_RUN, "AgsCountBeatsAudioRun\0", &ags_count_beats_audio_run_info, 0); g_type_add_interface_static(ags_type_count_beats_audio_run, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_count_beats_audio_run, AGS_TYPE_DYNAMIC_CONNECTABLE, &ags_dynamic_connectable_interface_info); g_type_add_interface_static(ags_type_count_beats_audio_run, AGS_TYPE_COUNTABLE, &ags_countable_interface_info); g_type_add_interface_static(ags_type_count_beats_audio_run, AGS_TYPE_SEEKABLE, &ags_seekable_interface_info); g_type_add_interface_static(ags_type_count_beats_audio_run, AGS_TYPE_PLUGIN, &ags_plugin_interface_info); } return(ags_type_count_beats_audio_run); } void ags_count_beats_audio_run_connectable_interface_init(AgsConnectableInterface *connectable) { ags_count_beats_audio_run_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_count_beats_audio_run_connect; connectable->disconnect = ags_count_beats_audio_run_disconnect; } void ags_count_beats_audio_run_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable) { ags_count_beats_audio_run_parent_dynamic_connectable_interface = g_type_interface_peek_parent(dynamic_connectable); dynamic_connectable->connect_dynamic = ags_count_beats_audio_run_connect_dynamic; dynamic_connectable->disconnect_dynamic = ags_count_beats_audio_run_disconnect_dynamic; } void ags_count_beats_audio_run_seekable_interface_init(AgsSeekableInterface *seekable) { seekable->seek = ags_count_beats_audio_run_seek; } void ags_count_beats_audio_run_countable_interface_init(AgsCountableInterface *countable) { countable->get_notation_counter = ags_count_beats_audio_run_get_notation_counter; countable->get_sequencer_counter = ags_count_beats_audio_run_get_sequencer_counter; } void ags_count_beats_audio_run_plugin_interface_init(AgsPluginInterface *plugin) { ags_count_beats_audio_run_parent_plugin_interface = g_type_interface_peek_parent(plugin); plugin->read = ags_count_beats_audio_run_read; plugin->write = ags_count_beats_audio_run_write; } void ags_count_beats_audio_run_class_init(AgsCountBeatsAudioRunClass *count_beats_audio_run) { GObjectClass *gobject; AgsRecallClass *recall; GParamSpec *param_spec; ags_count_beats_audio_run_parent_class = g_type_class_peek_parent(count_beats_audio_run); /* GObjectClass */ gobject = (GObjectClass *) count_beats_audio_run; gobject->set_property = ags_count_beats_audio_run_set_property; gobject->get_property = ags_count_beats_audio_run_get_property; gobject->finalize = ags_count_beats_audio_run_finalize; /* properties */ /** * AgsCountBeatsAudioRun:delay-audio-run: * * The assigned #AgsDelayAudioRun dependency. * * Since: 0.4.0 */ param_spec = g_param_spec_object("delay-audio-run\0", "assigned AgsDelayAudioRun\0", "The AgsDelayAudioRun which emits sequencer_alloc_output sequencer_count signal\0", AGS_TYPE_DELAY_AUDIO_RUN, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_DELAY_AUDIO_RUN, param_spec); /** * AgsCountBeatsAudioRun:notation-counter: * * The notation counter. * * Since: 0.4.0 */ param_spec = g_param_spec_uint("notation-counter\0", "notation counter indicates offset\0", "The notation counter indicates the offset in the notation\0", 0, 65535, //FIXME:JK: figure out how many beats this can really have 0, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_NOTATION_COUNTER, param_spec); /** * AgsCountBeatsAudioRun:sequencer-counter: * * The sequencer counter. * * Since: 0.4.0 */ param_spec = g_param_spec_uint("sequencer-counter\0", "sequencer counter indicates offset\0", "The sequenecer counter indicates the offset in the sequencer\0", 0, 65535, //FIXME:JK: figure out how many beats this can really have 0, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_SEQUENCER_COUNTER, param_spec); /* AgsRecallClass */ recall = (AgsRecallClass *) count_beats_audio_run; recall->resolve_dependencies = ags_count_beats_audio_run_resolve_dependencies; recall->duplicate = ags_count_beats_audio_run_duplicate; recall->notify_dependency = ags_count_beats_audio_run_notify_dependency; recall->run_init_pre = ags_count_beats_audio_run_run_init_pre; recall->done = ags_count_beats_audio_run_done; /* AgsCountBeatsAudioRunClass */ count_beats_audio_run->notation_start = NULL; count_beats_audio_run->notation_loop = NULL; count_beats_audio_run->notation_stop = NULL; count_beats_audio_run->sequencer_start = NULL; count_beats_audio_run->sequencer_loop = NULL; count_beats_audio_run->sequencer_stop = NULL; /* signals */ /** * AgsCountBeatsAudioRun::notation-start: * @count_beats_audio_run: the object * @run_order: the nth run * * The ::notation-start signal is emited while starting notation playback. */ count_beats_audio_run_signals[NOTATION_START] = g_signal_new("notation-start\0", G_TYPE_FROM_CLASS(count_beats_audio_run), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsCountBeatsAudioRunClass, notation_start), NULL, NULL, g_cclosure_marshal_VOID__UINT, G_TYPE_NONE, 1, G_TYPE_UINT); /** * AgsCountBeatsAudioRun::notation-loop: * @count_beats_audio_run: the object * @run_order: the nth run * * The ::notation-loop signal is emited while looping notation playback. */ count_beats_audio_run_signals[NOTATION_LOOP] = g_signal_new("notation-loop\0", G_TYPE_FROM_CLASS(count_beats_audio_run), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsCountBeatsAudioRunClass, notation_loop), NULL, NULL, g_cclosure_marshal_VOID__UINT, G_TYPE_NONE, 1, G_TYPE_UINT); /** * AgsCountBeatsAudioRun::notation-stop: * @count_beats_audio_run: the object * @run_order: the nth run * * The ::notation-loop signal is emited while stoping notation playback. */ count_beats_audio_run_signals[NOTATION_STOP] = g_signal_new("notation-stop\0", G_TYPE_FROM_CLASS(count_beats_audio_run), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsCountBeatsAudioRunClass, notation_stop), NULL, NULL, g_cclosure_marshal_VOID__UINT, G_TYPE_NONE, 1, G_TYPE_UINT); /** * AgsCountBeatsAudioRun::sequencer-start: * @count_beats_audio_run: the object * @run_order: the nth run * * The ::sequencer-start signal is emited while starting sequencer playback. */ count_beats_audio_run_signals[SEQUENCER_START] = g_signal_new("sequencer-start\0", G_TYPE_FROM_CLASS(count_beats_audio_run), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsCountBeatsAudioRunClass, sequencer_start), NULL, NULL, g_cclosure_marshal_VOID__UINT, G_TYPE_NONE, 1, G_TYPE_UINT); /** * AgsCountBeatsAudioRun::sequencer-loop: * @count_beats_audio_run: the object * @run_order: the nth run * * The ::sequencer-loop signal is emited while looping sequencer playback. */ count_beats_audio_run_signals[SEQUENCER_LOOP] = g_signal_new("sequencer-loop\0", G_TYPE_FROM_CLASS(count_beats_audio_run), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsCountBeatsAudioRunClass, sequencer_loop), NULL, NULL, g_cclosure_marshal_VOID__UINT, G_TYPE_NONE, 1, G_TYPE_UINT); /** * AgsCountBeatsAudioRun::sequencer-stop: * @count_beats_audio_run: the object * @run_order: the nth run * * The ::sequencer-loop signal is emited while stoping sequencer playback. */ count_beats_audio_run_signals[SEQUENCER_STOP] = g_signal_new("sequencer-stop\0", G_TYPE_FROM_CLASS(count_beats_audio_run), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsCountBeatsAudioRunClass, sequencer_stop), NULL, NULL, g_cclosure_marshal_VOID__UINT, G_TYPE_NONE, 1, G_TYPE_UINT); } void ags_count_beats_audio_run_init(AgsCountBeatsAudioRun *count_beats_audio_run) { AGS_RECALL(count_beats_audio_run)->name = "ags-count-beats\0"; AGS_RECALL(count_beats_audio_run)->version = AGS_EFFECTS_DEFAULT_VERSION; AGS_RECALL(count_beats_audio_run)->build_id = AGS_BUILD_ID; AGS_RECALL(count_beats_audio_run)->xml_type = "ags-count-beats-audio-run\0"; AGS_RECALL(count_beats_audio_run)->port = NULL; count_beats_audio_run->notation_counter = 0; count_beats_audio_run->sequencer_counter = 0; count_beats_audio_run->recall_ref = 0; count_beats_audio_run->hide_ref = 0; count_beats_audio_run->notation_hide_ref_counter = 0; count_beats_audio_run->sequencer_hide_ref_counter = 0; count_beats_audio_run->delay_audio_run = NULL; } void ags_count_beats_audio_run_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsCountBeatsAudioRun *count_beats_audio_run; count_beats_audio_run = AGS_COUNT_BEATS_AUDIO_RUN(gobject); switch(prop_id){ case PROP_DELAY_AUDIO_RUN: { AgsDelayAudioRun *delay_audio_run; gboolean is_template; delay_audio_run = (AgsDelayAudioRun *) g_value_get_object(value); if(count_beats_audio_run->delay_audio_run == delay_audio_run) return; if(delay_audio_run != NULL && (AGS_RECALL_TEMPLATE & (AGS_RECALL(delay_audio_run)->flags)) != 0){ is_template = TRUE; }else{ is_template = FALSE; } if(count_beats_audio_run->delay_audio_run != NULL){ if(is_template){ ags_recall_remove_dependency(AGS_RECALL(count_beats_audio_run), (AgsRecall *) count_beats_audio_run->delay_audio_run); }else{ if((AGS_RECALL_DYNAMIC_CONNECTED & (AGS_RECALL(count_beats_audio_run)->flags)) != 0){ g_signal_handler_disconnect(G_OBJECT(count_beats_audio_run), count_beats_audio_run->sequencer_alloc_output_handler); g_signal_handler_disconnect(G_OBJECT(count_beats_audio_run), count_beats_audio_run->sequencer_count_handler); g_signal_handler_disconnect(G_OBJECT(count_beats_audio_run), count_beats_audio_run->notation_alloc_output_handler); g_signal_handler_disconnect(G_OBJECT(count_beats_audio_run), count_beats_audio_run->notation_count_handler); } } g_object_unref(G_OBJECT(count_beats_audio_run->delay_audio_run)); } if(delay_audio_run != NULL){ g_object_ref(G_OBJECT(delay_audio_run)); if(is_template){ ags_recall_add_dependency(AGS_RECALL(count_beats_audio_run), ags_recall_dependency_new((GObject *) delay_audio_run)); }else{ if((AGS_RECALL_DYNAMIC_CONNECTED & (AGS_RECALL(count_beats_audio_run)->flags)) != 0){ count_beats_audio_run->sequencer_count_handler = g_signal_connect(G_OBJECT(delay_audio_run), "sequencer-alloc-output\0", G_CALLBACK(ags_count_beats_audio_run_sequencer_alloc_output_callback), count_beats_audio_run); count_beats_audio_run->sequencer_count_handler = g_signal_connect(G_OBJECT(delay_audio_run), "sequencer-count\0", G_CALLBACK(ags_count_beats_audio_run_sequencer_count_callback), count_beats_audio_run); count_beats_audio_run->notation_count_handler = g_signal_connect(G_OBJECT(delay_audio_run), "notation-alloc-output\0", G_CALLBACK(ags_count_beats_audio_run_notation_alloc_output_callback), count_beats_audio_run); count_beats_audio_run->notation_count_handler = g_signal_connect(G_OBJECT(delay_audio_run), "notation-count\0", G_CALLBACK(ags_count_beats_audio_run_notation_count_callback), count_beats_audio_run); } } } count_beats_audio_run->delay_audio_run = delay_audio_run; } break; case PROP_NOTATION_COUNTER: { guint counter; counter = g_value_get_uint(value); count_beats_audio_run->notation_counter = counter; } break; case PROP_SEQUENCER_COUNTER: { guint counter; counter = g_value_get_uint(value); count_beats_audio_run->sequencer_counter = counter; } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; }; } void ags_count_beats_audio_run_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsCountBeatsAudioRun *count_beats_audio_run; count_beats_audio_run = AGS_COUNT_BEATS_AUDIO_RUN(gobject); switch(prop_id){ case PROP_DELAY_AUDIO_RUN: { g_value_set_object(value, count_beats_audio_run->delay_audio_run); } break; case PROP_NOTATION_COUNTER: { g_value_set_uint(value, count_beats_audio_run->notation_counter); } break; case PROP_SEQUENCER_COUNTER: { g_value_set_uint(value, count_beats_audio_run->sequencer_counter); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; }; } void ags_count_beats_audio_run_finalize(GObject *gobject) { AgsCountBeatsAudioRun *count_beats_audio_run; count_beats_audio_run = AGS_COUNT_BEATS_AUDIO_RUN(gobject); if(count_beats_audio_run->delay_audio_run != NULL) g_object_unref(count_beats_audio_run->delay_audio_run); G_OBJECT_CLASS(ags_count_beats_audio_run_parent_class)->finalize(gobject); } void ags_count_beats_audio_run_connect(AgsConnectable *connectable) { if((AGS_RECALL_CONNECTED & (AGS_RECALL(connectable)->flags)) != 0){ return; } /* call parent */ ags_count_beats_audio_run_parent_connectable_interface->connect(connectable); } void ags_count_beats_audio_run_disconnect(AgsConnectable *connectable) { /* call parent */ ags_count_beats_audio_run_parent_connectable_interface->connect(connectable); } void ags_count_beats_audio_run_connect_dynamic(AgsDynamicConnectable *dynamic_connectable) { AgsCountBeatsAudioRun *count_beats_audio_run; if((AGS_RECALL_DYNAMIC_CONNECTED & (AGS_RECALL(dynamic_connectable)->flags)) != 0){ return; } ags_count_beats_audio_run_parent_dynamic_connectable_interface->connect_dynamic(dynamic_connectable); /* AgsCountBeats */ count_beats_audio_run = AGS_COUNT_BEATS_AUDIO_RUN(dynamic_connectable); count_beats_audio_run->sequencer_alloc_output_handler = g_signal_connect(G_OBJECT(count_beats_audio_run->delay_audio_run), "sequencer-alloc-output\0", G_CALLBACK(ags_count_beats_audio_run_sequencer_alloc_output_callback), count_beats_audio_run); count_beats_audio_run->sequencer_count_handler = g_signal_connect(G_OBJECT(count_beats_audio_run->delay_audio_run), "sequencer-count\0", G_CALLBACK(ags_count_beats_audio_run_sequencer_count_callback), count_beats_audio_run); count_beats_audio_run->notation_alloc_output_handler = g_signal_connect(G_OBJECT(count_beats_audio_run->delay_audio_run), "notation-alloc-output\0", G_CALLBACK(ags_count_beats_audio_run_notation_alloc_output_callback), count_beats_audio_run); count_beats_audio_run->notation_count_handler = g_signal_connect(G_OBJECT(count_beats_audio_run->delay_audio_run), "notation-count\0", G_CALLBACK(ags_count_beats_audio_run_notation_count_callback), count_beats_audio_run); } void ags_count_beats_audio_run_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable) { AgsCountBeatsAudioRun *count_beats_audio_run; ags_count_beats_audio_run_parent_dynamic_connectable_interface->disconnect_dynamic(dynamic_connectable); /* AgsCountBeats */ count_beats_audio_run = AGS_COUNT_BEATS_AUDIO_RUN(dynamic_connectable); g_signal_handler_disconnect(G_OBJECT(count_beats_audio_run), count_beats_audio_run->sequencer_alloc_output_handler); g_signal_handler_disconnect(G_OBJECT(count_beats_audio_run), count_beats_audio_run->sequencer_count_handler); g_signal_handler_disconnect(G_OBJECT(count_beats_audio_run), count_beats_audio_run->notation_alloc_output_handler); g_signal_handler_disconnect(G_OBJECT(count_beats_audio_run), count_beats_audio_run->notation_count_handler); } void ags_count_beats_audio_run_seek(AgsSeekable *seekable, guint steps, gboolean move_forward) { AgsDevout *devout; AgsDelayAudio *delay_audio; AgsDelayAudioRun *delay_audio_run; AgsCountBeatsAudioRun *count_beats_audio_run; gdouble delay; guint seq_steps; count_beats_audio_run = AGS_COUNT_BEATS_AUDIO_RUN(seekable); delay_audio_run = count_beats_audio_run->delay_audio_run; delay_audio = AGS_RECALL_AUDIO_RUN(delay_audio_run)->recall_audio; devout = AGS_DEVOUT(AGS_RECALL(count_beats_audio_run)->devout); delay = devout->delay[devout->tic_counter]; seq_steps = (steps % (guint) delay_audio->sequencer_duration->port_value.ags_port_double); if(move_forward){ count_beats_audio_run->notation_counter += steps; if(delay * count_beats_audio_run->sequencer_counter + seq_steps < (guint) delay_audio->sequencer_duration->port_value.ags_port_double){ count_beats_audio_run->sequencer_counter += seq_steps / delay; }else{ count_beats_audio_run->sequencer_counter = (guint) (seq_steps / delay + count_beats_audio_run->sequencer_counter) % (guint) (delay_audio->sequencer_duration->port_value.ags_port_double / delay); } }else{ count_beats_audio_run->notation_counter -= steps; if(delay * count_beats_audio_run->sequencer_counter - seq_steps >= 0){ count_beats_audio_run->sequencer_counter -= seq_steps / delay; }else{ count_beats_audio_run->sequencer_counter = (guint) (delay_audio->sequencer_duration->port_value.ags_port_double / delay) - (seq_steps / delay - count_beats_audio_run->sequencer_counter); } } } guint ags_count_beats_audio_run_get_notation_counter(AgsCountable *countable) { return(AGS_COUNT_BEATS_AUDIO_RUN(countable)->notation_counter); } guint ags_count_beats_audio_run_get_sequencer_counter(AgsCountable *countable) { return(AGS_COUNT_BEATS_AUDIO_RUN(countable)->sequencer_counter); } void ags_count_beats_audio_run_read(AgsFile *file, xmlNode *node, AgsPlugin *plugin) { AgsCountBeatsAudioRun *count_beats_audio_run; AgsFileLookup *file_lookup; xmlNode *iter; /* read parent */ ags_count_beats_audio_run_parent_plugin_interface->read(file, node, plugin); count_beats_audio_run = AGS_COUNT_BEATS_AUDIO_RUN(plugin); /* read depenendency */ iter = node->children; while(iter != NULL){ if(iter->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(iter->name, "ags-dependency-list\0", 19)){ xmlNode *dependency_node; dependency_node = iter->children; while(dependency_node != NULL){ if(dependency_node->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(dependency_node->name, "ags-dependency\0", 15)){ file_lookup = (AgsFileLookup *) g_object_new(AGS_TYPE_FILE_LOOKUP, "file\0", file, "node\0", dependency_node, "reference\0", count_beats_audio_run, NULL); ags_file_add_lookup(file, (GObject *) file_lookup); g_signal_connect(G_OBJECT(file_lookup), "resolve\0", G_CALLBACK(ags_count_beats_audio_run_read_resolve_dependency), count_beats_audio_run); } } dependency_node = dependency_node->next; } } } iter = iter->next; } } xmlNode* ags_count_beats_audio_run_write(AgsFile *file, xmlNode *parent, AgsPlugin *plugin) { AgsFileLookup *file_lookup; xmlNode *node, *child; xmlNode *dependency_node; GList *list; gchar *id; /* write parent */ node = ags_count_beats_audio_run_parent_plugin_interface->write(file, parent, plugin); /* write dependencies */ child = xmlNewNode(NULL, "ags-dependency-list\0"); xmlNewProp(child, AGS_FILE_ID_PROP, ags_id_generator_create_uuid()); xmlAddChild(node, child); list = AGS_RECALL(plugin)->dependencies; while(list != NULL){ id = ags_id_generator_create_uuid(); dependency_node = xmlNewNode(NULL, "ags-dependency\0"); xmlNewProp(dependency_node, AGS_FILE_ID_PROP, id); xmlAddChild(child, dependency_node); file_lookup = (AgsFileLookup *) g_object_new(AGS_TYPE_FILE_LOOKUP, "file\0", file, "node\0", dependency_node, "reference\0", G_OBJECT(plugin), NULL); ags_file_add_lookup(file, (GObject *) file_lookup); g_signal_connect(G_OBJECT(file_lookup), "resolve\0", G_CALLBACK(ags_count_beats_audio_run_write_resolve_dependency), G_OBJECT(plugin)); list = list->next; } return(node); } void ags_count_beats_audio_run_resolve_dependencies(AgsRecall *recall) { AgsRecall *template; AgsCountBeatsAudioRun *count_beats_audio_run; AgsRecallDependency *recall_dependency; AgsDelayAudioRun *delay_audio_run; GList *list; AgsRecallID *recall_id; guint i, i_stop; count_beats_audio_run = AGS_COUNT_BEATS_AUDIO_RUN(recall); template = AGS_RECALL(ags_recall_find_template(AGS_RECALL_CONTAINER(recall->container)->recall_audio_run)->data); list = template->dependencies; recall_id = recall->recall_id; delay_audio_run = NULL; i_stop = 1; for(i = 0; i < i_stop && list != NULL;){ recall_dependency = AGS_RECALL_DEPENDENCY(list->data); if(AGS_IS_DELAY_AUDIO_RUN(recall_dependency->dependency)){ delay_audio_run = (AgsDelayAudioRun *) ags_recall_dependency_resolve(recall_dependency, recall_id); i++; } list = list->next; } g_object_set(G_OBJECT(recall), "delay-audio-run\0", delay_audio_run, NULL); } AgsRecall* ags_count_beats_audio_run_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter) { AgsCountBeatsAudioRun *copy; copy = AGS_COUNT_BEATS_AUDIO_RUN(AGS_RECALL_CLASS(ags_count_beats_audio_run_parent_class)->duplicate(recall, recall_id, n_params, parameter)); // g_message("ags_count_beats_audio_run_duplicate\n\0"); return((AgsRecall *) copy); } void ags_count_beats_audio_run_notify_dependency(AgsRecall *recall, guint notify_mode, gint count) { AgsCountBeatsAudioRun *count_beats_audio_run; count_beats_audio_run = AGS_COUNT_BEATS_AUDIO_RUN(recall); switch(notify_mode){ case AGS_RECALL_NOTIFY_RUN: count_beats_audio_run->hide_ref += count; // g_message("count_beats_audio_run->hide_ref: %u\n\0", count_beats_audio_run->hide_ref); break; case AGS_RECALL_NOTIFY_AUDIO: break; case AGS_RECALL_NOTIFY_AUDIO_RUN: break; case AGS_RECALL_NOTIFY_CHANNEL: break; case AGS_RECALL_NOTIFY_CHANNEL_RUN: count_beats_audio_run->recall_ref += count; break; default: g_message("ags_count_beats_audio_run.c - ags_count_beats_audio_run_notify: unknown notify\0"); } } void ags_count_beats_audio_run_run_init_pre(AgsRecall *recall) { AgsCountBeatsAudioRun *count_beats_audio_run; AGS_RECALL_CLASS(ags_count_beats_audio_run_parent_class)->run_init_pre(recall); count_beats_audio_run = AGS_COUNT_BEATS_AUDIO_RUN(recall); count_beats_audio_run->first_run = TRUE; count_beats_audio_run->notation_hide_ref_counter = 0; count_beats_audio_run->sequencer_hide_ref_counter = 0; count_beats_audio_run->sequencer_counter = 0; } void ags_count_beats_audio_run_done(AgsRecall *recall) { AgsDevout *devout; AgsCountBeatsAudio *count_beats_audio; AgsCountBeatsAudioRun *count_beats_audio_run; AgsCancelAudio *cancel_audio; AgsMutexManager *mutex_manager; AgsThread *main_loop; AgsThread *async_queue; AgsMain *ags_main; gboolean sequencer, notation; pthread_mutex_t *devout_mutex; AGS_RECALL_CLASS(ags_count_beats_audio_run_parent_class)->done(recall); count_beats_audio_run = AGS_COUNT_BEATS_AUDIO_RUN(recall); count_beats_audio = AGS_COUNT_BEATS_AUDIO(AGS_RECALL_AUDIO_RUN(count_beats_audio_run)->recall_audio); devout = AGS_RECALL_AUDIO(count_beats_audio)->audio->devout; /* lookup devout mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); devout_mutex = ags_mutex_manager_lookup(mutex_manager, devout); pthread_mutex_unlock(&(ags_application_mutex)); /* get ags_main */ pthread_mutex_lock(devout_mutex); ags_main = devout->ags_main; pthread_mutex_unlock(devout_mutex); /* get main loop */ pthread_mutex_lock(&(ags_application_mutex)); main_loop = ags_main->main_loop; pthread_mutex_unlock(&(ags_application_mutex)); /* get async queue */ async_queue = (AgsThread *) ags_thread_find_type(main_loop, AGS_TYPE_TASK_THREAD); ags_recall_done(count_beats_audio_run->delay_audio_run); ags_audio_done(AGS_RECALL_AUDIO(count_beats_audio)->audio, AGS_RECALL(count_beats_audio_run)->recall_id); if((AGS_RECALL_ID_SEQUENCER & (recall->recall_id->flags)) != 0){ sequencer = TRUE; } notation = FALSE; if((AGS_RECALL_ID_NOTATION & (recall->recall_id->flags)) != 0){ // notation = TRUE; } /* create cancel task */ cancel_audio = ags_cancel_audio_new(AGS_RECALL_AUDIO(count_beats_audio)->audio, FALSE, sequencer, notation); /* append AgsCancelAudio */ ags_task_thread_append_task((AgsTaskThread *) async_queue, (AgsTask *) cancel_audio); } /** * ags_count_beats_audio_run_notation_start: * @count_beats_audio_run: the #AgsCountBeatsAudioRun * @run_order: the nth run order * * Emitted as notation starts playback. * * Since: 0.4 */ void ags_count_beats_audio_run_notation_start(AgsCountBeatsAudioRun *count_beats_audio_run, guint run_order) { g_return_if_fail(AGS_IS_COUNT_BEATS_AUDIO_RUN(count_beats_audio_run)); g_object_ref(G_OBJECT(count_beats_audio_run)); g_signal_emit(G_OBJECT(count_beats_audio_run), count_beats_audio_run_signals[NOTATION_START], 0, run_order); g_object_unref(G_OBJECT(count_beats_audio_run)); } /** * ags_count_beats_audio_run_notation_loop: * @count_beats_audio_run: the #AgsCountBeatsAudioRun * @run_order: the nth run order * * Emitted as notation loops playback. * * Since: 0.4 */ void ags_count_beats_audio_run_notation_loop(AgsCountBeatsAudioRun *count_beats_audio_run, guint run_order) { g_return_if_fail(AGS_IS_COUNT_BEATS_AUDIO_RUN(count_beats_audio_run)); g_object_ref(G_OBJECT(count_beats_audio_run)); g_signal_emit(G_OBJECT(count_beats_audio_run), count_beats_audio_run_signals[NOTATION_LOOP], 0, run_order); g_object_unref(G_OBJECT(count_beats_audio_run)); } /** * ags_count_beats_audio_run_notation_stop: * @count_beats_audio_run: the #AgsCountBeatsAudioRun * @run_order: the nth run order * * Emitted as notation stops playback. * * Since: 0.4 */ void ags_count_beats_audio_run_notation_stop(AgsCountBeatsAudioRun *count_beats_audio_run, guint run_order) { g_return_if_fail(AGS_IS_COUNT_BEATS_AUDIO_RUN(count_beats_audio_run)); g_object_ref(G_OBJECT(count_beats_audio_run)); g_signal_emit(G_OBJECT(count_beats_audio_run), count_beats_audio_run_signals[NOTATION_STOP], 0, run_order); g_object_unref(G_OBJECT(count_beats_audio_run)); } /** * ags_count_beats_audio_run_sequencer_start: * @count_beats_audio_run: the #AgsCountBeatsAudioRun * @run_order: the nth run order * * Emitted as sequencer starts playback. * * Since: 0.4 */ void ags_count_beats_audio_run_sequencer_start(AgsCountBeatsAudioRun *count_beats_audio_run, guint run_order) { g_return_if_fail(AGS_IS_COUNT_BEATS_AUDIO_RUN(count_beats_audio_run)); g_object_ref(G_OBJECT(count_beats_audio_run)); g_signal_emit(G_OBJECT(count_beats_audio_run), count_beats_audio_run_signals[SEQUENCER_START], 0, run_order); g_object_unref(G_OBJECT(count_beats_audio_run)); } /** * ags_count_beats_audio_run_sequencer_loop: * @count_beats_audio_run: the #AgsCountBeatsAudioRun * @run_order: the nth run order * * Emitted as sequencer loops playback. * * Since: 0.4 */ void ags_count_beats_audio_run_sequencer_loop(AgsCountBeatsAudioRun *count_beats_audio_run, guint run_order) { g_return_if_fail(AGS_IS_COUNT_BEATS_AUDIO_RUN(count_beats_audio_run)); g_object_ref(G_OBJECT(count_beats_audio_run)); g_signal_emit(G_OBJECT(count_beats_audio_run), count_beats_audio_run_signals[SEQUENCER_LOOP], 0, run_order); g_object_unref(G_OBJECT(count_beats_audio_run)); } /** * ags_count_beats_audio_run_sequencer_stop: * @count_beats_audio_run: the #AgsCountBeatsAudioRun * @run_order: the nth run order * * Emitted as sequencer stops playback. * * Since: 0.4 */ void ags_count_beats_audio_run_sequencer_stop(AgsCountBeatsAudioRun *count_beats_audio_run, guint run_order) { g_return_if_fail(AGS_IS_COUNT_BEATS_AUDIO_RUN(count_beats_audio_run)); g_object_ref(G_OBJECT(count_beats_audio_run)); g_signal_emit(G_OBJECT(count_beats_audio_run), count_beats_audio_run_signals[SEQUENCER_STOP], 0, run_order); g_object_unref(G_OBJECT(count_beats_audio_run)); } void ags_count_beats_audio_run_notation_alloc_output_callback(AgsDelayAudioRun *delay_audio_run, guint run_order, gdouble delay, guint attack, AgsCountBeatsAudioRun *count_beats_audio_run) { AgsCountBeatsAudio *count_beats_audio; gboolean loop; GValue value = {0,}; if((AGS_RECALL_ID_NOTATION & (AGS_RECALL(count_beats_audio_run)->recall_id->flags)) == 0){ return; } count_beats_audio = AGS_COUNT_BEATS_AUDIO(AGS_RECALL_AUDIO_RUN(count_beats_audio_run)->recall_audio); g_value_init(&value, G_TYPE_BOOLEAN); ags_port_safe_read(count_beats_audio->notation_loop, &value); loop = g_value_get_boolean(&value); g_value_unset(&value); if(count_beats_audio_run->first_run){ // g_message("ags_count_beats_audio_run_sequencer_alloc_output_callback: start\n\0"); ags_count_beats_audio_run_notation_start(count_beats_audio_run, run_order); } if(!count_beats_audio_run->first_run && count_beats_audio_run->notation_counter == 0){ /* emit notation signals */ if(loop){ // g_message("ags_count_beats_audio_run_notation_alloc_output_callback: loop\n\0"); ags_count_beats_audio_run_notation_loop(count_beats_audio_run, run_order); } } } void ags_count_beats_audio_run_sequencer_alloc_output_callback(AgsDelayAudioRun *delay_audio_run, guint run_order, gdouble delay, guint attack, AgsCountBeatsAudioRun *count_beats_audio_run) { AgsCountBeatsAudio *count_beats_audio; gdouble loop_end; gboolean loop; GValue value = {0,}; if((AGS_RECALL_ID_SEQUENCER & (AGS_RECALL(count_beats_audio_run)->recall_id->flags)) == 0){ return; } count_beats_audio = AGS_COUNT_BEATS_AUDIO(AGS_RECALL_AUDIO_RUN(count_beats_audio_run)->recall_audio); g_value_init(&value, G_TYPE_BOOLEAN); ags_port_safe_read(count_beats_audio->sequencer_loop, &value); loop = g_value_get_boolean(&value); g_value_unset(&value); g_value_init(&value, G_TYPE_DOUBLE); ags_port_safe_read(count_beats_audio->sequencer_loop_end, &value); loop_end = g_value_get_double(&value); g_value_unset(&value); if(count_beats_audio_run->first_run){ // g_message("ags_count_beats_audio_run_sequencer_alloc_output_callback: start\n\0"); ags_count_beats_audio_run_sequencer_start(count_beats_audio_run, run_order); } if(!count_beats_audio_run->first_run && count_beats_audio_run->sequencer_counter == 0){ /* emit sequencer signals */ if(loop){ // g_message("ags_count_beats_audio_run_sequencer_alloc_output_callback: loop\n\0"); ags_count_beats_audio_run_sequencer_loop(count_beats_audio_run, run_order); } } } void ags_count_beats_audio_run_notation_count_callback(AgsDelayAudioRun *delay_audio_run, guint run_order, gdouble delay, guint attack, AgsCountBeatsAudioRun *count_beats_audio_run) { AgsCountBeatsAudio *count_beats_audio; gdouble loop_end; gboolean loop; GValue value = {0,}; GValue loop_end_value = {0,}; if((AGS_RECALL_ID_NOTATION & (AGS_RECALL(count_beats_audio_run)->recall_id->flags)) == 0){ return; } count_beats_audio = AGS_COUNT_BEATS_AUDIO(AGS_RECALL_AUDIO_RUN(count_beats_audio_run)->recall_audio); g_value_init(&value, G_TYPE_BOOLEAN); ags_port_safe_read(count_beats_audio->notation_loop, &value); loop = g_value_get_boolean(&value); // g_message("notation %d\0", count_beats_audio_run->notation_counter); ags_audio_tact(AGS_RECALL_AUDIO(count_beats_audio)->audio, AGS_RECALL(count_beats_audio_run)->recall_id); /* * Block counter for sequencer and notation counter */ g_value_init(&loop_end_value, G_TYPE_DOUBLE); ags_port_safe_read(count_beats_audio->notation_loop_end, &loop_end_value); loop_end = g_value_get_double(&loop_end_value); g_value_unset(&value); if(loop){ if(count_beats_audio_run->notation_counter >= (guint) loop_end - 1.0){ count_beats_audio_run->notation_counter = 0; }else{ count_beats_audio_run->notation_counter += 1; } }else{ count_beats_audio_run->notation_counter += 1; } } void ags_count_beats_audio_run_sequencer_count_callback(AgsDelayAudioRun *delay_audio_run, guint run_order, gdouble delay, guint attack, AgsCountBeatsAudioRun *count_beats_audio_run) { AgsCountBeatsAudio *count_beats_audio; gdouble loop_end; gboolean loop; GValue value = {0,}; GValue loop_end_value = {0,}; if((AGS_RECALL_ID_SEQUENCER & (AGS_RECALL(count_beats_audio_run)->recall_id->flags)) == 0){ return; } count_beats_audio = AGS_COUNT_BEATS_AUDIO(AGS_RECALL_AUDIO_RUN(count_beats_audio_run)->recall_audio); g_value_init(&value, G_TYPE_BOOLEAN); ags_port_safe_read(count_beats_audio->sequencer_loop, &value); loop = g_value_get_boolean(&value); ags_audio_tact(AGS_RECALL_AUDIO(count_beats_audio)->audio, AGS_RECALL(count_beats_audio_run)->recall_id); /* * Block counter for sequencer and notation counter */ g_value_init(&loop_end_value, G_TYPE_DOUBLE); ags_port_safe_read(count_beats_audio->sequencer_loop_end, &loop_end_value); loop_end = g_value_get_double(&loop_end_value); g_value_unset(&value); // g_message("sequencer: tic\0"); if(count_beats_audio_run->first_run){ count_beats_audio_run->first_run = FALSE; } if(loop){ if(count_beats_audio_run->sequencer_counter >= (guint) loop_end - 1.0){ count_beats_audio_run->sequencer_counter = 0; }else{ count_beats_audio_run->sequencer_counter += 1; } }else{ if(count_beats_audio_run->sequencer_counter >= (guint) loop_end - 1.0){ AgsAudio *audio; GList *devout_play; count_beats_audio_run->sequencer_counter = 0; audio = AGS_RECALL_AUDIO_RUN(count_beats_audio_run)->recall_audio->audio; devout_play = AGS_DEVOUT_PLAY_DOMAIN(audio->devout_play_domain)->devout_play; /* emit stop signals */ ags_count_beats_audio_run_sequencer_stop(count_beats_audio_run, FALSE); /* set done flag in devout play */ while(devout_play != NULL){ if(AGS_DEVOUT_PLAY(devout_play->data)->recall_id[1] != NULL && AGS_DEVOUT_PLAY(devout_play->data)->recall_id[1]->recycling_container == AGS_RECALL(count_beats_audio_run)->recall_id->recycling_container){ AgsChannel *channel; AgsStreamChannelRun *stream_channel_run; GList *list; GList *recall_recycling_list, *recall_audio_signal_list; gboolean found; // AGS_DEVOUT_PLAY(devout_play->data)->flags |= AGS_DEVOUT_PLAY_DONE; /* check if to stop audio processing */ channel = audio->output; found = FALSE; list = channel->play; list = ags_recall_find_type_with_recycling_container(list, AGS_TYPE_STREAM_CHANNEL_RUN, (GObject *) AGS_RECALL(count_beats_audio_run)->recall_id->recycling_container); if(list != NULL){ stream_channel_run = AGS_STREAM_CHANNEL_RUN(list->data); recall_recycling_list = AGS_RECALL(stream_channel_run)->children; while(recall_recycling_list != NULL){ recall_audio_signal_list = AGS_RECALL(recall_recycling_list->data)->children; while(recall_audio_signal_list != NULL){ found = TRUE; g_signal_connect_after(G_OBJECT(recall_audio_signal_list->data), "done\0", G_CALLBACK(ags_count_beats_audio_run_stream_audio_signal_done_callback), AGS_RECALL(count_beats_audio_run)); recall_audio_signal_list = recall_audio_signal_list->next; } recall_recycling_list = recall_recycling_list->next; } } /* stop audio processing*/ if(!found){ ags_count_beats_audio_run_stop(count_beats_audio_run, FALSE); } break; } devout_play = devout_play->next; } return; } count_beats_audio_run->sequencer_counter += 1; } } void ags_count_beats_audio_run_read_resolve_dependency(AgsFileLookup *file_lookup, GObject *recall) { AgsFileIdRef *id_ref; gchar *xpath; xpath = (gchar *) xmlGetProp(file_lookup->node, "xpath\0"); id_ref = (AgsFileIdRef *) ags_file_find_id_ref_by_xpath(file_lookup->file, xpath); if(AGS_IS_DELAY_AUDIO_RUN(id_ref->ref)){ g_object_set(G_OBJECT(recall), "delay-audio-run\0", AGS_DELAY_AUDIO_RUN(id_ref->ref), NULL); } } void ags_count_beats_audio_run_write_resolve_dependency(AgsFileLookup *file_lookup, GObject *recall) { AgsFileIdRef *id_ref; gchar *id; id_ref = (AgsFileIdRef *) ags_file_find_id_ref_by_reference(file_lookup->file, AGS_COUNT_BEATS_AUDIO_RUN(file_lookup->ref)->delay_audio_run); id = xmlGetProp(id_ref->node, AGS_FILE_ID_PROP); xmlNewProp(file_lookup->node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id)); } void ags_count_beats_audio_run_stream_audio_signal_done_callback(AgsRecall *recall, AgsCountBeatsAudioRun *count_beats_audio_run) { AgsCountBeatsAudio *count_beats_audio; GValue loop_sequencer = {0,}; GValue loop_end_sequencer = {0,}; count_beats_audio = AGS_RECALL_AUDIO_RUN(count_beats_audio_run)->recall_audio; /* check for loop or notation */ g_value_init(&loop_sequencer, G_TYPE_BOOLEAN); ags_port_safe_read(count_beats_audio->sequencer_loop, &loop_sequencer); if((AGS_RECALL_ID_SEQUENCER & (recall->recall_id->flags)) != 0){ if(g_value_get_boolean(&loop_sequencer)){ g_value_unset(&loop_sequencer); return; }else{ g_value_unset(&loop_sequencer); } g_value_init(&loop_end_sequencer, G_TYPE_DOUBLE); ags_port_safe_read(count_beats_audio->sequencer_loop_end, &loop_end_sequencer); if(count_beats_audio_run->sequencer_counter < (guint) g_value_get_double(&loop_end_sequencer) - 1.0){ g_value_unset(&loop_end_sequencer); return; }else{ g_value_unset(&loop_end_sequencer); } /* you're done */ ags_count_beats_audio_run_done(count_beats_audio_run); } } void ags_count_beats_audio_run_stop(AgsCountBeatsAudioRun *count_beats_audio_run, gboolean notation) { if(!notation){ if((AGS_RECALL_ID_SEQUENCER & (AGS_RECALL(count_beats_audio_run)->recall_id->flags)) != 0){ //TODO:JK: enhance me ags_count_beats_audio_run_done(count_beats_audio_run); } }else{ // ags_count_beats_audio_run_done(count_beats_audio_run); } } /** * ags_count_beats_audio_run_new: * @delay_audio_run: the #AgsDelayAudioRun dependency * * Creates an #AgsCountBeatsAudioRun * * Returns: a new #AgsCountBeatsAudioRun * * Since: 0.4 */ AgsCountBeatsAudioRun* ags_count_beats_audio_run_new(AgsDelayAudioRun *delay_audio_run) { AgsCountBeatsAudioRun *count_beats_audio_run; count_beats_audio_run = (AgsCountBeatsAudioRun *) g_object_new(AGS_TYPE_COUNT_BEATS_AUDIO_RUN, "delay_audio_run\0", delay_audio_run, NULL); return(count_beats_audio_run); } gsequencer-0.6.37/src/ags/audio/recall/ags_copy_notation_audio.c0000644000175000017500000001472512626272146021662 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include void ags_copy_notation_audio_class_init(AgsCopyNotationAudioClass *copy_notation_audio); void ags_copy_notation_audio_init(AgsCopyNotationAudio *copy_notation_audio); void ags_copy_notation_audio_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_copy_notation_audio_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_copy_notation_audio_finalize(GObject *gobject); /** * SECTION:ags_copy_notation_audio * @short_description: copy notations audio * @title: AgsCopyNotationAudio * @section_id: * @include: ags/audio/recall/ags_copy_notation_audio.h * * The #AgsCopyNotationAudio class provides ports to the effect processor. */ enum{ PROP_0, PROP_DEVOUT, PROP_NOTATION, PROP_AUDIO_CHANNEL, }; static gpointer ags_copy_notation_audio_parent_class = NULL; GType ags_copy_notation_audio_get_type() { static GType ags_type_copy_notation_audio = 0; if(!ags_type_copy_notation_audio){ static const GTypeInfo ags_copy_notation_audio_info = { sizeof (AgsCopyNotationAudioClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_copy_notation_audio_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsCopyNotationAudio), 0, /* n_preallocs */ (GInstanceInitFunc) ags_copy_notation_audio_init, }; ags_type_copy_notation_audio = g_type_register_static(AGS_TYPE_RECALL_AUDIO, "AgsCopyNotationAudio\0", &ags_copy_notation_audio_info, 0); } return(ags_type_copy_notation_audio); } void ags_copy_notation_audio_class_init(AgsCopyNotationAudioClass *copy_notation_audio) { GObjectClass *gobject; GParamSpec *param_spec; ags_copy_notation_audio_parent_class = g_type_class_peek_parent(copy_notation_audio); /* GObjectClass */ gobject = (GObjectClass *) copy_notation_audio; gobject->set_property = ags_copy_notation_audio_set_property; gobject->get_property = ags_copy_notation_audio_get_property; gobject->finalize = ags_copy_notation_audio_finalize; /* properties */ param_spec = g_param_spec_object("notation\0", "the assigned notation\0", "The AgsNotation it is assigned to\0", AGS_TYPE_NOTATION, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_NOTATION, param_spec); param_spec = g_param_spec_uint("audio_channel\0", "the audio channel to play\0", "The audio channel to play of audio object\0", 0, 65535, 0, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_AUDIO_CHANNEL, param_spec); } void ags_copy_notation_audio_init(AgsCopyNotationAudio *copy_notation_audio) { copy_notation_audio->flags = 0; copy_notation_audio->notation = NULL; copy_notation_audio->audio_channel = 0; } void ags_copy_notation_audio_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsCopyNotationAudio *copy_notation_audio; copy_notation_audio = AGS_COPY_NOTATION_AUDIO(gobject); switch(prop_id){ case PROP_DEVOUT: { AgsDevout *devout; devout = (AgsDevout *) g_value_get_object(value); if(copy_notation_audio->devout != devout) return; if(copy_notation_audio->devout != NULL) g_object_unref(copy_notation_audio->devout); if(devout != NULL) g_object_ref(devout); copy_notation_audio->devout = devout; } break; case PROP_NOTATION: { AgsNotation *notation; notation = (AgsNotation *) g_value_get_object(value); if(copy_notation_audio->notation != notation) return; if(copy_notation_audio->notation != NULL) g_object_unref(copy_notation_audio->notation); if(notation != NULL) g_object_ref(notation); copy_notation_audio->notation = notation; } break; case PROP_AUDIO_CHANNEL: { guint audio_channel; audio_channel = g_value_get_uint(value); copy_notation_audio->audio_channel = audio_channel; } default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; }; } void ags_copy_notation_audio_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsCopyNotationAudio *copy_notation_audio; copy_notation_audio = AGS_COPY_NOTATION_AUDIO(gobject); switch(prop_id){ case PROP_DEVOUT: { g_value_set_object(value, copy_notation_audio->devout); } break; case PROP_NOTATION: { g_value_set_object(value, copy_notation_audio->notation); } break; case PROP_AUDIO_CHANNEL: { g_value_set_uint(value, copy_notation_audio->audio_channel); } default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; }; } void ags_copy_notation_audio_finalize(GObject *gobject) { /* call parent */ G_OBJECT_CLASS(ags_copy_notation_audio_parent_class)->finalize(gobject); } /** * ags_copy_notation_audio_new: * @audio: the #AgsAudio * @notation: the notation * @audio_channel: the audio channel to use * * Creates an #AgsCopyNotationAudio * * Returns: a new #AgsCopyNotationAudio * * Since: 0.4 */ AgsCopyNotationAudio* ags_copy_notation_audio_new(AgsDevout *devout, AgsNotation *notation, guint audio_channel) { AgsCopyNotationAudio *copy_notation_audio; copy_notation_audio = (AgsCopyNotationAudio *) g_object_new(AGS_TYPE_COPY_NOTATION_AUDIO, "devout\0", devout, "notation\0", notation, "audio_channel\0", audio_channel, NULL); return(copy_notation_audio); } gsequencer-0.6.37/src/ags/audio/recall/ags_copy_pattern_channel_run.c0000644000175000017500000004451412626272146022676 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void ags_copy_pattern_channel_run_class_init(AgsCopyPatternChannelRunClass *copy_pattern_channel_run); void ags_copy_pattern_channel_run_connectable_interface_init(AgsConnectableInterface *connectable); void ags_copy_pattern_channel_run_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable); void ags_copy_pattern_channel_run_plugin_interface_init(AgsPluginInterface *plugin); void ags_copy_pattern_channel_run_init(AgsCopyPatternChannelRun *copy_pattern_channel_run); void ags_copy_pattern_channel_run_connect(AgsConnectable *connectable); void ags_copy_pattern_channel_run_disconnect(AgsConnectable *connectable); void ags_copy_pattern_channel_run_connect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_copy_pattern_channel_run_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_copy_pattern_channel_run_finalize(GObject *gobject); void ags_copy_pattern_channel_run_resolve_dependencies(AgsRecall *recall); void ags_copy_pattern_channel_run_run_init_pre(AgsRecall *recall); void ags_copy_pattern_channel_run_done(AgsRecall *recall); void ags_copy_pattern_channel_run_cancel(AgsRecall *recall); void ags_copy_pattern_channel_run_remove(AgsRecall *recall); AgsRecall* ags_copy_pattern_channel_run_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter); void ags_copy_pattern_channel_run_sequencer_alloc_callback(AgsDelayAudioRun *delay_audio_run, guint run_order, gdouble delay, guint attack, AgsCopyPatternChannelRun *copy_pattern_channel_run); /** * SECTION:ags_copy_pattern_channel_run * @short_description: copys pattern * @title: AgsCopyPatternChannelRun * @section_id: * @include: ags/audio/recall/ags_copy_pattern_channel_run.h * * The #AgsCopyPatternChannelRun class copys pattern. */ static gpointer ags_copy_pattern_channel_run_parent_class = NULL; static AgsConnectableInterface* ags_copy_pattern_channel_run_parent_connectable_interface; static AgsDynamicConnectableInterface *ags_copy_pattern_channel_run_parent_dynamic_connectable_interface; static AgsPluginInterface *ags_copy_pattern_channel_run_parent_plugin_interface; GType ags_copy_pattern_channel_run_get_type() { static GType ags_type_copy_pattern_channel_run = 0; if(!ags_type_copy_pattern_channel_run){ static const GTypeInfo ags_copy_pattern_channel_run_info = { sizeof (AgsCopyPatternChannelRunClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_copy_pattern_channel_run_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsCopyPatternChannelRun), 0, /* n_preallocs */ (GInstanceInitFunc) ags_copy_pattern_channel_run_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_copy_pattern_channel_run_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_dynamic_connectable_interface_info = { (GInterfaceInitFunc) ags_copy_pattern_channel_run_dynamic_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_plugin_interface_info = { (GInterfaceInitFunc) ags_copy_pattern_channel_run_plugin_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_copy_pattern_channel_run = g_type_register_static(AGS_TYPE_RECALL_CHANNEL_RUN, "AgsCopyPatternChannelRun\0", &ags_copy_pattern_channel_run_info, 0); g_type_add_interface_static(ags_type_copy_pattern_channel_run, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_copy_pattern_channel_run, AGS_TYPE_DYNAMIC_CONNECTABLE, &ags_dynamic_connectable_interface_info); g_type_add_interface_static(ags_type_copy_pattern_channel_run, AGS_TYPE_PLUGIN, &ags_plugin_interface_info); } return(ags_type_copy_pattern_channel_run); } void ags_copy_pattern_channel_run_class_init(AgsCopyPatternChannelRunClass *copy_pattern_channel_run) { GObjectClass *gobject; AgsRecallClass *recall; AgsRecallChannelRunClass *recall_channel_run; GParamSpec *param_spec; ags_copy_pattern_channel_run_parent_class = g_type_class_peek_parent(copy_pattern_channel_run); /* GObjectClass */ gobject = (GObjectClass *) copy_pattern_channel_run; gobject->finalize = ags_copy_pattern_channel_run_finalize; /* AgsRecallClass */ recall = (AgsRecallClass *) copy_pattern_channel_run; recall->resolve_dependencies = ags_copy_pattern_channel_run_resolve_dependencies; recall->run_init_pre = ags_copy_pattern_channel_run_run_init_pre; recall->done = ags_copy_pattern_channel_run_done; recall->cancel = ags_copy_pattern_channel_run_cancel; recall->remove = ags_copy_pattern_channel_run_remove; recall->duplicate = ags_copy_pattern_channel_run_duplicate; } void ags_copy_pattern_channel_run_connectable_interface_init(AgsConnectableInterface *connectable) { AgsConnectableInterface *ags_copy_pattern_channel_run_connectable_parent_interface; ags_copy_pattern_channel_run_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_copy_pattern_channel_run_connect; connectable->disconnect = ags_copy_pattern_channel_run_disconnect; } void ags_copy_pattern_channel_run_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable) { ags_copy_pattern_channel_run_parent_dynamic_connectable_interface = g_type_interface_peek_parent(dynamic_connectable); dynamic_connectable->connect_dynamic = ags_copy_pattern_channel_run_connect_dynamic; dynamic_connectable->disconnect_dynamic = ags_copy_pattern_channel_run_disconnect_dynamic; } void ags_copy_pattern_channel_run_plugin_interface_init(AgsPluginInterface *plugin) { ags_copy_pattern_channel_run_parent_plugin_interface = g_type_interface_peek_parent(plugin); } void ags_copy_pattern_channel_run_init(AgsCopyPatternChannelRun *copy_pattern_channel_run) { AGS_RECALL(copy_pattern_channel_run)->name = "ags-copy-pattern\0"; AGS_RECALL(copy_pattern_channel_run)->version = AGS_EFFECTS_DEFAULT_VERSION; AGS_RECALL(copy_pattern_channel_run)->build_id = AGS_BUILD_ID; AGS_RECALL(copy_pattern_channel_run)->xml_type = "ags-copy-pattern-channel-run\0"; AGS_RECALL(copy_pattern_channel_run)->port = NULL; AGS_RECALL(copy_pattern_channel_run)->child_type = G_TYPE_NONE; } void ags_copy_pattern_channel_run_connect(AgsConnectable *connectable) { AgsCopyPatternChannelRun *copy_pattern_channel_run; if((AGS_RECALL_CONNECTED & (AGS_RECALL(connectable)->flags)) != 0){ return; } ags_copy_pattern_channel_run_parent_connectable_interface->connect(connectable); /* empty */ } void ags_copy_pattern_channel_run_disconnect(AgsConnectable *connectable) { ags_copy_pattern_channel_run_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_copy_pattern_channel_run_connect_dynamic(AgsDynamicConnectable *dynamic_connectable) { AgsCopyPatternAudioRun *copy_pattern_audio_run; AgsCopyPatternChannelRun *copy_pattern_channel_run; AgsDelayAudioRun *delay_audio_run; AgsCountBeatsAudioRun *count_beats_audio_run; if((AGS_RECALL_DYNAMIC_CONNECTED & (AGS_RECALL(dynamic_connectable)->flags)) != 0){ return; } ags_copy_pattern_channel_run_parent_dynamic_connectable_interface->connect_dynamic(dynamic_connectable); // g_message("ags_copy_pattern_channel_run_dynamic_connect\n\0"); /* AgsCopyPatternChannelRun */ copy_pattern_channel_run = AGS_COPY_PATTERN_CHANNEL_RUN(dynamic_connectable); /* get AgsCopyPatternAudioRun */ copy_pattern_audio_run = AGS_COPY_PATTERN_AUDIO_RUN(AGS_RECALL_CHANNEL_RUN(copy_pattern_channel_run)->recall_audio_run); /* connect sequencer_alloc in AgsDelayAudioRun */ count_beats_audio_run = copy_pattern_audio_run->count_beats_audio_run; delay_audio_run = copy_pattern_audio_run->delay_audio_run; // g_object_ref(G_OBJECT(delay_audio_run)); copy_pattern_channel_run->sequencer_alloc_handler = g_signal_connect(G_OBJECT(delay_audio_run), "sequencer-alloc-input\0", G_CALLBACK(ags_copy_pattern_channel_run_sequencer_alloc_callback), copy_pattern_channel_run); } void ags_copy_pattern_channel_run_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable) { AgsCopyPatternAudioRun *copy_pattern_audio_run; AgsCopyPatternChannelRun *copy_pattern_channel_run; AgsDelayAudioRun *delay_audio_run; ags_copy_pattern_channel_run_parent_dynamic_connectable_interface->disconnect_dynamic(dynamic_connectable); /* AgsCopyPatternChannelRun */ copy_pattern_channel_run = AGS_COPY_PATTERN_CHANNEL_RUN(dynamic_connectable); /* get AgsCopyPatternAudioRun */ copy_pattern_audio_run = AGS_COPY_PATTERN_AUDIO_RUN(AGS_RECALL_CHANNEL_RUN(copy_pattern_channel_run)->recall_audio_run); /* disconnect sequencer_alloc in AgsDelayAudioRun */ delay_audio_run = copy_pattern_audio_run->delay_audio_run; g_signal_handler_disconnect(G_OBJECT(delay_audio_run), copy_pattern_channel_run->sequencer_alloc_handler); // g_object_unref(G_OBJECT(delay_audio_run)); } void ags_copy_pattern_channel_run_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_copy_pattern_channel_run_parent_class)->finalize(gobject); } void ags_copy_pattern_channel_run_resolve_dependencies(AgsRecall *recall) { //TODO:JK: implement me } void ags_copy_pattern_channel_run_run_init_pre(AgsRecall *recall) { AgsCopyPatternAudioRun *copy_pattern_audio_run; AgsCopyPatternChannelRun *copy_pattern_channel_run; AGS_RECALL_CLASS(ags_copy_pattern_channel_run_parent_class)->run_init_pre(recall); copy_pattern_channel_run = AGS_COPY_PATTERN_CHANNEL_RUN(recall); /* get AgsCopyPatternAudioRun */ copy_pattern_audio_run = AGS_COPY_PATTERN_AUDIO_RUN(AGS_RECALL_CHANNEL_RUN(copy_pattern_channel_run)->recall_audio_run); /* notify dependency */ ags_recall_notify_dependency(AGS_RECALL(copy_pattern_audio_run->count_beats_audio_run), AGS_RECALL_NOTIFY_CHANNEL_RUN, 1); } void ags_copy_pattern_channel_run_done(AgsRecall *recall) { AgsCopyPatternChannelRun *copy_pattern_channel_run; AgsCopyPatternAudioRun *copy_pattern_audio_run; AGS_RECALL_CLASS(ags_copy_pattern_channel_run_parent_class)->done(recall); copy_pattern_channel_run = AGS_COPY_PATTERN_CHANNEL_RUN(recall); /* get AgsCopyPatternAudioRun */ copy_pattern_audio_run = AGS_COPY_PATTERN_AUDIO_RUN(AGS_RECALL_CHANNEL_RUN(copy_pattern_channel_run)->recall_audio_run); /* denotify dependency */ ags_recall_notify_dependency(AGS_RECALL(copy_pattern_audio_run->count_beats_audio_run), AGS_RECALL_NOTIFY_CHANNEL_RUN, -1); } void ags_copy_pattern_channel_run_cancel(AgsRecall *recall) { AgsCopyPatternChannelRun *copy_pattern_channel_run; AgsCopyPatternAudioRun *copy_pattern_audio_run; copy_pattern_channel_run = AGS_COPY_PATTERN_CHANNEL_RUN(recall); AGS_RECALL_CLASS(ags_copy_pattern_channel_run_parent_class)->cancel(recall); /* get AgsCopyPatternAudioRun */ // copy_pattern_audio_run = AGS_COPY_PATTERN_AUDIO_RUN(copy_pattern_channel_run->recall_channel_run.recall_audio_run); /* notify dependency */ // ags_recall_notify_dependency(AGS_RECALL(copy_pattern_audio_run->count_beats_audio_run), // AGS_RECALL_NOTIFY_CHANNEL_RUN, -1); } void ags_copy_pattern_channel_run_remove(AgsRecall *recall) { AGS_RECALL_CLASS(ags_copy_pattern_channel_run_parent_class)->remove(recall); /* empty */ } AgsRecall* ags_copy_pattern_channel_run_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter) { AgsCopyPatternChannelRun *copy; copy = AGS_COPY_PATTERN_CHANNEL_RUN(AGS_RECALL_CLASS(ags_copy_pattern_channel_run_parent_class)->duplicate(recall, recall_id, n_params, parameter)); /* empty */ return((AgsRecall *) copy); } void ags_copy_pattern_channel_run_sequencer_alloc_callback(AgsDelayAudioRun *delay_audio_run, guint run_order, gdouble delay, guint attack, AgsCopyPatternChannelRun *copy_pattern_channel_run) { AgsChannel *output, *source; AgsPattern *pattern; AgsCopyPatternAudio *copy_pattern_audio; AgsCopyPatternAudioRun *copy_pattern_audio_run; AgsCopyPatternChannel *copy_pattern_channel; gboolean current_bit; GValue offset_value = { 0, }; GValue i_value = { 0, }; GValue j_value = { 0, }; GValue current_bit_value = { 0, }; // g_message("pattern\0"); // if(AGS_RECALL_CHANNEL_RUN(copy_pattern_channel_run)->run_order != run_order){ // g_message("blocked %d %d\0", AGS_RECALL_CHANNEL_RUN(copy_pattern_channel_run)->run_order, run_order); // return; // } /* get AgsCopyPatternAudio */ copy_pattern_audio = AGS_COPY_PATTERN_AUDIO(AGS_RECALL_CHANNEL_RUN(copy_pattern_channel_run)->recall_audio_run->recall_audio); /* get AgsCopyPatternAudioRun */ copy_pattern_audio_run = AGS_COPY_PATTERN_AUDIO_RUN(AGS_RECALL_CHANNEL_RUN(copy_pattern_channel_run)->recall_audio_run); /* get AgsCopyPatternChannel */ copy_pattern_channel = AGS_COPY_PATTERN_CHANNEL(copy_pattern_channel_run->recall_channel_run.recall_channel); g_value_init(&i_value, G_TYPE_UINT64); ags_port_safe_read(copy_pattern_audio->bank_index_0, &i_value); g_value_init(&j_value, G_TYPE_UINT64); ags_port_safe_read(copy_pattern_audio->bank_index_1, &j_value); /* write pattern port - current offset */ g_value_init(&offset_value, G_TYPE_UINT); g_value_set_uint(&offset_value, copy_pattern_audio_run->count_beats_audio_run->sequencer_counter); ags_port_safe_set_property(copy_pattern_channel->pattern, "offset\0", &offset_value); g_value_unset(&offset_value); ags_port_safe_set_property(copy_pattern_channel->pattern, "first-index\0", &i_value); g_value_unset(&i_value); ags_port_safe_set_property(copy_pattern_channel->pattern, "second-index\0", &j_value); g_value_unset(&j_value); /* read pattern port - current bit */ g_value_init(¤t_bit_value, G_TYPE_BOOLEAN); ags_port_safe_get_property(copy_pattern_channel->pattern, "current-bit\0", ¤t_bit_value); current_bit = g_value_get_boolean(¤t_bit_value); g_value_unset(¤t_bit_value); /* */ if(current_bit){ AgsDevout *devout; AgsRecycling *recycling; AgsAudioSignal *audio_signal; gdouble delay; guint attack; devout = AGS_DEVOUT(AGS_RECALL(copy_pattern_channel_run)->devout); // g_message("ags_copy_pattern_channel_run_sequencer_alloc_callback - playing channel: %u; playing pattern: %u\0", // AGS_RECALL_CHANNEL(copy_pattern_channel)->source->line, // copy_pattern_audio_run->count_beats_audio_run->sequencer_counter); /* get source */ source = AGS_RECALL_CHANNEL(copy_pattern_channel)->source; /* create new audio signals */ recycling = source->first_recycling; //TODO:JK: unclear attack = 0; delay = 0.0; if(recycling != NULL){ AgsRecallID *child_recall_id; while(recycling != source->last_recycling->next){ if(source->link == NULL){ child_recall_id = AGS_RECALL(copy_pattern_channel_run)->recall_id; }else{ GList *list; list = source->link->recall_id; while(list != NULL){ if(AGS_RECALL_ID(list->data)->recycling_container->parent == AGS_RECALL(copy_pattern_channel_run)->recall_id->recycling_container){ child_recall_id = (AgsRecallID *) list->data; break; } list = list->next; } if(list == NULL){ child_recall_id = NULL; } } audio_signal = ags_audio_signal_new(AGS_RECALL(copy_pattern_audio)->devout, (GObject *) recycling, child_recall_id); ags_recycling_create_audio_signal_with_defaults(recycling, audio_signal, delay, attack); audio_signal->flags &= (~AGS_AUDIO_SIGNAL_TEMPLATE); audio_signal->stream_current = audio_signal->stream_beginning; ags_audio_signal_connect(audio_signal); /* * emit add_audio_signal on AgsRecycling */ #ifdef AGS_DEBUG g_message("play %x\0", AGS_RECALL(copy_pattern_channel_run)->recall_id); #endif audio_signal->recall_id = (GObject *) child_recall_id; ags_recycling_add_audio_signal(recycling, audio_signal); /* * unref AgsAudioSignal because AgsCopyPatternChannelRun has no need for it * if you need a valid reference to audio_signal you have to g_object_ref(audio_signal) */ g_object_unref(audio_signal); recycling = recycling->next; } } } // g_message("%u\n\0", copy_pattern->shared_audio_run->bit); // copy_pattern->shared_audio_run->bit++; // } } /** * ags_copy_pattern_channel_run_new: * * Creates an #AgsCopyPatternChannelRun * * Returns: a new #AgsCopyPatternChannelRun * * Since: 0.4 */ AgsCopyPatternChannelRun* ags_copy_pattern_channel_run_new() { AgsCopyPatternChannelRun *copy_pattern_channel_run; copy_pattern_channel_run = (AgsCopyPatternChannelRun *) g_object_new(AGS_TYPE_COPY_PATTERN_CHANNEL_RUN, NULL); return(copy_pattern_channel_run); } gsequencer-0.6.37/src/ags/audio/recall/ags_mute_audio.c0000644000175000017500000002056212626272146017743 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include void ags_mute_audio_class_init(AgsMuteAudioClass *mute_audio); void ags_mute_audio_connectable_interface_init(AgsConnectableInterface *connectable); void ags_mute_audio_mutable_interface_init(AgsMutableInterface *mutable); void ags_mute_audio_plugin_interface_init(AgsPluginInterface *plugin); void ags_mute_audio_init(AgsMuteAudio *mute_audio); void ags_mute_audio_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_mute_audio_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_mute_audio_connect(AgsConnectable *connectable); void ags_mute_audio_disconnect(AgsConnectable *connectable); void ags_mute_audio_set_ports(AgsPlugin *plugin, GList *port); void ags_mute_audio_finalize(GObject *gobject); void ags_mute_audio_set_muted(AgsMutable *mutable, gboolean muted); /** * SECTION:ags_mute_audio * @short_description: mute audio * @title: AgsMuteAudio * @section_id: * @include: ags/audio/recall/ags_mute_audio.h * * The #AgsMuteAudio class provides ports to the effect processor. */ enum{ PROP_0, PROP_MUTED, }; static gpointer ags_mute_audio_parent_class = NULL; static AgsConnectableInterface *ags_mute_audio_parent_connectable_interface; static AgsMutableInterface *ags_mute_audio_parent_mutable_interface; GType ags_mute_audio_get_type() { static GType ags_type_mute_audio = 0; if(!ags_type_mute_audio){ static const GTypeInfo ags_mute_audio_info = { sizeof (AgsMuteAudioClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_mute_audio_class_init, NULL, /* class_finalize */ NULL, /* class_audio */ sizeof (AgsMuteAudio), 0, /* n_preallocs */ (GInstanceInitFunc) ags_mute_audio_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_mute_audio_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_mutable_interface_info = { (GInterfaceInitFunc) ags_mute_audio_mutable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_plugin_interface_info = { (GInterfaceInitFunc) ags_mute_audio_plugin_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_mute_audio = g_type_register_static(AGS_TYPE_RECALL_AUDIO, "AgsMuteAudio\0", &ags_mute_audio_info, 0); g_type_add_interface_static(ags_type_mute_audio, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_mute_audio, AGS_TYPE_MUTABLE, &ags_mutable_interface_info); g_type_add_interface_static(ags_type_mute_audio, AGS_TYPE_PLUGIN, &ags_plugin_interface_info); } return(ags_type_mute_audio); } void ags_mute_audio_class_init(AgsMuteAudioClass *mute_audio) { GObjectClass *gobject; GParamSpec *param_spec; ags_mute_audio_parent_class = g_type_class_peek_parent(mute_audio); /* GObjectClass */ gobject = (GObjectClass *) mute_audio; gobject->set_property = ags_mute_audio_set_property; gobject->get_property = ags_mute_audio_get_property; gobject->finalize = ags_mute_audio_finalize; /* properties */ param_spec = g_param_spec_object("muted\0", "mute audio\0", "Mute the audio\0", AGS_TYPE_PORT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_MUTED, param_spec); } void ags_mute_audio_connectable_interface_init(AgsConnectableInterface *connectable) { ags_mute_audio_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_mute_audio_connect; connectable->disconnect = ags_mute_audio_disconnect; } void ags_mute_audio_mutable_interface_init(AgsMutableInterface *mutable) { ags_mute_audio_parent_mutable_interface = g_type_interface_peek_parent(mutable); mutable->set_muted = ags_mute_audio_set_muted; } void ags_mute_audio_plugin_interface_init(AgsPluginInterface *plugin) { plugin->set_ports = ags_mute_audio_set_ports; } void ags_mute_audio_init(AgsMuteAudio *mute_audio) { GList *port; AGS_RECALL(mute_audio)->name = "ags-mute\0"; AGS_RECALL(mute_audio)->version = AGS_EFFECTS_DEFAULT_VERSION; AGS_RECALL(mute_audio)->build_id = AGS_BUILD_ID; AGS_RECALL(mute_audio)->xml_type = "ags-mute-audio\0"; port = NULL; mute_audio->muted = g_object_new(AGS_TYPE_PORT, "plugin-name\0", g_strdup("ags-mute\0"), "specifier\0", "./muted[0]\0", "control-port\0", "1/1\0", "port-value-is-pointer\0", FALSE, "port-value-type\0", G_TYPE_BOOLEAN, "port-value-size\0", sizeof(gboolean), "port-value-length\0", 1, NULL); mute_audio->muted->port_value.ags_port_boolean = FALSE; port = g_list_prepend(port, mute_audio->muted); /* */ AGS_RECALL(mute_audio)->port = port; } void ags_mute_audio_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsMuteAudio *mute_audio; mute_audio = AGS_MUTE_AUDIO(gobject); switch(prop_id){ case PROP_MUTED: { AgsPort *port; port = (AgsPort *) g_value_get_object(value); if(port == mute_audio->muted){ return; } if(mute_audio->muted != NULL){ g_object_unref(G_OBJECT(mute_audio->muted)); } if(port != NULL){ g_object_ref(G_OBJECT(port)); } mute_audio->muted = port; } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_mute_audio_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsMuteAudio *mute_audio; mute_audio = AGS_MUTE_AUDIO(gobject); switch(prop_id){ case PROP_MUTED: { g_value_set_object(value, mute_audio->muted); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_mute_audio_connect(AgsConnectable *connectable) { ags_mute_audio_parent_connectable_interface->connect(connectable); /* empty */ } void ags_mute_audio_disconnect(AgsConnectable *connectable) { ags_mute_audio_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_mute_audio_set_ports(AgsPlugin *plugin, GList *port) { while(port != NULL){ if(!strncmp(AGS_PORT(port->data)->specifier, "muted[0]\0", 9)){ g_object_set(G_OBJECT(plugin), "muted\0", AGS_PORT(port->data), NULL); } port = port->next; } } void ags_mute_audio_finalize(GObject *gobject) { AgsMuteAudio *mute_audio; mute_audio = AGS_MUTE_AUDIO(gobject); if(mute_audio->muted != NULL){ g_object_unref(G_OBJECT(mute_audio->muted)); } /* call parent */ G_OBJECT_CLASS(ags_mute_audio_parent_class)->finalize(gobject); } void ags_mute_audio_set_muted(AgsMutable *mutable, gboolean muted) { GValue value = {0,}; g_value_init(&value, G_TYPE_BOOLEAN); g_value_set_boolean(&value, muted); ags_port_safe_write(AGS_MUTE_AUDIO(mutable)->muted, &value); } /** * ags_mute_audio_new: * * Creates an #AgsMuteAudio * * Returns: a new #AgsMuteAudio * * Since: 0.4 */ AgsMuteAudio* ags_mute_audio_new() { AgsMuteAudio *mute_audio; mute_audio = (AgsMuteAudio *) g_object_new(AGS_TYPE_MUTE_AUDIO, NULL); return(mute_audio); } gsequencer-0.6.37/src/ags/audio/recall/ags_peak_channel_run.h0000644000175000017500000000404312612232540021072 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_PEAK_CHANNEL_RUN_H__ #define __AGS_PEAK_CHANNEL_RUN_H__ #include #include #include #include #define AGS_TYPE_PEAK_CHANNEL_RUN (ags_peak_channel_run_get_type()) #define AGS_PEAK_CHANNEL_RUN(obj) (G_TYPE_CHECK_INSTANCE_CAST(obj, AGS_TYPE_PEAK_CHANNEL_RUN, AgsPeakChannelRun)) #define AGS_PEAK_CHANNEL_RUN_CLASS(class) (G_TYPE_CHECK_INSTANCE_CAST(class, AGS_TYPE_PEAK_CHANNEL_RUN, AgsPeakChannelRunClass)) #define AGS_IS_PEAK_CHANNEL_RUN(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_PEAK_CHANNEL_RUN)) #define AGS_IS_PEAK_CHANNEL_RUN_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_PEAK_CHANNEL_RUN)) #define AGS_PEAK_CHANNEL_RUN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_PEAK_CHANNEL_RUN, AgsPeakChannelRunClass)) typedef struct _AgsPeakChannelRun AgsPeakChannelRun; typedef struct _AgsPeakChannelRunClass AgsPeakChannelRunClass; struct _AgsPeakChannelRun { AgsRecallChannelRun recall_channel_run; }; struct _AgsPeakChannelRunClass { AgsRecallChannelRunClass recall_channel_run; }; GType ags_peak_channel_run_get_type(); AgsPeakChannelRun* ags_peak_channel_run_new(AgsChannel *channel); #endif /*__AGS_PEAK_CHANNEL_RUN_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_count_beats_audio_run.h0000644000175000017500000000747612612232540022166 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_COUNT_BEATS_AUDIO_RUN_H__ #define __AGS_COUNT_BEATS_AUDIO_RUN_H__ #include #include #include #include #define AGS_TYPE_COUNT_BEATS_AUDIO_RUN (ags_count_beats_audio_run_get_type()) #define AGS_COUNT_BEATS_AUDIO_RUN(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_COUNT_BEATS_AUDIO_RUN, AgsCountBeatsAudioRun)) #define AGS_COUNT_BEATS_AUDIO_RUN_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_COUNT_BEATS_AUDIO_RUN, AgsCountBeatsAudioRun)) #define AGS_IS_COUNT_BEATS_AUDIO_RUN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_COUNT_BEATS_AUDIO_RUN)) #define AGS_IS_COUNT_BEATS_AUDIO_RUN_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_COUNT_BEATS_AUDIO_RUN)) #define AGS_COUNT_BEATS_AUDIO_RUN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_COUNT_BEATS_AUDIO_RUN, AgsCountBeatsAudioRunClass)) typedef struct _AgsCountBeatsAudioRun AgsCountBeatsAudioRun; typedef struct _AgsCountBeatsAudioRunClass AgsCountBeatsAudioRunClass; struct _AgsCountBeatsAudioRun { AgsRecallAudioRun recall_audio_run; gboolean first_run; guint notation_counter; guint sequencer_counter; guint recall_ref; guint hide_ref; guint notation_hide_ref_counter; guint sequencer_hide_ref_counter; gulong sequencer_alloc_output_handler; gulong sequencer_count_handler; gulong notation_alloc_output_handler; gulong notation_count_handler; AgsDelayAudioRun *delay_audio_run; }; struct _AgsCountBeatsAudioRunClass { AgsRecallAudioRunClass recall_audio_run; void (*notation_start)(AgsCountBeatsAudioRun *count_beats_audio_run, guint run_order); void (*notation_loop)(AgsCountBeatsAudioRun *count_beats_audio_run, guint run_order); void (*notation_stop)(AgsCountBeatsAudioRun *count_beats_audio_run, guint run_order); void (*sequencer_start)(AgsCountBeatsAudioRun *count_beats_audio_run, guint run_order); void (*sequencer_loop)(AgsCountBeatsAudioRun *count_beats_audio_run, guint run_order); void (*sequencer_stop)(AgsCountBeatsAudioRun *count_beats_audio_run, guint run_order); }; GType ags_count_beats_audio_run_get_type(); void ags_count_beats_audio_run_notation_start(AgsCountBeatsAudioRun *count_beats_audio_run, guint run_order); void ags_count_beats_audio_run_notation_loop(AgsCountBeatsAudioRun *count_beats_audio_run, guint run_order); void ags_count_beats_audio_run_notation_stop(AgsCountBeatsAudioRun *count_beats_audio_run, guint run_order); void ags_count_beats_audio_run_sequencer_start(AgsCountBeatsAudioRun *count_beats_audio_run, guint run_order); void ags_count_beats_audio_run_sequencer_loop(AgsCountBeatsAudioRun *count_beats_audio_run, guint run_order); void ags_count_beats_audio_run_sequencer_stop(AgsCountBeatsAudioRun *count_beats_audio_run, guint run_order); AgsCountBeatsAudioRun* ags_count_beats_audio_run_new(AgsDelayAudioRun *delay_audio_run); #endif /*__AGS_COUNT_BEATS_AUDIO_RUN_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_copy_channel_run.h0000644000175000017500000000445612626272146021147 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_COPY_CHANNEL_RUN_H__ #define __AGS_COPY_CHANNEL_RUN_H__ #include #include #include #include #include #define AGS_TYPE_COPY_CHANNEL_RUN (ags_copy_channel_run_get_type()) #define AGS_COPY_CHANNEL_RUN(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_COPY_CHANNEL_RUN, AgsCopyChannelRun)) #define AGS_COPY_CHANNEL_RUN_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_COPY_CHANNEL_RUN, AgsCopyChannelRunClass)) #define AGS_IS_COPY_CHANNEL_RUN(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_COPY_CHANNEL_RUN)) #define AGS_IS_COPY_CHANNEL_RUN_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_COPY_CHANNEL_RUN)) #define AGS_COPY_CHANNEL_RUN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_COPY_CHANNEL_RUN, AgsCopyChannelRunClass)) typedef struct _AgsCopyChannelRun AgsCopyChannelRun; typedef struct _AgsCopyChannelRunClass AgsCopyChannelRunClass; typedef enum{ AGS_COPY_CHANNEL_RUN_EXACT_LENGTH = 1, AGS_COPY_CHANNEL_RUN_OMIT_FURTHER_ATTACK = 1 << 1, }AgsCopyChannelRunFlags; struct _AgsCopyChannelRun { AgsRecallChannelRun recall_channel_run; guint flags; }; struct _AgsCopyChannelRunClass { AgsRecallChannelRunClass recall_channel_run; }; GType ags_copy_channel_run_get_type(); AgsCopyChannelRun* ags_copy_channel_run_new(AgsChannel *destination, AgsChannel *source, AgsDevout *devout); #endif /*__AGS_COPY_CHANNEL_RUN_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_stream_channel_run.h0000644000175000017500000000414112612232540021444 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_STREAM_CHANNEL_RUN_H__ #define __AGS_STREAM_CHANNEL_RUN_H__ #include #include #include #include #define AGS_TYPE_STREAM_CHANNEL_RUN (ags_stream_channel_run_get_type()) #define AGS_STREAM_CHANNEL_RUN(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_STREAM_CHANNEL_RUN, AgsStreamChannelRun)) #define AGS_STREAM_CHANNEL_RUN_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_STREAM_CHANNEL_RUN, AgsStreamChannelRunClass)) #define AGS_IS_STREAM_CHANNEL_RUN(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_STREAM_CHANNEL_RUN)) #define AGS_IS_STREAM_CHANNEL_RUN_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_STREAM_CHANNEL_RUN)) #define AGS_STREAM_CHANNEL_RUN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_STREAM_CHANNEL_RUN, AgsStreamChannelRunClass)) typedef struct _AgsStreamChannelRun AgsStreamChannelRun; typedef struct _AgsStreamChannelRunClass AgsStreamChannelRunClass; struct _AgsStreamChannelRun { AgsRecallChannelRun recall_channel_run; }; struct _AgsStreamChannelRunClass { AgsRecallChannelRunClass recall_channel_run; }; GType ags_stream_channel_run_get_type(); AgsStreamChannelRun* ags_stream_channel_run_new(); #endif /*__AGS_STREAM_CHANNEL_RUN_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_copy_pattern_channel.h0000644000175000017500000000463212621463700022005 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_COPY_PATTERN_CHANNEL_H__ #define __AGS_COPY_PATTERN_CHANNEL_H__ #include #include #include #include #include #define AGS_TYPE_COPY_PATTERN_CHANNEL (ags_copy_pattern_channel_get_type()) #define AGS_COPY_PATTERN_CHANNEL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_COPY_PATTERN_CHANNEL, AgsCopyPatternChannel)) #define AGS_COPY_PATTERN_CHANNEL_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_COPY_PATTERN_CHANNEL, AgsCopyPatternChannel)) #define AGS_IS_COPY_PATTERN_CHANNEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_COPY_PATTERN_CHANNEL)) #define AGS_IS_COPY_PATTERN_CHANNEL_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_COPY_PATTERN_CHANNEL)) #define AGS_COPY_PATTERN_CHANNEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_COPY_PATTERN_CHANNEL, AgsCopyPatternChannelClass)) typedef struct _AgsCopyPatternChannel AgsCopyPatternChannel; typedef struct _AgsCopyPatternChannelClass AgsCopyPatternChannelClass; struct _AgsCopyPatternChannel { AgsRecallChannel recall_channel; AgsPort *pattern; }; struct _AgsCopyPatternChannelClass { AgsRecallChannelClass recall_channel; }; GType ags_copy_pattern_channel_get_type(); GList* ags_copy_pattern_channel_template_find_source_and_destination(GList *recall, AgsChannel *destination, AgsChannel *source); AgsCopyPatternChannel* ags_copy_pattern_channel_new(AgsChannel *destination, AgsChannel *source, AgsPort *pattern); #endif /*__AGS_COPY_PATTERN_CHANNEL_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_stream_recycling.c0000644000175000017500000002161412626272146021141 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include void ags_stream_recycling_class_init(AgsStreamRecyclingClass *stream_recycling); void ags_stream_recycling_connectable_interface_init(AgsConnectableInterface *connectable); void ags_stream_recycling_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable); void ags_stream_recycling_init(AgsStreamRecycling *stream_recycling); void ags_stream_recycling_connect(AgsConnectable *connectable); void ags_stream_recycling_disconnect(AgsConnectable *connectable); void ags_stream_recycling_connect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_stream_recycling_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_stream_recycling_finalize(GObject *gobject); AgsRecall* ags_stream_recycling_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter); void ags_stream_recycling_source_add_audio_signal_callback(AgsRecycling *source, AgsAudioSignal *audio_signal, AgsStreamRecycling *stream_recycling); void ags_stream_recycling_source_remove_audio_signal_callback(AgsRecycling *source, AgsAudioSignal *audio_signal, AgsStreamRecycling *stream_recycling); /** * SECTION:ags_stream_recycling * @short_description: streams recycling * @title: AgsStreamRecycling * @section_id: * @include: ags/audio/recall/ags_stream_recycling.h * * The #AgsStreamRecycling streams the recycling with appropriate #AgsRecallID. */ static gpointer ags_stream_recycling_parent_class = NULL; static AgsConnectableInterface *ags_stream_recycling_parent_connectable_interface; static AgsDynamicConnectableInterface *ags_stream_recycling_parent_dynamic_connectable_interface; GType ags_stream_recycling_get_type() { static GType ags_type_stream_recycling = 0; if(!ags_type_stream_recycling){ static const GTypeInfo ags_stream_recycling_info = { sizeof (AgsStreamRecyclingClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_stream_recycling_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsStreamRecycling), 0, /* n_preallocs */ (GInstanceInitFunc) ags_stream_recycling_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_stream_recycling_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_dynamic_connectable_interface_info = { (GInterfaceInitFunc) ags_stream_recycling_dynamic_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_stream_recycling = g_type_register_static(AGS_TYPE_RECALL_RECYCLING, "AgsStreamRecycling\0", &ags_stream_recycling_info, 0); g_type_add_interface_static(ags_type_stream_recycling, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_stream_recycling, AGS_TYPE_DYNAMIC_CONNECTABLE, &ags_dynamic_connectable_interface_info); } return (ags_type_stream_recycling); } void ags_stream_recycling_class_init(AgsStreamRecyclingClass *stream_recycling) { GObjectClass *gobject; AgsRecallClass *recall; GParamSpec *param_spec; ags_stream_recycling_parent_class = g_type_class_peek_parent(stream_recycling); /* GObjectClass */ gobject = (GObjectClass *) stream_recycling; gobject->finalize = ags_stream_recycling_finalize; /* AgsRecallClass */ recall = (AgsRecallClass *) stream_recycling; recall->duplicate = ags_stream_recycling_duplicate; } void ags_stream_recycling_connectable_interface_init(AgsConnectableInterface *connectable) { ags_stream_recycling_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_stream_recycling_connect; connectable->disconnect = ags_stream_recycling_disconnect; } void ags_stream_recycling_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable) { ags_stream_recycling_parent_dynamic_connectable_interface = g_type_interface_peek_parent(dynamic_connectable); dynamic_connectable->connect_dynamic = ags_stream_recycling_connect_dynamic; dynamic_connectable->disconnect_dynamic = ags_stream_recycling_disconnect_dynamic; } void ags_stream_recycling_init(AgsStreamRecycling *stream_recycling) { AGS_RECALL(stream_recycling)->name = "ags-stream\0"; AGS_RECALL(stream_recycling)->version = AGS_EFFECTS_DEFAULT_VERSION; AGS_RECALL(stream_recycling)->build_id = AGS_BUILD_ID; AGS_RECALL(stream_recycling)->xml_type = "ags-stream-recycling\0"; AGS_RECALL(stream_recycling)->port = NULL; AGS_RECALL(stream_recycling)->child_type = AGS_TYPE_STREAM_AUDIO_SIGNAL; AGS_RECALL_RECYCLING(stream_recycling)->flags |= (AGS_RECALL_RECYCLING_MAP_CHILD_SOURCE); } void ags_stream_recycling_finalize(GObject *gobject) { /* empty */ /* call parent */ G_OBJECT_CLASS(ags_stream_recycling_parent_class)->finalize(gobject); } void ags_stream_recycling_connect(AgsConnectable *connectable) { AgsStreamRecycling *stream_recycling; stream_recycling = AGS_STREAM_RECYCLING(connectable); ags_stream_recycling_parent_connectable_interface->connect(connectable); // g_signal_connect(AGS_RECALL_RECYCLING(stream_recycling)->source, "add_audio_signal\0", // G_CALLBACK(ags_stream_recycling_source_add_audio_signal_callback), stream_recycling); // g_signal_connect(AGS_RECALL_RECYCLING(stream_recycling)->source, "remove_audio_signal\0", // G_CALLBACK(ags_stream_recycling_source_remove_audio_signal_callback), stream_recycling); } void ags_stream_recycling_disconnect(AgsConnectable *connectable) { ags_stream_recycling_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_stream_recycling_connect_dynamic(AgsDynamicConnectable *dynamic_connectable) { AgsStreamRecycling *stream_recycling; ags_stream_recycling_parent_dynamic_connectable_interface->connect_dynamic(dynamic_connectable); } void ags_stream_recycling_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable) { ags_stream_recycling_parent_dynamic_connectable_interface->disconnect_dynamic(dynamic_connectable); } AgsRecall* ags_stream_recycling_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter) { AgsStreamRecycling *copy; copy = (AgsStreamRecycling *) AGS_RECALL_CLASS(ags_stream_recycling_parent_class)->duplicate(recall, recall_id, n_params, parameter); return((AgsRecall *) copy); } void ags_stream_recycling_source_add_audio_signal_callback(AgsRecycling *source, AgsAudioSignal *audio_signal, AgsStreamRecycling *stream_recycling) { // g_object_ref(audio_signal); } void ags_stream_recycling_source_remove_audio_signal_callback(AgsRecycling *source, AgsAudioSignal *audio_signal, AgsStreamRecycling *stream_recycling) { AgsRemoveAudioSignal *remove_audio_signal; // AgsTaskThread *task_thread; // AgsUnrefAudioSignal *unref_audio_signal; // task_thread = AGS_AUDIO_LOOP(AGS_MAIN(AGS_DEVOUT(AGS_RECALL(gobject)->devout)->ags_main)->main_loop)->task_thread; // unref_audio_signal = ags_unref_audio_signal_new(AGS_RECALL_AUDIO_SIGNAL(gobject)->source); // ags_task_thread_append_task(task_thread, // unref_audio_signal); } /** * ags_stream_recycling_new: * @recycling: the #AgsRecycling * * Creates an #AgsStreamRecycling * * Returns: a new #AgsStreamRecycling * * Since: 0.4 */ AgsStreamRecycling* ags_stream_recycling_new(AgsRecycling *recycling) { AgsStreamRecycling *stream_recycling; stream_recycling = (AgsStreamRecycling *) g_object_new(AGS_TYPE_STREAM_RECYCLING, "source\0", recycling, NULL); return(stream_recycling); } gsequencer-0.6.37/src/ags/audio/recall/ags_copy_recycling.c0000644000175000017500000002041212626272146020613 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include void ags_copy_recycling_class_init(AgsCopyRecyclingClass *copy_recycling); void ags_copy_recycling_connectable_interface_init(AgsConnectableInterface *connectable); void ags_copy_recycling_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable); void ags_copy_recycling_init(AgsCopyRecycling *copy_recycling); void ags_copy_recycling_connect(AgsConnectable *connectable); void ags_copy_recycling_disconnect(AgsConnectable *connectable); void ags_copy_recycling_connect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_copy_recycling_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_copy_recycling_finalize(GObject *gobject); void ags_copy_recycling_done(AgsRecall *recall); void ags_copy_recycling_cancel(AgsRecall *recall); void ags_copy_recycling_remove(AgsRecall *recall); AgsRecall* ags_copy_recycling_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter); /** * SECTION:ags_copy_recycling * @short_description: copys recycling * @title: AgsCopyRecycling * @section_id: * @include: ags/audio/recall/ags_copy_recycling.h * * The #AgsCopyRecycling class copys the recycling. */ static gpointer ags_copy_recycling_parent_class = NULL; static AgsConnectableInterface *ags_copy_recycling_parent_connectable_interface; static AgsDynamicConnectableInterface *ags_copy_recycling_parent_dynamic_connectable_interface; GType ags_copy_recycling_get_type() { static GType ags_type_copy_recycling = 0; if(!ags_type_copy_recycling){ static const GTypeInfo ags_copy_recycling_info = { sizeof (AgsCopyRecyclingClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_copy_recycling_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsCopyRecycling), 0, /* n_preallocs */ (GInstanceInitFunc) ags_copy_recycling_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_copy_recycling_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_dynamic_connectable_interface_info = { (GInterfaceInitFunc) ags_copy_recycling_dynamic_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_copy_recycling = g_type_register_static(AGS_TYPE_RECALL_RECYCLING, "AgsCopyRecycling\0", &ags_copy_recycling_info, 0); g_type_add_interface_static(ags_type_copy_recycling, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_copy_recycling, AGS_TYPE_DYNAMIC_CONNECTABLE, &ags_dynamic_connectable_interface_info); } return(ags_type_copy_recycling); } void ags_copy_recycling_class_init(AgsCopyRecyclingClass *copy_recycling) { GObjectClass *gobject; AgsRecallClass *recall; AgsRecallRecyclingClass *recall_recycling; ags_copy_recycling_parent_class = g_type_class_peek_parent(copy_recycling); /* GObjectClass */ gobject = (GObjectClass *) copy_recycling; gobject->finalize = ags_copy_recycling_finalize; /* AgsRecallClass */ recall = (AgsRecallClass *) copy_recycling; recall->done = ags_copy_recycling_done; recall->cancel = ags_copy_recycling_cancel; recall->remove = ags_copy_recycling_remove; recall->duplicate = ags_copy_recycling_duplicate; /* AgsRecallRecycling */ recall_recycling = (AgsRecallRecyclingClass *) copy_recycling; } void ags_copy_recycling_connectable_interface_init(AgsConnectableInterface *connectable) { ags_copy_recycling_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_copy_recycling_connect; connectable->disconnect = ags_copy_recycling_disconnect; } void ags_copy_recycling_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable) { ags_copy_recycling_parent_dynamic_connectable_interface = g_type_interface_peek_parent(dynamic_connectable); dynamic_connectable->connect_dynamic = ags_copy_recycling_connect_dynamic; dynamic_connectable->disconnect_dynamic = ags_copy_recycling_disconnect_dynamic; } void ags_copy_recycling_init(AgsCopyRecycling *copy_recycling) { AGS_RECALL(copy_recycling)->name = "ags-copy\0"; AGS_RECALL(copy_recycling)->version = AGS_EFFECTS_DEFAULT_VERSION; AGS_RECALL(copy_recycling)->build_id = AGS_BUILD_ID; AGS_RECALL(copy_recycling)->xml_type = "ags-copy-recycling\0"; AGS_RECALL(copy_recycling)->port = NULL; AGS_RECALL(copy_recycling)->child_type = AGS_TYPE_COPY_AUDIO_SIGNAL; AGS_RECALL_RECYCLING(copy_recycling)->flags |= AGS_RECALL_RECYCLING_MAP_CHILD_DESTINATION; } void ags_copy_recycling_finalize(GObject *gobject) { AgsCopyRecycling *copy_recycling; copy_recycling = AGS_COPY_RECYCLING(gobject); /* empty */ /* call parent */ G_OBJECT_CLASS(ags_copy_recycling_parent_class)->finalize(gobject); } void ags_copy_recycling_connect(AgsConnectable *connectable) { AgsCopyRecycling *copy_recycling; ags_copy_recycling_parent_connectable_interface->connect(connectable); /* empty */ } void ags_copy_recycling_disconnect(AgsConnectable *connectable) { AgsCopyRecycling *copy_recycling; ags_copy_recycling_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_copy_recycling_connect_dynamic(AgsDynamicConnectable *dynamic_connectable) { AgsCopyRecycling *copy_recycling; GObject *gobject; ags_copy_recycling_parent_dynamic_connectable_interface->connect_dynamic(dynamic_connectable); } void ags_copy_recycling_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable) { AgsCopyRecycling *copy_recycling; GObject *gobject; ags_copy_recycling_parent_dynamic_connectable_interface->connect_dynamic(dynamic_connectable); /* empty */ } void ags_copy_recycling_done(AgsRecall *recall) { AGS_RECALL_CLASS(ags_copy_recycling_parent_class)->done(recall); /* empty */ } void ags_copy_recycling_cancel(AgsRecall *recall) { AGS_RECALL_CLASS(ags_copy_recycling_parent_class)->cancel(recall); /* empty */ } void ags_copy_recycling_remove(AgsRecall *recall) { AGS_RECALL_CLASS(ags_copy_recycling_parent_class)->remove(recall); /* empty */ } AgsRecall* ags_copy_recycling_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter) { AgsCopyRecycling *copy_recycling, *copy; copy_recycling = (AgsCopyRecycling *) recall; copy = (AgsCopyRecycling *) AGS_RECALL_CLASS(ags_copy_recycling_parent_class)->duplicate(recall, recall_id, n_params, parameter); return((AgsRecall *) copy); } /** * ags_copy_recycling_new: * @destination: the destination #AgsRecycling * @source: the source #AgsRecycling * @devout: the #AgsDevout defaulting to * * Creates an #AgsCopyRecycling * * Returns: a new #AgsCopyRecycling * * Since: 0.4 */ AgsCopyRecycling* ags_copy_recycling_new(AgsRecycling *destination, AgsRecycling *source, AgsDevout *devout) { AgsCopyRecycling *copy_recycling; copy_recycling = (AgsCopyRecycling *) g_object_new(AGS_TYPE_COPY_RECYCLING, "devout\0", devout, "destination\0", destination, "source\0", source, NULL); return(copy_recycling); } gsequencer-0.6.37/src/ags/audio/recall/ags_synths.h0000644000175000017500000000140312626272146017136 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ gsequencer-0.6.37/src/ags/audio/recall/ags_envelope_recycling.c0000644000175000017500000002071212626272146021461 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include void ags_envelope_recycling_class_init(AgsEnvelopeRecyclingClass *envelope_recycling); void ags_envelope_recycling_connectable_interface_init(AgsConnectableInterface *connectable); void ags_envelope_recycling_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable); void ags_envelope_recycling_init(AgsEnvelopeRecycling *envelope_recycling); void ags_envelope_recycling_connect(AgsConnectable *connectable); void ags_envelope_recycling_disconnect(AgsConnectable *connectable); void ags_envelope_recycling_connect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_envelope_recycling_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_envelope_recycling_finalize(GObject *gobject); void ags_envelope_recycling_done(AgsRecall *recall); void ags_envelope_recycling_cancel(AgsRecall *recall); void ags_envelope_recycling_remove(AgsRecall *recall); AgsRecall* ags_envelope_recycling_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter); /** * SECTION:ags_envelope_recycling * @short_description: envelopes recycling * @title: AgsEnvelopeRecycling * @section_id: * @include: ags/audio/recall/ags_envelope_recycling.h * * The #AgsEnvelopeRecycling class envelopes the recycling. */ static gpointer ags_envelope_recycling_parent_class = NULL; static AgsConnectableInterface *ags_envelope_recycling_parent_connectable_interface; static AgsDynamicConnectableInterface *ags_envelope_recycling_parent_dynamic_connectable_interface; GType ags_envelope_recycling_get_type() { static GType ags_type_envelope_recycling = 0; if(!ags_type_envelope_recycling){ static const GTypeInfo ags_envelope_recycling_info = { sizeof (AgsEnvelopeRecyclingClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_envelope_recycling_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsEnvelopeRecycling), 0, /* n_preallocs */ (GInstanceInitFunc) ags_envelope_recycling_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_envelope_recycling_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_dynamic_connectable_interface_info = { (GInterfaceInitFunc) ags_envelope_recycling_dynamic_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_envelope_recycling = g_type_register_static(AGS_TYPE_RECALL_RECYCLING, "AgsEnvelopeRecycling\0", &ags_envelope_recycling_info, 0); g_type_add_interface_static(ags_type_envelope_recycling, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_envelope_recycling, AGS_TYPE_DYNAMIC_CONNECTABLE, &ags_dynamic_connectable_interface_info); } return(ags_type_envelope_recycling); } void ags_envelope_recycling_class_init(AgsEnvelopeRecyclingClass *envelope_recycling) { GObjectClass *gobject; AgsRecallClass *recall; AgsRecallRecyclingClass *recall_recycling; ags_envelope_recycling_parent_class = g_type_class_peek_parent(envelope_recycling); /* GObjectClass */ gobject = (GObjectClass *) envelope_recycling; gobject->finalize = ags_envelope_recycling_finalize; /* AgsRecallClass */ recall = (AgsRecallClass *) envelope_recycling; recall->done = ags_envelope_recycling_done; recall->cancel = ags_envelope_recycling_cancel; recall->remove = ags_envelope_recycling_remove; recall->duplicate = ags_envelope_recycling_duplicate; /* AgsRecallRecycling */ recall_recycling = (AgsRecallRecyclingClass *) envelope_recycling; } void ags_envelope_recycling_connectable_interface_init(AgsConnectableInterface *connectable) { ags_envelope_recycling_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_envelope_recycling_connect; connectable->disconnect = ags_envelope_recycling_disconnect; } void ags_envelope_recycling_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable) { ags_envelope_recycling_parent_dynamic_connectable_interface = g_type_interface_peek_parent(dynamic_connectable); dynamic_connectable->connect_dynamic = ags_envelope_recycling_connect_dynamic; dynamic_connectable->disconnect_dynamic = ags_envelope_recycling_disconnect_dynamic; } void ags_envelope_recycling_init(AgsEnvelopeRecycling *envelope_recycling) { AGS_RECALL(envelope_recycling)->name = "ags-envelope\0"; AGS_RECALL(envelope_recycling)->version = AGS_EFFECTS_DEFAULT_VERSION; AGS_RECALL(envelope_recycling)->build_id = AGS_BUILD_ID; AGS_RECALL(envelope_recycling)->xml_type = "ags-envelope-recycling\0"; AGS_RECALL(envelope_recycling)->port = NULL; AGS_RECALL(envelope_recycling)->child_type = AGS_TYPE_ENVELOPE_AUDIO_SIGNAL; } void ags_envelope_recycling_finalize(GObject *gobject) { AgsEnvelopeRecycling *envelope_recycling; envelope_recycling = AGS_ENVELOPE_RECYCLING(gobject); /* empty */ /* call parent */ G_OBJECT_CLASS(ags_envelope_recycling_parent_class)->finalize(gobject); } void ags_envelope_recycling_connect(AgsConnectable *connectable) { AgsEnvelopeRecycling *envelope_recycling; ags_envelope_recycling_parent_connectable_interface->connect(connectable); /* empty */ } void ags_envelope_recycling_disconnect(AgsConnectable *connectable) { AgsEnvelopeRecycling *envelope_recycling; ags_envelope_recycling_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_envelope_recycling_connect_dynamic(AgsDynamicConnectable *dynamic_connectable) { AgsEnvelopeRecycling *envelope_recycling; GObject *gobject; ags_envelope_recycling_parent_dynamic_connectable_interface->connect_dynamic(dynamic_connectable); } void ags_envelope_recycling_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable) { AgsEnvelopeRecycling *envelope_recycling; GObject *gobject; ags_envelope_recycling_parent_dynamic_connectable_interface->connect_dynamic(dynamic_connectable); /* empty */ } void ags_envelope_recycling_done(AgsRecall *recall) { AGS_RECALL_CLASS(ags_envelope_recycling_parent_class)->done(recall); /* empty */ } void ags_envelope_recycling_cancel(AgsRecall *recall) { AGS_RECALL_CLASS(ags_envelope_recycling_parent_class)->cancel(recall); /* empty */ } void ags_envelope_recycling_remove(AgsRecall *recall) { AGS_RECALL_CLASS(ags_envelope_recycling_parent_class)->remove(recall); /* empty */ } AgsRecall* ags_envelope_recycling_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter) { AgsEnvelopeRecycling *envelope_recycling, *envelope; envelope_recycling = (AgsEnvelopeRecycling *) recall; envelope = (AgsEnvelopeRecycling *) AGS_RECALL_CLASS(ags_envelope_recycling_parent_class)->duplicate(recall, recall_id, n_params, parameter); return((AgsRecall *) envelope); } /** * ags_envelope_recycling_new: * @source: the source #AgsRecycling * * Creates an #AgsEnvelopeRecycling * * Returns: a new #AgsEnvelopeRecycling * * Since: 0.6 */ AgsEnvelopeRecycling* ags_envelope_recycling_new(AgsRecycling *source) { AgsEnvelopeRecycling *envelope_recycling; envelope_recycling = (AgsEnvelopeRecycling *) g_object_new(AGS_TYPE_ENVELOPE_RECYCLING, "source\0", source, NULL); return(envelope_recycling); } gsequencer-0.6.37/src/ags/audio/recall/ags_stream_audio_signal.h0000644000175000017500000000415612612232540021614 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_STREAM_AUDIO_SIGNAL_H__ #define __AGS_STREAM_AUDIO_SIGNAL_H__ #include #include #include #define AGS_TYPE_STREAM_AUDIO_SIGNAL (ags_stream_audio_signal_get_type()) #define AGS_STREAM_AUDIO_SIGNAL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_STREAM_AUDIO_SIGNAL, AgsStreamAudioSignal)) #define AGS_STREAM_AUDIO_SIGNAL_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_STREAM_AUDIO_SIGNAL, AgsStreamAudioSignalClass)) #define AGS_IS_STREAM_AUDIO_SIGNAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_STREAM_AUDIO_SIGNAL)) #define AGS_IS_STREAM_AUDIO_SIGNAL_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_STREAM_AUDIO_SIGNAL)) #define AGS_STREAM_AUDIO_SIGNAL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_STREAM_AUDIO_SIGNAL, AgsStreamAudioSignalClass)) typedef struct _AgsStreamAudioSignal AgsStreamAudioSignal; typedef struct _AgsStreamAudioSignalClass AgsStreamAudioSignalClass; struct _AgsStreamAudioSignal { AgsRecallAudioSignal recall_audio_signal; }; struct _AgsStreamAudioSignalClass { AgsRecallAudioSignalClass recall_audio_signal; }; GType ags_stream_audio_signal_get_type(); AgsStreamAudioSignal* ags_stream_audio_signal_new(AgsAudioSignal *audio_signal); #endif /*__AGS_STREAM_AUDIO_SIGNAL_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_mute_recycling.c0000644000175000017500000001771512626272146020627 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include void ags_mute_recycling_class_init(AgsMuteRecyclingClass *mute_recycling); void ags_mute_recycling_connectable_interface_init(AgsConnectableInterface *connectable); void ags_mute_recycling_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable); void ags_mute_recycling_init(AgsMuteRecycling *mute_recycling); void ags_mute_recycling_connect(AgsConnectable *connectable); void ags_mute_recycling_disconnect(AgsConnectable *connectable); void ags_mute_recycling_connect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_mute_recycling_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_mute_recycling_finalize(GObject *gobject); void ags_mute_recycling_done(AgsRecall *recall); void ags_mute_recycling_cancel(AgsRecall *recall); void ags_mute_recycling_remove(AgsRecall *recall); AgsRecall* ags_mute_recycling_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter); /** * SECTION:ags_mute_recycling * @short_description: mutes recycling * @title: AgsMuteRecycling * @section_id: * @include: ags/audio/recall/ags_mute_recycling.h * * The #AgsMuteRecycling class mutes the recycling. */ static gpointer ags_mute_recycling_parent_class = NULL; static AgsConnectableInterface *ags_mute_recycling_parent_connectable_interface; static AgsDynamicConnectableInterface *ags_mute_recycling_parent_dynamic_connectable_interface; GType ags_mute_recycling_get_type() { static GType ags_type_mute_recycling = 0; if(!ags_type_mute_recycling){ static const GTypeInfo ags_mute_recycling_info = { sizeof (AgsMuteRecyclingClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_mute_recycling_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsMuteRecycling), 0, /* n_preallocs */ (GInstanceInitFunc) ags_mute_recycling_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_mute_recycling_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_dynamic_connectable_interface_info = { (GInterfaceInitFunc) ags_mute_recycling_dynamic_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_mute_recycling = g_type_register_static(AGS_TYPE_RECALL_RECYCLING, "AgsMuteRecycling\0", &ags_mute_recycling_info, 0); g_type_add_interface_static(ags_type_mute_recycling, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_mute_recycling, AGS_TYPE_DYNAMIC_CONNECTABLE, &ags_dynamic_connectable_interface_info); } return(ags_type_mute_recycling); } void ags_mute_recycling_class_init(AgsMuteRecyclingClass *mute_recycling) { GObjectClass *gobject; AgsRecallClass *recall; AgsRecallRecyclingClass *recall_recycling; ags_mute_recycling_parent_class = g_type_class_peek_parent(mute_recycling); /* GObjectClass */ gobject = (GObjectClass *) mute_recycling; gobject->finalize = ags_mute_recycling_finalize; /* AgsRecallClass */ recall = (AgsRecallClass *) mute_recycling; recall->done = ags_mute_recycling_done; recall->cancel = ags_mute_recycling_cancel; recall->remove = ags_mute_recycling_remove; recall->duplicate = ags_mute_recycling_duplicate; /* AgsRecallRecycling */ recall_recycling = (AgsRecallRecyclingClass *) mute_recycling; } void ags_mute_recycling_connectable_interface_init(AgsConnectableInterface *connectable) { ags_mute_recycling_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_mute_recycling_connect; connectable->disconnect = ags_mute_recycling_disconnect; } void ags_mute_recycling_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable) { ags_mute_recycling_parent_dynamic_connectable_interface = g_type_interface_peek_parent(dynamic_connectable); dynamic_connectable->connect_dynamic = ags_mute_recycling_connect_dynamic; dynamic_connectable->disconnect_dynamic = ags_mute_recycling_disconnect_dynamic; } void ags_mute_recycling_init(AgsMuteRecycling *mute_recycling) { AGS_RECALL(mute_recycling)->name = "ags-mute\0"; AGS_RECALL(mute_recycling)->version = AGS_EFFECTS_DEFAULT_VERSION; AGS_RECALL(mute_recycling)->build_id = AGS_BUILD_ID; AGS_RECALL(mute_recycling)->xml_type = "ags-mute-recycling\0"; AGS_RECALL(mute_recycling)->port = NULL; AGS_RECALL(mute_recycling)->child_type = AGS_TYPE_MUTE_AUDIO_SIGNAL; } void ags_mute_recycling_finalize(GObject *gobject) { AgsMuteRecycling *mute_recycling; mute_recycling = AGS_MUTE_RECYCLING(gobject); /* empty */ /* call parent */ G_OBJECT_CLASS(ags_mute_recycling_parent_class)->finalize(gobject); } void ags_mute_recycling_connect(AgsConnectable *connectable) { AgsMuteRecycling *mute_recycling; ags_mute_recycling_parent_connectable_interface->connect(connectable); /* empty */ } void ags_mute_recycling_disconnect(AgsConnectable *connectable) { AgsMuteRecycling *mute_recycling; ags_mute_recycling_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_mute_recycling_connect_dynamic(AgsDynamicConnectable *dynamic_connectable) { AgsMuteRecycling *mute_recycling; GObject *gobject; ags_mute_recycling_parent_dynamic_connectable_interface->connect_dynamic(dynamic_connectable); } void ags_mute_recycling_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable) { AgsMuteRecycling *mute_recycling; GObject *gobject; ags_mute_recycling_parent_dynamic_connectable_interface->connect_dynamic(dynamic_connectable); /* empty */ } void ags_mute_recycling_done(AgsRecall *recall) { AGS_RECALL_CLASS(ags_mute_recycling_parent_class)->done(recall); /* empty */ } void ags_mute_recycling_cancel(AgsRecall *recall) { AGS_RECALL_CLASS(ags_mute_recycling_parent_class)->cancel(recall); /* empty */ } void ags_mute_recycling_remove(AgsRecall *recall) { AGS_RECALL_CLASS(ags_mute_recycling_parent_class)->remove(recall); /* empty */ } AgsRecall* ags_mute_recycling_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter) { AgsMuteRecycling *mute_recycling, *mute; mute_recycling = (AgsMuteRecycling *) recall; mute = (AgsMuteRecycling *) AGS_RECALL_CLASS(ags_mute_recycling_parent_class)->duplicate(recall, recall_id, n_params, parameter); return((AgsRecall *) mute); } /** * ags_mute_recycling_new: * @source: the source #AgsRecycling * * Creates an #AgsMuteRecycling * * Returns: a new #AgsMuteRecycling * * Since: 0.4 */ AgsMuteRecycling* ags_mute_recycling_new(AgsRecycling *source) { AgsMuteRecycling *mute_recycling; mute_recycling = (AgsMuteRecycling *) g_object_new(AGS_TYPE_MUTE_RECYCLING, "source\0", source, NULL); return(mute_recycling); } gsequencer-0.6.37/src/ags/audio/recall/ags_loop_channel_run.c0000644000175000017500000005437112626272146021142 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void ags_loop_channel_run_class_init(AgsLoopChannelRunClass *loop_channel_run); void ags_loop_channel_run_connectable_interface_init(AgsConnectableInterface *connectable); void ags_loop_channel_run_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable); void ags_loop_channel_run_plugin_interface_init(AgsPluginInterface *plugin); void ags_loop_channel_run_init(AgsLoopChannelRun *loop_channel_run); void ags_loop_channel_run_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_loop_channel_run_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_loop_channel_run_finalize(GObject *gobject); void ags_loop_channel_run_connect(AgsConnectable *connectable); void ags_loop_channel_run_disconnect(AgsConnectable *connectable); void ags_loop_channel_run_connect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_loop_channel_run_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_loop_channel_run_read(AgsFile *file, xmlNode *node, AgsPlugin *plugin); xmlNode* ags_loop_channel_run_write(AgsFile *file, xmlNode *parent, AgsPlugin *plugin); void ags_loop_channel_run_resolve_dependencies(AgsRecall *recall); AgsRecall* ags_loop_channel_run_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter); void ags_loop_channel_run_start_callback(AgsCountBeatsAudioRun *count_beats_audio_run, guint run_order, AgsLoopChannelRun *loop_channel_run); void ags_loop_channel_run_loop_callback(AgsCountBeatsAudioRun *count_beats_audio_run, guint run_order, AgsLoopChannelRun *loop_channel_run); void ags_loop_channel_run_stop_callback(AgsCountBeatsAudioRun *count_beats_audio_run, guint run_order, AgsLoopChannelRun *loop_channel_run); void ags_loop_channel_run_write_resolve_dependency(AgsFileLookup *file_lookup, GObject *recall); void ags_loop_channel_run_read_resolve_dependency(AgsFileLookup *file_lookup, GObject *recall); /** * SECTION:ags_loop_channel_run * @short_description: loop * @title: AgsLoopChannelRun * @section_id: * @include: ags/audio/recall/ags_loop_channel_run.h * * The #AgsLoopChannelRun class loops the channel. */ enum{ PROP_0, PROP_COUNT_BEATS_AUDIO_RUN, }; static gpointer ags_loop_channel_run_parent_class = NULL; static AgsConnectableInterface *ags_loop_channel_run_parent_connectable_interface; static AgsDynamicConnectableInterface *ags_loop_channel_run_parent_dynamic_connectable_interface; static AgsPluginInterface *ags_loop_channel_run_parent_plugin_interface; GType ags_loop_channel_run_get_type() { static GType ags_type_loop_channel_run = 0; if(!ags_type_loop_channel_run){ static const GTypeInfo ags_loop_channel_run_info = { sizeof (AgsLoopChannelRunClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_loop_channel_run_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsLoopChannelRun), 0, /* n_preallocs */ (GInstanceInitFunc) ags_loop_channel_run_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_loop_channel_run_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_dynamic_connectable_interface_info = { (GInterfaceInitFunc) ags_loop_channel_run_dynamic_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_plugin_interface_info = { (GInterfaceInitFunc) ags_loop_channel_run_plugin_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_loop_channel_run = g_type_register_static(AGS_TYPE_RECALL_CHANNEL_RUN, "AgsLoopChannelRun\0", &ags_loop_channel_run_info, 0); g_type_add_interface_static(ags_type_loop_channel_run, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_loop_channel_run, AGS_TYPE_DYNAMIC_CONNECTABLE, &ags_dynamic_connectable_interface_info); g_type_add_interface_static(ags_type_loop_channel_run, AGS_TYPE_PLUGIN, &ags_plugin_interface_info); } return (ags_type_loop_channel_run); } void ags_loop_channel_run_class_init(AgsLoopChannelRunClass *loop_channel_run) { GObjectClass *gobject; AgsRecallClass *recall; GParamSpec *param_spec; ags_loop_channel_run_parent_class = g_type_class_peek_parent(loop_channel_run); /* GObjectClass */ gobject = (GObjectClass *) loop_channel_run; gobject->set_property = ags_loop_channel_run_set_property; gobject->get_property = ags_loop_channel_run_get_property; gobject->finalize = ags_loop_channel_run_finalize; /* properties */ param_spec = g_param_spec_object("count-beats-audio-run\0", "assigned AgsCountBeatsAudioRun\0", "The pointer to a counter object which indicates when looping should happen\0", G_TYPE_OBJECT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_COUNT_BEATS_AUDIO_RUN, param_spec); /* AgsRecallClass */ recall = (AgsRecallClass *) loop_channel_run; recall->duplicate = ags_loop_channel_run_duplicate; recall->resolve_dependencies = ags_loop_channel_run_resolve_dependencies; } void ags_loop_channel_run_connectable_interface_init(AgsConnectableInterface *connectable) { ags_loop_channel_run_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_loop_channel_run_connect; connectable->disconnect = ags_loop_channel_run_disconnect; } void ags_loop_channel_run_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable) { ags_loop_channel_run_parent_dynamic_connectable_interface = g_type_interface_peek_parent(dynamic_connectable); dynamic_connectable->connect_dynamic = ags_loop_channel_run_connect_dynamic; dynamic_connectable->disconnect_dynamic = ags_loop_channel_run_disconnect_dynamic; } void ags_loop_channel_run_plugin_interface_init(AgsPluginInterface *plugin) { ags_loop_channel_run_parent_plugin_interface = g_type_interface_peek_parent(plugin); plugin->read = ags_loop_channel_run_read; plugin->write = ags_loop_channel_run_write; } void ags_loop_channel_run_init(AgsLoopChannelRun *loop_channel_run) { AGS_RECALL(loop_channel_run)->name = "ags-loop\0"; AGS_RECALL(loop_channel_run)->version = AGS_EFFECTS_DEFAULT_VERSION; AGS_RECALL(loop_channel_run)->build_id = AGS_BUILD_ID; AGS_RECALL(loop_channel_run)->xml_type = "ags-loop-channel-run\0"; AGS_RECALL(loop_channel_run)->port = NULL; AGS_RECALL(loop_channel_run)->flags |= AGS_RECALL_INPUT_ORIENTATED; AGS_RECALL(loop_channel_run)->child_type = G_TYPE_NONE; loop_channel_run->count_beats_audio_run = NULL; } void ags_loop_channel_run_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsLoopChannelRun *loop_channel_run; loop_channel_run = AGS_LOOP_CHANNEL_RUN(gobject); switch(prop_id){ case PROP_COUNT_BEATS_AUDIO_RUN: { AgsCountBeatsAudioRun *count_beats_audio_run; gboolean is_template; count_beats_audio_run = (AgsCountBeatsAudioRun *) g_value_get_object(value); if(loop_channel_run->count_beats_audio_run == count_beats_audio_run) return; if(count_beats_audio_run != NULL && (AGS_RECALL_TEMPLATE & (AGS_RECALL(count_beats_audio_run)->flags)) != 0){ is_template = TRUE; }else{ is_template = FALSE; } if(loop_channel_run->count_beats_audio_run != NULL){ if(is_template){ ags_recall_remove_dependency(AGS_RECALL(loop_channel_run), (AgsRecall *) loop_channel_run->count_beats_audio_run); }else{ if((AGS_RECALL_RUN_INITIALIZED & (AGS_RECALL(loop_channel_run)->flags)) != 0){ /* AgsCountBeatsAudioRun */ g_signal_handler_disconnect(G_OBJECT(loop_channel_run->count_beats_audio_run), loop_channel_run->start_handler); g_signal_handler_disconnect(G_OBJECT(loop_channel_run->count_beats_audio_run), loop_channel_run->loop_handler); g_signal_handler_disconnect(G_OBJECT(loop_channel_run->count_beats_audio_run), loop_channel_run->stop_handler); } g_object_unref(loop_channel_run->count_beats_audio_run); } } if(count_beats_audio_run != NULL){ g_object_ref(count_beats_audio_run); if(is_template){ ags_recall_add_dependency(AGS_RECALL(loop_channel_run), ags_recall_dependency_new((GObject *) count_beats_audio_run)); }else{ if((AGS_RECALL_RUN_INITIALIZED & (AGS_RECALL(loop_channel_run)->flags)) != 0){ /* AgsCountBeatsAudioRun */ loop_channel_run->start_handler = g_signal_connect(G_OBJECT(loop_channel_run->count_beats_audio_run), "sequencer-start\0", G_CALLBACK(ags_loop_channel_run_loop_callback), loop_channel_run); loop_channel_run->loop_handler = g_signal_connect(G_OBJECT(loop_channel_run->count_beats_audio_run), "sequencer-loop\0", G_CALLBACK(ags_loop_channel_run_loop_callback), loop_channel_run); loop_channel_run->stop_handler = g_signal_connect(G_OBJECT(loop_channel_run->count_beats_audio_run), "sequencer-stop\0", G_CALLBACK(ags_loop_channel_run_loop_callback), loop_channel_run); } } } loop_channel_run->count_beats_audio_run = count_beats_audio_run; } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_loop_channel_run_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsLoopChannelRun *loop_channel_run; loop_channel_run = AGS_LOOP_CHANNEL_RUN(gobject); switch(prop_id){ case PROP_COUNT_BEATS_AUDIO_RUN: { g_value_set_object(value, loop_channel_run->count_beats_audio_run); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_loop_channel_run_finalize(GObject *gobject) { AgsLoopChannelRun *loop_channel_run; loop_channel_run = AGS_LOOP_CHANNEL_RUN(gobject); if(loop_channel_run->count_beats_audio_run != NULL){ g_object_unref(G_OBJECT(loop_channel_run->count_beats_audio_run)); } /* call parent */ G_OBJECT_CLASS(ags_loop_channel_run_parent_class)->finalize(gobject); } void ags_loop_channel_run_connect(AgsConnectable *connectable) { ags_loop_channel_run_parent_connectable_interface->connect(connectable); /* empty */ } void ags_loop_channel_run_disconnect(AgsConnectable *connectable) { ags_loop_channel_run_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_loop_channel_run_connect_dynamic(AgsDynamicConnectable *dynamic_connectable) { AgsLoopChannelRun *loop_channel_run; ags_loop_channel_run_parent_dynamic_connectable_interface->connect_dynamic(dynamic_connectable); loop_channel_run = AGS_LOOP_CHANNEL_RUN(dynamic_connectable); if(loop_channel_run->count_beats_audio_run != NULL){ /* AgsCountBeatsAudioRun */ loop_channel_run->start_handler = g_signal_connect(G_OBJECT(loop_channel_run->count_beats_audio_run), "sequencer-start\0", G_CALLBACK(ags_loop_channel_run_start_callback), loop_channel_run); loop_channel_run->loop_handler = g_signal_connect(G_OBJECT(loop_channel_run->count_beats_audio_run), "sequencer-loop\0", G_CALLBACK(ags_loop_channel_run_loop_callback), loop_channel_run); loop_channel_run->stop_handler = g_signal_connect(G_OBJECT(loop_channel_run->count_beats_audio_run), "sequencer-stop\0", G_CALLBACK(ags_loop_channel_run_stop_callback), loop_channel_run); } } void ags_loop_channel_run_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable) { AgsLoopChannelRun *loop_channel_run; ags_loop_channel_run_parent_dynamic_connectable_interface->disconnect_dynamic(dynamic_connectable); loop_channel_run = AGS_LOOP_CHANNEL_RUN(dynamic_connectable); if(loop_channel_run->count_beats_audio_run != NULL){ /* AgsCountBeatsAudioRun */ g_signal_handler_disconnect(G_OBJECT(loop_channel_run->count_beats_audio_run), loop_channel_run->start_handler); g_signal_handler_disconnect(G_OBJECT(loop_channel_run->count_beats_audio_run), loop_channel_run->loop_handler); g_signal_handler_disconnect(G_OBJECT(loop_channel_run->count_beats_audio_run), loop_channel_run->stop_handler); } } void ags_loop_channel_run_read(AgsFile *file, xmlNode *node, AgsPlugin *plugin) { AgsFileLookup *file_lookup; xmlNode *iter; /* read parent */ ags_loop_channel_run_parent_plugin_interface->read(file, node, plugin); /* read depenendency */ iter = node->children; while(iter != NULL){ if(iter->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(iter->name, "ags-dependency-list\0", 19)){ xmlNode *dependency_node; dependency_node = iter->children; while(dependency_node != NULL){ if(dependency_node->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(dependency_node->name, "ags-dependency\0", 15)){ file_lookup = (AgsFileLookup *) g_object_new(AGS_TYPE_FILE_LOOKUP, "file\0", file, "node\0", dependency_node, "reference\0", G_OBJECT(plugin), NULL); ags_file_add_lookup(file, (GObject *) file_lookup); g_signal_connect(G_OBJECT(file_lookup), "resolve\0", G_CALLBACK(ags_loop_channel_run_read_resolve_dependency), G_OBJECT(plugin)); } } dependency_node = dependency_node->next; } } } iter = iter->next; } } xmlNode* ags_loop_channel_run_write(AgsFile *file, xmlNode *parent, AgsPlugin *plugin) { AgsFileLookup *file_lookup; xmlNode *node, *child; xmlNode *dependency_node; GList *list; gchar *id; /* write parent */ node = ags_loop_channel_run_parent_plugin_interface->write(file, parent, plugin); /* write dependencies */ child = xmlNewNode(NULL, "ags-dependency-list\0"); xmlNewProp(child, AGS_FILE_ID_PROP, ags_id_generator_create_uuid()); xmlAddChild(node, child); list = AGS_RECALL(plugin)->dependencies; while(list != NULL){ id = ags_id_generator_create_uuid(); dependency_node = xmlNewNode(NULL, "ags-dependency\0"); xmlNewProp(dependency_node, AGS_FILE_ID_PROP, id); xmlAddChild(child, dependency_node); file_lookup = (AgsFileLookup *) g_object_new(AGS_TYPE_FILE_LOOKUP, "file\0", file, "node\0", dependency_node, "reference\0", G_OBJECT(plugin), NULL); ags_file_add_lookup(file, (GObject *) file_lookup); g_signal_connect(G_OBJECT(file_lookup), "resolve\0", G_CALLBACK(ags_loop_channel_run_write_resolve_dependency), G_OBJECT(plugin)); list = list->next; } return(node); } void ags_loop_channel_run_resolve_dependencies(AgsRecall *recall) { AgsAudio *audio; AgsChannel *channel; AgsRecall *template; AgsLoopChannelRun *loop_channel_run; AgsRecallDependency *recall_dependency; AgsCountBeatsAudioRun *count_beats_audio_run; GList *list; AgsRecallID *recall_id; guint i, i_stop; loop_channel_run = AGS_LOOP_CHANNEL_RUN(recall); template = AGS_RECALL(ags_recall_find_template(AGS_RECALL_CONTAINER(recall->container)->recall_channel_run)->data); list = template->dependencies; channel = AGS_RECALL_CHANNEL_RUN(loop_channel_run)->source; audio = AGS_AUDIO(channel->audio); recall_id = recall->recall_id; count_beats_audio_run = NULL; i_stop = 1; for(i = 0; i < i_stop && list != NULL;){ recall_dependency = AGS_RECALL_DEPENDENCY(list->data); if(AGS_IS_COUNT_BEATS_AUDIO_RUN(recall_dependency->dependency)){ count_beats_audio_run = (AgsCountBeatsAudioRun *) ags_recall_dependency_resolve(recall_dependency, recall_id); i++; } list = list->next; } g_object_set(G_OBJECT(recall), "count-beats-audio-run\0", count_beats_audio_run, NULL); } AgsRecall* ags_loop_channel_run_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter) { AgsLoopChannelRun *loop_channel_run, *copy; loop_channel_run = AGS_LOOP_CHANNEL_RUN(recall); copy = (AgsLoopChannelRun *) AGS_RECALL_CLASS(ags_loop_channel_run_parent_class)->duplicate(recall, recall_id, n_params, parameter); return((AgsRecall *) copy); } void ags_loop_channel_run_create_audio_signals(AgsLoopChannelRun *loop_channel_run) { AgsDevout *devout; AgsRecycling *recycling; AgsAudioSignal *audio_signal; gdouble delay; guint attack; guint tic_counter_incr; // g_message("debug\0"); devout = AGS_DEVOUT(AGS_RECALL(loop_channel_run)->devout); /* recycling */ recycling = AGS_RECALL_CHANNEL_RUN(loop_channel_run)->source->first_recycling; /* delay and attack */ tic_counter_incr = devout->tic_counter + 1; //TODO:JK: unclear attack = 0;// devout->attack[((tic_counter_incr == AGS_NOTATION_TICS_PER_BEAT) ? // 0: // tic_counter_incr)]; delay = 0.0; //devout->delay[((tic_counter_incr == AGS_NOTATION_TICS_PER_BEAT) ? // 0: // tic_counter_incr)]; while(recycling != AGS_RECALL_CHANNEL_RUN(loop_channel_run)->source->last_recycling->next){ audio_signal = ags_audio_signal_new((GObject *) devout, (GObject *) recycling, (GObject *) AGS_RECALL(loop_channel_run)->recall_id); audio_signal->stream_current = audio_signal->stream_beginning; /* */ ags_recycling_create_audio_signal_with_defaults(recycling, audio_signal, delay, attack); ags_connectable_connect(AGS_CONNECTABLE(audio_signal)); ags_recycling_add_audio_signal(recycling, audio_signal); /* * unref AgsAudioSignal because AgsLoopChannelRun has no need for it * if you need a valid reference to audio_signal you have to g_object_ref(audio_signal) */ //FIXME:JK: #ifdef AGS_DEBUG g_message("+++++++++++++++++++++++++\n\nloop channel created: AgsAudioSignal#%llx[%u]\n\n+++++++++++++++++++++++++\0", (long long unsigned int) audio_signal, audio_signal->length); #endif recycling = recycling->next; } } void ags_loop_channel_run_start_callback(AgsCountBeatsAudioRun *count_beats_audio_run, guint run_order, AgsLoopChannelRun *loop_channel_run) { #ifdef AGS_DEBUG g_message("ags_loop_channel_run_start_callback - run_order: %u; %u\n\0", AGS_RECALL_CHANNEL_RUN(loop_channel_run)->run_order, run_order); #endif //TODO:JK: optimize tree see deprecated AgsRunOrder // if(AGS_RECALL_CHANNEL_RUN(loop_channel_run)->run_order == run_order){ ags_loop_channel_run_create_audio_signals(loop_channel_run); // } } void ags_loop_channel_run_loop_callback(AgsCountBeatsAudioRun *count_beats_audio_run, guint run_order, AgsLoopChannelRun *loop_channel_run) { #ifdef AGS_DEBUG g_message("ags_loop_channel_run_loop_callback - run_order: %u; %u\0", AGS_RECALL_CHANNEL_RUN(loop_channel_run)->run_order, run_order); #endif //TODO:JK: optimize tree see deprecated AgsRunOrder // if(AGS_RECALL_CHANNEL_RUN(loop_channel_run)->run_order == run_order){ ags_loop_channel_run_create_audio_signals(loop_channel_run); // } } void ags_loop_channel_run_stop_callback(AgsCountBeatsAudioRun *count_beats_audio_run, guint run_order, AgsLoopChannelRun *loop_channel_run) { } void ags_loop_channel_run_write_resolve_dependency(AgsFileLookup *file_lookup, GObject *recall) { AgsFileIdRef *id_ref; gchar *id; id_ref = (AgsFileIdRef *) ags_file_find_id_ref_by_reference(file_lookup->file, file_lookup->ref); id = xmlGetProp(id_ref->node, AGS_FILE_ID_PROP); xmlNewProp(file_lookup->node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id)); } void ags_loop_channel_run_read_resolve_dependency(AgsFileLookup *file_lookup, GObject *recall) { AgsFileIdRef *id_ref; gchar *xpath; xpath = (gchar *) xmlGetProp(file_lookup->node, "xpath\0"); id_ref = (AgsFileIdRef *) ags_file_find_id_ref_by_xpath(file_lookup->file, xpath); if(AGS_IS_DELAY_AUDIO_RUN(id_ref->ref)){ g_object_set(G_OBJECT(recall), "count-beats-audio-run\0", id_ref->ref, NULL); } } /** * ags_loop_channel_run_new: * @channel: the #AgsChannel as source * @count_beats_audio_run: an #AgsCountBeatsAudioRun * @is_template: if %TRUE recall is templated * * Creates an #AgsLoopChannelRun * * Returns: a new #AgsLoopChannelRun * * Since: 0.4 */ AgsLoopChannelRun* ags_loop_channel_run_new(AgsChannel *channel, AgsCountBeatsAudioRun *count_beats_audio_run, gboolean is_template) { AgsLoopChannelRun *loop_channel_run; loop_channel_run = (AgsLoopChannelRun *) g_object_new(AGS_TYPE_LOOP_CHANNEL_RUN, "source\0", channel, "count-beats-audio-run\0", count_beats_audio_run, NULL); if(is_template){ AGS_RECALL(loop_channel_run)->flags = AGS_RECALL_TEMPLATE; } return(loop_channel_run); } gsequencer-0.6.37/src/ags/audio/recall/ags_envelope_channel_run.h0000644000175000017500000000427512626272146022011 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_ENVELOPE_CHANNEL_RUN_H__ #define __AGS_ENVELOPE_CHANNEL_RUN_H__ #include #include #include #include #include #define AGS_TYPE_ENVELOPE_CHANNEL_RUN (ags_envelope_channel_run_get_type()) #define AGS_ENVELOPE_CHANNEL_RUN(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_ENVELOPE_CHANNEL_RUN, AgsEnvelopeChannelRun)) #define AGS_ENVELOPE_CHANNEL_RUN_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_ENVELOPE_CHANNEL_RUN, AgsEnvelopeChannelRunClass)) #define AGS_IS_ENVELOPE_CHANNEL_RUN(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_ENVELOPE_CHANNEL_RUN)) #define AGS_IS_ENVELOPE_CHANNEL_RUN_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_ENVELOPE_CHANNEL_RUN)) #define AGS_ENVELOPE_CHANNEL_RUN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_ENVELOPE_CHANNEL_RUN, AgsEnvelopeChannelRunClass)) typedef struct _AgsEnvelopeChannelRun AgsEnvelopeChannelRun; typedef struct _AgsEnvelopeChannelRunClass AgsEnvelopeChannelRunClass; struct _AgsEnvelopeChannelRun { AgsRecallChannelRun recall_channel_run; }; struct _AgsEnvelopeChannelRunClass { AgsRecallChannelRunClass recall_channel_run; }; GType ags_envelope_channel_run_get_type(); AgsEnvelopeChannelRun* ags_envelope_channel_run_new(AgsChannel *source); #endif /*__AGS_ENVELOPE_CHANNEL_RUN_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_copy_channel_run.c0000644000175000017500000002063712626272146021141 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include void ags_copy_channel_run_class_init(AgsCopyChannelRunClass *copy_channel_run); void ags_copy_channel_run_connectable_interface_init(AgsConnectableInterface *connectable); void ags_copy_channel_run_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable); void ags_copy_channel_run_plugin_interface_init(AgsPluginInterface *plugin); void ags_copy_channel_run_init(AgsCopyChannelRun *copy_channel_run); gboolean ags_copy_channel_run_is_ready(AgsConnectable *connectable); void ags_copy_channel_run_connect(AgsConnectable *connectable); void ags_copy_channel_run_disconnect(AgsConnectable *connectable); void ags_copy_channel_run_connect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_copy_channel_run_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_copy_channel_run_finalize(GObject *gobject); AgsRecall* ags_copy_channel_run_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter); /** * SECTION:ags_copy_channel_run * @short_description: copys channel * @title: AgsCopyChannelRun * @section_id: * @include: ags/audio/recall/ags_copy_channel_run.h * * The #AgsCopyChannelRun class copys the channel. */ static gpointer ags_copy_channel_run_parent_class = NULL; static AgsConnectableInterface *ags_copy_channel_run_parent_connectable_interface; static AgsDynamicConnectableInterface *ags_copy_channel_run_parent_dynamic_connectable_interface; static AgsPluginInterface *ags_copy_channel_run_parent_plugin_interface; GType ags_copy_channel_run_get_type() { static GType ags_type_copy_channel_run = 0; if(!ags_type_copy_channel_run){ static const GTypeInfo ags_copy_channel_run_info = { sizeof (AgsCopyChannelRunClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_copy_channel_run_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsCopyChannelRun), 0, /* n_preallocs */ (GInstanceInitFunc) ags_copy_channel_run_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_copy_channel_run_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_dynamic_connectable_interface_info = { (GInterfaceInitFunc) ags_copy_channel_run_dynamic_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_plugin_interface_info = { (GInterfaceInitFunc) ags_copy_channel_run_plugin_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_copy_channel_run = g_type_register_static(AGS_TYPE_RECALL_CHANNEL_RUN, "AgsCopyChannelRun\0", &ags_copy_channel_run_info, 0); g_type_add_interface_static(ags_type_copy_channel_run, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_copy_channel_run, AGS_TYPE_DYNAMIC_CONNECTABLE, &ags_dynamic_connectable_interface_info); g_type_add_interface_static(ags_type_copy_channel_run, AGS_TYPE_PLUGIN, &ags_plugin_interface_info); } return(ags_type_copy_channel_run); } void ags_copy_channel_run_class_init(AgsCopyChannelRunClass *copy_channel_run) { GObjectClass *gobject; AgsRecallClass *recall; GParamSpec *param_spec; ags_copy_channel_run_parent_class = g_type_class_peek_parent(copy_channel_run); /* GObjectClass */ gobject = (GObjectClass *) copy_channel_run; gobject->finalize = ags_copy_channel_run_finalize; /* AgsRecallClass */ recall = (AgsRecallClass *) copy_channel_run; } void ags_copy_channel_run_connectable_interface_init(AgsConnectableInterface *connectable) { ags_copy_channel_run_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->is_ready = ags_copy_channel_run_is_ready; connectable->connect = ags_copy_channel_run_connect; connectable->disconnect = ags_copy_channel_run_disconnect; } void ags_copy_channel_run_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable) { ags_copy_channel_run_parent_dynamic_connectable_interface = g_type_interface_peek_parent(dynamic_connectable); dynamic_connectable->connect_dynamic = ags_copy_channel_run_connect_dynamic; dynamic_connectable->disconnect_dynamic = ags_copy_channel_run_disconnect_dynamic; } void ags_copy_channel_run_plugin_interface_init(AgsPluginInterface *plugin) { ags_copy_channel_run_parent_plugin_interface = g_type_interface_peek_parent(plugin); } void ags_copy_channel_run_init(AgsCopyChannelRun *copy_channel_run) { AGS_RECALL(copy_channel_run)->name = "ags-copy\0"; AGS_RECALL(copy_channel_run)->version = AGS_EFFECTS_DEFAULT_VERSION; AGS_RECALL(copy_channel_run)->build_id = AGS_BUILD_ID; AGS_RECALL(copy_channel_run)->xml_type = "ags-copy-channel-run\0"; AGS_RECALL(copy_channel_run)->port = NULL; AGS_RECALL(copy_channel_run)->flags |= (AGS_RECALL_OUTPUT_ORIENTATED | AGS_RECALL_INPUT_ORIENTATED); AGS_RECALL(copy_channel_run)->child_type = AGS_TYPE_COPY_RECYCLING; } gboolean ags_copy_channel_run_is_ready(AgsConnectable *connectable) { AgsRecallChannelRun *recall_channel_run; recall_channel_run = AGS_RECALL_CHANNEL_RUN(connectable); if(recall_channel_run->source != NULL && recall_channel_run->destination != NULL){ return(TRUE); } return(FALSE); } void ags_copy_channel_run_connect(AgsConnectable *connectable) { ags_copy_channel_run_parent_connectable_interface->connect(connectable); /* empty */ } void ags_copy_channel_run_disconnect(AgsConnectable *connectable) { ags_copy_channel_run_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_copy_channel_run_connect_dynamic(AgsDynamicConnectable *dynamic_connectable) { ags_copy_channel_run_parent_dynamic_connectable_interface->connect_dynamic(dynamic_connectable); /* empty */ } void ags_copy_channel_run_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable) { ags_copy_channel_run_parent_dynamic_connectable_interface->disconnect_dynamic(dynamic_connectable); /* empty */ } void ags_copy_channel_run_finalize(GObject *gobject) { /* empty */ /* call parent */ G_OBJECT_CLASS(ags_copy_channel_run_parent_class)->finalize(gobject); } AgsRecall* ags_copy_channel_run_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter) { AgsCopyChannelRun *copy; copy = (AgsCopyChannelRun *) AGS_RECALL_CLASS(ags_copy_channel_run_parent_class)->duplicate(recall, recall_id, n_params, parameter); return((AgsRecall *) copy); } /** * ags_copy_channel_run_new: * @destination: the destination #AgsChannel * @source: the source #AgsChannel * @devout: the #AgsDevout defaulting to * * Creates an #AgsCopyChannelRun * * Returns: a new #AgsCopyChannelRun * * Since: 0.4 */ AgsCopyChannelRun* ags_copy_channel_run_new(AgsChannel *destination, AgsChannel *source, AgsDevout *devout) { AgsCopyChannelRun *copy_channel_run; copy_channel_run = (AgsCopyChannelRun *) g_object_new(AGS_TYPE_COPY_CHANNEL_RUN, "destination\0", destination, "source\0", source, "devout\0", devout, NULL); return(copy_channel_run); } gsequencer-0.6.37/src/ags/audio/recall/ags_buffer_channel.h0000644000175000017500000000372112612232540020541 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_BUFFER_CHANNEL_H__ #define __AGS_BUFFER_CHANNEL_H__ #include #include #include #define AGS_TYPE_BUFFER_CHANNEL (ags_buffer_channel_get_type()) #define AGS_BUFFER_CHANNEL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_BUFFER_CHANNEL, AgsBufferChannel)) #define AGS_BUFFER_CHANNEL_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_BUFFER_CHANNEL, AgsBufferChannelClass)) #define AGS_IS_BUFFER_CHANNEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_BUFFER_CHANNEL)) #define AGS_IS_BUFFER_CHANNEL_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_BUFFER_CHANNEL)) #define AGS_BUFFER_CHANNEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_BUFFER_CHANNEL, AgsBufferChannelClass)) typedef struct _AgsBufferChannel AgsBufferChannel; typedef struct _AgsBufferChannelClass AgsBufferChannelClass; struct _AgsBufferChannel { AgsRecallChannel recall_channel; AgsPort *muted; }; struct _AgsBufferChannelClass { AgsRecallChannelClass recall_channel; }; GType ags_buffer_channel_get_type(); AgsBufferChannel* ags_buffer_channel_new(); #endif /*__AGS_BUFFER_CHANNEL_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_play_notation_audio.c0000644000175000017500000001351712626272146021653 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include void ags_play_notation_audio_class_init(AgsPlayNotationAudioClass *play_notation_audio); void ags_play_notation_audio_plugin_interface_init(AgsPluginInterface *plugin); void ags_play_notation_audio_init(AgsPlayNotationAudio *play_notation_audio); void ags_play_notation_audio_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_play_notation_audio_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_play_notation_audio_finalize(GObject *gobject); void ags_play_notation_audio_set_ports(AgsPlugin *plugin, GList *port); /** * SECTION:ags_play_notation_audio * @short_description: play audio notation * @title: AgsPlayNotationAudio * @section_id: * @include: ags/audio/recall/ags_play_notation_audio.h * * The #AgsPlayNotationAudio class provides ports to the effect processor. */ enum{ PROP_0, PROP_MONOTONIC, }; static gpointer ags_play_notation_audio_parent_class = NULL; static AgsPluginInterface *ags_play_notation_parent_plugin_interface; static const gchar *ags_play_notation_audio_plugin_name = "ags-play-notation\0"; static const gchar *ags_play_notation_audio_specifier[] = { }; static const gchar *ags_play_notation_audio_control_port[] = { }; GType ags_play_notation_audio_get_type() { static GType ags_type_play_notation_audio = 0; if(!ags_type_play_notation_audio){ static const GTypeInfo ags_play_notation_audio_info = { sizeof (AgsPlayNotationAudioClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_play_notation_audio_class_init, NULL, /* class_finalize */ NULL, /* class_audio */ sizeof (AgsPlayNotationAudio), 0, /* n_preallocs */ (GInstanceInitFunc) ags_play_notation_audio_init, }; static const GInterfaceInfo ags_plugin_interface_info = { (GInterfaceInitFunc) ags_play_notation_audio_plugin_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_play_notation_audio = g_type_register_static(AGS_TYPE_RECALL_AUDIO, "AgsPlayNotationAudio\0", &ags_play_notation_audio_info, 0); g_type_add_interface_static(ags_type_play_notation_audio, AGS_TYPE_PLUGIN, &ags_plugin_interface_info); } return(ags_type_play_notation_audio); } void ags_play_notation_audio_class_init(AgsPlayNotationAudioClass *play_notation_audio) { GObjectClass *gobject; GParamSpec *param_spec; ags_play_notation_audio_parent_class = g_type_class_peek_parent(play_notation_audio); /* GObjectClass */ gobject = (GObjectClass *) play_notation_audio; gobject->set_property = ags_play_notation_audio_set_property; gobject->get_property = ags_play_notation_audio_get_property; gobject->finalize = ags_play_notation_audio_finalize; } void ags_play_notation_audio_plugin_interface_init(AgsPluginInterface *plugin) { ags_play_notation_parent_plugin_interface = g_type_interface_peek_parent(plugin); plugin->set_ports = ags_play_notation_audio_set_ports; } void ags_play_notation_audio_init(AgsPlayNotationAudio *play_notation_audio) { GList *port; AGS_RECALL(play_notation_audio)->name = "ags-play-notation\0"; AGS_RECALL(play_notation_audio)->version = AGS_EFFECTS_DEFAULT_VERSION; AGS_RECALL(play_notation_audio)->build_id = AGS_BUILD_ID; AGS_RECALL(play_notation_audio)->xml_type = "ags-play-notation-audio\0"; port = NULL; /* set port */ AGS_RECALL(play_notation_audio)->port = port; } void ags_play_notation_audio_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsPlayNotationAudio *play_notation_audio; play_notation_audio = AGS_PLAY_NOTATION_AUDIO(gobject); switch(prop_id){ default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_play_notation_audio_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsPlayNotationAudio *play_notation_audio; play_notation_audio = AGS_PLAY_NOTATION_AUDIO(gobject); switch(prop_id){ default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_play_notation_audio_finalize(GObject *gobject) { AgsPlayNotationAudio *play_notation_audio; play_notation_audio = AGS_PLAY_NOTATION_AUDIO(gobject); /* call parent */ G_OBJECT_CLASS(ags_play_notation_audio_parent_class)->finalize(gobject); } void ags_play_notation_audio_set_ports(AgsPlugin *plugin, GList *port) { while(port != NULL){ port = port->next; } } /** * ags_play_notation_audio_new: * * Creates an #AgsPlayNotationAudio * * Returns: a new #AgsPlayNotationAudio * * Since: 0.4 */ AgsPlayNotationAudio* ags_play_notation_audio_new() { AgsPlayNotationAudio *play_notation_audio; play_notation_audio = (AgsPlayNotationAudio *) g_object_new(AGS_TYPE_PLAY_NOTATION_AUDIO, NULL); return(play_notation_audio); } gsequencer-0.6.37/src/ags/audio/recall/ags_echo.h0000644000175000017500000000167612626272146016540 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_ECHO_H__ #define __AGS_ECHO_H__ #include #include #include void ags_echo(AgsRecall *recall); #endif /*__AGS_ECHO_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_play_audio_file.c0000644000175000017500000002277512626272146020745 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include void ags_play_audio_file_class_init(AgsPlayAudioFileClass *play_audio_file); void ags_play_audio_file_connectable_interface_init(AgsConnectableInterface *connectable); void ags_play_audio_file_init(AgsPlayAudioFile *play_audio_file); void ags_play_audio_file_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_play_audio_file_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_play_audio_file_connect(AgsConnectable *connectable); void ags_play_audio_file_disconnect(AgsConnectable *connectable); void ags_play_audio_file_finalize(GObject *gobject); void ags_play_audio_file_run_inter(AgsRecall *recall); void ags_play_audio_file_remove(AgsRecall *recall); void ags_play_audio_file_cancel(AgsRecall *recall); enum{ PROP_0, PROP_DEVOUT, PROP_AUDIO_FILE, PROP_CURRENT_FRAME, }; static gpointer ags_play_audio_file_parent_class = NULL; static AgsConnectableInterface *ags_play_audio_file_parent_connectable_interface; GType ags_play_audio_file_get_type() { static GType ags_type_play_audio_file = 0; if(!ags_type_play_audio_file){ static const GTypeInfo ags_play_audio_file_info = { sizeof (AgsPlayAudioFileClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_play_audio_file_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsPlayAudioFile), 0, /* n_preallocs */ (GInstanceInitFunc) ags_play_audio_file_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_play_audio_file_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_play_audio_file = g_type_register_static(AGS_TYPE_RECALL, "AgsPlayAudioFile\0", &ags_play_audio_file_info, 0); g_type_add_interface_static(ags_type_play_audio_file, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_play_audio_file); } void ags_play_audio_file_class_init(AgsPlayAudioFileClass *play_audio_file) { GObjectClass *gobject; AgsRecallClass *recall; GParamSpec *param_spec; ags_play_audio_file_parent_class = g_type_class_peek_parent(play_audio_file); /* GObjectClass */ gobject = (GObjectClass *) play_audio_file; gobject->set_property = ags_play_audio_file_set_property; gobject->get_property = ags_play_audio_file_get_property; gobject->finalize = ags_play_audio_file_finalize; /* properties */ param_spec = g_param_spec_gtype("devout\0", "assigned devout\0", "The devout this recall is assigned to\0", G_TYPE_OBJECT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_DEVOUT, param_spec); param_spec = g_param_spec_gtype("audio_file\0", "assigned audio file\0", "The audio file this recall is assigned to\0", G_TYPE_OBJECT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_AUDIO_FILE, param_spec); param_spec = g_param_spec_gtype("current\0", "current frame\0", "The current frame this recall is playing\0", G_TYPE_UINT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_CURRENT_FRAME, param_spec); /* AgsRecallClass */ recall->run_inter = ags_play_audio_file_run_inter; recall->remove = ags_play_audio_file_remove; recall->cancel = ags_play_audio_file_cancel; } void ags_play_audio_file_connectable_interface_init(AgsConnectableInterface *connectable) { ags_play_audio_file_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_play_audio_file_connect; connectable->disconnect = ags_play_audio_file_disconnect; } void ags_play_audio_file_init(AgsPlayAudioFile *play_audio_file) { play_audio_file->audio_file = NULL; play_audio_file->current_frame = 0; play_audio_file->devout = NULL; } void ags_play_audio_file_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsPlayAudioFile *play_audio_file; play_audio_file = AGS_PLAY_AUDIO_FILE(gobject); switch(prop_id){ case PROP_DEVOUT: { AgsDevout *devout; devout = (AgsDevout *) g_value_get_object(value); if(play_audio_file->devout == devout) return; if(play_audio_file->devout != NULL) g_object_unref(play_audio_file->devout); if(devout != NULL) g_object_ref(devout); play_audio_file->devout = devout; } break; case PROP_AUDIO_FILE: { AgsAudioFile *audio_file; audio_file = (AgsAudioFile *) g_value_get_object(value); if(play_audio_file->audio_file == audio_file) return; if(play_audio_file->audio_file != NULL) g_object_unref(play_audio_file->audio_file); if(play_audio_file != NULL) g_object_ref(play_audio_file); play_audio_file->audio_file = audio_file; } break; case PROP_CURRENT_FRAME: { play_audio_file->current_frame = (guint) g_value_get_uint(value); /* * TODO:JK: implement seeking over the buffer */ } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_play_audio_file_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsPlayAudioFile *play_audio_file; play_audio_file = AGS_PLAY_AUDIO_FILE(gobject); switch(prop_id){ case PROP_DEVOUT: { g_value_set_object(value, play_audio_file->devout); } break; case PROP_AUDIO_FILE: { g_value_set_object(value, play_audio_file->audio_file); } break; case PROP_CURRENT_FRAME: { g_value_set_uint(value, play_audio_file->current_frame); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_play_audio_file_connect(AgsConnectable *connectable) { ags_play_audio_file_parent_connectable_interface->connect(connectable); /* empty */ } void ags_play_audio_file_disconnect(AgsConnectable *connectable) { ags_play_audio_file_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_play_audio_file_finalize(GObject *gobject) { AgsPlayAudioFile *play_audio_file; play_audio_file = AGS_PLAY_AUDIO_FILE(gobject); g_object_unref(G_OBJECT(play_audio_file->audio_file)); g_object_unref(G_OBJECT(play_audio_file->devout)); G_OBJECT_CLASS(ags_play_audio_file_parent_class)->finalize(gobject); } void ags_play_audio_file_run_inter(AgsRecall *recall) { /* DEPRECATED AgsPlayAudioFile *play_audio_file; signed short *buffer; guint i0, i1, j, stop; gboolean play_done; AGS_RECALL_CLASS(ags_play_audio_file_parent_class)->run_inter(recall); play_audio_file = (AgsPlayAudioFile *) recall; if((AGS_DEVOUT_BUFFER0 & play_audio_file->devout->flags) != 0){ buffer = play_audio_file->devout->buffer[1]; }else if((AGS_DEVOUT_BUFFER1 & play_audio_file->devout->flags) != 0){ buffer = play_audio_file->devout->buffer[2]; }else if((AGS_DEVOUT_BUFFER2 & play_audio_file->devout->flags) != 0){ buffer = play_audio_file->devout->buffer[3]; }else if((AGS_DEVOUT_BUFFER3 & play_audio_file->devout->flags) != 0){ buffer = play_audio_file->devout->buffer[0]; } i0 = play_audio_file->current_frame; stop = i0 + play_audio_file->devout->buffer_size; if(stop < play_audio_file->audio_file->frames) play_done = FALSE; else{ stop = play_audio_file->audio_file->frames; play_done = TRUE; } for(i1 = 0; i0 < stop; i0++, i1++){ for(j = 0; j < play_audio_file->audio_file->channels || j < play_audio_file->devout->dsp_channels; j++) buffer[i1 * play_audio_file->devout->dsp_channels + j] = ((buffer[i1 * play_audio_file->devout->dsp_channels + j]) / 2) + ((play_audio_file->audio_file->buffer[i0 * play_audio_file->audio_file->channels + j]) / 2); } play_audio_file->current_frame = i0; if(play_done) ags_recall_done(recall); */ } void ags_play_audio_file_remove(AgsRecall *recall) { AGS_RECALL_CLASS(ags_play_audio_file_parent_class)->remove(recall); } void ags_play_audio_file_cancel(AgsRecall *recall) { AGS_RECALL_CLASS(ags_play_audio_file_parent_class)->cancel(recall); } AgsPlayAudioFile* ags_play_audio_file_new(AgsAudioFile *audio_file, AgsDevout *devout) { AgsPlayAudioFile *play_audio_file; play_audio_file = (AgsPlayAudioFile *) g_object_new(AGS_TYPE_PLAY_AUDIO_FILE, "audio_file\0", audio_file, "devout\0", devout, NULL); return(play_audio_file); } gsequencer-0.6.37/src/ags/audio/recall/ags_copy_pattern_channel_run.h0000644000175000017500000000435512612232540022667 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_COPY_PATTERN_CHANNEL_RUN_H__ #define __AGS_COPY_PATTERN_CHANNEL_RUN_H__ #include #include #include #define AGS_TYPE_COPY_PATTERN_CHANNEL_RUN (ags_copy_pattern_channel_run_get_type()) #define AGS_COPY_PATTERN_CHANNEL_RUN(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_COPY_PATTERN_CHANNEL_RUN, AgsCopyPatternChannelRun)) #define AGS_COPY_PATTERN_CHANNEL_RUN_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_COPY_PATTERN_CHANNEL_RUN, AgsCopyPatternChannelRunClass)) #define AGS_IS_COPY_PATTERN_CHANNEL_RUN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_COPY_PATTERN_CHANNEL_RUN)) #define AGS_IS_COPY_PATTERN_CHANNEL_RUN_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_COPY_PATTERN_CHANNEL_RUN)) #define AGS_COPY_PATTERN_CHANNEL_RUN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_COPY_PATTERN_CHANNEL_RUN, AgsCopyPatternChannelRunClass)) typedef struct _AgsCopyPatternChannelRun AgsCopyPatternChannelRun; typedef struct _AgsCopyPatternChannelRunClass AgsCopyPatternChannelRunClass; struct _AgsCopyPatternChannelRun { AgsRecallChannelRun recall_channel_run; gulong sequencer_alloc_handler; }; struct _AgsCopyPatternChannelRunClass { AgsRecallChannelRunClass recall_channel_run; }; GType ags_copy_pattern_channel_run_get_type(); AgsCopyPatternChannelRun* ags_copy_pattern_channel_run_new(); #endif /*__AGS_COPY_PATTERN_CHANNEL_RUN_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_loop_channel.c0000644000175000017500000002162012626272146020245 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include void ags_loop_channel_class_init(AgsLoopChannelClass *loop_channel); void ags_loop_channel_connectable_interface_init(AgsConnectableInterface *connectable); void ags_loop_channel_plugin_interface_init(AgsPluginInterface *plugin); void ags_loop_channel_init(AgsLoopChannel *loop_channel); void ags_loop_channel_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_loop_channel_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_loop_channel_connect(AgsConnectable *connectable); void ags_loop_channel_disconnect(AgsConnectable *connectable); void ags_loop_channel_finalize(GObject *gobject); void ags_loop_channel_sequencer_duration_changed_callback(AgsDelayAudio *delay_audio, AgsLoopChannel *loop_channel); /** * SECTION:ags_loop_channel * @short_description: loops channel * @title: AgsLoopChannel * @section_id: * @include: ags/audio/recall/ags_loop_channel.h * * The #AgsLoopChannel class provides ports to the effect processor. */ static gpointer ags_loop_channel_parent_class = NULL; static AgsConnectableInterface *ags_loop_channel_parent_connectable_interface; static AgsPluginInterface *ags_loop_channel_parent_plugin_interface; enum{ PROP_0, PROP_DELAY_AUDIO, }; GType ags_loop_channel_get_type() { static GType ags_type_loop_channel = 0; if(!ags_type_loop_channel){ static const GTypeInfo ags_loop_channel_info = { sizeof (AgsLoopChannelClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_loop_channel_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsLoopChannel), 0, /* n_preallocs */ (GInstanceInitFunc) ags_loop_channel_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_loop_channel_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_plugin_interface_info = { (GInterfaceInitFunc) ags_loop_channel_plugin_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_loop_channel = g_type_register_static(AGS_TYPE_RECALL_CHANNEL, "AgsLoopChannel\0", &ags_loop_channel_info, 0); g_type_add_interface_static(ags_type_loop_channel, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_loop_channel, AGS_TYPE_PLUGIN, &ags_plugin_interface_info); } return (ags_type_loop_channel); } void ags_loop_channel_class_init(AgsLoopChannelClass *loop_channel) { GObjectClass *gobject; AgsRecallClass *recall; GParamSpec *param_spec; ags_loop_channel_parent_class = g_type_class_peek_parent(loop_channel); /* GObjectClass */ gobject = (GObjectClass *) loop_channel; gobject->set_property = ags_loop_channel_set_property; gobject->get_property = ags_loop_channel_get_property; gobject->finalize = ags_loop_channel_finalize; /* properties */ param_spec = g_param_spec_object("delay-audio\0", "assigned delay-audio\0", "The delay-audio it is assigned with\0", AGS_TYPE_DELAY_AUDIO, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_DELAY_AUDIO, param_spec); } void ags_loop_channel_connectable_interface_init(AgsConnectableInterface *connectable) { ags_loop_channel_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_loop_channel_connect; connectable->disconnect = ags_loop_channel_disconnect; } void ags_loop_channel_plugin_interface_init(AgsPluginInterface *plugin) { ags_loop_channel_parent_plugin_interface = g_type_interface_peek_parent(plugin); } void ags_loop_channel_init(AgsLoopChannel *loop_channel) { AGS_RECALL(loop_channel)->name = "ags-loop\0"; AGS_RECALL(loop_channel)->version = AGS_EFFECTS_DEFAULT_VERSION; AGS_RECALL(loop_channel)->build_id = AGS_BUILD_ID; AGS_RECALL(loop_channel)->xml_type = "ags-loop-channel\0"; AGS_RECALL(loop_channel)->port = NULL; loop_channel->delay_audio = NULL; loop_channel->sequencer_duration_changed_handler = 0; } void ags_loop_channel_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsLoopChannel *loop_channel; loop_channel = AGS_LOOP_CHANNEL(gobject); switch(prop_id){ case PROP_DELAY_AUDIO: { AgsDelayAudio *delay_audio; delay_audio = (AgsDelayAudio *) g_value_get_object(value); if(loop_channel->delay_audio == delay_audio) return; if(loop_channel->delay_audio != NULL){ g_object_unref(G_OBJECT(loop_channel->delay_audio)); g_signal_handler_disconnect(G_OBJECT(loop_channel), loop_channel->sequencer_duration_changed_handler); } if(delay_audio != NULL){ g_object_ref(G_OBJECT(delay_audio)); loop_channel->sequencer_duration_changed_handler = g_signal_connect(G_OBJECT(delay_audio), "sequencer-duration-changed\0", G_CALLBACK(ags_loop_channel_sequencer_duration_changed_callback), loop_channel); } loop_channel->delay_audio = delay_audio; } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_loop_channel_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsLoopChannel *loop_channel; loop_channel = AGS_LOOP_CHANNEL(gobject); switch(prop_id){ case PROP_DELAY_AUDIO: g_value_set_object(value, loop_channel->delay_audio); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_loop_channel_finalize(GObject *gobject) { AgsLoopChannel *loop_channel; loop_channel = AGS_LOOP_CHANNEL(gobject); if(loop_channel->delay_audio != NULL){ g_object_unref(G_OBJECT(loop_channel->delay_audio)); } /* call parent */ G_OBJECT_CLASS(ags_loop_channel_parent_class)->finalize(gobject); } void ags_loop_channel_connect(AgsConnectable *connectable) { AgsLoopChannel *loop_channel; ags_loop_channel_parent_connectable_interface->connect(connectable); /* */ loop_channel = AGS_LOOP_CHANNEL(connectable); if(loop_channel->delay_audio != NULL){ loop_channel->sequencer_duration_changed_handler = g_signal_connect(G_OBJECT(loop_channel->delay_audio), "sequencer-duration-changed\0", G_CALLBACK(ags_loop_channel_sequencer_duration_changed_callback), loop_channel); } } void ags_loop_channel_disconnect(AgsConnectable *connectable) { AgsLoopChannel *loop_channel; ags_loop_channel_parent_connectable_interface->disconnect(connectable); /* */ loop_channel = AGS_LOOP_CHANNEL(connectable); if(loop_channel->delay_audio != NULL){ g_signal_handler_disconnect(G_OBJECT(loop_channel->delay_audio), loop_channel->sequencer_duration_changed_handler); } } void ags_loop_channel_sequencer_duration_changed_callback(AgsDelayAudio *delay_audio, AgsLoopChannel *loop_channel) { GList *list; AgsRecycling *recycling; gdouble sequencer_duration; GValue value = {0,}; g_value_init(&value, G_TYPE_DOUBLE); ags_port_safe_read(delay_audio->sequencer_duration, &value); sequencer_duration = g_value_get_double(&value); /* resize audio signal */ //TODO:JK: make it advanced // ags_channel_safe_resize_audio_signal(AGS_RECALL_CHANNEL(loop_channel)->source, // (guint) sequencer_duration); } /** * ags_loop_channel_new: * @source: the #AgsChannel as source * * Creates an #AgsLoopChannel * * Returns: a new #AgsLoopChannel * * Since: 0.4 */ AgsLoopChannel* ags_loop_channel_new() { AgsLoopChannel *loop_channel; loop_channel = (AgsLoopChannel *) g_object_new(AGS_TYPE_LOOP_CHANNEL, NULL); return(loop_channel); } gsequencer-0.6.37/src/ags/audio/recall/ags_buffer_audio_signal.c0000644000175000017500000003222612626272146021577 00000000000000/* AGS - Advanced GTK Sequencer * Copyright (C) 2014 Joël Krähemann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include #include #include #include #include #include #include #include void ags_buffer_audio_signal_class_init(AgsBufferAudioSignalClass *buffer_audio_signal); void ags_buffer_audio_signal_connectable_interface_init(AgsConnectableInterface *connectable); void ags_buffer_audio_signal_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable); void ags_buffer_audio_signal_init(AgsBufferAudioSignal *buffer_audio_signal); void ags_buffer_audio_signal_connect(AgsConnectable *connectable); void ags_buffer_audio_signal_disconnect(AgsConnectable *connectable); void ags_buffer_audio_signal_connect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_buffer_audio_signal_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_buffer_audio_signal_finalize(GObject *gobject); void ags_buffer_audio_signal_run_init_pre(AgsRecall *recall); void ags_buffer_audio_signal_run_pre(AgsRecall *recall); void ags_buffer_audio_signal_run_inter(AgsRecall *recall); AgsRecall* ags_buffer_audio_signal_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter); extern AgsConfig *config; extern pthread_mutex_t ags_application_mutex; /** * SECTION:ags_buffer_audio_signal * @short_description: buffers audio signal * @title: AgsBufferAudioSignal * @section_id: * @include: ags/audio/recall/ags_buffer_audio_signal.h * * The #AgsBufferAudioSignal class buffers the audio signal. */ static gpointer ags_buffer_audio_signal_parent_class = NULL; static AgsConnectableInterface *ags_buffer_audio_signal_parent_connectable_interface; static AgsDynamicConnectableInterface *ags_buffer_audio_signal_parent_dynamic_connectable_interface; GType ags_buffer_audio_signal_get_type() { static GType ags_type_buffer_audio_signal = 0; if(!ags_type_buffer_audio_signal){ static const GTypeInfo ags_buffer_audio_signal_info = { sizeof (AgsBufferAudioSignalClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_buffer_audio_signal_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsBufferAudioSignal), 0, /* n_preallocs */ (GInstanceInitFunc) ags_buffer_audio_signal_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_buffer_audio_signal_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_dynamic_connectable_interface_info = { (GInterfaceInitFunc) ags_buffer_audio_signal_dynamic_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_buffer_audio_signal = g_type_register_static(AGS_TYPE_RECALL_AUDIO_SIGNAL, "AgsBufferAudioSignal\0", &ags_buffer_audio_signal_info, 0); g_type_add_interface_static(ags_type_buffer_audio_signal, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_buffer_audio_signal, AGS_TYPE_DYNAMIC_CONNECTABLE, &ags_dynamic_connectable_interface_info); } return (ags_type_buffer_audio_signal); } void ags_buffer_audio_signal_class_init(AgsBufferAudioSignalClass *buffer_audio_signal) { GObjectClass *gobject; AgsRecallClass *recall; GParamSpec *param_spec; ags_buffer_audio_signal_parent_class = g_type_class_peek_parent(buffer_audio_signal); /* GObjectClass */ gobject = (GObjectClass *) buffer_audio_signal; gobject->finalize = ags_buffer_audio_signal_finalize; /* AgsRecallClass */ recall = (AgsRecallClass *) buffer_audio_signal; recall->run_init_pre = ags_buffer_audio_signal_run_init_pre; recall->run_pre = ags_buffer_audio_signal_run_pre; recall->run_inter = ags_buffer_audio_signal_run_inter; recall->duplicate = ags_buffer_audio_signal_duplicate; } void ags_buffer_audio_signal_connectable_interface_init(AgsConnectableInterface *connectable) { ags_buffer_audio_signal_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_buffer_audio_signal_connect; connectable->disconnect = ags_buffer_audio_signal_disconnect; } void ags_buffer_audio_signal_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable) { ags_buffer_audio_signal_parent_dynamic_connectable_interface = g_type_interface_peek_parent(dynamic_connectable); dynamic_connectable->connect_dynamic = ags_buffer_audio_signal_connect_dynamic; dynamic_connectable->disconnect_dynamic = ags_buffer_audio_signal_disconnect_dynamic; } void ags_buffer_audio_signal_init(AgsBufferAudioSignal *buffer_audio_signal) { AGS_RECALL(buffer_audio_signal)->name = "ags-buffer\0"; AGS_RECALL(buffer_audio_signal)->version = AGS_EFFECTS_DEFAULT_VERSION; AGS_RECALL(buffer_audio_signal)->build_id = AGS_BUILD_ID; AGS_RECALL(buffer_audio_signal)->xml_type = "ags-buffer-audio-signal\0"; AGS_RECALL(buffer_audio_signal)->port = NULL; AGS_RECALL(buffer_audio_signal)->child_type = G_TYPE_NONE; } void ags_buffer_audio_signal_finalize(GObject *gobject) { /* empty */ /* call parent */ G_OBJECT_CLASS(ags_buffer_audio_signal_parent_class)->finalize(gobject); } void ags_buffer_audio_signal_connect(AgsConnectable *connectable) { if((AGS_RECALL_CONNECTED & (AGS_RECALL(connectable)->flags)) != 0){ return; } /* call parent */ ags_buffer_audio_signal_parent_connectable_interface->connect(connectable); /* empty */ } void ags_buffer_audio_signal_disconnect(AgsConnectable *connectable) { /* call parent */ ags_buffer_audio_signal_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_buffer_audio_signal_connect_dynamic(AgsDynamicConnectable *dynamic_connectable) { if((AGS_RECALL_DYNAMIC_CONNECTED & (AGS_RECALL(dynamic_connectable)->flags)) != 0){ return; } /* call parent */ ags_buffer_audio_signal_parent_dynamic_connectable_interface->connect_dynamic(dynamic_connectable); /* empty */ } void ags_buffer_audio_signal_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable) { /* call parent */ ags_buffer_audio_signal_parent_dynamic_connectable_interface->disconnect_dynamic(dynamic_connectable); /* empty */ } void ags_buffer_audio_signal_run_init_pre(AgsRecall *recall) { AgsDevout *devout; AgsRecycling *recycling; AgsAudioSignal *destination; AgsRecallID *parent_recall_id; AgsRecyclingContainer *recycling_container; AgsBufferRecycling *buffer_recycling; AgsBufferAudioSignal *buffer_audio_signal; GList *stream; gdouble delay; guint attack; guint buffer_size; guint samplerate; guint length; gchar *str; buffer_audio_signal = AGS_BUFFER_AUDIO_SIGNAL(recall); buffer_recycling = AGS_BUFFER_RECYCLING(recall->parent); devout = AGS_DEVOUT(AGS_RECALL(buffer_audio_signal)->devout); pthread_mutex_lock(&(ags_application_mutex)); str = ags_config_get(config, AGS_CONFIG_DEVOUT, "buffer-size\0"); buffer_size = g_ascii_strtoull(str, NULL, 10); free(str); str = ags_config_get(config, AGS_CONFIG_DEVOUT, "samplerate\0"); samplerate = g_ascii_strtoull(str, NULL, 10); free(str); pthread_mutex_unlock(&(ags_application_mutex)); // recall->flags &= (~AGS_RECALL_PERSISTENT); recycling = AGS_RECALL_RECYCLING(buffer_recycling)->destination; recycling_container = recall->recall_id->recycling_container; parent_recall_id = ags_recall_id_find_recycling_container(AGS_RECALL_CHANNEL_RUN(recall->parent->parent)->destination->recall_id, recycling_container->parent); //TODO:JK: unclear attack = 0; delay = 0.0; /* create new audio signal */ destination = ags_audio_signal_new((GObject *) devout, (GObject *) recycling, (GObject *) parent_recall_id); ags_recycling_create_audio_signal_with_defaults(recycling, destination, delay, attack); length = 3; //(guint) (2.0 * devout->delay[devout->tic_counter]) + 1; ags_audio_signal_stream_resize(destination, length); ags_audio_signal_connect(destination); destination->stream_current = destination->stream_beginning; ags_recycling_add_audio_signal(recycling, destination); AGS_RECALL_AUDIO_SIGNAL(buffer_audio_signal)->destination = destination; #ifdef AGS_DEBUG g_message("buffer %x to %x\0", destination, parent_recall_id); g_message("creating destination\0"); #endif g_object_unref(destination); /* call parent */ AGS_RECALL_CLASS(ags_buffer_audio_signal_parent_class)->run_init_pre(recall); } void ags_buffer_audio_signal_run_pre(AgsRecall *recall) { /* call parent */ AGS_RECALL_CLASS(ags_buffer_audio_signal_parent_class)->run_pre(recall); } void ags_buffer_audio_signal_run_inter(AgsRecall *recall) { AgsDevout *devout; AgsRecycling *recycling; AgsAudioSignal *source, *destination; AgsBufferChannel *buffer_channel; AgsBufferRecycling *buffer_recycling; AgsBufferAudioSignal *buffer_audio_signal; GList *stream_source, *stream_destination; gboolean muted; GValue value = {0,}; /* call parent */ AGS_RECALL_CLASS(ags_buffer_audio_signal_parent_class)->run_inter(recall); /* initialize some variables */ buffer_audio_signal = AGS_BUFFER_AUDIO_SIGNAL(recall); buffer_recycling = AGS_BUFFER_RECYCLING(recall->parent); buffer_channel = AGS_BUFFER_CHANNEL(AGS_RECALL_CHANNEL_RUN(AGS_RECALL(buffer_recycling)->parent)->recall_channel); devout = AGS_DEVOUT(AGS_RECALL(buffer_audio_signal)->devout); source = AGS_RECALL_AUDIO_SIGNAL(buffer_audio_signal)->source; stream_source = source->stream_current; if(stream_source == NULL){ if((AGS_RECALL_PERSISTENT & (recall->flags)) == 0){ ags_recall_done(recall); } return; } //FIXME:JK: attack probably needs to be removed destination = AGS_RECALL_AUDIO_SIGNAL(buffer_audio_signal)->destination; g_value_init(&value, G_TYPE_BOOLEAN); ags_port_safe_read(buffer_channel->muted, &value); muted = g_value_get_boolean(&value); g_value_unset(&value); if(muted){ return; } stream_destination = destination->stream_current; if(stream_destination != NULL){ if(stream_destination->next == NULL){ ags_audio_signal_add_stream(destination); } //TODO:JK: in future release buffer size may differ if((AGS_RECALL_INITIAL_RUN & (AGS_RECALL_AUDIO_SIGNAL(recall)->flags)) != 0){ AGS_RECALL_AUDIO_SIGNAL(recall)->flags &= (~AGS_RECALL_INITIAL_RUN); ags_audio_signal_copy_buffer_to_buffer((signed short *) stream_destination->data, 1, (signed short *) stream_source->data, 1, devout->buffer_size - source->attack); }else{ if(source->attack != 0 && stream_source->prev != NULL){ ags_audio_signal_copy_buffer_to_buffer((signed short *) stream_destination->data, 1, &(((signed short *) stream_source->prev->data)[devout->buffer_size - source->attack]), 1, source->attack); } ags_audio_signal_copy_buffer_to_buffer(&(((signed short *) stream_destination->data)[source->attack]), 1, (signed short *) stream_source->data, 1, devout->buffer_size - source->attack); } } } AgsRecall* ags_buffer_audio_signal_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter) { AgsBufferAudioSignal *buffer; buffer = (AgsBufferAudioSignal *) AGS_RECALL_CLASS(ags_buffer_audio_signal_parent_class)->duplicate(recall, recall_id, n_params, parameter); return((AgsRecall *) buffer); } /** * ags_buffer_audio_signal_new: * @audio_signal: an #AgsAudioSignal * * Creates an #AgsBufferAudioSignal * * Returns: a new #AgsBufferAudioSignal * * Since: 0.4 */ AgsBufferAudioSignal* ags_buffer_audio_signal_new(AgsAudioSignal *audio_signal) { AgsBufferAudioSignal *buffer_audio_signal; buffer_audio_signal = (AgsBufferAudioSignal *) g_object_new(AGS_TYPE_BUFFER_AUDIO_SIGNAL, "source\0", audio_signal, NULL); return(buffer_audio_signal); } gsequencer-0.6.37/src/ags/audio/recall/ags_volume_recycling.h0000644000175000017500000000402512612232540021144 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_VOLUME_RECYCLING_H__ #define __AGS_VOLUME_RECYCLING_H__ #include #include #include #define AGS_TYPE_VOLUME_RECYCLING (ags_volume_recycling_get_type()) #define AGS_VOLUME_RECYCLING(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_VOLUME_RECYCLING, AgsVolumeRecycling)) #define AGS_VOLUME_RECYCLING_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_VOLUME_RECYCLING, AgsVolumeRecyclingClass)) #define AGS_IS_VOLUME_RECYCLING(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_VOLUME_RECYCLING)) #define AGS_IS_VOLUME_RECYCLING_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_VOLUME_RECYCLING)) #define AGS_VOLUME_RECYCLING_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_VOLUME_RECYCLING, AgsVolumeRecyclingClass)) typedef struct _AgsVolumeRecycling AgsVolumeRecycling; typedef struct _AgsVolumeRecyclingClass AgsVolumeRecyclingClass; struct _AgsVolumeRecycling { AgsRecallRecycling recall_recycling; }; struct _AgsVolumeRecyclingClass { AgsRecallRecyclingClass recall_recycling; }; GType ags_volume_recycling_get_type(); AgsVolumeRecycling* ags_volume_recycling_new(AgsRecycling *recycling); #endif /*__AGS_VOLUME_RECYCLING_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_loop_channel.h0000644000175000017500000000400412612232540020234 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_LOOP_CHANNEL_H__ #define __AGS_LOOP_CHANNEL_H__ #include #include #include #include #define AGS_TYPE_LOOP_CHANNEL (ags_loop_channel_get_type()) #define AGS_LOOP_CHANNEL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_LOOP_CHANNEL, AgsLoopChannel)) #define AGS_LOOP_CHANNEL_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_LOOP_CHANNEL, AgsLoopChannelClass)) #define AGS_IS_LOOP_CHANNEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_LOOP_CHANNEL)) #define AGS_IS_LOOP_CHANNEL_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_LOOP_CHANNEL)) #define AGS_LOOP_CHANNEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_LOOP_CHANNEL, AgsLoopChannelClass)) typedef struct _AgsLoopChannel AgsLoopChannel; typedef struct _AgsLoopChannelClass AgsLoopChannelClass; struct _AgsLoopChannel { AgsRecallChannel recall_channel; AgsDelayAudio *delay_audio; gulong sequencer_duration_changed_handler; }; struct _AgsLoopChannelClass { AgsRecallChannelClass recall_channel; }; GType ags_loop_channel_get_type(); AgsLoopChannel* ags_loop_channel_new(); #endif /*__AGS_LOOP_CHANNEL_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_play_channel_run_master.c0000644000175000017500000005376112626272146022513 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void ags_play_channel_run_master_class_init(AgsPlayChannelRunMasterClass *play_channel_run_master); void ags_play_channel_run_master_connectable_interface_init(AgsConnectableInterface *connectable); void ags_play_channel_run_master_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable); void ags_play_channel_run_master_plugin_interface_init(AgsPluginInterface *plugin); void ags_play_channel_run_master_init(AgsPlayChannelRunMaster *play_channel_run_master); void ags_play_channel_run_master_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_play_channel_run_master_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_play_channel_run_master_connect(AgsConnectable *connectable); void ags_play_channel_run_master_disconnect(AgsConnectable *connectable); void ags_play_channel_run_master_connect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_play_channel_run_master_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_play_channel_run_master_finalize(GObject *gobject); void ags_play_channel_run_master_run_init_pre(AgsRecall *recall); void ags_play_channel_run_master_done(AgsRecall *recall); void ags_play_channel_run_master_remove(AgsRecall *recall); void ags_play_channel_run_master_cancel(AgsRecall *recall); void ags_play_channel_run_master_resolve_dependencies(AgsRecall *recall); AgsRecall* ags_play_channel_run_master_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter); void ags_play_channel_run_master_remap_child_source(AgsPlayChannelRunMaster *play_channel_run_master, AgsRecycling *old_start_region, AgsRecycling *old_end_region, AgsRecycling *new_start_region, AgsRecycling *new_end_region); void ags_play_channel_run_master_remap_dependencies(AgsPlayChannelRunMaster *play_channel_run_master, AgsRecycling *old_start_changed_region, AgsRecycling *old_end_changed_region, AgsRecycling *new_start_changed_region, AgsRecycling *new_end_changed_region); void ags_play_channel_run_master_source_recycling_changed_callback(AgsChannel *channel, AgsRecycling *old_start_region, AgsRecycling *old_end_region, AgsRecycling *new_start_region, AgsRecycling *new_end_region, AgsRecycling *old_start_changed_region, AgsRecycling *old_end_changed_region, AgsRecycling *new_start_changed_region, AgsRecycling *new_end_changed_region, AgsPlayChannelRunMaster *play_channel_run_master); void ags_play_channel_run_master_stream_channel_done_callback(AgsRecall *recall, AgsPlayChannelRunMasterStreamer *streamer); /** * SECTION:ags_play_channel_master_run * @short_description: plays channel as toplevel * @title: AgsPlayChannelMaster * @section_id: * @include: ags/audio/recall/ags_play_channel_master.h * * The #AgsPlayChannelMaster class plays the channel within toplevel context. */ enum{ PROP_0, PROP_STREAM_CHANNEL_RUN, }; static gpointer ags_play_channel_run_master_parent_class = NULL; static AgsConnectableInterface *ags_play_channel_run_master_parent_connectable_interface; static AgsDynamicConnectableInterface *ags_play_channel_run_master_parent_dynamic_connectable_interface; static AgsPluginInterface *ags_play_channel_run_master_parent_plugin_interface; GType ags_play_channel_run_master_get_type() { static GType ags_type_play_channel_run_master = 0; if(!ags_type_play_channel_run_master){ static const GTypeInfo ags_play_channel_run_master_info = { sizeof (AgsPlayChannelRunMasterClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_play_channel_run_master_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsPlayChannelRunMaster), 0, /* n_preallocs */ (GInstanceInitFunc) ags_play_channel_run_master_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_play_channel_run_master_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_dynamic_connectable_interface_info = { (GInterfaceInitFunc) ags_play_channel_run_master_dynamic_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_plugin_interface_info = { (GInterfaceInitFunc) ags_play_channel_run_master_plugin_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_play_channel_run_master = g_type_register_static(AGS_TYPE_RECALL_CHANNEL_RUN, "AgsPlayChannelRunMaster\0", &ags_play_channel_run_master_info, 0); g_type_add_interface_static(ags_type_play_channel_run_master, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_play_channel_run_master, AGS_TYPE_DYNAMIC_CONNECTABLE, &ags_dynamic_connectable_interface_info); g_type_add_interface_static(ags_type_play_channel_run_master, AGS_TYPE_PLUGIN, &ags_plugin_interface_info); } return(ags_type_play_channel_run_master); } void ags_play_channel_run_master_class_init(AgsPlayChannelRunMasterClass *play_channel_run_master) { GObjectClass *gobject; AgsRecallClass *recall; GParamSpec *param_spec; ags_play_channel_run_master_parent_class = g_type_class_peek_parent(play_channel_run_master); /* GObjectClass */ gobject = (GObjectClass *) play_channel_run_master; gobject->set_property = ags_play_channel_run_master_set_property; gobject->get_property = ags_play_channel_run_master_get_property; gobject->finalize = ags_play_channel_run_master_finalize; /* properties */ param_spec = g_param_spec_object("stream-channel-run\0", "assigned AgsStreamChannelRun\0", "an assigned AgsStreamChannelRun\0", AGS_TYPE_STREAM_CHANNEL_RUN, G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_STREAM_CHANNEL_RUN, param_spec); /* AgsRecallClass */ recall = (AgsRecallClass *) play_channel_run_master; recall->run_init_pre = ags_play_channel_run_master_run_init_pre; recall->done = ags_play_channel_run_master_done; recall->cancel = ags_play_channel_run_master_cancel; recall->resolve_dependencies = ags_play_channel_run_master_resolve_dependencies; recall->duplicate = ags_play_channel_run_master_duplicate; } void ags_play_channel_run_master_connectable_interface_init(AgsConnectableInterface *connectable) { ags_play_channel_run_master_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_play_channel_run_master_connect; connectable->disconnect = ags_play_channel_run_master_disconnect; } void ags_play_channel_run_master_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable) { ags_play_channel_run_master_parent_dynamic_connectable_interface = g_type_interface_peek_parent(dynamic_connectable); dynamic_connectable->connect_dynamic = ags_play_channel_run_master_connect_dynamic; dynamic_connectable->disconnect_dynamic = ags_play_channel_run_master_disconnect_dynamic; } void ags_play_channel_run_master_plugin_interface_init(AgsPluginInterface *plugin) { ags_play_channel_run_master_parent_plugin_interface = g_type_interface_peek_parent(plugin); } void ags_play_channel_run_master_init(AgsPlayChannelRunMaster *play_channel_run_master) { AGS_RECALL(play_channel_run_master)->name = "ags-play\0"; AGS_RECALL(play_channel_run_master)->version = AGS_EFFECTS_DEFAULT_VERSION; AGS_RECALL(play_channel_run_master)->build_id = AGS_BUILD_ID; AGS_RECALL(play_channel_run_master)->xml_type = "ags-play-channel-run-master\0"; AGS_RECALL(play_channel_run_master)->port = NULL; AGS_RECALL(play_channel_run_master)->flags |= (AGS_RECALL_INPUT_ORIENTATED | AGS_RECALL_PERSISTENT); AGS_RECALL(play_channel_run_master)->child_type = AGS_TYPE_PLAY_RECYCLING; play_channel_run_master->flags = 0; play_channel_run_master->streamer = NULL; } void ags_play_channel_run_master_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsPlayChannelRunMaster *play_channel_run_master; play_channel_run_master = AGS_PLAY_CHANNEL_RUN_MASTER(gobject); switch(prop_id){ case PROP_STREAM_CHANNEL_RUN: { AgsStreamChannelRun *stream_channel_run; AgsPlayChannelRunMasterStreamer *streamer; gboolean is_template; stream_channel_run = (AgsStreamChannelRun *) g_value_get_object(value); if(g_list_find(play_channel_run_master->streamer, stream_channel_run) != NULL) return; if(stream_channel_run != NULL && (AGS_RECALL_TEMPLATE & (AGS_RECALL(stream_channel_run)->flags)) != 0){ is_template = TRUE; }else{ is_template = FALSE; } if(stream_channel_run != NULL){ g_object_ref(G_OBJECT(stream_channel_run)); streamer = ags_play_channel_run_master_streamer_alloc(play_channel_run_master, stream_channel_run); if(is_template){ ags_recall_add_dependency(AGS_RECALL(play_channel_run_master), ags_recall_dependency_new((GObject *) stream_channel_run)); }else{ if((AGS_RECALL_RUN_INITIALIZED & (AGS_RECALL(play_channel_run_master)->flags)) != 0){ streamer->done_handler = g_signal_connect(G_OBJECT(stream_channel_run), "done\0", G_CALLBACK(ags_play_channel_run_master_stream_channel_done_callback), play_channel_run_master); } } } play_channel_run_master->streamer = g_list_prepend(play_channel_run_master->streamer, streamer); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_play_channel_run_master_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsPlayChannelRunMaster *play_channel_run_master; play_channel_run_master = AGS_PLAY_CHANNEL_RUN_MASTER(gobject); switch(prop_id){ default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_play_channel_run_master_finalize(GObject *gobject) { /* empty */ /* call parent */ G_OBJECT_CLASS(ags_play_channel_run_master_parent_class)->finalize(gobject); } void ags_play_channel_run_master_connect(AgsConnectable *connectable) { AgsPlayChannel *play_channel; AgsPlayChannelRunMaster *play_channel_run_master; GObject *gobject; if((AGS_RECALL_CONNECTED & (AGS_RECALL(connectable)->flags)) != 0){ return; } ags_play_channel_run_master_parent_connectable_interface->connect(connectable); /* AgsPlayChannelRunMaster */ play_channel_run_master = AGS_PLAY_CHANNEL_RUN_MASTER(connectable); /* AgsPlayChannel */ play_channel = AGS_PLAY_CHANNEL(AGS_RECALL_CHANNEL_RUN(play_channel_run_master)->recall_channel); /* source */ gobject = G_OBJECT(AGS_RECALL_CHANNEL(play_channel)->source); play_channel_run_master->source_recycling_changed_handler = g_signal_connect(gobject, "recycling_changed\0", G_CALLBACK(ags_play_channel_run_master_source_recycling_changed_callback), play_channel_run_master); } void ags_play_channel_run_master_disconnect(AgsConnectable *connectable) { AgsPlayChannel *play_channel; AgsPlayChannelRunMaster *play_channel_run_master; GObject *gobject; ags_play_channel_run_master_parent_connectable_interface->disconnect(connectable); /* AgsPlayChannelRunMaster */ play_channel_run_master = AGS_PLAY_CHANNEL_RUN_MASTER(connectable); /* AgsPlayChannel */ play_channel = AGS_PLAY_CHANNEL(AGS_RECALL_CHANNEL_RUN(play_channel_run_master)->recall_channel); /* source */ gobject = G_OBJECT(AGS_RECALL_CHANNEL(play_channel)->source); g_signal_handler_disconnect(gobject, play_channel_run_master->source_recycling_changed_handler); } void ags_play_channel_run_master_connect_dynamic(AgsDynamicConnectable *dynamic_connectable) { AgsPlayChannelRunMaster *play_channel_run_master; GObject *gobject; AgsPlayChannelRunMasterStreamer *streamer; GList *list; if((AGS_RECALL_DYNAMIC_CONNECTED & (AGS_RECALL(dynamic_connectable)->flags)) != 0){ return; } ags_play_channel_run_master_parent_dynamic_connectable_interface->connect_dynamic(dynamic_connectable); /* AgsPlayChannelRunMaster */ play_channel_run_master = AGS_PLAY_CHANNEL_RUN_MASTER(dynamic_connectable); /* stream_channel_run */ list = play_channel_run_master->streamer; while(list != NULL){ streamer = (AgsPlayChannelRunMasterStreamer *) list->data; gobject = G_OBJECT(streamer->stream_channel_run); streamer->done_handler = g_signal_connect(gobject, "done\0", G_CALLBACK(ags_play_channel_run_master_stream_channel_done_callback), streamer); list = list->next; } } void ags_play_channel_run_master_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable) { AgsPlayChannelRunMaster *play_channel_run_master; GObject *gobject; AgsPlayChannelRunMasterStreamer *streamer; GList *list; ags_play_channel_run_master_parent_dynamic_connectable_interface->disconnect_dynamic(dynamic_connectable); /* AgsPlayChannelRunMaster */ play_channel_run_master = AGS_PLAY_CHANNEL_RUN_MASTER(dynamic_connectable); /* stream_channel_run */ list = play_channel_run_master->streamer; while(list != NULL){ streamer = (AgsPlayChannelRunMasterStreamer *) list->data; gobject = G_OBJECT(streamer->stream_channel_run); g_signal_handler_disconnect(gobject, streamer->done_handler); list = list->next; } } void ags_play_channel_run_master_run_init_pre(AgsRecall *recall) { AgsRecallChannelRun *recall_channel_run; AgsPlayChannelRunMaster *play_channel_run_master; AGS_RECALL_CLASS(ags_play_channel_run_master_parent_class)->run_init_pre(recall); play_channel_run_master = AGS_PLAY_CHANNEL_RUN_MASTER(recall); recall_channel_run = AGS_RECALL_CHANNEL_RUN(recall); ags_play_channel_run_master_remap_dependencies(play_channel_run_master, NULL, NULL, recall_channel_run->source->first_recycling, recall_channel_run->source->last_recycling); } void ags_play_channel_run_master_done(AgsRecall *recall) { AGS_RECALL_CLASS(ags_play_channel_run_master_parent_class)->done(recall); /* empty */ } void ags_play_channel_run_master_cancel(AgsRecall *recall) { AGS_RECALL_CLASS(ags_play_channel_run_master_parent_class)->cancel(recall); //TODO:JK: implement me } void ags_play_channel_run_master_resolve_dependencies(AgsRecall *recall) { AgsRecall *template; AgsPlayChannelRunMaster *play_channel_run_master; AgsRecallDependency *recall_dependency; AgsStreamChannelRun *stream_channel_run; GList *list; AgsRecallID *recall_id; guint i, i_stop; play_channel_run_master = AGS_PLAY_CHANNEL_RUN_MASTER(recall); template = AGS_RECALL(ags_recall_find_template(AGS_RECALL_CONTAINER(recall->container)->recall_channel_run)->data); list = template->dependencies; recall_id = recall->recall_id; stream_channel_run = NULL; i_stop = 1; for(i = 0; i < i_stop && list != NULL;){ recall_dependency = AGS_RECALL_DEPENDENCY(list->data); if(AGS_IS_STREAM_CHANNEL_RUN(recall_dependency->dependency)){ stream_channel_run = (AgsStreamChannelRun *) ags_recall_dependency_resolve(recall_dependency, recall_id); g_object_set(G_OBJECT(recall), "stream-channel-run\0", stream_channel_run, NULL); i++; } list = list->next; } } AgsRecall* ags_play_channel_run_master_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter) { AgsPlayChannelRunMaster *play_channel_run_master, *copy; play_channel_run_master = (AgsPlayChannelRunMaster *) recall; copy = (AgsPlayChannelRunMaster *) AGS_RECALL_CLASS(ags_play_channel_run_master_parent_class)->duplicate(recall, recall_id, n_params, parameter); return((AgsRecall *) copy); } void ags_play_channel_run_master_remap_dependencies(AgsPlayChannelRunMaster *play_channel_run_master, AgsRecycling *old_start_region, AgsRecycling *old_end_region, AgsRecycling *new_start_region, AgsRecycling *new_end_region) { AgsRecallContainer *container; AgsPlayChannelRunMaster *current_master; AgsChannel *current; AgsRecycling *recycling; GList *list, *streamer, *master; /* remove old */ if(old_start_region != NULL){ current = NULL; recycling = old_start_region; while(recycling != old_end_region->next){ if(current != AGS_CHANNEL(recycling->channel)){ current = AGS_CHANNEL(recycling->channel); list = ags_recall_get_dependencies(AGS_RECALL(play_channel_run_master)); while((list = ags_recall_dependency_find_dependency_by_provider(list, G_OBJECT(current))) != NULL){ /* remove dependency */ ags_recall_remove_dependency(AGS_RECALL(play_channel_run_master), AGS_RECALL(AGS_RECALL_DEPENDENCY(list->data)->dependency)); /* remove streamer */ streamer = ags_play_channel_run_master_find_streamer(play_channel_run_master->streamer, AGS_STREAM_CHANNEL_RUN(AGS_RECALL_DEPENDENCY(list->data)->dependency)); if(streamer != NULL){ play_channel_run_master->streamer = g_list_remove(play_channel_run_master->streamer, streamer->data); } list = list->next; } } recycling = recycling->next; } } /* add new */ if(new_start_region != NULL){ current = NULL; recycling = new_start_region; while(recycling != new_end_region->next){ if(current != AGS_CHANNEL(recycling->channel)){ current = AGS_CHANNEL(recycling->channel); list = ags_recall_template_find_type(current->play, AGS_TYPE_STREAM_CHANNEL_RUN); if(list != NULL){ g_object_set(G_OBJECT(play_channel_run_master), "stream-channel-run\0", AGS_STREAM_CHANNEL_RUN(list->data), NULL); container = AGS_RECALL_CONTAINER(AGS_RECALL(play_channel_run_master)->container); master = container->recall_channel_run; while(master != NULL){ current_master = AGS_PLAY_CHANNEL_RUN_MASTER(master->data); if((AGS_RECALL_TEMPLATE & (AGS_RECALL(current_master)->flags)) == 0){ g_object_set(G_OBJECT(current_master), "stream-channel-run\0", AGS_STREAM_CHANNEL_RUN(list->data), NULL); } master = master->next; } } } recycling = recycling->next; } } } void ags_play_channel_run_master_source_recycling_changed_callback(AgsChannel *channel, AgsRecycling *old_start_region, AgsRecycling *old_end_region, AgsRecycling *new_start_region, AgsRecycling *new_end_region, AgsRecycling *old_start_changed_region, AgsRecycling *old_end_changed_region, AgsRecycling *new_start_changed_region, AgsRecycling *new_end_changed_region, AgsPlayChannelRunMaster *play_channel_run_master) { if((AGS_RECALL_TEMPLATE & (play_channel_run_master->flags)) != 0){ ags_play_channel_run_master_remap_dependencies(play_channel_run_master, old_start_changed_region, old_end_changed_region, new_start_changed_region, new_end_changed_region); } } void ags_play_channel_run_master_stream_channel_done_callback(AgsRecall *recall, AgsPlayChannelRunMasterStreamer *streamer) { AgsPlayChannelRunMaster *play_channel_run_master; play_channel_run_master = streamer->play_channel_run_master; play_channel_run_master->streamer = g_list_remove(play_channel_run_master->streamer, streamer); if(play_channel_run_master->streamer == NULL){ // play_channel_run_master->flags |= AGS_PLAY_CHANNEL_RUN_MASTER_TERMINATING; } } AgsPlayChannelRunMasterStreamer* ags_play_channel_run_master_streamer_alloc(AgsPlayChannelRunMaster *play_channel_run_master, AgsStreamChannelRun *stream_channel_run) { AgsPlayChannelRunMasterStreamer *streamer; streamer = (AgsPlayChannelRunMasterStreamer *) malloc(sizeof(AgsPlayChannelRunMasterStreamer)); streamer->play_channel_run_master = play_channel_run_master; streamer->stream_channel_run = stream_channel_run; return(streamer); } GList* ags_play_channel_run_master_find_streamer(GList *list, AgsStreamChannelRun *stream_channel_run) { while(list != NULL){ if(AGS_PLAY_CHANNEL_RUN_MASTER_STREAMER(list->data)->stream_channel_run == stream_channel_run) return(list); list = list->next; } return(NULL); } /** * ags_play_channel_master_run_new: * * Creates an #AgsPlayChannelMasterRun * * Returns: a new #AgsPlayChannelMasterRun * * Since: 0.4 */ AgsPlayChannelRunMaster* ags_play_channel_run_master_new() { AgsPlayChannelRunMaster *play_channel_run_master; play_channel_run_master = (AgsPlayChannelRunMaster *) g_object_new(AGS_TYPE_PLAY_CHANNEL_RUN_MASTER, NULL); return(play_channel_run_master); } gsequencer-0.6.37/src/ags/audio/recall/ags_buffer_recycling.h0000644000175000017500000000402512612232540021106 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_BUFFER_RECYCLING_H__ #define __AGS_BUFFER_RECYCLING_H__ #include #include #include #define AGS_TYPE_BUFFER_RECYCLING (ags_buffer_recycling_get_type()) #define AGS_BUFFER_RECYCLING(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_BUFFER_RECYCLING, AgsBufferRecycling)) #define AGS_BUFFER_RECYCLING_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_BUFFER_RECYCLING, AgsBufferRecyclingClass)) #define AGS_IS_BUFFER_RECYCLING(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_BUFFER_RECYCLING)) #define AGS_IS_BUFFER_RECYCLING_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_BUFFER_RECYCLING)) #define AGS_BUFFER_RECYCLING_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_BUFFER_RECYCLING, AgsBufferRecyclingClass)) typedef struct _AgsBufferRecycling AgsBufferRecycling; typedef struct _AgsBufferRecyclingClass AgsBufferRecyclingClass; struct _AgsBufferRecycling { AgsRecallRecycling recall_recycling; }; struct _AgsBufferRecyclingClass { AgsRecallRecyclingClass recall_recycling; }; GType ags_buffer_recycling_get_type(); AgsBufferRecycling* ags_buffer_recycling_new(AgsRecycling *recycling); #endif /*__AGS_BUFFER_RECYCLING_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_stream_channel.c0000644000175000017500000002125712626272146020575 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include void ags_stream_channel_class_init(AgsStreamChannelClass *stream_channel); void ags_stream_channel_connectable_interface_init(AgsConnectableInterface *connectable); void ags_stream_channel_plugin_interface_init(AgsPluginInterface *plugin); void ags_stream_channel_init(AgsStreamChannel *stream_channel); void ags_stream_channel_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_stream_channel_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_stream_channel_connect(AgsConnectable *connectable); void ags_stream_channel_disconnect(AgsConnectable *connectable); void ags_stream_channel_set_ports(AgsPlugin *plugin, GList *port); void ags_stream_channel_finalize(GObject *gobject); /** * SECTION:ags_stream_channel * @short_description: streams channel * @title: AgsStreamChannel * @section_id: * @include: ags/audio/recall/ags_stream_channel.h * * The #AgsStreamChannel class provides ports to the effect processor. */ enum{ PROP_0, PROP_AUTO_SENSE, }; static gpointer ags_stream_channel_parent_class = NULL; static AgsConnectableInterface *ags_stream_channel_parent_connectable_interface; static AgsPluginInterface *ags_stream_channel_parent_plugin_interface; extern AgsConfig *config; static const gchar *ags_stream_channel_plugin_name = "ags-stream\0"; static const gchar *ags_stream_channel_plugin_specifier[] = { "./auto-sense[0]\0", }; static const gchar *ags_stream_channel_plugin_control_port[] = { "1/1\0", }; GType ags_stream_channel_get_type() { static GType ags_type_stream_channel = 0; if(!ags_type_stream_channel){ static const GTypeInfo ags_stream_channel_info = { sizeof (AgsStreamChannelClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_stream_channel_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsStreamChannel), 0, /* n_preallocs */ (GInstanceInitFunc) ags_stream_channel_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_stream_channel_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_plugin_interface_info = { (GInterfaceInitFunc) ags_stream_channel_plugin_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_stream_channel = g_type_register_static(AGS_TYPE_RECALL_CHANNEL, "AgsStreamChannel\0", &ags_stream_channel_info, 0); g_type_add_interface_static(ags_type_stream_channel, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_stream_channel, AGS_TYPE_PLUGIN, &ags_plugin_interface_info); } return (ags_type_stream_channel); } void ags_stream_channel_class_init(AgsStreamChannelClass *stream_channel) { GObjectClass *gobject; AgsRecallClass *recall; GParamSpec *param_spec; ags_stream_channel_parent_class = g_type_class_peek_parent(stream_channel); /* GObjectClass */ gobject = (GObjectClass *) stream_channel; gobject->set_property = ags_stream_channel_set_property; gobject->get_property = ags_stream_channel_get_property; gobject->finalize = ags_stream_channel_finalize; /* properties */ param_spec = g_param_spec_object("auto-sense\0", "mute channel\0", "Mute the channel\0", AGS_TYPE_PORT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_AUTO_SENSE, param_spec); } void ags_stream_channel_connectable_interface_init(AgsConnectableInterface *connectable) { ags_stream_channel_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_stream_channel_connect; connectable->disconnect = ags_stream_channel_disconnect; } void ags_stream_channel_plugin_interface_init(AgsPluginInterface *plugin) { ags_stream_channel_parent_plugin_interface = g_type_interface_peek_parent(plugin); plugin->set_ports = ags_stream_channel_set_ports; } void ags_stream_channel_init(AgsStreamChannel *stream_channel) { GList *port; gchar *str; AGS_RECALL(stream_channel)->name = "ags-stream\0"; AGS_RECALL(stream_channel)->version = AGS_EFFECTS_DEFAULT_VERSION; AGS_RECALL(stream_channel)->build_id = AGS_BUILD_ID; AGS_RECALL(stream_channel)->xml_type = "ags-stream-channel\0"; port = NULL; stream_channel->auto_sense = g_object_new(AGS_TYPE_PORT, "plugin-name\0", ags_stream_channel_plugin_name, "specifier\0", ags_stream_channel_plugin_specifier[0], "control-port\0", ags_stream_channel_plugin_control_port[0], "port-value-is-pointer\0", FALSE, "port-value-type\0", G_TYPE_BOOLEAN, "port-value-size\0", sizeof(gboolean), "port-value-length\0", 1, NULL); str = ags_config_get(config, AGS_CONFIG_RECALL, "auto-sense\0"); stream_channel->auto_sense->port_value.ags_port_boolean = ((!g_strcmp0(str, "true\0") ) ? TRUE: FALSE); free(str); port = g_list_prepend(port, stream_channel->auto_sense); /* set port */ AGS_RECALL(stream_channel)->port = port; } void ags_stream_channel_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsStreamChannel *stream_channel; stream_channel = AGS_STREAM_CHANNEL(gobject); switch(prop_id){ case PROP_AUTO_SENSE: { AgsPort *port; port = (AgsPort *) g_value_get_object(value); if(port == stream_channel->auto_sense){ return; } if(stream_channel->auto_sense != NULL){ g_object_unref(G_OBJECT(stream_channel->auto_sense)); } if(port != NULL){ g_object_ref(G_OBJECT(port)); } stream_channel->auto_sense = port; } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_stream_channel_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsStreamChannel *stream_channel; stream_channel = AGS_STREAM_CHANNEL(gobject); switch(prop_id){ case PROP_AUTO_SENSE: { g_value_set_object(value, stream_channel->auto_sense); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_stream_channel_finalize(GObject *gobject) { AgsStreamChannel *stream_channel; stream_channel = AGS_STREAM_CHANNEL(gobject); if(stream_channel->auto_sense != NULL){ g_object_unref(G_OBJECT(stream_channel->auto_sense)); } /* call parent */ G_OBJECT_CLASS(ags_stream_channel_parent_class)->finalize(gobject); } void ags_stream_channel_connect(AgsConnectable *connectable) { if((AGS_RECALL_CONNECTED & (AGS_RECALL(connectable)->flags)) != 0){ return; } ags_stream_channel_parent_connectable_interface->connect(connectable); /* empty */ } void ags_stream_channel_disconnect(AgsConnectable *connectable) { ags_stream_channel_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_stream_channel_set_ports(AgsPlugin *plugin, GList *port) { while(port != NULL){ if(!strncmp(AGS_PORT(port->data)->specifier, "./auto-sense[0]\0", 9)){ g_object_set(G_OBJECT(plugin), "auto-sense\0", AGS_PORT(port->data), NULL); } port = port->next; } } /** * ags_stream_channel_new: * * Creates an #AgsStreamChannel * * Returns: a new #AgsStreamChannel * * Since: 0.4 */ AgsStreamChannel* ags_stream_channel_new() { AgsStreamChannel *stream_channel; stream_channel = (AgsStreamChannel *) g_object_new(AGS_TYPE_STREAM_CHANNEL, NULL); return(stream_channel); } gsequencer-0.6.37/src/ags/audio/recall/ags_mute_recycling.h0000644000175000017500000000404412612232540020610 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_MUTE_RECYCLING_H__ #define __AGS_MUTE_RECYCLING_H__ #include #include #include #include #include #define AGS_TYPE_MUTE_RECYCLING (ags_mute_recycling_get_type()) #define AGS_MUTE_RECYCLING(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_MUTE_RECYCLING, AgsMuteRecycling)) #define AGS_MUTE_RECYCLING_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_MUTE_RECYCLING, AgsMuteRecyclingClass)) #define AGS_IS_MUTE_RECYCLING(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_MUTE_RECYCLING)) #define AGS_IS_MUTE_RECYCLING_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_MUTE_RECYCLING)) #define AGS_MUTE_RECYCLING_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_MUTE_RECYCLING, AgsMuteRecyclingClass)) typedef struct _AgsMuteRecycling AgsMuteRecycling; typedef struct _AgsMuteRecyclingClass AgsMuteRecyclingClass; struct _AgsMuteRecycling { AgsRecallRecycling recall_recycling; }; struct _AgsMuteRecyclingClass { AgsRecallRecyclingClass recall_recycling; }; GType ags_mute_recycling_get_type(); AgsMuteRecycling* ags_mute_recycling_new(AgsRecycling *source); #endif /*__AGS_MUTE_RECYCLING_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_peak_channel.c0000644000175000017500000002775712626272146020235 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include void ags_peak_channel_class_init(AgsPeakChannelClass *peak_channel); void ags_peak_channel_connectable_interface_init(AgsConnectableInterface *connectable); void ags_peak_channel_plugin_interface_init(AgsPluginInterface *plugin); void ags_peak_channel_init(AgsPeakChannel *peak_channel); void ags_peak_channel_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_peak_channel_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_peak_channel_connect(AgsConnectable *connectable); void ags_peak_channel_disconnect(AgsConnectable *connectable); void ags_peak_channel_set_ports(AgsPlugin *plugin, GList *port); void ags_peak_channel_finalize(GObject *gobject); extern AgsConfig *config; /** * SECTION:ags_peak_channel * @short_description: peaks channel * @title: AgsPeakChannel * @section_id: * @include: ags/audio/recall/ags_peak_channel.h * * The #AgsPeakChannel class provides ports to the effect processor. */ enum{ PROP_0, PROP_PEAK, }; static gpointer ags_peak_channel_parent_class = NULL; static AgsConnectableInterface *ags_peak_channel_parent_connectable_interface; static AgsPluginInterface *ags_peak_channel_parent_plugin_interface; static const gchar *ags_peak_channel_plugin_name = "ags-peak\0"; static const gchar *ags_peak_channel_plugin_specifier[] = { "./peak[0]\0", }; static const gchar *ags_peak_channel_plugin_control_port[] = { "1/1\0", }; GType ags_peak_channel_get_type() { static GType ags_type_peak_channel = 0; if(!ags_type_peak_channel){ static const GTypeInfo ags_peak_channel_info = { sizeof (AgsPeakChannelClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_peak_channel_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsPeakChannel), 0, /* n_preallocs */ (GInstanceInitFunc) ags_peak_channel_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_peak_channel_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_plugin_interface_info = { (GInterfaceInitFunc) ags_peak_channel_plugin_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_peak_channel = g_type_register_static(AGS_TYPE_RECALL_CHANNEL, "AgsPeakChannel\0", &ags_peak_channel_info, 0); g_type_add_interface_static(ags_type_peak_channel, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_peak_channel, AGS_TYPE_PLUGIN, &ags_plugin_interface_info); } return(ags_type_peak_channel); } void ags_peak_channel_connectable_interface_init(AgsConnectableInterface *connectable) { ags_peak_channel_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_peak_channel_connect; connectable->disconnect = ags_peak_channel_disconnect; } void ags_peak_channel_plugin_interface_init(AgsPluginInterface *plugin) { ags_peak_channel_parent_plugin_interface = g_type_interface_peek_parent(plugin); plugin->set_ports = ags_peak_channel_set_ports; } void ags_peak_channel_class_init(AgsPeakChannelClass *peak_channel) { GObjectClass *gobject; AgsRecallClass *recall; GParamSpec *param_spec; ags_peak_channel_parent_class = g_type_class_peek_parent(peak_channel); /* GObjectClass */ gobject = (GObjectClass *) peak_channel; gobject->set_property = ags_peak_channel_set_property; gobject->get_property = ags_peak_channel_get_property; gobject->finalize = ags_peak_channel_finalize; /* AgsRecallClass */ recall = (AgsRecallClass *) peak_channel; /* properties */ param_spec = g_param_spec_object("peak\0", "peak of channel\0", "The peak of channel\0", AGS_TYPE_PORT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_PEAK, param_spec); } void ags_peak_channel_init(AgsPeakChannel *peak_channel) { GList *port; AGS_RECALL(peak_channel)->name = "ags-peak\0"; AGS_RECALL(peak_channel)->version = AGS_EFFECTS_DEFAULT_VERSION; AGS_RECALL(peak_channel)->build_id = AGS_BUILD_ID; AGS_RECALL(peak_channel)->xml_type = "ags-peak-channel\0"; port = NULL; peak_channel->peak = g_object_new(AGS_TYPE_PORT, "plugin-name\0", ags_peak_channel_plugin_name, "specifier\0", ags_peak_channel_plugin_specifier[0], "control-port\0", ags_peak_channel_plugin_control_port[0], "port-value-is-pointer\0", FALSE, "port-value-type\0", G_TYPE_DOUBLE, "port-value-size\0", sizeof(gdouble), "port-value-length\0", 1, NULL); peak_channel->peak->port_value.ags_port_double = FALSE; port = g_list_prepend(port, peak_channel->peak); /* set port */ AGS_RECALL(peak_channel)->port = port; } void ags_peak_channel_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsPeakChannel *peak_channel; peak_channel = AGS_PEAK_CHANNEL(gobject); switch(prop_id){ case PROP_PEAK: { AgsPort *port; port = (AgsPort *) g_value_get_object(value); if(port == peak_channel->peak){ return; } if(peak_channel->peak != NULL){ g_object_unref(G_OBJECT(peak_channel->peak)); } if(port != NULL){ g_object_ref(G_OBJECT(port)); } peak_channel->peak = port; } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_peak_channel_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsPeakChannel *peak_channel; peak_channel = AGS_PEAK_CHANNEL(gobject); switch(prop_id){ case PROP_PEAK: { g_value_set_object(value, peak_channel->peak); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_peak_channel_finalize(GObject *gobject) { AgsPeakChannel *peak_channel; peak_channel = AGS_PEAK_CHANNEL(gobject); if(peak_channel->peak != NULL){ g_object_unref(G_OBJECT(peak_channel->peak)); } /* call parent */ G_OBJECT_CLASS(ags_peak_channel_parent_class)->finalize(gobject); } void ags_peak_channel_connect(AgsConnectable *connectable) { if((AGS_RECALL_CONNECTED & (AGS_RECALL(connectable)->flags)) != 0){ return; } ags_peak_channel_parent_connectable_interface->connect(connectable); /* empty */ } void ags_peak_channel_disconnect(AgsConnectable *connectable) { ags_peak_channel_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_peak_channel_set_ports(AgsPlugin *plugin, GList *port) { while(port != NULL){ if(!strncmp(AGS_PORT(port->data)->specifier, "./peak[0]\0", 9)){ g_object_set(G_OBJECT(plugin), "peak\0", AGS_PORT(port->data), NULL); } port = port->next; } } void ags_peak_channel_retrieve_peak(AgsPeakChannel *peak_channel, gboolean is_play) { AgsRecall *recall; AgsChannel *source; AgsRecycling *recycling; GList *audio_signal; signed short *buffer; double current_value; guint buffer_size; static const double scale_precision = 10.0; guint limit; guint i; gchar *str; GValue value = {0,}; if(peak_channel == NULL){ return; } recall = (AgsRecall *) peak_channel; str = ags_config_get(config, AGS_CONFIG_DEVOUT, "buffer-size\0"); buffer_size = g_ascii_strtoull(str, NULL, 10); free(str); source = AGS_RECALL_CHANNEL(peak_channel)->source; recycling = source->first_recycling; /* initialize buffer */ buffer = (signed short *) malloc(buffer_size * sizeof(signed short)); memset(buffer, 0, buffer_size * sizeof(signed short)); while(recycling != source->last_recycling->next){ audio_signal = recycling->audio_signal; while(audio_signal != NULL){ if((AGS_IS_INPUT(source) && (AGS_AUDIO_INPUT_HAS_RECYCLING & (AGS_AUDIO(source->audio)->flags)) != 0) || (AGS_IS_OUTPUT(source) && (AGS_AUDIO_OUTPUT_HAS_RECYCLING & (AGS_AUDIO(source->audio)->flags)) != 0)){ if((AGS_AUDIO_SIGNAL_TEMPLATE & (AGS_AUDIO_SIGNAL(audio_signal->data)->flags)) == 0 && AGS_AUDIO_SIGNAL(audio_signal->data)->stream_current != NULL){ /* copy buffer 1:1 */ ags_audio_signal_copy_buffer_to_buffer(buffer, 1, (signed short *) AGS_AUDIO_SIGNAL(audio_signal->data)->stream_current->data, 1, buffer_size); } }else{ if((AGS_AUDIO_SIGNAL_TEMPLATE & (AGS_AUDIO_SIGNAL(audio_signal->data)->flags)) == 0 && AGS_AUDIO_SIGNAL(audio_signal->data)->stream_current != NULL){ /* copy buffer 1:1 */ ags_audio_signal_copy_buffer_to_buffer(buffer, 1, (signed short *) AGS_AUDIO_SIGNAL(audio_signal->data)->stream_current->data, 1, buffer_size); } } audio_signal = audio_signal->next; } recycling = recycling->next; } /* calculate average value */ current_value = 0.0; limit = buffer_size - 8; for(i = 0; i < limit; i += 8){ /* unrolled loop */ if(buffer[i] != 0){ current_value += (1.0 / (1.0 / (double) G_MAXUINT16 * buffer[i])); } if(buffer[i + 1] != 0){ current_value += (1.0 / (1.0 / (double) G_MAXUINT16 * buffer[i + 1])); } if(buffer[i + 2] != 0){ current_value += (1.0 / (1.0 / (double) G_MAXUINT16 * buffer[i + 2])); } if(buffer[i + 3] != 0){ current_value += (1.0 / (1.0 / (double) G_MAXUINT16 * buffer[i + 3])); } if(buffer[i + 4] != 0){ current_value += (1.0 / (1.0 / (double) G_MAXUINT16 * buffer[i + 4])); } if(buffer[i + 5] != 0){ current_value += (1.0 / (1.0 / (double) G_MAXUINT16 * buffer[i + 5])); } if(buffer[i + 6] != 0){ current_value += (1.0 / (1.0 / (double) G_MAXUINT16 * buffer[i + 6])); } if(buffer[i + 7] != 0){ current_value += (1.0 / (1.0 / (double) G_MAXUINT16 * buffer[i + 7])); } } for(; i < buffer_size; i++){ if(buffer[i] != 0){ current_value += (1.0 / (1.0 / (double) G_MAXUINT16 * buffer[i])); } } /* break down to scale */ //TODO:JK: verify me if(current_value != 0.0){ current_value = scale_precision * (atan(1.0 / 440.0) / sin(current_value / 22000.0)); } g_value_init(&value, G_TYPE_DOUBLE); if(current_value < 0.0){ current_value *= -1.0; } g_value_set_double(&value, current_value); ags_port_safe_write(peak_channel->peak, &value); /* free buffer */ free(buffer); } /** * ags_peak_channel_new: * @source: the #AgsChannel as source * * Creates an #AgsPeakChannel * * Returns: a new #AgsPeakChannel * * Since: 0.4 */ AgsPeakChannel* ags_peak_channel_new(AgsChannel *source) { AgsPeakChannel *peak_channel; peak_channel = (AgsPeakChannel *) g_object_new(AGS_TYPE_PEAK_CHANNEL, "channel\0", source, NULL); return(peak_channel); } gsequencer-0.6.37/src/ags/audio/recall/ags_envelope_audio_signal.h0000644000175000017500000000435212621245070022136 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_ENVELOPE_AUDIO_SIGNAL_H__ #define __AGS_ENVELOPE_AUDIO_SIGNAL_H__ #include #include #include #include #include #define AGS_TYPE_ENVELOPE_AUDIO_SIGNAL (ags_envelope_audio_signal_get_type()) #define AGS_ENVELOPE_AUDIO_SIGNAL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_ENVELOPE_AUDIO_SIGNAL, AgsEnvelopeAudioSignal)) #define AGS_ENVELOPE_AUDIO_SIGNAL_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_ENVELOPE_AUDIO_SIGNAL, AgsEnvelopeAudioSignalClass)) #define AGS_IS_ENVELOPE_AUDIO_SIGNAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_ENVELOPE_AUDIO_SIGNAL)) #define AGS_IS_ENVELOPE_AUDIO_SIGNAL_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_ENVELOPE_AUDIO_SIGNAL)) #define AGS_ENVELOPE_AUDIO_SIGNAL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_ENVELOPE_AUDIO_SIGNAL, AgsEnvelopeAudioSignalClass)) typedef struct _AgsEnvelopeAudioSignal AgsEnvelopeAudioSignal; typedef struct _AgsEnvelopeAudioSignalClass AgsEnvelopeAudioSignalClass; struct _AgsEnvelopeAudioSignal { AgsRecallAudioSignal recall_audio_signal; }; struct _AgsEnvelopeAudioSignalClass { AgsRecallAudioSignalClass recall_audio_signal; }; GType ags_envelope_audio_signal_get_type(); AgsEnvelopeAudioSignal* ags_envelope_audio_signal_new(AgsAudioSignal *source); #endif /*__AGS_ENVELOPE_AUDIO_SIGNAL_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_amplifier.c0000644000175000017500000000157712626272146017565 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_amplifier(AgsRecall *recall) { } gsequencer-0.6.37/src/ags/audio/recall/ags_volume_audio_signal.c0000644000175000017500000002251512626272146021635 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include void ags_volume_audio_signal_class_init(AgsVolumeAudioSignalClass *volume_audio_signal); void ags_volume_audio_signal_connectable_interface_init(AgsConnectableInterface *connectable); void ags_volume_audio_signal_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable); void ags_volume_audio_signal_init(AgsVolumeAudioSignal *volume_audio_signal); void ags_volume_audio_signal_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_volume_audio_signal_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_volume_audio_signal_connect(AgsConnectable *connectable); void ags_volume_audio_signal_disconnect(AgsConnectable *connectable); void ags_volume_audio_signal_connect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_volume_audio_signal_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_volume_audio_signal_finalize(GObject *gobject); void ags_volume_audio_signal_run_inter(AgsRecall *recall); AgsRecall* ags_volume_audio_signal_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter); /** * SECTION:ags_volume_audio_signal * @short_description: volumes audio signal * @title: AgsVolumeAudioSignal * @section_id: * @include: ags/audio/recall/ags_volume_audio_signal.h * * The #AgsVolumeAudioSignal class volumes the audio signal. */ enum{ PROP_0, PROP_VOLUME, }; static gpointer ags_volume_audio_signal_parent_class = NULL; static AgsConnectableInterface *ags_volume_audio_signal_parent_connectable_interface; static AgsDynamicConnectableInterface *ags_volume_audio_signal_parent_dynamic_connectable_interface; GType ags_volume_audio_signal_get_type() { static GType ags_type_volume_audio_signal = 0; if(!ags_type_volume_audio_signal){ static const GTypeInfo ags_volume_audio_signal_info = { sizeof (AgsVolumeAudioSignalClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_volume_audio_signal_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsVolumeAudioSignal), 0, /* n_preallocs */ (GInstanceInitFunc) ags_volume_audio_signal_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_volume_audio_signal_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_dynamic_connectable_interface_info = { (GInterfaceInitFunc) ags_volume_audio_signal_dynamic_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_volume_audio_signal = g_type_register_static(AGS_TYPE_RECALL_AUDIO_SIGNAL, "AgsVolumeAudioSignal\0", &ags_volume_audio_signal_info, 0); g_type_add_interface_static(ags_type_volume_audio_signal, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_volume_audio_signal, AGS_TYPE_DYNAMIC_CONNECTABLE, &ags_dynamic_connectable_interface_info); } return (ags_type_volume_audio_signal); } void ags_volume_audio_signal_class_init(AgsVolumeAudioSignalClass *volume_audio_signal) { GObjectClass *gobject; AgsRecallClass *recall; GParamSpec *param_spec; ags_volume_audio_signal_parent_class = g_type_class_peek_parent(volume_audio_signal); /* GObjectClass */ gobject = (GObjectClass *) volume_audio_signal; gobject->finalize = ags_volume_audio_signal_finalize; /* AgsRecallClass */ recall = (AgsRecallClass *) volume_audio_signal; recall->run_inter = ags_volume_audio_signal_run_inter; } void ags_volume_audio_signal_connectable_interface_init(AgsConnectableInterface *connectable) { ags_volume_audio_signal_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_volume_audio_signal_connect; connectable->disconnect = ags_volume_audio_signal_disconnect; } void ags_volume_audio_signal_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable) { ags_volume_audio_signal_parent_dynamic_connectable_interface = g_type_interface_peek_parent(dynamic_connectable); dynamic_connectable->connect_dynamic = ags_volume_audio_signal_connect_dynamic; dynamic_connectable->disconnect_dynamic = ags_volume_audio_signal_disconnect_dynamic; } void ags_volume_audio_signal_init(AgsVolumeAudioSignal *volume_audio_signal) { AGS_RECALL(volume_audio_signal)->name = "ags-volume\0"; AGS_RECALL(volume_audio_signal)->version = AGS_EFFECTS_DEFAULT_VERSION; AGS_RECALL(volume_audio_signal)->build_id = AGS_BUILD_ID; AGS_RECALL(volume_audio_signal)->xml_type = "ags-volume-audio-signal\0"; AGS_RECALL(volume_audio_signal)->port = NULL; } void ags_volume_audio_signal_finalize(GObject *gobject) { /* call parent */ G_OBJECT_CLASS(ags_volume_audio_signal_parent_class)->finalize(gobject); /* empty */ } void ags_volume_audio_signal_connect(AgsConnectable *connectable) { /* call parent */ ags_volume_audio_signal_parent_connectable_interface->connect(connectable); /* empty */ } void ags_volume_audio_signal_disconnect(AgsConnectable *connectable) { /* call parent */ ags_volume_audio_signal_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_volume_audio_signal_connect_dynamic(AgsDynamicConnectable *dynamic_connectable) { /* call parent */ ags_volume_audio_signal_parent_dynamic_connectable_interface->connect_dynamic(dynamic_connectable); /* empty */ } void ags_volume_audio_signal_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable) { /* call parent */ ags_volume_audio_signal_parent_dynamic_connectable_interface->disconnect_dynamic(dynamic_connectable); /* empty */ } void ags_volume_audio_signal_run_inter(AgsRecall *recall) { AgsVolumeAudioSignal *volume_audio_signal; AGS_RECALL_CLASS(ags_volume_audio_signal_parent_class)->run_inter(recall); volume_audio_signal = AGS_VOLUME_AUDIO_SIGNAL(recall); if(AGS_RECALL_AUDIO_SIGNAL(recall)->source->stream_current != NULL){ AgsVolumeChannel *volume_channel; signed short *buffer; gdouble volume; guint buffer_size; guint limit; guint i; GValue value = {0,}; volume_channel = AGS_VOLUME_CHANNEL(AGS_RECALL_CHANNEL_RUN(recall->parent->parent)->recall_channel); buffer = (signed short *) AGS_RECALL_AUDIO_SIGNAL(recall)->source->stream_current->data; buffer_size = AGS_RECALL_AUDIO_SIGNAL(recall)->source->buffer_size; g_value_init(&value, G_TYPE_DOUBLE); ags_port_safe_read(volume_channel->volume, &value); volume = g_value_get_double(&value); /* unrolled loop */ limit = buffer_size - 8; for(i = 0; i < limit; i += 8){ buffer[i] = (signed short) ((0xffff) & (signed long)((gdouble)volume * (gdouble)buffer[i])); buffer[i + 1] = (signed short) ((0xffff) & (signed long)((gdouble)volume * (gdouble)buffer[i + 1])); buffer[i + 2] = (signed short) ((0xffff) & (signed long)((gdouble)volume * (gdouble)buffer[i + 2])); buffer[i + 3] = (signed short) ((0xffff) & (signed long)((gdouble)volume * (gdouble)buffer[i + 3])); buffer[i + 4] = (signed short) ((0xffff) & (signed long)((gdouble)volume * (gdouble)buffer[i + 4])); buffer[i + 5] = (signed short) ((0xffff) & (signed long)((gdouble)volume * (gdouble)buffer[i + 5])); buffer[i + 6] = (signed short) ((0xffff) & (signed long)((gdouble)volume * (gdouble)buffer[i + 6])); buffer[i + 7] = (signed short) ((0xffff) & (signed long)((gdouble)volume * (gdouble)buffer[i + 7])); } for(; i < buffer_size; i++){ buffer[i] = (signed short) ((0xffff) & (signed long)((gdouble)volume * (gdouble)buffer[i])); } }else{ ags_recall_done(recall); } } /** * ags_volume_audio_signal_new: * @audio_signal: an #AgsAudioSignal * * Creates an #AgsVolumeAudioSignal * * Returns: a new #AgsVolumeAudioSignal * * Since: 0.4 */ AgsVolumeAudioSignal* ags_volume_audio_signal_new(AgsAudioSignal *audio_signal) { AgsVolumeAudioSignal *volume_audio_signal; volume_audio_signal = (AgsVolumeAudioSignal *) g_object_new(AGS_TYPE_VOLUME_AUDIO_SIGNAL, NULL); return(volume_audio_signal); } gsequencer-0.6.37/src/ags/audio/recall/ags_play_notation_audio_run.c0000644000175000017500000006645412632403152022535 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void ags_play_notation_audio_run_class_init(AgsPlayNotationAudioRunClass *play_notation_audio_run); void ags_play_notation_audio_run_connectable_interface_init(AgsConnectableInterface *connectable); void ags_play_notation_audio_run_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable); void ags_play_notation_audio_run_plugin_interface_init(AgsPluginInterface *plugin); void ags_play_notation_audio_run_init(AgsPlayNotationAudioRun *play_notation_audio_run); void ags_play_notation_audio_run_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_play_notation_audio_run_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_play_notation_audio_run_finalize(GObject *gobject); void ags_play_notation_audio_run_connect(AgsConnectable *connectable); void ags_play_notation_audio_run_disconnect(AgsConnectable *connectable); void ags_play_notation_audio_run_connect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_play_notation_audio_run_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_play_notation_audio_run_read(AgsFile *file, xmlNode *node, AgsPlugin *plugin); xmlNode* ags_play_notation_audio_run_write(AgsFile *file, xmlNode *parent, AgsPlugin *plugin); void ags_play_notation_audio_run_resolve_dependencies(AgsRecall *recall); AgsRecall* ags_play_notation_audio_run_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter); void ags_play_notation_audio_run_play_note_done(AgsRecall *recall, AgsPlayNotationAudioRun *play_notation_audio_run); void ags_play_notation_audio_run_alloc_input_callback(AgsDelayAudioRun *delay_audio_run, guint nth_run, gdouble delay, guint attack, AgsPlayNotationAudioRun *play_notation_audio_run); void ags_play_notation_audio_run_write_resolve_dependency(AgsFileLookup *file_lookup, GObject *recall); void ags_play_notation_audio_run_read_resolve_dependency(AgsFileLookup *file_lookup, GObject *recall); /** * SECTION:ags_play_notation_audio_run * @short_description: play notation * @title: AgsPlayNotationAudioRun * @section_id: * @include: ags/audio/recall/ags_play_notation_audio_run.h * * The #AgsPlayNotationAudioRun class play notation. */ enum{ PROP_0, PROP_DELAY_AUDIO_RUN, PROP_COUNT_BEATS_AUDIO_RUN, }; static gpointer ags_play_notation_audio_run_parent_class = NULL; static AgsConnectableInterface* ags_play_notation_audio_run_parent_connectable_interface; static AgsDynamicConnectableInterface *ags_play_notation_audio_run_parent_dynamic_connectable_interface; static AgsPluginInterface *ags_play_notation_audio_run_parent_plugin_interface; extern AgsConfig *config; extern pthread_mutex_t ags_application_mutex; GType ags_play_notation_audio_run_get_type() { static GType ags_type_play_notation_audio_run = 0; if(!ags_type_play_notation_audio_run){ static const GTypeInfo ags_play_notation_audio_run_info = { sizeof (AgsPlayNotationAudioRunClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_play_notation_audio_run_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsPlayNotationAudioRun), 0, /* n_preallocs */ (GInstanceInitFunc) ags_play_notation_audio_run_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_play_notation_audio_run_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_dynamic_connectable_interface_info = { (GInterfaceInitFunc) ags_play_notation_audio_run_dynamic_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_plugin_interface_info = { (GInterfaceInitFunc) ags_play_notation_audio_run_plugin_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_play_notation_audio_run = g_type_register_static(AGS_TYPE_RECALL_AUDIO_RUN, "AgsPlayNotationAudioRun\0", &ags_play_notation_audio_run_info, 0); g_type_add_interface_static(ags_type_play_notation_audio_run, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_play_notation_audio_run, AGS_TYPE_DYNAMIC_CONNECTABLE, &ags_dynamic_connectable_interface_info); g_type_add_interface_static(ags_type_play_notation_audio_run, AGS_TYPE_PLUGIN, &ags_plugin_interface_info); } return (ags_type_play_notation_audio_run); } void ags_play_notation_audio_run_class_init(AgsPlayNotationAudioRunClass *play_notation_audio_run) { GObjectClass *gobject; AgsRecallClass *recall; GParamSpec *param_spec; ags_play_notation_audio_run_parent_class = g_type_class_peek_parent(play_notation_audio_run); /* GObjectClass */ gobject = (GObjectClass *) play_notation_audio_run; gobject->set_property = ags_play_notation_audio_run_set_property; gobject->get_property = ags_play_notation_audio_run_get_property; gobject->finalize = ags_play_notation_audio_run_finalize; /* properties */ param_spec = g_param_spec_object("delay-audio-run\0", "assigned AgsDelayAudioRun\0", "the AgsDelayAudioRun which emits notation_alloc_input signal\0", AGS_TYPE_DELAY_AUDIO_RUN, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_DELAY_AUDIO_RUN, param_spec); param_spec = g_param_spec_object("count-beats-audio-run\0", "assigned AgsCountBeatsAudioRun\0", "the AgsCountBeatsAudioRun which just counts\0", AGS_TYPE_COUNT_BEATS_AUDIO_RUN, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_COUNT_BEATS_AUDIO_RUN, param_spec); /* AgsRecallClass */ recall = (AgsRecallClass *) play_notation_audio_run; recall->resolve_dependencies = ags_play_notation_audio_run_resolve_dependencies; recall->duplicate = ags_play_notation_audio_run_duplicate; } void ags_play_notation_audio_run_connectable_interface_init(AgsConnectableInterface *connectable) { ags_play_notation_audio_run_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_play_notation_audio_run_connect; connectable->disconnect = ags_play_notation_audio_run_disconnect; } void ags_play_notation_audio_run_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable) { ags_play_notation_audio_run_parent_dynamic_connectable_interface = g_type_interface_peek_parent(dynamic_connectable); dynamic_connectable->connect_dynamic = ags_play_notation_audio_run_connect_dynamic; dynamic_connectable->disconnect_dynamic = ags_play_notation_audio_run_disconnect_dynamic; } void ags_play_notation_audio_run_plugin_interface_init(AgsPluginInterface *plugin) { ags_play_notation_audio_run_parent_plugin_interface = g_type_interface_peek_parent(plugin); plugin->read = ags_play_notation_audio_run_read; plugin->write = ags_play_notation_audio_run_write; } void ags_play_notation_audio_run_init(AgsPlayNotationAudioRun *play_notation_audio_run) { AGS_RECALL(play_notation_audio_run)->name = "ags-play-notation\0"; AGS_RECALL(play_notation_audio_run)->version = AGS_EFFECTS_DEFAULT_VERSION; AGS_RECALL(play_notation_audio_run)->build_id = AGS_BUILD_ID; AGS_RECALL(play_notation_audio_run)->xml_type = "ags-play-notation-audio-run\0"; AGS_RECALL(play_notation_audio_run)->port = NULL; play_notation_audio_run->delay_audio_run = NULL; play_notation_audio_run->count_beats_audio_run = NULL; play_notation_audio_run->notation = NULL; } void ags_play_notation_audio_run_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsPlayNotationAudioRun *play_notation_audio_run; play_notation_audio_run = AGS_PLAY_NOTATION_AUDIO_RUN(gobject); switch(prop_id){ case PROP_DELAY_AUDIO_RUN: { AgsDelayAudioRun *delay_audio_run; gboolean is_template; delay_audio_run = g_value_get_object(value); if(delay_audio_run == play_notation_audio_run->delay_audio_run){ return; } if(delay_audio_run != NULL && (AGS_RECALL_TEMPLATE & (AGS_RECALL(delay_audio_run)->flags)) != 0){ is_template = TRUE; }else{ is_template = FALSE; } if(play_notation_audio_run->delay_audio_run != NULL){ if(is_template){ ags_recall_remove_dependency(AGS_RECALL(play_notation_audio_run), (AgsRecall *) play_notation_audio_run->delay_audio_run); }else{ if((AGS_RECALL_DYNAMIC_CONNECTED & (AGS_RECALL(play_notation_audio_run)->flags)) != 0){ g_signal_handler_disconnect(G_OBJECT(play_notation_audio_run), play_notation_audio_run->notation_alloc_input_handler); } } g_object_unref(G_OBJECT(play_notation_audio_run->delay_audio_run)); } if(delay_audio_run != NULL){ g_object_ref(delay_audio_run); if(is_template){ ags_recall_add_dependency(AGS_RECALL(play_notation_audio_run), ags_recall_dependency_new((GObject *) delay_audio_run)); }else{ if((AGS_RECALL_DYNAMIC_CONNECTED & (AGS_RECALL(play_notation_audio_run)->flags)) != 0){ play_notation_audio_run->notation_alloc_input_handler = g_signal_connect(G_OBJECT(delay_audio_run), "notation-alloc-input\0", G_CALLBACK(ags_play_notation_audio_run_alloc_input_callback), play_notation_audio_run); } } } play_notation_audio_run->delay_audio_run = delay_audio_run; } break; case PROP_COUNT_BEATS_AUDIO_RUN: { AgsCountBeatsAudioRun *count_beats_audio_run; gboolean is_template; count_beats_audio_run = g_value_get_object(value); if(count_beats_audio_run == play_notation_audio_run->count_beats_audio_run){ return; } if(count_beats_audio_run != NULL && (AGS_RECALL_TEMPLATE & (AGS_RECALL(count_beats_audio_run)->flags)) != 0){ is_template = TRUE; }else{ is_template = FALSE; } if(play_notation_audio_run->count_beats_audio_run != NULL){ if(is_template){ ags_recall_remove_dependency(AGS_RECALL(play_notation_audio_run), (AgsRecall *) play_notation_audio_run->count_beats_audio_run); } g_object_unref(G_OBJECT(play_notation_audio_run->count_beats_audio_run)); } if(count_beats_audio_run != NULL){ g_object_ref(count_beats_audio_run); if(is_template){ ags_recall_add_dependency(AGS_RECALL(play_notation_audio_run), ags_recall_dependency_new((GObject *) count_beats_audio_run)); } } play_notation_audio_run->count_beats_audio_run = count_beats_audio_run; } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; }; } void ags_play_notation_audio_run_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsPlayNotationAudioRun *play_notation_audio_run; play_notation_audio_run = AGS_PLAY_NOTATION_AUDIO_RUN(gobject); switch(prop_id){ case PROP_DELAY_AUDIO_RUN: { g_value_set_object(value, G_OBJECT(play_notation_audio_run->delay_audio_run)); } break; case PROP_COUNT_BEATS_AUDIO_RUN: { g_value_set_object(value, G_OBJECT(play_notation_audio_run->count_beats_audio_run)); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; }; } void ags_play_notation_audio_run_finalize(GObject *gobject) { AgsPlayNotationAudioRun *play_notation_audio_run; play_notation_audio_run = AGS_PLAY_NOTATION_AUDIO_RUN(gobject); if(play_notation_audio_run->delay_audio_run != NULL){ g_object_unref(G_OBJECT(play_notation_audio_run->delay_audio_run)); } if(play_notation_audio_run->count_beats_audio_run != NULL){ g_object_unref(G_OBJECT(play_notation_audio_run->count_beats_audio_run)); } G_OBJECT_CLASS(ags_play_notation_audio_run_parent_class)->finalize(gobject); } void ags_play_notation_audio_run_connect(AgsConnectable *connectable) { AgsPlayNotationAudioRun *play_notation_audio_run; if((AGS_RECALL_CONNECTED & (AGS_RECALL(connectable)->flags)) != 0){ return; } /* call parent */ ags_play_notation_audio_run_parent_connectable_interface->connect(connectable); play_notation_audio_run = AGS_PLAY_NOTATION_AUDIO_RUN(connectable); } void ags_play_notation_audio_run_disconnect(AgsConnectable *connectable) { /* call parent */ ags_play_notation_audio_run_parent_connectable_interface->disconnect(connectable); } void ags_play_notation_audio_run_connect_dynamic(AgsDynamicConnectable *dynamic_connectable) { AgsPlayNotationAudioRun *play_notation_audio_run; if((AGS_RECALL_DYNAMIC_CONNECTED & (AGS_RECALL(dynamic_connectable)->flags)) != 0){ return; } play_notation_audio_run = AGS_PLAY_NOTATION_AUDIO_RUN(dynamic_connectable); /* call parent */ ags_play_notation_audio_run_parent_dynamic_connectable_interface->connect_dynamic(dynamic_connectable); /* connect */ play_notation_audio_run->notation_alloc_input_handler = g_signal_connect(G_OBJECT(play_notation_audio_run->delay_audio_run), "notation-alloc-input\0", G_CALLBACK(ags_play_notation_audio_run_alloc_input_callback), play_notation_audio_run); } void ags_play_notation_audio_run_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable) { AgsPlayNotationAudioRun *play_notation_audio_run; /* call parent */ ags_play_notation_audio_run_parent_dynamic_connectable_interface->disconnect_dynamic(dynamic_connectable); play_notation_audio_run = AGS_PLAY_NOTATION_AUDIO_RUN(dynamic_connectable); if(play_notation_audio_run->delay_audio_run != NULL){ g_signal_handler_disconnect(G_OBJECT(play_notation_audio_run->delay_audio_run), play_notation_audio_run->notation_alloc_input_handler); } } void ags_play_notation_audio_run_read(AgsFile *file, xmlNode *node, AgsPlugin *plugin) { AgsFileLookup *file_lookup; xmlNode *iter; /* read parent */ ags_play_notation_audio_run_parent_plugin_interface->read(file, node, plugin); /* read depenendency */ iter = node->children; while(iter != NULL){ if(iter->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(iter->name, "ags-dependency-list\0", 19)){ xmlNode *dependency_node; dependency_node = iter->children; while(dependency_node != NULL){ if(dependency_node->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(dependency_node->name, "ags-dependency\0", 15)){ file_lookup = (AgsFileLookup *) g_object_new(AGS_TYPE_FILE_LOOKUP, "file\0", file, "node\0", dependency_node, "reference\0", G_OBJECT(plugin), NULL); ags_file_add_lookup(file, (GObject *) file_lookup); g_signal_connect(G_OBJECT(file_lookup), "resolve\0", G_CALLBACK(ags_play_notation_audio_run_read_resolve_dependency), G_OBJECT(plugin)); } } dependency_node = dependency_node->next; } } } iter = iter->next; } } xmlNode* ags_play_notation_audio_run_write(AgsFile *file, xmlNode *parent, AgsPlugin *plugin) { AgsFileLookup *file_lookup; xmlNode *node, *child; xmlNode *dependency_node; GList *list; gchar *id; /* write parent */ node = ags_play_notation_audio_run_parent_plugin_interface->write(file, parent, plugin); /* write dependencies */ child = xmlNewNode(NULL, "ags-dependency-list\0"); xmlNewProp(child, AGS_FILE_ID_PROP, ags_id_generator_create_uuid()); xmlAddChild(node, child); list = AGS_RECALL(plugin)->dependencies; while(list != NULL){ id = ags_id_generator_create_uuid(); dependency_node = xmlNewNode(NULL, "ags-dependency\0"); xmlNewProp(dependency_node, AGS_FILE_ID_PROP, id); xmlAddChild(child, dependency_node); file_lookup = (AgsFileLookup *) g_object_new(AGS_TYPE_FILE_LOOKUP, "file\0", file, "node\0", dependency_node, "reference\0", list->data, NULL); ags_file_add_lookup(file, (GObject *) file_lookup); g_signal_connect(G_OBJECT(file_lookup), "resolve\0", G_CALLBACK(ags_play_notation_audio_run_write_resolve_dependency), G_OBJECT(plugin)); list = list->next; } return(node); } void ags_play_notation_audio_run_resolve_dependencies(AgsRecall *recall) { AgsRecall *template; AgsRecallContainer *recall_container; AgsPlayNotationAudioRun *play_notation_audio_run; AgsRecallDependency *recall_dependency; AgsDelayAudioRun *delay_audio_run; AgsCountBeatsAudioRun *count_beats_audio_run; GList *list; AgsRecallID *recall_id; guint i, i_stop; play_notation_audio_run = AGS_PLAY_NOTATION_AUDIO_RUN(recall); recall_container = AGS_RECALL_CONTAINER(recall->container); list = ags_recall_find_template(recall_container->recall_audio_run); if(list != NULL){ template = AGS_RECALL(list->data); }else{ g_warning("AgsRecallClass::resolve - missing dependency"); return; } list = template->dependencies; delay_audio_run = NULL; count_beats_audio_run = NULL; i_stop = 2; for(i = 0; i < i_stop && list != NULL;){ recall_dependency = AGS_RECALL_DEPENDENCY(list->data); if(AGS_IS_DELAY_AUDIO_RUN(recall_dependency->dependency)){ if(((AGS_RECALL_INPUT_ORIENTATED & (recall->flags)) != 0 && (AGS_RECALL_INPUT_ORIENTATED & (AGS_RECALL(recall_dependency->dependency)->flags)) != 0) || ((AGS_RECALL_OUTPUT_ORIENTATED & (recall->flags)) != 0 && (AGS_RECALL_OUTPUT_ORIENTATED & (AGS_RECALL(recall_dependency->dependency)->flags)) != 0)){ recall_id = recall->recall_id; }else{ recall_id = (AgsRecallID *) recall->recall_id->recycling_container->parent->recall_id; } delay_audio_run = (AgsDelayAudioRun *) ags_recall_dependency_resolve(recall_dependency, recall_id); i++; }else if(AGS_IS_COUNT_BEATS_AUDIO_RUN(recall_dependency->dependency)){ if(((AGS_RECALL_INPUT_ORIENTATED & (recall->flags)) != 0 && (AGS_RECALL_INPUT_ORIENTATED & (AGS_RECALL(recall_dependency->dependency)->flags)) != 0) || ((AGS_RECALL_OUTPUT_ORIENTATED & (recall->flags)) != 0 && (AGS_RECALL_OUTPUT_ORIENTATED & (AGS_RECALL(recall_dependency->dependency)->flags)) != 0)){ recall_id = recall->recall_id; }else{ recall_id = (AgsRecallID *) recall->recall_id->recycling_container->parent->recall_id; } count_beats_audio_run = (AgsCountBeatsAudioRun *) ags_recall_dependency_resolve(recall_dependency, recall_id); i++; } list = list->next; } g_object_set(G_OBJECT(recall), "delay-audio-run\0", delay_audio_run, "count-beats-audio-run\0", count_beats_audio_run, NULL); } AgsRecall* ags_play_notation_audio_run_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter) { AgsPlayNotationAudioRun *copy, *play_notation_audio_run; copy = AGS_PLAY_NOTATION_AUDIO_RUN(AGS_RECALL_CLASS(ags_play_notation_audio_run_parent_class)->duplicate(recall, recall_id, n_params, parameter)); return((AgsRecall *) copy); } void ags_play_notation_audio_run_alloc_input_callback(AgsDelayAudioRun *delay_audio_run, guint nth_run, gdouble delay, guint attack, AgsPlayNotationAudioRun *play_notation_audio_run) { AgsDevout *devout; AgsAudio *audio; AgsChannel *selected_channel, *channel, *next_pad; AgsRecycling *recycling; AgsAudioSignal *audio_signal; AgsNotation *notation; AgsNote *note; AgsDelayAudio *delay_audio; AgsPlayNotationAudio *play_notation_audio; AgsThread *main_loop; AgsTimestampThread *timestamp_thread; AgsMutexManager *mutex_manager; GList *current_position; GList *list; guint audio_channel; guint samplerate; guint buffer_size; guint i; gchar *str; GValue value = {0,}; pthread_mutex_t *audio_mutex; pthread_mutex_t *channel_mutex; pthread_mutex_t *recycling_mutex; play_notation_audio = AGS_PLAY_NOTATION_AUDIO(AGS_RECALL_AUDIO_RUN(play_notation_audio_run)->recall_audio); delay_audio = AGS_RECALL_AUDIO_RUN(delay_audio_run)->recall_audio; audio = AGS_RECALL_AUDIO(play_notation_audio)->audio; /* read config and audio mutex */ pthread_mutex_lock(&(ags_application_mutex)); str = ags_config_get(config, AGS_CONFIG_DEVOUT, "buffer-size\0"); buffer_size = g_ascii_strtoull(str, NULL, 10); free(str); str = ags_config_get(config, AGS_CONFIG_DEVOUT, "samplerate\0"); samplerate = g_ascii_strtoull(str, NULL, 10); free(str); mutex_manager = ags_mutex_manager_get_instance(); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(audio_mutex); devout = (AgsDevout *) audio->devout; list = audio->notation;//(GList *) g_value_get_pointer(&value); if(list == NULL){ pthread_mutex_unlock(audio_mutex); return; } //FIXME:JK: nth_run isn't best joice audio_channel = AGS_CHANNEL(AGS_RECYCLING(AGS_RECALL(delay_audio_run)->recall_id->recycling)->channel)->audio_channel; if((AGS_AUDIO_NOTATION_DEFAULT & (audio->flags)) != 0){ channel = ags_channel_nth(audio->input, audio_channel); }else{ channel = ags_channel_nth(audio->output, audio_channel); } pthread_mutex_lock(&(ags_application_mutex)); main_loop = AGS_MAIN(devout->ags_main)->main_loop; pthread_mutex_unlock(&(ags_application_mutex)); timestamp_thread = (AgsTimestampThread *) ags_thread_find_type(main_loop, AGS_TYPE_TIMESTAMP_THREAD); //TODO:JK: make it advanced notation = AGS_NOTATION(g_list_nth(list, audio_channel)->data);//AGS_NOTATION(ags_notation_find_near_timestamp(list, audio_channel, // timestamp_thread->timestamp)->data); current_position = notation->notes; // start_loop while(current_position != NULL){ if(current_position != NULL){ note = AGS_NOTE(current_position->data); if(note->x[0] == play_notation_audio_run->count_beats_audio_run->notation_counter){ if((AGS_AUDIO_REVERSE_MAPPING & (audio->flags)) != 0){ selected_channel = ags_channel_pad_nth(channel, audio->input_pads - note->y - 1); }else{ selected_channel = ags_channel_pad_nth(channel, note->y); } if(selected_channel == NULL){ continue; } /* lookup channel mutex */ pthread_mutex_lock(&(ags_application_mutex)); channel_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); /* recycling */ pthread_mutex_lock(channel_mutex); recycling = selected_channel->first_recycling; pthread_mutex_unlock(channel_mutex); //#ifdef AGS_DEBUG g_message("playing[%u]: %u | %u\n\0", audio_channel, note->x[0], note->y); //#endif while(recycling != selected_channel->last_recycling->next){ /* lookup recycling mutex */ pthread_mutex_lock(&(ags_application_mutex)); recycling_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) recycling); pthread_mutex_unlock(&(ags_application_mutex)); /* create audio signal */ audio_signal = ags_audio_signal_new((GObject *) devout, (GObject *) recycling, (GObject *) AGS_RECALL(play_notation_audio_run)->recall_id); if((AGS_AUDIO_PATTERN_MODE & (audio->flags)) != 0){ ags_recycling_create_audio_signal_with_defaults(recycling, audio_signal, delay, attack); }else{ gdouble notation_delay; GValue value = {0,}; g_value_init(&value, G_TYPE_DOUBLE); ags_port_safe_read(delay_audio->notation_delay, &value); notation_delay = g_value_get_double(&value); ags_recycling_create_audio_signal_with_frame_count(recycling, audio_signal, ((double) samplerate / notation_delay) * (note->x[1] - note->x[0]), delay, attack); } ags_audio_signal_connect(audio_signal); audio_signal->stream_current = audio_signal->stream_beginning; ags_recycling_add_audio_signal(recycling, audio_signal); g_object_unref(audio_signal); /* iterate */ pthread_mutex_lock(recycling_mutex); recycling = recycling->next; pthread_mutex_unlock(recycling_mutex); } }else if(note->x[0] > play_notation_audio_run->count_beats_audio_run->notation_counter){ break; } } current_position = current_position->next; } pthread_mutex_unlock(audio_mutex); } void ags_play_notation_audio_run_write_resolve_dependency(AgsFileLookup *file_lookup, GObject *recall) { AgsFileIdRef *id_ref; gchar *id; id_ref = (AgsFileIdRef *) ags_file_find_id_ref_by_reference(file_lookup->file, AGS_RECALL_DEPENDENCY(file_lookup->ref)->dependency); id = xmlGetProp(id_ref->node, AGS_FILE_ID_PROP); xmlNewProp(file_lookup->node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id)); } void ags_play_notation_audio_run_read_resolve_dependency(AgsFileLookup *file_lookup, GObject *recall) { AgsFileIdRef *id_ref; gchar *xpath; xpath = (gchar *) xmlGetProp(file_lookup->node, "xpath\0"); id_ref = (AgsFileIdRef *) ags_file_find_id_ref_by_xpath(file_lookup->file, xpath); if(AGS_IS_DELAY_AUDIO_RUN(id_ref->ref)){ g_object_set(G_OBJECT(recall), "delay-audio-run\0", id_ref->ref, NULL); }else if(AGS_IS_COUNT_BEATS_AUDIO_RUN(id_ref->ref)){ g_object_set(G_OBJECT(recall), "count-beats-audio-run\0", id_ref->ref, NULL); } } /** * ags_play_notation_audio_run_new: * @count_beats_audio_run: an #AgsCountBeatsAudioRun as dependency * * Creates an #AgsPlayNotationAudioRun * * Returns: a new #AgsPlayNotationAudioRun * * Since: 0.4 */ AgsPlayNotationAudioRun* ags_play_notation_audio_run_new() { AgsPlayNotationAudioRun *play_notation_audio_run; play_notation_audio_run = (AgsPlayNotationAudioRun *) g_object_new(AGS_TYPE_PLAY_NOTATION_AUDIO_RUN, NULL); return(play_notation_audio_run); } gsequencer-0.6.37/src/ags/audio/recall/ags_buffer_audio_signal.h0000644000175000017500000000415612612232540021572 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_BUFFER_AUDIO_SIGNAL_H__ #define __AGS_BUFFER_AUDIO_SIGNAL_H__ #include #include #include #define AGS_TYPE_BUFFER_AUDIO_SIGNAL (ags_buffer_audio_signal_get_type()) #define AGS_BUFFER_AUDIO_SIGNAL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_BUFFER_AUDIO_SIGNAL, AgsBufferAudioSignal)) #define AGS_BUFFER_AUDIO_SIGNAL_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_BUFFER_AUDIO_SIGNAL, AgsBufferAudioSignalClass)) #define AGS_IS_BUFFER_AUDIO_SIGNAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_BUFFER_AUDIO_SIGNAL)) #define AGS_IS_BUFFER_AUDIO_SIGNAL_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_BUFFER_AUDIO_SIGNAL)) #define AGS_BUFFER_AUDIO_SIGNAL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_BUFFER_AUDIO_SIGNAL, AgsBufferAudioSignalClass)) typedef struct _AgsBufferAudioSignal AgsBufferAudioSignal; typedef struct _AgsBufferAudioSignalClass AgsBufferAudioSignalClass; struct _AgsBufferAudioSignal { AgsRecallAudioSignal recall_audio_signal; }; struct _AgsBufferAudioSignalClass { AgsRecallAudioSignalClass recall_audio_signal; }; GType ags_buffer_audio_signal_get_type(); AgsBufferAudioSignal* ags_buffer_audio_signal_new(AgsAudioSignal *audio_signal); #endif /*__AGS_BUFFER_AUDIO_SIGNAL_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_envelope_channel.c0000644000175000017500000003376212626272146021123 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include void ags_envelope_channel_class_init(AgsEnvelopeChannelClass *envelope_channel); void ags_envelope_channel_connectable_interface_init(AgsConnectableInterface *connectable); void ags_envelope_channel_plugin_interface_init(AgsPluginInterface *plugin); void ags_envelope_channel_init(AgsEnvelopeChannel *envelope_channel); void ags_envelope_channel_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_envelope_channel_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_envelope_channel_connect(AgsConnectable *connectable); void ags_envelope_channel_disconnect(AgsConnectable *connectable); void ags_envelope_channel_set_ports(AgsPlugin *plugin, GList *port); void ags_envelope_channel_finalize(GObject *gobject); /** * SECTION:ags_envelope_channel * @short_description: envelopes channel * @title: AgsEnvelopeChannel * @section_id: * @include: ags/audio/recall/ags_envelope_channel.h * * The #AgsEnvelopeChannel class provides ports to the effect processor. */ enum{ PROP_0, PROP_ATTACK, PROP_DECAY, PROP_SUSTAIN, PROP_RELEASE, PROP_RATIO, }; static gpointer ags_envelope_channel_parent_class = NULL; static AgsConnectableInterface *ags_envelope_channel_parent_connectable_interface; GType ags_envelope_channel_get_type() { static GType ags_type_envelope_channel = 0; if(!ags_type_envelope_channel){ static const GTypeInfo ags_envelope_channel_info = { sizeof (AgsEnvelopeChannelClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_envelope_channel_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsEnvelopeChannel), 0, /* n_preallocs */ (GInstanceInitFunc) ags_envelope_channel_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_envelope_channel_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_plugin_interface_info = { (GInterfaceInitFunc) ags_envelope_channel_plugin_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_envelope_channel = g_type_register_static(AGS_TYPE_RECALL_CHANNEL, "AgsEnvelopeChannel\0", &ags_envelope_channel_info, 0); g_type_add_interface_static(ags_type_envelope_channel, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_envelope_channel, AGS_TYPE_PLUGIN, &ags_plugin_interface_info); } return(ags_type_envelope_channel); } void ags_envelope_channel_connectable_interface_init(AgsConnectableInterface *connectable) { ags_envelope_channel_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_envelope_channel_connect; connectable->disconnect = ags_envelope_channel_disconnect; } void ags_envelope_channel_plugin_interface_init(AgsPluginInterface *plugin) { plugin->set_ports = ags_envelope_channel_set_ports; } void ags_envelope_channel_class_init(AgsEnvelopeChannelClass *envelope_channel) { GObjectClass *gobject; GParamSpec *param_spec; ags_envelope_channel_parent_class = g_type_class_peek_parent(envelope_channel); /* GObjectClass */ gobject = (GObjectClass *) envelope_channel; gobject->set_property = ags_envelope_channel_set_property; gobject->get_property = ags_envelope_channel_get_property; gobject->finalize = ags_envelope_channel_finalize; /* properties */ param_spec = g_param_spec_object("attack\0", "attack channel\0", "Attack of the channel\0", AGS_TYPE_PORT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_ATTACK, param_spec); param_spec = g_param_spec_object("decay\0", "decay channel\0", "Decay of the channel\0", AGS_TYPE_PORT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_DECAY, param_spec); param_spec = g_param_spec_object("sustain\0", "sustain channel\0", "Sustain of the channel\0", AGS_TYPE_PORT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_SUSTAIN, param_spec); param_spec = g_param_spec_object("release\0", "release channel\0", "Release of the channel\0", AGS_TYPE_PORT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_RELEASE, param_spec); param_spec = g_param_spec_object("ratio\0", "envelope ratio\0", "The ratio of the envelope\0", AGS_TYPE_PORT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_RATIO, param_spec); } void ags_envelope_channel_init(AgsEnvelopeChannel *envelope_channel) { GList *port; AGS_RECALL(envelope_channel)->name = "ags-envelope\0"; AGS_RECALL(envelope_channel)->version = AGS_EFFECTS_DEFAULT_VERSION; AGS_RECALL(envelope_channel)->build_id = AGS_BUILD_ID; AGS_RECALL(envelope_channel)->xml_type = "ags-envelope-channel\0"; /* ports */ port = NULL; envelope_channel->attack = g_object_new(AGS_TYPE_PORT, "plugin-name\0", g_strdup("ags-envelope\0"), "specifier\0", "./attack[0]\0", "control-port\0", "1/5\0", "port-value-is-pointer\0", FALSE, "port-value-type\0", G_TYPE_DOUBLE, "port-value-size\0", sizeof(gdouble), "port-value-length\0", 1, NULL); envelope_channel->attack->port_value.ags_port_double = 1.0; port = g_list_prepend(port, envelope_channel->attack); envelope_channel->decay = g_object_new(AGS_TYPE_PORT, "plugin-name\0", g_strdup("ags-envelope\0"), "specifier\0", "./decay[0]\0", "control-port\0", "2/5\0", "port-value-is-pointer\0", FALSE, "port-value-type\0", G_TYPE_DOUBLE, "port-value-size\0", sizeof(gdouble), "port-value-length\0", 1, NULL); envelope_channel->decay->port_value.ags_port_double = 1.0; port = g_list_prepend(port, envelope_channel->decay); envelope_channel->sustain = g_object_new(AGS_TYPE_PORT, "plugin-name\0", g_strdup("ags-envelope\0"), "specifier\0", "./sustain[0]\0", "control-port\0", "3/5\0", "port-value-is-pointer\0", FALSE, "port-value-type\0", G_TYPE_DOUBLE, "port-value-size\0", sizeof(gdouble), "port-value-length\0", 1, NULL); envelope_channel->sustain->port_value.ags_port_double = 1.0; port = g_list_prepend(port, envelope_channel->sustain); envelope_channel->release = g_object_new(AGS_TYPE_PORT, "plugin-name\0", g_strdup("ags-envelope\0"), "specifier\0", "./release[0]\0", "control-port\0", "4/5\0", "port-value-is-pointer\0", FALSE, "port-value-type\0", G_TYPE_DOUBLE, "port-value-size\0", sizeof(gdouble), "port-value-length\0", 1, NULL); envelope_channel->release->port_value.ags_port_boolean = 1.0; port = g_list_prepend(port, envelope_channel->release); envelope_channel->ratio = g_object_new(AGS_TYPE_PORT, "plugin-name\0", g_strdup("ags-envelope\0"), "specifier\0", "./ratio[0]\0", "control-port\0", "5/5\0", "port-value-is-pointer\0", FALSE, "port-value-type\0", G_TYPE_DOUBLE, "port-value-size\0", sizeof(gdouble), "port-value-length\0", 1, NULL); envelope_channel->ratio->port_value.ags_port_boolean = 1.0; port = g_list_prepend(port, envelope_channel->ratio); /* set ports */ AGS_RECALL(envelope_channel)->port = port; } void ags_envelope_channel_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsEnvelopeChannel *envelope_channel; envelope_channel = AGS_ENVELOPE_CHANNEL(gobject); switch(prop_id){ case PROP_ATTACK: { AgsPort *port; port = (AgsPort *) g_value_get_object(value); if(port == envelope_channel->attack){ return; } if(envelope_channel->attack != NULL){ g_object_unref(G_OBJECT(envelope_channel->attack)); } if(port != NULL){ g_object_ref(G_OBJECT(port)); } envelope_channel->attack = port; } break; case PROP_DECAY: { AgsPort *port; port = (AgsPort *) g_value_get_object(value); if(port == envelope_channel->decay){ return; } if(envelope_channel->decay != NULL){ g_object_unref(G_OBJECT(envelope_channel->decay)); } if(port != NULL){ g_object_ref(G_OBJECT(port)); } envelope_channel->decay = port; } break; case PROP_SUSTAIN: { AgsPort *port; port = (AgsPort *) g_value_get_object(value); if(port == envelope_channel->sustain){ return; } if(envelope_channel->sustain != NULL){ g_object_unref(G_OBJECT(envelope_channel->sustain)); } if(port != NULL){ g_object_ref(G_OBJECT(port)); } envelope_channel->sustain = port; } break; case PROP_RELEASE: { AgsPort *port; port = (AgsPort *) g_value_get_object(value); if(port == envelope_channel->release){ return; } if(envelope_channel->release != NULL){ g_object_unref(G_OBJECT(envelope_channel->release)); } if(port != NULL){ g_object_ref(G_OBJECT(port)); } envelope_channel->release = port; } break; case PROP_RATIO: { AgsPort *port; port = (AgsPort *) g_value_get_object(value); if(port == envelope_channel->ratio){ return; } if(envelope_channel->ratio != NULL){ g_object_unref(G_OBJECT(envelope_channel->ratio)); } if(port != NULL){ g_object_ref(G_OBJECT(port)); } envelope_channel->ratio = port; } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_envelope_channel_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsEnvelopeChannel *envelope_channel; envelope_channel = AGS_ENVELOPE_CHANNEL(gobject); switch(prop_id){ case PROP_ATTACK: { g_value_set_object(value, envelope_channel->attack); } break; case PROP_DECAY: { g_value_set_object(value, envelope_channel->decay); } break; case PROP_SUSTAIN: { g_value_set_object(value, envelope_channel->sustain); } break; case PROP_RELEASE: { g_value_set_object(value, envelope_channel->release); } break; case PROP_RATIO: { g_value_set_object(value, envelope_channel->ratio); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_envelope_channel_connect(AgsConnectable *connectable) { ags_envelope_channel_parent_connectable_interface->connect(connectable); /* empty */ } void ags_envelope_channel_disconnect(AgsConnectable *connectable) { ags_envelope_channel_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_envelope_channel_set_ports(AgsPlugin *plugin, GList *port) { while(port != NULL){ if(!strncmp(AGS_PORT(port->data)->specifier, "attack[0]\0", 9)){ g_object_set(G_OBJECT(plugin), "attack\0", AGS_PORT(port->data), NULL); }else if(!strncmp(AGS_PORT(port->data)->specifier, "decay[0]\0", 9)){ g_object_set(G_OBJECT(plugin), "decay\0", AGS_PORT(port->data), NULL); }else if(!strncmp(AGS_PORT(port->data)->specifier, "sustain[0]\0", 9)){ g_object_set(G_OBJECT(plugin), "sustain\0", AGS_PORT(port->data), NULL); }else if(!strncmp(AGS_PORT(port->data)->specifier, "release[0]\0", 9)){ g_object_set(G_OBJECT(plugin), "release\0", AGS_PORT(port->data), NULL); }else if(!strncmp(AGS_PORT(port->data)->specifier, "ratio[0]\0", 9)){ g_object_set(G_OBJECT(plugin), "ratio\0", AGS_PORT(port->data), NULL); } port = port->next; } } void ags_envelope_channel_finalize(GObject *gobject) { AgsEnvelopeChannel *envelope_channel; envelope_channel = AGS_ENVELOPE_CHANNEL(gobject); if(envelope_channel->attack != NULL){ g_object_unref(G_OBJECT(envelope_channel->attack)); } if(envelope_channel->decay != NULL){ g_object_unref(G_OBJECT(envelope_channel->decay)); } if(envelope_channel->sustain != NULL){ g_object_unref(G_OBJECT(envelope_channel->sustain)); } if(envelope_channel->release != NULL){ g_object_unref(G_OBJECT(envelope_channel->release)); } if(envelope_channel->ratio != NULL){ g_object_unref(G_OBJECT(envelope_channel->ratio)); } /* call parent */ G_OBJECT_CLASS(ags_envelope_channel_parent_class)->finalize(gobject); } /** * ags_envelope_channel_new: * * Creates an #AgsEnvelopeChannel * * Returns: a new #AgsEnvelopeChannel * * Since: 0.6 */ AgsEnvelopeChannel* ags_envelope_channel_new() { AgsEnvelopeChannel *envelope_channel; envelope_channel = (AgsEnvelopeChannel *) g_object_new(AGS_TYPE_ENVELOPE_CHANNEL, NULL); return(envelope_channel); } gsequencer-0.6.37/src/ags/audio/recall/ags_copy_notation_audio_run.c0000644000175000017500000003662612626272146022552 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include void ags_copy_notation_audio_run_class_init(AgsCopyNotationAudioRunClass *copy_notation_audio_run); void ags_copy_notation_audio_run_connectable_interface_init(AgsConnectableInterface *connectable); void ags_copy_notation_audio_run_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable); void ags_copy_notation_audio_run_init(AgsCopyNotationAudioRun *copy_notation_audio_run); void ags_copy_notation_audio_run_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_copy_notation_audio_run_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_copy_notation_audio_run_connect(AgsConnectable *connectable); void ags_copy_notation_audio_run_disconnect(AgsConnectable *connectable); void ags_copy_notation_audio_run_connect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_copy_notation_audio_run_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_copy_notation_audio_run_finalize(GObject *gobject); void ags_copy_notation_audio_run_resolve_dependencies(AgsRecall *recall); AgsRecall* ags_copy_notation_audio_run_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter); void ags_copy_notation_audio_run_run_init_pre(AgsRecall *recall); void ags_copy_notation_audio_run_tic_alloc_input_callback(AgsDelayAudioRun *delay_audio_run, guint run_order, AgsCopyNotationAudioRun *copy_notation_audio_run); /** * SECTION:ags_copy_notation_audio_run * @short_description: copy notations * @title: AgsCopyNotationAudioRun * @section_id: * @include: ags/audio/recall/ags_copy_notation_audio_run.h * * The #AgsCopyNotationAudioRun class copy notations. */ enum{ PROP_0, PROP_COUNT_BEATS_AUDIO_RUN, }; static gpointer ags_copy_notation_audio_run_parent_class = NULL; static AgsConnectableInterface* ags_copy_notation_audio_run_parent_connectable_interface; static AgsDynamicConnectableInterface *ags_copy_notation_audio_run_parent_dynamic_connectable_interface; GType ags_copy_notation_audio_run_get_type() { static GType ags_type_copy_notation_audio_run = 0; if(!ags_type_copy_notation_audio_run){ static const GTypeInfo ags_copy_notation_audio_run_info = { sizeof (AgsCopyNotationAudioRunClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_copy_notation_audio_run_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsCopyNotationAudioRun), 0, /* n_preallocs */ (GInstanceInitFunc) ags_copy_notation_audio_run_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_copy_notation_audio_run_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_dynamic_connectable_interface_info = { (GInterfaceInitFunc) ags_copy_notation_audio_run_dynamic_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_copy_notation_audio_run = g_type_register_static(AGS_TYPE_RECALL_AUDIO_RUN, "AgsCopyNotationAudioRun\0", &ags_copy_notation_audio_run_info, 0); g_type_add_interface_static(ags_type_copy_notation_audio_run, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_copy_notation_audio_run, AGS_TYPE_DYNAMIC_CONNECTABLE, &ags_dynamic_connectable_interface_info); } return(ags_type_copy_notation_audio_run); } void ags_copy_notation_audio_run_class_init(AgsCopyNotationAudioRunClass *copy_notation_audio_run) { GObjectClass *gobject; AgsRecallClass *recall; GParamSpec *param_spec; ags_copy_notation_audio_run_parent_class = g_type_class_peek_parent(copy_notation_audio_run); /* GObjectClass */ gobject = (GObjectClass *) copy_notation_audio_run; gobject->set_property = ags_copy_notation_audio_run_set_property; gobject->get_property = ags_copy_notation_audio_run_get_property; gobject->finalize = ags_copy_notation_audio_run_finalize; /* properties */ param_spec = g_param_spec_object("count_beats_audio_run\0", "assigned AgsCountBeatsAudioRun\0", "The AgsCountBeatsAudioRun which emits beat signal\0", AGS_TYPE_COUNT_BEATS_AUDIO_RUN, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_COUNT_BEATS_AUDIO_RUN, param_spec); /* AgsRecallClass */ recall = (AgsRecallClass *) copy_notation_audio_run; recall->resolve_dependencies = ags_copy_notation_audio_run_resolve_dependencies; recall->duplicate = ags_copy_notation_audio_run_duplicate; recall->run_init_pre = ags_copy_notation_audio_run_run_init_pre; } void ags_copy_notation_audio_run_connectable_interface_init(AgsConnectableInterface *connectable) { ags_copy_notation_audio_run_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_copy_notation_audio_run_connect; connectable->disconnect = ags_copy_notation_audio_run_disconnect; } void ags_copy_notation_audio_run_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable) { ags_copy_notation_audio_run_parent_dynamic_connectable_interface = g_type_interface_peek_parent(dynamic_connectable); dynamic_connectable->connect_dynamic = ags_copy_notation_audio_run_connect_dynamic; dynamic_connectable->disconnect_dynamic = ags_copy_notation_audio_run_disconnect_dynamic; } void ags_copy_notation_audio_run_init(AgsCopyNotationAudioRun *copy_notation_audio_run) { copy_notation_audio_run->count_beats_audio_run = NULL; copy_notation_audio_run->current_note = NULL; } void ags_copy_notation_audio_run_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsCopyNotationAudioRun *copy_notation_audio_run; copy_notation_audio_run = AGS_COPY_NOTATION_AUDIO_RUN(gobject); switch(prop_id){ case PROP_COUNT_BEATS_AUDIO_RUN: { AgsCountBeatsAudioRun *count_beats_audio_run; gboolean is_template; count_beats_audio_run = (AgsCountBeatsAudioRun *) g_value_get_object(value); if(copy_notation_audio_run->count_beats_audio_run == count_beats_audio_run) return; if(count_beats_audio_run != NULL && (AGS_RECALL_TEMPLATE & (AGS_RECALL(count_beats_audio_run)->flags)) != 0){ is_template = TRUE; }else{ is_template = FALSE; } if(copy_notation_audio_run->count_beats_audio_run != NULL){ if(is_template){ ags_recall_remove_dependency(AGS_RECALL(copy_notation_audio_run), (AgsRecall *) copy_notation_audio_run->count_beats_audio_run); } g_object_unref(G_OBJECT(copy_notation_audio_run->count_beats_audio_run)); } if(count_beats_audio_run != NULL){ g_object_ref(G_OBJECT(count_beats_audio_run)); if(is_template){ ags_recall_add_dependency(AGS_RECALL(copy_notation_audio_run), ags_recall_dependency_new((GObject *) count_beats_audio_run)); } } copy_notation_audio_run->count_beats_audio_run = count_beats_audio_run; } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; }; } void ags_copy_notation_audio_run_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsCopyNotationAudioRun *copy_notation_audio_run; copy_notation_audio_run = AGS_COPY_NOTATION_AUDIO_RUN(gobject); switch(prop_id){ case PROP_COUNT_BEATS_AUDIO_RUN: { g_value_set_object(value, copy_notation_audio_run->count_beats_audio_run); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; }; } void ags_copy_notation_audio_run_finalize(GObject *gobject) { AgsCopyNotationAudioRun *copy_notation_audio_run; copy_notation_audio_run = AGS_COPY_NOTATION_AUDIO_RUN(gobject); if(copy_notation_audio_run->count_beats_audio_run != NULL) g_object_unref(copy_notation_audio_run->count_beats_audio_run); /* call parent */ G_OBJECT_CLASS(ags_copy_notation_audio_run_parent_class)->finalize(gobject); } void ags_copy_notation_audio_run_connect(AgsConnectable *connectable) { /* call parent */ ags_copy_notation_audio_run_parent_connectable_interface->connect(connectable); } void ags_copy_notation_audio_run_disconnect(AgsConnectable *connectable) { /* call parent */ ags_copy_notation_audio_run_parent_connectable_interface->disconnect(connectable); } void ags_copy_notation_audio_run_connect_dynamic(AgsDynamicConnectable *dynamic_connectable) { AgsCopyNotationAudioRun *copy_notation_audio_run; AgsDelayAudioRun *delay_audio_run; copy_notation_audio_run = AGS_COPY_NOTATION_AUDIO_RUN(dynamic_connectable); /* call parent */ ags_copy_notation_audio_run_parent_dynamic_connectable_interface->connect_dynamic(dynamic_connectable); /* connect tic_alloc in AgsDelayAudioRun */ delay_audio_run = copy_notation_audio_run->count_beats_audio_run->delay_audio_run; g_object_ref(G_OBJECT(delay_audio_run)); copy_notation_audio_run->tic_alloc_input_handler = g_signal_connect(G_OBJECT(delay_audio_run), "tic_alloc_input\0", G_CALLBACK(ags_copy_notation_audio_run_tic_alloc_input_callback), copy_notation_audio_run); } void ags_copy_notation_audio_run_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable) { AgsCopyNotationAudioRun *copy_notation_audio_run; AgsDelayAudioRun *delay_audio_run; copy_notation_audio_run = AGS_COPY_NOTATION_AUDIO_RUN(dynamic_connectable); /* call parent */ ags_copy_notation_audio_run_parent_dynamic_connectable_interface->disconnect_dynamic(dynamic_connectable); /* disconnect tic_alloc in AgsDelayAudioRun */ delay_audio_run = copy_notation_audio_run->count_beats_audio_run->delay_audio_run; g_signal_handler_disconnect(G_OBJECT(delay_audio_run), copy_notation_audio_run->tic_alloc_input_handler); g_object_unref(G_OBJECT(delay_audio_run)); } void ags_copy_notation_audio_run_resolve_dependencies(AgsRecall *recall) { AgsRecall *template; AgsCopyNotationAudioRun *copy_notation_audio_run; AgsRecallDependency *recall_dependency; AgsCountBeatsAudioRun *count_beats_audio_run; GList *list; AgsRecallID *recall_id; guint i, i_stop; copy_notation_audio_run = AGS_COPY_NOTATION_AUDIO_RUN(recall); template = AGS_RECALL(ags_recall_find_template(AGS_RECALL_CONTAINER(recall->container)->recall_audio_run)->data); list = template->dependencies; recall_id = recall->recall_id; count_beats_audio_run = NULL; i_stop = 1; for(i = 0; i < i_stop && list != NULL;){ recall_dependency = AGS_RECALL_DEPENDENCY(list->data); if(AGS_IS_COUNT_BEATS_AUDIO_RUN(recall_dependency->dependency)){ count_beats_audio_run = (AgsCountBeatsAudioRun *) ags_recall_dependency_resolve(recall_dependency, recall_id); i++; } list = list->next; } g_object_set(G_OBJECT(recall), "count_beats_audio_run\0", count_beats_audio_run, NULL); } AgsRecall* ags_copy_notation_audio_run_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter) { AgsCopyNotationAudioRun *copy; copy = AGS_COPY_NOTATION_AUDIO_RUN(AGS_RECALL_CLASS(ags_copy_notation_audio_run_parent_class)->duplicate(recall, recall_id, n_params, parameter)); return((AgsRecall *) copy); } void ags_copy_notation_audio_run_run_init_pre(AgsRecall *recall) { AgsCopyNotationAudio *copy_notation_audio; AgsCopyNotationAudioRun *copy_notation_audio_run; copy_notation_audio_run = AGS_COPY_NOTATION_AUDIO_RUN(recall); copy_notation_audio = AGS_COPY_NOTATION_AUDIO(AGS_RECALL_AUDIO_RUN(copy_notation_audio_run)->recall_audio); copy_notation_audio_run->current_note = copy_notation_audio->notation->notes; } void ags_copy_notation_audio_run_tic_alloc_input_callback(AgsDelayAudioRun *delay_audio_run, guint run_order, AgsCopyNotationAudioRun *copy_notation_audio_run) { AgsAudio *audio; AgsChannel *input, *current_input; AgsCopyNotationAudio *copy_notation_audio; copy_notation_audio = AGS_COPY_NOTATION_AUDIO(AGS_RECALL_AUDIO_RUN(copy_notation_audio_run)->recall_audio); audio = AGS_RECALL_AUDIO(copy_notation_audio)->audio; input = ags_channel_nth(audio->input, copy_notation_audio->audio_channel); if(input != NULL){ AgsRecycling *recycling, *last_recycling; AgsAudioSignal *audio_signal; AgsNote *note; GList *note_list; guint offset; guint length; note_list = copy_notation_audio_run->current_note; offset = copy_notation_audio_run->count_beats_audio_run->notation_counter; while(note_list != NULL && (note = AGS_NOTE(note_list->data))->x[0] == offset){ current_input = ags_channel_nth(input, note->y); if(current_input != NULL){ recycling = current_input->first_recycling; if(recycling == NULL){ note_list = note_list->next; continue; } last_recycling = current_input->last_recycling; if((AGS_COPY_NOTATION_AUDIO_FIT_AUDIO_SIGNAL & (copy_notation_audio->flags)) != 0){ length = note->x[1] - note->x[0]; } while(recycling != last_recycling->next){ if((AGS_COPY_NOTATION_AUDIO_FIT_AUDIO_SIGNAL & (copy_notation_audio->flags)) != 0){ audio_signal = ags_audio_signal_new_with_length((GObject *) copy_notation_audio->devout, (GObject *) recycling, (GObject *) AGS_RECALL(copy_notation_audio_run)->recall_id, length); }else{ audio_signal = ags_audio_signal_new((GObject *) copy_notation_audio->devout, (GObject *) recycling, (GObject *) AGS_RECALL(copy_notation_audio_run)->recall_id); } ags_audio_signal_connect(audio_signal); g_message("add\0"); ags_recycling_add_audio_signal(recycling, audio_signal); recycling = recycling->next; } } note_list = note_list->next; } copy_notation_audio_run->current_note = note_list; } } /** * ags_copy_notation_audio_run_new: * * Creates an #AgsCopyNotationAudioRun * * Returns: a new #AgsCopyNotationAudioRun * * Since: 0.4 */ AgsCopyNotationAudioRun* ags_copy_notation_audio_run_new(AgsCountBeatsAudioRun *count_beats_audio_run) { AgsCopyNotationAudioRun *copy_notation_audio_run; copy_notation_audio_run = (AgsCopyNotationAudioRun *) g_object_new(AGS_TYPE_COPY_NOTATION_AUDIO_RUN, "count_beats_audio_run\0", count_beats_audio_run, NULL); return(copy_notation_audio_run); } gsequencer-0.6.37/src/ags/audio/recall/ags_volume_channel.h0000644000175000017500000000372212612232540020600 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_VOLUME_CHANNEL_H__ #define __AGS_VOLUME_CHANNEL_H__ #include #include #include #define AGS_TYPE_VOLUME_CHANNEL (ags_volume_channel_get_type()) #define AGS_VOLUME_CHANNEL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_VOLUME_CHANNEL, AgsVolumeChannel)) #define AGS_VOLUME_CHANNEL_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_VOLUME_CHANNEL, AgsVolumeChannelClass)) #define AGS_IS_VOLUME_CHANNEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_VOLUME_CHANNEL)) #define AGS_IS_VOLUME_CHANNEL_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_VOLUME_CHANNEL)) #define AGS_VOLUME_CHANNEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_VOLUME_CHANNEL, AgsVolumeChannelClass)) typedef struct _AgsVolumeChannel AgsVolumeChannel; typedef struct _AgsVolumeChannelClass AgsVolumeChannelClass; struct _AgsVolumeChannel { AgsRecallChannel recall_channel; AgsPort *volume; }; struct _AgsVolumeChannelClass { AgsRecallChannelClass recall_channel; }; GType ags_volume_channel_get_type(); AgsVolumeChannel* ags_volume_channel_new(); #endif /*__AGS_VOLUME_CHANNEL_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_envelope_recycling.h0000644000175000017500000000422012621245070021451 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_ENVELOPE_RECYCLING_H__ #define __AGS_ENVELOPE_RECYCLING_H__ #include #include #include #include #include #define AGS_TYPE_ENVELOPE_RECYCLING (ags_envelope_recycling_get_type()) #define AGS_ENVELOPE_RECYCLING(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_ENVELOPE_RECYCLING, AgsEnvelopeRecycling)) #define AGS_ENVELOPE_RECYCLING_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_ENVELOPE_RECYCLING, AgsEnvelopeRecyclingClass)) #define AGS_IS_ENVELOPE_RECYCLING(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_ENVELOPE_RECYCLING)) #define AGS_IS_ENVELOPE_RECYCLING_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_ENVELOPE_RECYCLING)) #define AGS_ENVELOPE_RECYCLING_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_ENVELOPE_RECYCLING, AgsEnvelopeRecyclingClass)) typedef struct _AgsEnvelopeRecycling AgsEnvelopeRecycling; typedef struct _AgsEnvelopeRecyclingClass AgsEnvelopeRecyclingClass; struct _AgsEnvelopeRecycling { AgsRecallRecycling recall_recycling; }; struct _AgsEnvelopeRecyclingClass { AgsRecallRecyclingClass recall_recycling; }; GType ags_envelope_recycling_get_type(); AgsEnvelopeRecycling* ags_envelope_recycling_new(AgsRecycling *source); #endif /*__AGS_ENVELOPE_RECYCLING_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_clone_channel.h0000644000175000017500000000376712626272146020415 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_CLONE_CHANNEL_H__ #define __AGS_CLONE_CHANNEL_H__ #include #include #include #define AGS_TYPE_CLONE_CHANNEL (ags_clone_channel_get_type()) #define AGS_CLONE_CHANNEL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_CLONE_CHANNEL, AgsCloneChannel)) #define AGS_CLONE_CHANNEL_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_CLONE_CHANNEL, AgsCloneChannel)) #define AGS_IS_CLONE_CHANNEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_CLONE_CHANNEL)) #define AGS_IS_CLONE_CHANNEL_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_CLONE_CHANNEL)) #define AGS_CLONE_CHANNEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_CLONE_CHANNEL, AgsCloneChannelClass)) typedef struct _AgsCloneChannel AgsCloneChannel; typedef struct _AgsCloneChannelClass AgsCloneChannelClass; struct _AgsCloneChannel { AgsRecallChannel recall_channel; guint audio_channel; }; struct _AgsCloneChannelClass { AgsRecallChannelClass recall_channel; }; GType ags_clone_channel_get_type(); AgsCloneChannel* ags_clone_channel_new(AgsDevout *devout, guint audio_channel); #endif /*__AGS_CLONE_CHANNEL_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_stream_channel_run.c0000644000175000017500000002024212626272146021452 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include void ags_stream_channel_run_class_init(AgsStreamChannelRunClass *stream_channel_run); void ags_stream_channel_run_connectable_interface_init(AgsConnectableInterface *connectable); void ags_stream_channel_run_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable); void ags_stream_channel_run_plugin_interface_init(AgsPluginInterface *plugin); void ags_stream_channel_run_init(AgsStreamChannelRun *stream_channel_run); void ags_stream_channel_run_connect(AgsConnectable *connectable); void ags_stream_channel_run_disconnect(AgsConnectable *connectable); void ags_stream_channel_run_connect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_stream_channel_run_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_stream_channel_run_finalize(GObject *gobject); AgsRecall* ags_stream_channel_run_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter); /** * SECTION:ags_stream_channel_run * @short_description: streams channel * @title: AgsStreamChannelRun * @section_id: * @include: ags/audio/recall/ags_stream_channel_run.h * * The #AgsStreamChannelRun class streams the channel. */ static gpointer ags_stream_channel_run_parent_class = NULL; static AgsConnectableInterface *ags_stream_channel_run_parent_connectable_interface; static AgsDynamicConnectableInterface *ags_stream_channel_run_parent_dynamic_connectable_interface; static AgsPluginInterface *ags_stream_channel_run_parent_plugin_interface; GType ags_stream_channel_run_get_type() { static GType ags_type_stream_channel_run = 0; if(!ags_type_stream_channel_run){ static const GTypeInfo ags_stream_channel_run_info = { sizeof (AgsStreamChannelRunClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_stream_channel_run_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsStreamChannelRun), 0, /* n_preallocs */ (GInstanceInitFunc) ags_stream_channel_run_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_stream_channel_run_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_dynamic_connectable_interface_info = { (GInterfaceInitFunc) ags_stream_channel_run_dynamic_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_plugin_interface_info = { (GInterfaceInitFunc) ags_stream_channel_run_plugin_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_stream_channel_run = g_type_register_static(AGS_TYPE_RECALL_CHANNEL_RUN, "AgsStreamChannelRun\0", &ags_stream_channel_run_info, 0); g_type_add_interface_static(ags_type_stream_channel_run, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_stream_channel_run, AGS_TYPE_DYNAMIC_CONNECTABLE, &ags_dynamic_connectable_interface_info); g_type_add_interface_static(ags_type_stream_channel_run, AGS_TYPE_PLUGIN, &ags_plugin_interface_info); } return (ags_type_stream_channel_run); } void ags_stream_channel_run_class_init(AgsStreamChannelRunClass *stream_channel_run) { GObjectClass *gobject; AgsRecallClass *recall; ags_stream_channel_run_parent_class = g_type_class_peek_parent(stream_channel_run); /* GObjectClass */ gobject = (GObjectClass *) stream_channel_run; gobject->finalize = ags_stream_channel_run_finalize; /* AgsRecallClass */ recall = (AgsRecallClass *) stream_channel_run; recall->duplicate = ags_stream_channel_run_duplicate; } void ags_stream_channel_run_connectable_interface_init(AgsConnectableInterface *connectable) { ags_stream_channel_run_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_stream_channel_run_connect; connectable->disconnect = ags_stream_channel_run_disconnect; } void ags_stream_channel_run_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable) { ags_stream_channel_run_parent_dynamic_connectable_interface = g_type_interface_peek_parent(dynamic_connectable); dynamic_connectable->connect_dynamic = ags_stream_channel_run_connect_dynamic; dynamic_connectable->disconnect_dynamic = ags_stream_channel_run_disconnect_dynamic; } void ags_stream_channel_run_plugin_interface_init(AgsPluginInterface *plugin) { ags_stream_channel_run_parent_plugin_interface = g_type_interface_peek_parent(plugin); } void ags_stream_channel_run_init(AgsStreamChannelRun *stream_channel_run) { AGS_RECALL(stream_channel_run)->name = "ags-stream\0"; AGS_RECALL(stream_channel_run)->version = AGS_EFFECTS_DEFAULT_VERSION; AGS_RECALL(stream_channel_run)->build_id = AGS_BUILD_ID; AGS_RECALL(stream_channel_run)->xml_type = "ags-stream-channel-run\0"; AGS_RECALL(stream_channel_run)->port = NULL; AGS_RECALL(stream_channel_run)->flags |= AGS_RECALL_INPUT_ORIENTATED; AGS_RECALL(stream_channel_run)->child_type = AGS_TYPE_STREAM_RECYCLING; } void ags_stream_channel_run_finalize(GObject *gobject) { /* empty */ /* call parent */ G_OBJECT_CLASS(ags_stream_channel_run_parent_class)->finalize(gobject); } void ags_stream_channel_run_connect(AgsConnectable *connectable) { /* call parent */ ags_stream_channel_run_parent_connectable_interface->connect(connectable); /* empty */ } void ags_stream_channel_run_disconnect(AgsConnectable *connectable) { /* call parent */ ags_stream_channel_run_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_stream_channel_run_connect_dynamic(AgsDynamicConnectable *dynamic_connectable) { /* call parent */ ags_stream_channel_run_parent_dynamic_connectable_interface->connect_dynamic(dynamic_connectable); /* empty */ } void ags_stream_channel_run_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable) { AgsChannel *channel; AgsStreamChannelRun *stream_channel_run; ags_stream_channel_run_parent_dynamic_connectable_interface->disconnect_dynamic(dynamic_connectable); /* empty */ } AgsRecall* ags_stream_channel_run_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter) { AgsStreamChannelRun *stream_channel_run, *copy; stream_channel_run = (AgsStreamChannelRun *) recall; copy = (AgsStreamChannelRun *) AGS_RECALL_CLASS(ags_stream_channel_run_parent_class)->duplicate(recall, recall_id, n_params, parameter); return((AgsRecall *) copy); } /** * ags_stream_channel_run_new: * * Creates an #AgsStreamChannelRun * * Returns: a new #AgsStreamChannelRun * * Since: 0.4 */ AgsStreamChannelRun* ags_stream_channel_run_new() { AgsStreamChannelRun *stream_channel_run; stream_channel_run = (AgsStreamChannelRun *) g_object_new(AGS_TYPE_STREAM_CHANNEL_RUN, NULL); return(stream_channel_run); } gsequencer-0.6.37/src/ags/audio/recall/ags_play_channel_run.h0000644000175000017500000000464612626272146021143 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_PLAY_CHANNEL_RUN_H__ #define __AGS_PLAY_CHANNEL_RUN_H__ #include #include #include #include #include #include #define AGS_TYPE_PLAY_CHANNEL_RUN (ags_play_channel_run_get_type()) #define AGS_PLAY_CHANNEL_RUN(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_PLAY_CHANNEL_RUN, AgsPlayChannelRun)) #define AGS_PLAY_CHANNEL_RUN_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_PLAY_CHANNEL_RUN, AgsPlayChannelRunClass)) #define AGS_IS_PLAY_CHANNEL_RUN(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_PLAY_CHANNEL_RUN)) #define AGS_IS_PLAY_CHANNEL_RUN_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_PLAY_CHANNEL_RUN)) #define AGS_PLAY_CHANNEL_RUN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_PLAY_CHANNEL_RUN, AgsPlayChannelRunClass)) typedef struct _AgsPlayChannelRun AgsPlayChannelRun; typedef struct _AgsPlayChannelRunClass AgsPlayChannelRunClass; typedef enum{ AGS_PLAY_CHANNEL_RUN_TERMINATING = 1, AGS_PLAY_CHANNEL_RUN_INITIAL_RUN = 1 << 1, }AgsPlayChannelRunFlags; struct _AgsPlayChannelRun { AgsRecallChannelRun recall_channel_run; guint flags; AgsStreamChannelRun *stream_channel_run; gulong done_handler; gulong source_recycling_changed_handler; }; struct _AgsPlayChannelRunClass { AgsRecallChannelRunClass recall_channel_run; }; GType ags_play_channel_run_get_type(); AgsPlayChannelRun* ags_play_channel_run_new(AgsStreamChannelRun *stream_channel_run); #endif /*__AGS_PLAY_CHANNEL_RUN_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_mute_audio.h0000644000175000017500000000356712612232540017743 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_MUTE_AUDIO_H__ #define __AGS_MUTE_AUDIO_H__ #include #include #include #include #define AGS_TYPE_MUTE_AUDIO (ags_mute_audio_get_type()) #define AGS_MUTE_AUDIO(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_MUTE_AUDIO, AgsMuteAudio)) #define AGS_MUTE_AUDIO_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_MUTE_AUDIO, AgsMuteAudio)) #define AGS_IS_MUTE_AUDIO(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_MUTE_AUDIO)) #define AGS_IS_MUTE_AUDIO_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_MUTE_AUDIO)) #define AGS_MUTE_AUDIO_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_MUTE_AUDIO, AgsMuteAudioClass)) typedef struct _AgsMuteAudio AgsMuteAudio; typedef struct _AgsMuteAudioClass AgsMuteAudioClass; struct _AgsMuteAudio { AgsRecallAudio recall_audio; AgsPort *muted; }; struct _AgsMuteAudioClass { AgsRecallAudioClass recall_audio; }; GType ags_mute_audio_get_type(); AgsMuteAudio* ags_mute_audio_new(); #endif /*__AGS_MUTE_AUDIO_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_echo.c0000644000175000017500000000156612626272146016531 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_echo(AgsRecall *recall) { } gsequencer-0.6.37/src/ags/audio/recall/ags_mute_audio_signal.c0000644000175000017500000002242312626272146021276 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void ags_mute_audio_signal_class_init(AgsMuteAudioSignalClass *mute_audio_signal); void ags_mute_audio_signal_connectable_interface_init(AgsConnectableInterface *connectable); void ags_mute_audio_signal_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable); void ags_mute_audio_signal_init(AgsMuteAudioSignal *mute_audio_signal); void ags_mute_audio_signal_connect(AgsConnectable *connectable); void ags_mute_audio_signal_disconnect(AgsConnectable *connectable); void ags_mute_audio_signal_connect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_mute_audio_signal_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_mute_audio_signal_finalize(GObject *gobject); void ags_mute_audio_signal_run_inter(AgsRecall *recall); AgsRecall* ags_mute_audio_signal_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter); /** * SECTION:ags_mute_audio_signal * @short_description: mutes audio signal * @title: AgsMuteAudioSignal * @section_id: * @include: ags/audio/recall/ags_mute_audio_signal.h * * The #AgsMuteAudioSignal class mutes the audio signal. */ static gpointer ags_mute_audio_signal_parent_class = NULL; static AgsConnectableInterface *ags_mute_audio_signal_parent_connectable_interface; static AgsDynamicConnectableInterface *ags_mute_audio_signal_parent_dynamic_connectable_interface; GType ags_mute_audio_signal_get_type() { static GType ags_type_mute_audio_signal = 0; if(!ags_type_mute_audio_signal){ static const GTypeInfo ags_mute_audio_signal_info = { sizeof (AgsMuteAudioSignalClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_mute_audio_signal_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsMuteAudioSignal), 0, /* n_preallocs */ (GInstanceInitFunc) ags_mute_audio_signal_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_mute_audio_signal_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_dynamic_connectable_interface_info = { (GInterfaceInitFunc) ags_mute_audio_signal_dynamic_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_mute_audio_signal = g_type_register_static(AGS_TYPE_RECALL_AUDIO_SIGNAL, "AgsMuteAudioSignal\0", &ags_mute_audio_signal_info, 0); g_type_add_interface_static(ags_type_mute_audio_signal, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_mute_audio_signal, AGS_TYPE_DYNAMIC_CONNECTABLE, &ags_dynamic_connectable_interface_info); } return(ags_type_mute_audio_signal); } void ags_mute_audio_signal_class_init(AgsMuteAudioSignalClass *mute_audio_signal) { GObjectClass *gobject; AgsRecallClass *recall; ags_mute_audio_signal_parent_class = g_type_class_peek_parent(mute_audio_signal); /* GObjectClass */ gobject = (GObjectClass *) mute_audio_signal; gobject->finalize = ags_mute_audio_signal_finalize; /* AgsRecallClass */ recall = (AgsRecallClass *) mute_audio_signal; recall->run_inter = ags_mute_audio_signal_run_inter; recall->duplicate = ags_mute_audio_signal_duplicate; } void ags_mute_audio_signal_connectable_interface_init(AgsConnectableInterface *connectable) { ags_mute_audio_signal_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_mute_audio_signal_connect; connectable->disconnect = ags_mute_audio_signal_disconnect; } void ags_mute_audio_signal_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable) { ags_mute_audio_signal_parent_dynamic_connectable_interface = g_type_interface_peek_parent(dynamic_connectable); dynamic_connectable->connect_dynamic = ags_mute_audio_signal_connect_dynamic; dynamic_connectable->disconnect_dynamic = ags_mute_audio_signal_disconnect_dynamic; } void ags_mute_audio_signal_init(AgsMuteAudioSignal *mute_audio_signal) { AGS_RECALL(mute_audio_signal)->name = "ags-mute\0"; AGS_RECALL(mute_audio_signal)->version = AGS_EFFECTS_DEFAULT_VERSION; AGS_RECALL(mute_audio_signal)->build_id = AGS_BUILD_ID; AGS_RECALL(mute_audio_signal)->xml_type = "ags-mute-audio-signal\0"; AGS_RECALL(mute_audio_signal)->port = NULL; AGS_RECALL(mute_audio_signal)->child_type = G_TYPE_NONE; } void ags_mute_audio_signal_connect(AgsConnectable *connectable) { if((AGS_RECALL_CONNECTED & (AGS_RECALL(connectable)->flags)) != 0){ return; } /* call parent */ ags_mute_audio_signal_parent_connectable_interface->connect(connectable); /* empty */ } void ags_mute_audio_signal_disconnect(AgsConnectable *connectable) { /* call parent */ ags_mute_audio_signal_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_mute_audio_signal_connect_dynamic(AgsDynamicConnectable *dynamic_connectable) { if((AGS_RECALL_DYNAMIC_CONNECTED & (AGS_RECALL(dynamic_connectable)->flags)) != 0){ return; } /* call parent */ ags_mute_audio_signal_parent_dynamic_connectable_interface->connect_dynamic(dynamic_connectable); /* empty */ } void ags_mute_audio_signal_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable) { /* call parent */ ags_mute_audio_signal_parent_dynamic_connectable_interface->disconnect_dynamic(dynamic_connectable); /* empty */ } void ags_mute_audio_signal_finalize(GObject *gobject) { /* empty */ /* call parent */ G_OBJECT_CLASS(ags_mute_audio_signal_parent_class)->finalize(gobject); } void ags_mute_audio_signal_run_inter(AgsRecall *recall) { AgsMuteAudio *mute_audio; AgsMuteChannel *mute_channel; AgsMuteAudioSignal *mute_audio_signal; AgsAudioSignal *source; GList *stream_source; gboolean audio_muted, channel_muted; guint buffer_size; guint i; GValue audio_value = {0,}; GValue channel_value = {0,}; AGS_RECALL_CLASS(ags_mute_audio_signal_parent_class)->run_inter(recall); mute_audio_signal = AGS_MUTE_AUDIO_SIGNAL(recall); source = AGS_RECALL_AUDIO_SIGNAL(mute_audio_signal)->source; stream_source = source->stream_current; buffer_size = source->buffer_size; if(stream_source == NULL){ ags_recall_done(recall); return; } /* check channel */ mute_channel = AGS_MUTE_CHANNEL(AGS_RECALL_CHANNEL_RUN(recall->parent->parent)->recall_channel); g_value_init(&channel_value, G_TYPE_BOOLEAN); ags_port_safe_read(mute_channel->muted, &channel_value); channel_muted = g_value_get_boolean(&channel_value); g_value_unset(&channel_value); /* check audio */ mute_audio = AGS_MUTE_AUDIO(AGS_RECALL_CONTAINER(AGS_RECALL(mute_channel)->container)->recall_audio); g_value_init(&audio_value, G_TYPE_BOOLEAN); ags_port_safe_read(mute_audio->muted, &audio_value); audio_muted = g_value_get_boolean(&audio_value); g_value_unset(&audio_value); /* if not muted return */ if(!channel_muted && !audio_muted){ return; } /* mute */ memset((signed short *) stream_source->data, 0, buffer_size * sizeof(signed short)); } AgsRecall* ags_mute_audio_signal_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter) { AgsMuteAudioSignal *mute; mute = (AgsMuteAudioSignal *) AGS_RECALL_CLASS(ags_mute_audio_signal_parent_class)->duplicate(recall, recall_id, n_params, parameter); return((AgsRecall *) mute); } /** * ags_mute_audio_signal_new: * @source: the source #AgsAudioSignal * * Creates an #AgsMuteAudioSignal * * Returns: a new #AgsMuteAudioSignal * * Since: 0.4 */ AgsMuteAudioSignal* ags_mute_audio_signal_new(AgsAudioSignal *source) { AgsMuteAudioSignal *mute_audio_signal; mute_audio_signal = (AgsMuteAudioSignal *) g_object_new(AGS_TYPE_MUTE_AUDIO_SIGNAL, "source\0", source, NULL); return(mute_audio_signal); } gsequencer-0.6.37/src/ags/audio/recall/ags_play_channel_run_master.h0000644000175000017500000000613412626272146022510 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_PLAY_CHANNEL_RUN_MASTER_H__ #define __AGS_PLAY_CHANNEL_RUN_MASTER_H__ #include #include #include #include #include #include #define AGS_TYPE_PLAY_CHANNEL_RUN_MASTER (ags_play_channel_run_master_get_type()) #define AGS_PLAY_CHANNEL_RUN_MASTER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_PLAY_CHANNEL_RUN_MASTER, AgsPlayChannelRunMaster)) #define AGS_PLAY_CHANNEL_RUN_MASTER_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_PLAY_CHANNEL_RUN_MASTER, AgsPlayChannelRunMasterClass)) #define AGS_IS_PLAY_CHANNEL_RUN_MASTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_PLAY_CHANNEL_RUN_MASTER)) #define AGS_IS_PLAY_CHANNEL_RUN_MASTER_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_PLAY_CHANNEL_RUN_MASTER)) #define AGS_PLAY_CHANNEL_RUN_MASTER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_PLAY_CHANNEL_RUN_MASTER, AgsPlayChannelRunMasterClass)) #define AGS_PLAY_CHANNEL_RUN_MASTER_STREAMER(strct) ((AgsPlayChannelRunMasterStreamer *)(strct)) typedef struct _AgsPlayChannelRunMaster AgsPlayChannelRunMaster; typedef struct _AgsPlayChannelRunMasterClass AgsPlayChannelRunMasterClass; typedef struct _AgsPlayChannelRunMasterStreamer AgsPlayChannelRunMasterStreamer; typedef enum{ AGS_PLAY_CHANNEL_RUN_MASTER_TERMINATING = 1, }AgsPlayChannelRunMasterFlags; struct _AgsPlayChannelRunMaster { AgsRecallChannelRun recall_channel_run; guint flags; GList *streamer; gulong source_recycling_changed_handler; }; struct _AgsPlayChannelRunMasterClass { AgsRecallChannelRunClass recall_channel_run; }; struct _AgsPlayChannelRunMasterStreamer { AgsPlayChannelRunMaster *play_channel_run_master; AgsStreamChannelRun *stream_channel_run; gulong done_handler; }; GType ags_play_channel_run_master_get_type(); AgsPlayChannelRunMasterStreamer* ags_play_channel_run_master_streamer_alloc(AgsPlayChannelRunMaster *play_channel_run_master, AgsStreamChannelRun *stream_channel_run); GList* ags_play_channel_run_master_find_streamer(GList *list, AgsStreamChannelRun *stream_channel_run); AgsPlayChannelRunMaster* ags_play_channel_run_master_new(); #endif /*__AGS_PLAY_CHANNEL_RUN_MASTER_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_volume_channel_run.c0000644000175000017500000001734712626272146021502 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include void ags_volume_channel_run_class_init(AgsVolumeChannelRunClass *volume_channel_run); void ags_volume_channel_run_connectable_interface_init(AgsConnectableInterface *connectable); void ags_volume_channel_run_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable); void ags_volume_channel_run_init(AgsVolumeChannelRun *volume_channel_run); void ags_volume_channel_run_connect(AgsConnectable *connectable); void ags_volume_channel_run_disconnect(AgsConnectable *connectable); void ags_volume_channel_run_connect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_volume_channel_run_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_volume_channel_run_finalize(GObject *gobject); AgsRecall* ags_volume_channel_run_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter); /** * SECTION:ags_volume_channel_run * @short_description: volumes channel * @title: AgsVolumeChannelRun * @section_id: * @include: ags/audio/recall/ags_volume_channel_run.h * * The #AgsVolumeChannelRun class volumes the channel. */ static gpointer ags_volume_channel_run_parent_class = NULL; static AgsConnectableInterface *ags_volume_channel_run_parent_connectable_interface; static AgsDynamicConnectableInterface *ags_volume_channel_run_parent_dynamic_connectable_interface; GType ags_volume_channel_run_get_type() { static GType ags_type_volume_channel_run = 0; if(!ags_type_volume_channel_run){ static const GTypeInfo ags_volume_channel_run_info = { sizeof (AgsVolumeChannelRunClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_volume_channel_run_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsVolumeChannelRun), 0, /* n_preallocs */ (GInstanceInitFunc) ags_volume_channel_run_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_volume_channel_run_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_dynamic_connectable_interface_info = { (GInterfaceInitFunc) ags_volume_channel_run_dynamic_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_volume_channel_run = g_type_register_static(AGS_TYPE_RECALL_CHANNEL_RUN, "AgsVolumeChannelRun\0", &ags_volume_channel_run_info, 0); g_type_add_interface_static(ags_type_volume_channel_run, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_volume_channel_run, AGS_TYPE_DYNAMIC_CONNECTABLE, &ags_dynamic_connectable_interface_info); } return (ags_type_volume_channel_run); } void ags_volume_channel_run_class_init(AgsVolumeChannelRunClass *volume_channel_run) { GObjectClass *gobject; AgsRecallClass *recall; ags_volume_channel_run_parent_class = g_type_class_peek_parent(volume_channel_run); /* GObjectClass */ gobject = (GObjectClass *) volume_channel_run; gobject->finalize = ags_volume_channel_run_finalize; /* AgsRecallClass */ recall = (AgsRecallClass *) volume_channel_run; recall->duplicate = ags_volume_channel_run_duplicate; } void ags_volume_channel_run_connectable_interface_init(AgsConnectableInterface *connectable) { ags_volume_channel_run_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_volume_channel_run_connect; connectable->disconnect = ags_volume_channel_run_disconnect; } void ags_volume_channel_run_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable) { ags_volume_channel_run_parent_dynamic_connectable_interface = g_type_interface_peek_parent(dynamic_connectable); dynamic_connectable->connect_dynamic = ags_volume_channel_run_connect_dynamic; dynamic_connectable->disconnect_dynamic = ags_volume_channel_run_disconnect_dynamic; } void ags_volume_channel_run_init(AgsVolumeChannelRun *volume_channel_run) { AGS_RECALL(volume_channel_run)->name = "ags-volume\0"; AGS_RECALL(volume_channel_run)->version = AGS_EFFECTS_DEFAULT_VERSION; AGS_RECALL(volume_channel_run)->build_id = AGS_BUILD_ID; AGS_RECALL(volume_channel_run)->xml_type = "ags-volume-channel-run\0"; AGS_RECALL(volume_channel_run)->port = NULL; AGS_RECALL(volume_channel_run)->flags |= AGS_RECALL_INPUT_ORIENTATED; AGS_RECALL(volume_channel_run)->child_type = AGS_TYPE_VOLUME_RECYCLING; } void ags_volume_channel_run_finalize(GObject *gobject) { AgsVolumeChannelRun *volume_channel_run; volume_channel_run = AGS_VOLUME_CHANNEL_RUN(gobject); /* call parent */ G_OBJECT_CLASS(ags_volume_channel_run_parent_class)->finalize(gobject); } void ags_volume_channel_run_connect(AgsConnectable *connectable) { AgsVolumeChannelRun *volume_channel_run; ags_volume_channel_run_parent_connectable_interface->connect(connectable); volume_channel_run = AGS_VOLUME_CHANNEL_RUN(connectable); } void ags_volume_channel_run_disconnect(AgsConnectable *connectable) { ags_volume_channel_run_parent_connectable_interface->disconnect(connectable); } void ags_volume_channel_run_connect_dynamic(AgsDynamicConnectable *dynamic_connectable) { ags_volume_channel_run_parent_dynamic_connectable_interface->connect_dynamic(dynamic_connectable); } void ags_volume_channel_run_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable) { ags_volume_channel_run_parent_dynamic_connectable_interface->disconnect_dynamic(dynamic_connectable); } AgsRecall* ags_volume_channel_run_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter) { AgsVolumeChannelRun *volume_channel_run, *copy; volume_channel_run = (AgsVolumeChannelRun *) recall; parameter = ags_parameter_grow(G_OBJECT_TYPE(recall), parameter, n_params, NULL); copy = (AgsVolumeChannelRun *) AGS_RECALL_CLASS(ags_volume_channel_run_parent_class)->duplicate(recall, recall_id, n_params, parameter); return((AgsRecall *) copy); } /** * ags_volume_channel_run_new: * * Creates an #AgsVolumeChannelRun * * Returns: a new #AgsVolumeChannelRun * * Since: 0.4 */ AgsVolumeChannelRun* ags_volume_channel_run_new(AgsChannel *channel) { AgsVolumeChannelRun *volume_channel_run; volume_channel_run = (AgsVolumeChannelRun *) g_object_new(AGS_TYPE_VOLUME_CHANNEL_RUN, "source\0", channel, NULL); return(volume_channel_run); } gsequencer-0.6.37/src/ags/audio/recall/ags_play_audio_signal.c0000644000175000017500000002642512626272146021277 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void ags_play_audio_signal_class_init(AgsPlayAudioSignalClass *play_audio_signal); void ags_play_audio_signal_connectable_interface_init(AgsConnectableInterface *connectable); void ags_play_audio_signal_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable); void ags_play_audio_signal_init(AgsPlayAudioSignal *play_audio_signal); void ags_play_audio_signal_connect(AgsConnectable *connectable); void ags_play_audio_signal_disconnect(AgsConnectable *connectable); void ags_play_audio_signal_connect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_play_audio_signal_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_play_audio_signal_finalize(GObject *gobject); void ags_play_audio_signal_run_init_pre(AgsRecall *recall); void ags_play_audio_signal_run_inter(AgsRecall *recall); AgsRecall* ags_play_audio_signal_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter); /** * SECTION:ags_play_audio_signal * @short_description: plays audio signal * @title: AgsPlayAudioSignal * @section_id: * @include: ags/audio/recall/ags_play_audio_signal.h * * The #AgsPlayAudioSignal class plays the audio signal. */ static gpointer ags_play_audio_signal_parent_class = NULL; static AgsConnectableInterface *ags_play_audio_signal_parent_connectable_interface; static AgsDynamicConnectableInterface *ags_play_audio_signal_parent_dynamic_connectable_interface; extern pthread_mutex_t ags_application_mutex; GType ags_play_audio_signal_get_type() { static GType ags_type_play_audio_signal = 0; if(!ags_type_play_audio_signal){ static const GTypeInfo ags_play_audio_signal_info = { sizeof (AgsPlayAudioSignalClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_play_audio_signal_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsPlayAudioSignal), 0, /* n_preallocs */ (GInstanceInitFunc) ags_play_audio_signal_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_play_audio_signal_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_dynamic_connectable_interface_info = { (GInterfaceInitFunc) ags_play_audio_signal_dynamic_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_play_audio_signal = g_type_register_static(AGS_TYPE_RECALL_AUDIO_SIGNAL, "AgsPlayAudioSignal\0", &ags_play_audio_signal_info, 0); g_type_add_interface_static(ags_type_play_audio_signal, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_play_audio_signal, AGS_TYPE_DYNAMIC_CONNECTABLE, &ags_dynamic_connectable_interface_info); } return(ags_type_play_audio_signal); } void ags_play_audio_signal_class_init(AgsPlayAudioSignalClass *play_audio_signal) { GObjectClass *gobject; AgsRecallClass *recall; GParamSpec *param_spec; ags_play_audio_signal_parent_class = g_type_class_peek_parent(play_audio_signal); /* GObjectClass */ gobject = (GObjectClass *) play_audio_signal; gobject->finalize = ags_play_audio_signal_finalize; /* AgsRecallClass */ recall = (AgsRecallClass *) play_audio_signal; recall->run_init_pre = ags_play_audio_signal_run_init_pre; recall->run_inter = ags_play_audio_signal_run_inter; recall->duplicate = ags_play_audio_signal_duplicate; } void ags_play_audio_signal_connectable_interface_init(AgsConnectableInterface *connectable) { ags_play_audio_signal_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_play_audio_signal_connect; connectable->disconnect = ags_play_audio_signal_disconnect; } void ags_play_audio_signal_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable) { ags_play_audio_signal_parent_dynamic_connectable_interface = g_type_interface_peek_parent(dynamic_connectable); dynamic_connectable->connect_dynamic = ags_play_audio_signal_connect_dynamic; dynamic_connectable->disconnect_dynamic = ags_play_audio_signal_disconnect_dynamic; } void ags_play_audio_signal_init(AgsPlayAudioSignal *play_audio_signal) { AGS_RECALL(play_audio_signal)->child_type = G_TYPE_NONE; } void ags_play_audio_signal_finalize(GObject *gobject) { /* empty */ /* call parent */ G_OBJECT_CLASS(ags_play_audio_signal_parent_class)->finalize(gobject); } void ags_play_audio_signal_connect(AgsConnectable *connectable) { ags_play_audio_signal_parent_connectable_interface->connect(connectable); /* empty */ } void ags_play_audio_signal_disconnect(AgsConnectable *connectable) { ags_play_audio_signal_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_play_audio_signal_connect_dynamic(AgsDynamicConnectable *dynamic_connectable) { ags_play_audio_signal_parent_dynamic_connectable_interface->connect_dynamic(dynamic_connectable); /* empty */ } void ags_play_audio_signal_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable) { ags_play_audio_signal_parent_dynamic_connectable_interface->disconnect_dynamic(dynamic_connectable); /* empty */ } void ags_play_audio_signal_run_init_pre(AgsRecall *recall) { /* call parent */ AGS_RECALL_CLASS(ags_play_audio_signal_parent_class)->run_init_pre(recall); /* empty */ } void ags_play_audio_signal_run_inter(AgsRecall *recall) { AgsDevout *devout; AgsRecycling *recycling; AgsAudioSignal *source; AgsRecallChannelRun *play_channel_run; AgsPlayChannel *play_channel; AgsPlayAudioSignal *play_audio_signal; AgsMutexManager *mutex_manager; GList *stream; signed short *buffer0, *buffer1; guint audio_channel; guint buffer_size; gboolean muted; pthread_mutex_t *devout_mutex; pthread_mutex_t *recycling_mutex; GValue muted_value = {0,}; GValue audio_channel_value = {0,}; play_audio_signal = AGS_PLAY_AUDIO_SIGNAL(recall); devout = AGS_DEVOUT(AGS_RECALL(play_audio_signal)->devout); source = AGS_AUDIO_SIGNAL(AGS_RECALL_AUDIO_SIGNAL(play_audio_signal)->source); stream = source->stream_current; if(devout == NULL){ g_warning("no devout\0"); return; } pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); devout_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) devout); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(devout_mutex); if(stream == NULL){ pthread_mutex_unlock(devout_mutex); ags_recall_done(recall); return; } if((AGS_DEVOUT_BUFFER0 & devout->flags) != 0){ buffer0 = devout->buffer[1]; buffer1 = devout->buffer[2]; }else if((AGS_DEVOUT_BUFFER1 & devout->flags) != 0){ buffer0 = devout->buffer[2]; buffer1 = devout->buffer[3]; }else if((AGS_DEVOUT_BUFFER2 & devout->flags) != 0){ buffer0 = devout->buffer[3]; buffer1 = devout->buffer[0]; }else if((AGS_DEVOUT_BUFFER3 & devout->flags) != 0){ buffer0 = devout->buffer[0]; buffer1 = devout->buffer[1]; }else{ g_warning("no output buffer\0"); return; } if(recall->parent == NULL || recall->parent->parent == NULL){ play_channel_run = NULL; play_channel = NULL; audio_channel = AGS_RECALL_AUDIO_SIGNAL(play_audio_signal)->audio_channel; }else{ play_channel_run = AGS_RECALL_CHANNEL_RUN(recall->parent->parent); play_channel = play_channel_run->recall_channel; g_value_init(&muted_value, G_TYPE_BOOLEAN); ags_port_safe_read(play_channel->muted, &muted_value); muted = g_value_get_boolean(&muted_value); if(muted){ pthread_mutex_unlock(devout_mutex); return; } g_value_init(&audio_channel_value, G_TYPE_UINT64); ags_port_safe_read(play_channel->audio_channel, &audio_channel_value); audio_channel = g_value_get_uint64(&audio_channel_value); } buffer_size = source->buffer_size; if((AGS_RECALL_INITIAL_RUN & (AGS_RECALL_AUDIO_SIGNAL(recall)->flags)) != 0){ AGS_RECALL_AUDIO_SIGNAL(recall)->flags &= (~AGS_RECALL_INITIAL_RUN); ags_audio_signal_copy_buffer_to_buffer(&(buffer0[audio_channel]), devout->pcm_channels, (signed short *) stream->data, 1, buffer_size - source->attack); }else{ if(source->attack != 0 && stream->prev != NULL){ ags_audio_signal_copy_buffer_to_buffer((signed short *) &(buffer0[audio_channel]), devout->pcm_channels, &(((signed short *) stream->prev->data)[devout->buffer_size - source->attack]), 1, source->attack); } ags_audio_signal_copy_buffer_to_buffer((signed short *) &(buffer0[audio_channel + source->attack * devout->pcm_channels]), devout->pcm_channels, (signed short *) stream->data, 1, devout->buffer_size - source->attack); } pthread_mutex_unlock(devout_mutex); /* call parent */ AGS_RECALL_CLASS(ags_play_audio_signal_parent_class)->run_inter(recall); } AgsRecall* ags_play_audio_signal_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter) { AgsPlayAudioSignal *copy; copy = (AgsPlayAudioSignal *) AGS_RECALL_CLASS(ags_play_audio_signal_parent_class)->duplicate(recall, recall_id, n_params, parameter); return((AgsRecall *) copy); } /** * ags_play_audio_signal_new: * @source: the source #AgsAudioSignal * @devout: the #AgsDevout outputting to * @attack: the attack * * Creates an #AgsPlayAudioSignal * * Returns: a new #AgsPlayAudioSignal * * Since: 0.4 */ AgsPlayAudioSignal* ags_play_audio_signal_new(AgsAudioSignal *source, AgsDevout *devout, guint audio_channel) { AgsPlayAudioSignal *play_audio_signal; play_audio_signal = (AgsPlayAudioSignal *) g_object_new(AGS_TYPE_PLAY_AUDIO_SIGNAL, "source\0", source, "devout\0", devout, "audio_channel\0", audio_channel, NULL); return(play_audio_signal); } gsequencer-0.6.37/src/ags/audio/recall/ags_play_recycling.c0000644000175000017500000001710512626272146020613 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include void ags_play_recycling_class_init(AgsPlayRecyclingClass *play_recycling); void ags_play_recycling_connectable_interface_init(AgsConnectableInterface *connectable); void ags_play_recycling_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable); void ags_play_recycling_init(AgsPlayRecycling *play_recycling); void ags_play_recycling_connect(AgsConnectable *connectable); void ags_play_recycling_disconnect(AgsConnectable *connectable); void ags_play_recycling_connect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_play_recycling_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_play_recycling_finalize(GObject *gobject); void ags_play_recycling_done(AgsRecall *recall); void ags_play_recycling_cancel(AgsRecall *recall); AgsRecall* ags_play_recycling_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter); /** * SECTION:ags_play_recycling * @short_description: plays recycling * @title: AgsPlayRecycling * @section_id: * @include: ags/audio/recall/ags_play_recycling.h * * The #AgsPlayRecycling class plays the recycling. */ static gpointer ags_play_recycling_parent_class = NULL; static AgsConnectableInterface *ags_play_recycling_parent_connectable_interface; static AgsDynamicConnectableInterface *ags_play_recycling_parent_dynamic_connectable_interface; GType ags_play_recycling_get_type() { static GType ags_type_play_recycling = 0; if(!ags_type_play_recycling){ static const GTypeInfo ags_play_recycling_info = { sizeof (AgsPlayRecyclingClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_play_recycling_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsPlayRecycling), 0, /* n_preallocs */ (GInstanceInitFunc) ags_play_recycling_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_play_recycling_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_dynamic_connectable_interface_info = { (GInterfaceInitFunc) ags_play_recycling_dynamic_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_play_recycling = g_type_register_static(AGS_TYPE_RECALL_RECYCLING, "AgsPlayRecycling\0", &ags_play_recycling_info, 0); g_type_add_interface_static(ags_type_play_recycling, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_play_recycling, AGS_TYPE_DYNAMIC_CONNECTABLE, &ags_dynamic_connectable_interface_info); } return(ags_type_play_recycling); } void ags_play_recycling_class_init(AgsPlayRecyclingClass *play_recycling) { GObjectClass *gobject; AgsRecallClass *recall; ags_play_recycling_parent_class = g_type_class_peek_parent(play_recycling); /* GObjectClass */ gobject = (GObjectClass *) play_recycling; gobject->finalize = ags_play_recycling_finalize; /* AgsRecallClass */ recall = (AgsRecallClass *) play_recycling; recall->done = ags_play_recycling_done; recall->cancel = ags_play_recycling_cancel; recall->duplicate = ags_play_recycling_duplicate; } void ags_play_recycling_connectable_interface_init(AgsConnectableInterface *connectable) { ags_play_recycling_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_play_recycling_connect; connectable->disconnect = ags_play_recycling_disconnect; } void ags_play_recycling_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable) { ags_play_recycling_parent_dynamic_connectable_interface = g_type_interface_peek_parent(dynamic_connectable); dynamic_connectable->connect_dynamic = ags_play_recycling_connect_dynamic; dynamic_connectable->disconnect_dynamic = ags_play_recycling_disconnect_dynamic; } void ags_play_recycling_init(AgsPlayRecycling *play_recycling) { AGS_RECALL(play_recycling)->child_type = AGS_TYPE_PLAY_AUDIO_SIGNAL; } void ags_play_recycling_connect(AgsConnectable *connectable) { /* call parent */ ags_play_recycling_parent_connectable_interface->connect(connectable); /* empty */ } void ags_play_recycling_disconnect(AgsConnectable *connectable) { /* call parent */ ags_play_recycling_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_play_recycling_connect_dynamic(AgsDynamicConnectable *dynamic_connectable) { /* call parent */ ags_play_recycling_parent_dynamic_connectable_interface->connect_dynamic(dynamic_connectable); /* empty */ } void ags_play_recycling_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable) { /* call parent */ ags_play_recycling_parent_dynamic_connectable_interface->disconnect_dynamic(dynamic_connectable); /* empty */ } void ags_play_recycling_finalize(GObject *gobject) { AgsPlayRecycling *play_recycling; play_recycling = AGS_PLAY_RECYCLING(gobject); /* empty */ /* call parent */ G_OBJECT_CLASS(ags_play_recycling_parent_class)->finalize(gobject); } void ags_play_recycling_done(AgsRecall *recall) { AGS_RECALL_CLASS(ags_play_recycling_parent_class)->done(recall); /* empty */ } void ags_play_recycling_cancel(AgsRecall *recall) { AGS_RECALL_CLASS(ags_play_recycling_parent_class)->cancel(recall); /* empty */ } AgsRecall* ags_play_recycling_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter) { AgsPlayRecycling *copy; copy = (AgsPlayRecycling *) AGS_RECALL_CLASS(ags_play_recycling_parent_class)->duplicate(recall, recall_id, n_params, parameter); return((AgsRecall *) copy); } /** * ags_play_recycling_new: * @source: the source #AgsRecycling * @devout: the #AgsDevout outputting to * @audio_channel: the audio channel to use * * Creates an #AgsPlayRecycling * * Returns: a new #AgsPlayRecycling * * Since: 0.4 */ AgsPlayRecycling* ags_play_recycling_new(AgsRecycling *source, AgsDevout *devout, guint audio_channel) { AgsPlayRecycling *play_recycling; play_recycling = (AgsPlayRecycling *) g_object_new(AGS_TYPE_PLAY_RECYCLING, "source\0", source, "devout\0", devout, "audio_channel\0", audio_channel, NULL); return(play_recycling); } gsequencer-0.6.37/src/ags/audio/recall/ags_copy_notation_audio_run.h0000644000175000017500000000456112612232540022535 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_COPY_NOTATION_AUDIO_RUN_H__ #define __AGS_COPY_NOTATION_AUDIO_RUN_H__ #include #include #include #include #define AGS_TYPE_COPY_NOTATION_AUDIO_RUN (ags_copy_notation_audio_run_get_type()) #define AGS_COPY_NOTATION_AUDIO_RUN(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_COPY_NOTATION_AUDIO_RUN, AgsCopyNotationAudioRun)) #define AGS_COPY_NOTATION_AUDIO_RUN_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_COPY_NOTATION_AUDIO_RUN, AgsCopyNotationAudioRun)) #define AGS_IS_COPY_NOTATION_AUDIO_RUN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_COPY_NOTATION_AUDIO_RUN)) #define AGS_IS_COPY_NOTATION_AUDIO_RUN_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_COPY_NOTATION_AUDIO_RUN)) #define AGS_COPY_NOTATION_AUDIO_RUN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_COPY_NOTATION_AUDIO_RUN, AgsCopyNotationAudioRunClass)) typedef struct _AgsCopyNotationAudioRun AgsCopyNotationAudioRun; typedef struct _AgsCopyNotationAudioRunClass AgsCopyNotationAudioRunClass; struct _AgsCopyNotationAudioRun { AgsRecallAudioRun recall_audio_run; AgsCountBeatsAudioRun *count_beats_audio_run; gulong tic_alloc_input_handler; GList *current_note; }; struct _AgsCopyNotationAudioRunClass { AgsRecallAudioRunClass recall_audio_run; }; GType ags_copy_notation_audio_run_get_type(); AgsCopyNotationAudioRun* ags_copy_notation_audio_run_new(AgsCountBeatsAudioRun *count_beats_audio_run); #endif /*__AGS_COPY_NOTATION_AUDIO_RUN_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_stream.c0000644000175000017500000000520512626272146017100 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_stream_class_init(AgsStream *stream); void ags_stream_init(AgsStream *stream); GType ags_stream_get_type() { static GType ags_type_stream = 0; if(!ags_type_stream){ static const GTypeInfo ags_stream_info = { sizeof (AgsStreamClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_stream_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsStream), 0, /* n_preallocs */ (GInstanceInitFunc) ags_stream_init, }; ags_type_stream = g_type_register_static(G_TYPE_OBJECT, "AgsStream\0", &ags_stream_info, 0); } return (ags_type_stream); } void ags_stream_class_init(AgsStream *stream) { } void ags_stream_init(AgsStream *stream) { stream->audio_signal = NULL; } void ags_stream(AgsRecall *recall, AgsRecallID *recall_id, gpointer data) { /* -- deprecated -- AgsStream *stream; AgsDevout *devout; AgsAudioSignal *audio_signal; GList *list; guint *buffer; guint i; stream = (AgsStream *) recall; audio_signal = (AgsAudioSignal *) stream->audio_signal; devout = (AgsDevout *) audio_signal->devout; if(audio_signal->stream_current == NULL) if(devout->offset < audio_signal->stream_end){ // AGS_RECALL_GET_CLASS(recall)->done(recall, recall_id); g_signal_emit_by_name((GObject *) recall, "done\0", recall_id); }else{ ags_audio_signal_add_stream(audio_signal); } buffer = audio_signal->stream_current->data; for(i = 0; i < devout->buffer_size; i++){ list = recall->recall; while(list != NULL){ g_signal_emit_by_name((GObject *) recall, "run_stream\0", recall_id); list = list->next; } } */ } AgsStream* ags_stream_new() { AgsStream *stream; stream = (AgsStream *) g_object_new(AGS_TYPE_STREAM, NULL); return(stream); } gsequencer-0.6.37/src/ags/audio/recall/ags_play_audio_file.h0000644000175000017500000000413112626272146020734 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_PLAY_AUDIO_FILE_H__ #define __AGS_PLAY_AUDIO_FILE_H__ #include #include #include #include #include #define AGS_TYPE_PLAY_AUDIO_FILE (ags_play_audio_file_get_type()) #define AGS_PLAY_AUDIO_FILE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_PLAY_AUDIO_FILE, AgsPlayAudioFile)) #define AGS_PLAY_AUDIO_FILE_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AgsPlayAudioFileClass)) #define AGS_IS_PLAY_AUDIO_FILE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_PLAY_AUDIO_FILE)) #define AGS_IS_PLAY_AUDIO_FILE_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_PLAY_AUDIO_FILE)) #define AGS_PLAY_AUDIO_FILE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_PLAY_AUDIO_FILE, AgsPlayAudioFileClass)) typedef struct _AgsPlayAudioFile AgsPlayAudioFile; typedef struct _AgsPlayAudioFileClass AgsPlayAudioFileClass; struct _AgsPlayAudioFile { AgsRecall recall; AgsAudioFile *audio_file; guint current_frame; AgsDevout *devout; }; struct _AgsPlayAudioFileClass { AgsRecallClass recall; }; GType ags_play_audio_file_get_type(); AgsPlayAudioFile* ags_play_audio_file_new(AgsAudioFile *audio_file, AgsDevout *devout); #endif /*__AGS_PLAY_AUDIO_FILE_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_envelope_audio_signal.c0000644000175000017500000002254612626272146022147 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void ags_envelope_audio_signal_class_init(AgsEnvelopeAudioSignalClass *envelope_audio_signal); void ags_envelope_audio_signal_connectable_interface_init(AgsConnectableInterface *connectable); void ags_envelope_audio_signal_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable); void ags_envelope_audio_signal_init(AgsEnvelopeAudioSignal *envelope_audio_signal); void ags_envelope_audio_signal_connect(AgsConnectable *connectable); void ags_envelope_audio_signal_disconnect(AgsConnectable *connectable); void ags_envelope_audio_signal_connect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_envelope_audio_signal_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_envelope_audio_signal_finalize(GObject *gobject); void ags_envelope_audio_signal_run_inter(AgsRecall *recall); AgsRecall* ags_envelope_audio_signal_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter); /** * SECTION:ags_envelope_audio_signal * @short_description: envelopes audio signal * @title: AgsEnvelopeAudioSignal * @section_id: * @include: ags/audio/recall/ags_envelope_audio_signal.h * * The #AgsEnvelopeAudioSignal class envelopes the audio signal. */ static gpointer ags_envelope_audio_signal_parent_class = NULL; static AgsConnectableInterface *ags_envelope_audio_signal_parent_connectable_interface; static AgsDynamicConnectableInterface *ags_envelope_audio_signal_parent_dynamic_connectable_interface; GType ags_envelope_audio_signal_get_type() { static GType ags_type_envelope_audio_signal = 0; if(!ags_type_envelope_audio_signal){ static const GTypeInfo ags_envelope_audio_signal_info = { sizeof (AgsEnvelopeAudioSignalClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_envelope_audio_signal_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsEnvelopeAudioSignal), 0, /* n_preallocs */ (GInstanceInitFunc) ags_envelope_audio_signal_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_envelope_audio_signal_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_dynamic_connectable_interface_info = { (GInterfaceInitFunc) ags_envelope_audio_signal_dynamic_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_envelope_audio_signal = g_type_register_static(AGS_TYPE_RECALL_AUDIO_SIGNAL, "AgsEnvelopeAudioSignal\0", &ags_envelope_audio_signal_info, 0); g_type_add_interface_static(ags_type_envelope_audio_signal, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_envelope_audio_signal, AGS_TYPE_DYNAMIC_CONNECTABLE, &ags_dynamic_connectable_interface_info); } return(ags_type_envelope_audio_signal); } void ags_envelope_audio_signal_class_init(AgsEnvelopeAudioSignalClass *envelope_audio_signal) { GObjectClass *gobject; AgsRecallClass *recall; ags_envelope_audio_signal_parent_class = g_type_class_peek_parent(envelope_audio_signal); /* GObjectClass */ gobject = (GObjectClass *) envelope_audio_signal; gobject->finalize = ags_envelope_audio_signal_finalize; /* AgsRecallClass */ recall = (AgsRecallClass *) envelope_audio_signal; recall->run_inter = ags_envelope_audio_signal_run_inter; recall->duplicate = ags_envelope_audio_signal_duplicate; } void ags_envelope_audio_signal_connectable_interface_init(AgsConnectableInterface *connectable) { ags_envelope_audio_signal_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_envelope_audio_signal_connect; connectable->disconnect = ags_envelope_audio_signal_disconnect; } void ags_envelope_audio_signal_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable) { ags_envelope_audio_signal_parent_dynamic_connectable_interface = g_type_interface_peek_parent(dynamic_connectable); dynamic_connectable->connect_dynamic = ags_envelope_audio_signal_connect_dynamic; dynamic_connectable->disconnect_dynamic = ags_envelope_audio_signal_disconnect_dynamic; } void ags_envelope_audio_signal_init(AgsEnvelopeAudioSignal *envelope_audio_signal) { AGS_RECALL(envelope_audio_signal)->name = "ags-envelope\0"; AGS_RECALL(envelope_audio_signal)->version = AGS_EFFECTS_DEFAULT_VERSION; AGS_RECALL(envelope_audio_signal)->build_id = AGS_BUILD_ID; AGS_RECALL(envelope_audio_signal)->xml_type = "ags-envelope-audio-signal\0"; AGS_RECALL(envelope_audio_signal)->port = NULL; AGS_RECALL(envelope_audio_signal)->child_type = G_TYPE_NONE; } void ags_envelope_audio_signal_connect(AgsConnectable *connectable) { if((AGS_RECALL_CONNECTED & (AGS_RECALL(connectable)->flags)) != 0){ return; } /* call parent */ ags_envelope_audio_signal_parent_connectable_interface->connect(connectable); /* empty */ } void ags_envelope_audio_signal_disconnect(AgsConnectable *connectable) { /* call parent */ ags_envelope_audio_signal_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_envelope_audio_signal_connect_dynamic(AgsDynamicConnectable *dynamic_connectable) { if((AGS_RECALL_DYNAMIC_CONNECTED & (AGS_RECALL(dynamic_connectable)->flags)) != 0){ return; } /* call parent */ ags_envelope_audio_signal_parent_dynamic_connectable_interface->connect_dynamic(dynamic_connectable); /* empty */ } void ags_envelope_audio_signal_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable) { /* call parent */ ags_envelope_audio_signal_parent_dynamic_connectable_interface->disconnect_dynamic(dynamic_connectable); /* empty */ } void ags_envelope_audio_signal_finalize(GObject *gobject) { /* empty */ /* call parent */ G_OBJECT_CLASS(ags_envelope_audio_signal_parent_class)->finalize(gobject); } void ags_envelope_audio_signal_run_inter(AgsRecall *recall) { AgsEnvelopeChannel *envelope_channel; AgsEnvelopeAudioSignal *envelope_audio_signal; AgsAudioSignal *source; GList *stream_source; gboolean audio_enveloped, channel_enveloped; guint buffer_size; guint i; GValue audio_value = {0,}; GValue channel_value = {0,}; AGS_RECALL_CLASS(ags_envelope_audio_signal_parent_class)->run_inter(recall); envelope_audio_signal = AGS_ENVELOPE_AUDIO_SIGNAL(recall); source = AGS_RECALL_AUDIO_SIGNAL(envelope_audio_signal)->source; stream_source = source->stream_current; buffer_size = source->buffer_size; if(stream_source == NULL){ ags_recall_done(recall); return; } /* check channel */ envelope_channel = AGS_ENVELOPE_CHANNEL(AGS_RECALL_CHANNEL_RUN(recall->parent->parent)->recall_channel); //FIXME:JK: access ports safe ags_audio_signal_envelope(source, envelope_channel->attack->port_value.ags_port_double, envelope_channel->decay->port_value.ags_port_double, envelope_channel->sustain->port_value.ags_port_double, envelope_channel->release->port_value.ags_port_double, envelope_channel->ratio->port_value.ags_port_double); } AgsRecall* ags_envelope_audio_signal_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter) { AgsEnvelopeAudioSignal *envelope; envelope = (AgsEnvelopeAudioSignal *) AGS_RECALL_CLASS(ags_envelope_audio_signal_parent_class)->duplicate(recall, recall_id, n_params, parameter); return((AgsRecall *) envelope); } /** * ags_envelope_audio_signal_new: * @source: the source #AgsAudioSignal * * Creates an #AgsEnvelopeAudioSignal * * Returns: a new #AgsEnvelopeAudioSignal * * Since: 0.6 */ AgsEnvelopeAudioSignal* ags_envelope_audio_signal_new(AgsAudioSignal *source) { AgsEnvelopeAudioSignal *envelope_audio_signal; envelope_audio_signal = (AgsEnvelopeAudioSignal *) g_object_new(AGS_TYPE_ENVELOPE_AUDIO_SIGNAL, "source\0", source, NULL); return(envelope_audio_signal); } gsequencer-0.6.37/src/ags/audio/recall/ags_mute_audio_run.h0000644000175000017500000000366712612232540020630 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_MUTE_AUDIO_RUN_H__ #define __AGS_MUTE_AUDIO_RUN_H__ #include #include #include #define AGS_TYPE_MUTE_AUDIO_RUN (ags_mute_audio_run_get_type()) #define AGS_MUTE_AUDIO_RUN(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_MUTE_AUDIO_RUN, AgsMuteAudioRun)) #define AGS_MUTE_AUDIO_RUN_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_MUTE_AUDIO_RUN, AgsMuteAudioRun)) #define AGS_IS_MUTE_AUDIO_RUN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_MUTE_AUDIO_RUN)) #define AGS_IS_MUTE_AUDIO_RUN_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_MUTE_AUDIO_RUN)) #define AGS_MUTE_AUDIO_RUN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_MUTE_AUDIO_RUN, AgsMuteAudioRunClass)) typedef struct _AgsMuteAudioRun AgsMuteAudioRun; typedef struct _AgsMuteAudioRunClass AgsMuteAudioRunClass; struct _AgsMuteAudioRun { AgsRecallAudioRun recall_audio_run; }; struct _AgsMuteAudioRunClass { AgsRecallAudioRunClass recall_audio_run; }; GType ags_mute_audio_run_get_type(); AgsMuteAudioRun* ags_mute_audio_run_new(); #endif /*__AGS_MUTE_AUDIO_RUN_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_play_note.h0000644000175000017500000000356512626272146017613 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_PLAY_NOTE_H__ #define __AGS_PLAY_NOTE_H__ #include #include #include #include #define AGS_TYPE_PLAY_NOTE (ags_play_note_get_type()) #define AGS_PLAY_NOTE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_PLAY_NOTE, AgsPlayNote)) #define AGS_PLAY_NOTE_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_PLAY_NOTE, AgsPlayNote)) #define AGS_IS_PLAY_NOTE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_PLAY_NOTE)) #define AGS_IS_PLAY_NOTE_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_PLAY_NOTE)) #define AGS_PLAY_NOTE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_PLAY_NOTE, AgsPlayNoteClass)) typedef struct _AgsPlayNote AgsPlayNote; typedef struct _AgsPlayNoteClass AgsPlayNoteClass; struct _AgsPlayNote { AgsRecall recall; AgsDevout *devout; AgsChannel *channel; AgsNote *note; }; struct _AgsPlayNoteClass { AgsRecallClass recall; }; GType ags_play_note_get_type(); AgsPlayNote* ags_play_note_new(); #endif /*__AGS_PLAY_NOTE_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_play_audio_signal.h0000644000175000017500000000416212626272146021276 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_PLAY_AUDIO_SIGNAL_H__ #define __AGS_PLAY_AUDIO_SIGNAL_H__ #include #include #include #define AGS_TYPE_PLAY_AUDIO_SIGNAL (ags_play_audio_signal_get_type()) #define AGS_PLAY_AUDIO_SIGNAL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_PLAY_AUDIO_SIGNAL, AgsPlayAudioSignal)) #define AGS_PLAY_AUDIO_SIGNAL_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_PLAY_AUDIO_SIGNAL, AgsPlayAudioSignalClass)) #define AGS_IS_PLAY_AUDIO_SIGNAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_PLAY_AUDIO_SIGNAL)) #define AGS_IS_PLAY_AUDIO_SIGNAL_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_PLAY_AUDIO_SIGNAL)) #define AGS_PLAY_AUDIO_SIGNAL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_PLAY_AUDIO_SIGNAL, AgsPlayAudioSignalClass)) typedef struct _AgsPlayAudioSignal AgsPlayAudioSignal; typedef struct _AgsPlayAudioSignalClass AgsPlayAudioSignalClass; struct _AgsPlayAudioSignal { AgsRecallAudioSignal recall_audio_signal; }; struct _AgsPlayAudioSignalClass { AgsRecallAudioSignalClass recall_audio_signal; }; GType ags_play_audio_signal_get_type(); AgsPlayAudioSignal* ags_play_audio_signal_new(AgsAudioSignal *source, AgsDevout *devout, guint audio_channel); #endif /*__AGS_PLAY_AUDIO_SIGNAL__H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_play_audio.c0000644000175000017500000000560712626272146017741 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_play_audio_class_init(AgsPlayAudioClass *play_audio); void ags_play_audio_init(AgsPlayAudio *play_audio); void ags_play_audio_finalize(GObject *gobject); /** * SECTION:ags_play_audio * @short_description: play audio * @title: AgsPlayAudio * @section_id: * @include: ags/audio/recall/ags_play_audio.h * * The #AgsPlayAudio class provides ports to the effect processor. */ static gpointer ags_play_audio_parent_class = NULL; GType ags_play_audio_get_type() { static GType ags_type_play_audio = 0; if(!ags_type_play_audio){ static const GTypeInfo ags_play_audio_info = { sizeof (AgsPlayAudioClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_play_audio_class_init, NULL, /* class_finalize */ NULL, /* class_audio */ sizeof (AgsPlayAudio), 0, /* n_preallocs */ (GInstanceInitFunc) ags_play_audio_init, }; ags_type_play_audio = g_type_register_static(AGS_TYPE_RECALL_AUDIO, "AgsPlayAudio\0", &ags_play_audio_info, 0); } return(ags_type_play_audio); } void ags_play_audio_class_init(AgsPlayAudioClass *play_audio) { GObjectClass *gobject; GParamSpec *param_spec; ags_play_audio_parent_class = g_type_class_peek_parent(play_audio); /* GObjectClass */ gobject = (GObjectClass *) play_audio; gobject->finalize = ags_play_audio_finalize; } void ags_play_audio_init(AgsPlayAudio *play_audio) { AGS_RECALL(play_audio)->name = "ags-play\0"; AGS_RECALL(play_audio)->version = AGS_EFFECTS_DEFAULT_VERSION; AGS_RECALL(play_audio)->build_id = AGS_BUILD_ID; AGS_RECALL(play_audio)->xml_type = "ags-play-audio\0"; } void ags_play_audio_finalize(GObject *gobject) { /* empty */ /* call parent */ G_OBJECT_CLASS(ags_play_audio_parent_class)->finalize(gobject); } /** * ags_play_audio_new: * * Creates an #AgsPlayAudio * * Returns: a new #AgsPlayAudio * * Since: 0.4 */ AgsPlayAudio* ags_play_audio_new() { AgsPlayAudio *play_audio; play_audio = (AgsPlayAudio *) g_object_new(AGS_TYPE_PLAY_AUDIO, NULL); return(play_audio); } gsequencer-0.6.37/src/ags/audio/recall/ags_copy_channel.h0000644000175000017500000000375512612232540020251 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_COPY_CHANNEL_H__ #define __AGS_COPY_CHANNEL_H__ #include #include #include #include #define AGS_TYPE_COPY_CHANNEL (ags_copy_channel_get_type()) #define AGS_COPY_CHANNEL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_COPY_CHANNEL, AgsCopyChannel)) #define AGS_COPY_CHANNEL_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_COPY_CHANNEL, AgsCopyChannel)) #define AGS_IS_COPY_CHANNEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_COPY_CHANNEL)) #define AGS_IS_COPY_CHANNEL_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_COPY_CHANNEL)) #define AGS_COPY_CHANNEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_COPY_CHANNEL, AgsCopyChannelClass)) typedef struct _AgsCopyChannel AgsCopyChannel; typedef struct _AgsCopyChannelClass AgsCopyChannelClass; struct _AgsCopyChannel { AgsRecallChannel recall_channel; AgsPort *muted; }; struct _AgsCopyChannelClass { AgsRecallChannelClass recall_channel; }; GType ags_copy_channel_get_type(); AgsCopyChannel* ags_copy_channel_new(AgsChannel *destination, AgsChannel *source); #endif /*__AGS_COPY_CHANNEL_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_stream_channel.h0000644000175000017500000000372612612232540020570 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_STREAM_CHANNEL_H__ #define __AGS_STREAM_CHANNEL_H__ #include #include #include #define AGS_TYPE_STREAM_CHANNEL (ags_stream_channel_get_type()) #define AGS_STREAM_CHANNEL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_STREAM_CHANNEL, AgsStreamChannel)) #define AGS_STREAM_CHANNEL_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_STREAM_CHANNEL, AgsStreamChannelClass)) #define AGS_IS_STREAM_CHANNEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_STREAM_CHANNEL)) #define AGS_IS_STREAM_CHANNEL_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_STREAM_CHANNEL)) #define AGS_STREAM_CHANNEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_STREAM_CHANNEL, AgsStreamChannelClass)) typedef struct _AgsStreamChannel AgsStreamChannel; typedef struct _AgsStreamChannelClass AgsStreamChannelClass; struct _AgsStreamChannel { AgsRecallChannel recall_channel; AgsPort *auto_sense; }; struct _AgsStreamChannelClass { AgsRecallChannelClass recall_channel; }; GType ags_stream_channel_get_type(); AgsStreamChannel* ags_stream_channel_new(); #endif /*__AGS_STREAM_CHANNEL_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_mute_channel_run.c0000644000175000017500000001536712626272146021145 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include void ags_mute_channel_run_class_init(AgsMuteChannelRunClass *mute_channel_run); void ags_mute_channel_run_connectable_interface_init(AgsConnectableInterface *connectable); void ags_mute_channel_run_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable); void ags_mute_channel_run_init(AgsMuteChannelRun *mute_channel_run); void ags_mute_channel_run_connect(AgsConnectable *connectable); void ags_mute_channel_run_disconnect(AgsConnectable *connectable); void ags_mute_channel_run_connect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_mute_channel_run_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_mute_channel_run_finalize(GObject *gobject); AgsRecall* ags_mute_channel_run_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter); static gpointer ags_mute_channel_run_parent_class = NULL; static AgsConnectableInterface *ags_mute_channel_run_parent_connectable_interface; static AgsDynamicConnectableInterface *ags_mute_channel_run_parent_dynamic_connectable_interface; GType ags_mute_channel_run_get_type() { static GType ags_type_mute_channel_run = 0; if(!ags_type_mute_channel_run){ static const GTypeInfo ags_mute_channel_run_info = { sizeof (AgsMuteChannelRunClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_mute_channel_run_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsMuteChannelRun), 0, /* n_preallocs */ (GInstanceInitFunc) ags_mute_channel_run_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_mute_channel_run_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_dynamic_connectable_interface_info = { (GInterfaceInitFunc) ags_mute_channel_run_dynamic_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_mute_channel_run = g_type_register_static(AGS_TYPE_RECALL_CHANNEL_RUN, "AgsMuteChannelRun\0", &ags_mute_channel_run_info, 0); g_type_add_interface_static(ags_type_mute_channel_run, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_mute_channel_run, AGS_TYPE_DYNAMIC_CONNECTABLE, &ags_dynamic_connectable_interface_info); } return(ags_type_mute_channel_run); } void ags_mute_channel_run_class_init(AgsMuteChannelRunClass *mute_channel_run) { GObjectClass *gobject; AgsRecallClass *recall; GParamSpec *param_spec; ags_mute_channel_run_parent_class = g_type_class_peek_parent(mute_channel_run); /* GObjectClass */ gobject = (GObjectClass *) mute_channel_run; gobject->finalize = ags_mute_channel_run_finalize; /* AgsRecallClass */ recall = (AgsRecallClass *) mute_channel_run; } void ags_mute_channel_run_connectable_interface_init(AgsConnectableInterface *connectable) { ags_mute_channel_run_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_mute_channel_run_connect; connectable->disconnect = ags_mute_channel_run_disconnect; } void ags_mute_channel_run_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable) { ags_mute_channel_run_parent_dynamic_connectable_interface = g_type_interface_peek_parent(dynamic_connectable); dynamic_connectable->connect_dynamic = ags_mute_channel_run_connect_dynamic; dynamic_connectable->disconnect_dynamic = ags_mute_channel_run_disconnect_dynamic; } void ags_mute_channel_run_init(AgsMuteChannelRun *mute_channel_run) { AGS_RECALL(mute_channel_run)->name = "ags-mute\0"; AGS_RECALL(mute_channel_run)->version = AGS_EFFECTS_DEFAULT_VERSION; AGS_RECALL(mute_channel_run)->build_id = AGS_BUILD_ID; AGS_RECALL(mute_channel_run)->xml_type = "ags-mute-channel-run\0"; AGS_RECALL(mute_channel_run)->port = NULL; AGS_RECALL(mute_channel_run)->flags |= (AGS_RECALL_OUTPUT_ORIENTATED | AGS_RECALL_INPUT_ORIENTATED); AGS_RECALL(mute_channel_run)->child_type = AGS_TYPE_MUTE_RECYCLING; } void ags_mute_channel_run_connect(AgsConnectable *connectable) { ags_mute_channel_run_parent_connectable_interface->connect(connectable); /* empty */ } void ags_mute_channel_run_disconnect(AgsConnectable *connectable) { ags_mute_channel_run_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_mute_channel_run_connect_dynamic(AgsDynamicConnectable *dynamic_connectable) { ags_mute_channel_run_parent_dynamic_connectable_interface->connect_dynamic(dynamic_connectable); /* empty */ } void ags_mute_channel_run_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable) { ags_mute_channel_run_parent_dynamic_connectable_interface->disconnect_dynamic(dynamic_connectable); /* empty */ } void ags_mute_channel_run_finalize(GObject *gobject) { /* empty */ /* call parent */ G_OBJECT_CLASS(ags_mute_channel_run_parent_class)->finalize(gobject); } AgsRecall* ags_mute_channel_run_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter) { AgsMuteChannelRun *mute; mute = (AgsMuteChannelRun *) AGS_RECALL_CLASS(ags_mute_channel_run_parent_class)->duplicate(recall, recall_id, n_params, parameter); return((AgsRecall *) mute); } AgsMuteChannelRun* ags_mute_channel_run_new(AgsChannel *source) { AgsMuteChannelRun *mute_channel_run; mute_channel_run = (AgsMuteChannelRun *) g_object_new(AGS_TYPE_MUTE_CHANNEL_RUN, "source\0", source, NULL); return(mute_channel_run); } gsequencer-0.6.37/src/ags/audio/recall/ags_mute_audio_run.c0000644000175000017500000001633312626272146020630 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include void ags_mute_audio_run_class_init(AgsMuteAudioRunClass *mute_audio_run); void ags_mute_audio_run_connectable_interface_init(AgsConnectableInterface *connectable); void ags_mute_audio_run_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable); void ags_mute_audio_run_plugin_interface_init(AgsPluginInterface *plugin); void ags_mute_audio_run_init(AgsMuteAudioRun *mute_audio_run); void ags_mute_audio_run_finalize(GObject *gobject); void ags_mute_audio_run_connect(AgsConnectable *connectable); void ags_mute_audio_run_disconnect(AgsConnectable *connectable); void ags_mute_audio_run_connect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_mute_audio_run_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable); /** * SECTION:ags_mute_audio_run * @short_description: copy pattern * @title: AgsMuteAudioRun * @section_id: * @include: ags/audio/recall/ags_mute_audio_run.h * * The #AgsMuteAudioRun class copy pattern. */ static gpointer ags_mute_audio_run_parent_class = NULL; static AgsConnectableInterface* ags_mute_audio_run_parent_connectable_interface; static AgsDynamicConnectableInterface *ags_mute_audio_run_parent_dynamic_connectable_interface; static AgsPluginInterface *ags_mute_audio_run_parent_plugin_interface; GType ags_mute_audio_run_get_type() { static GType ags_type_mute_audio_run = 0; if(!ags_type_mute_audio_run){ static const GTypeInfo ags_mute_audio_run_info = { sizeof (AgsMuteAudioRunClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_mute_audio_run_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsMuteAudioRun), 0, /* n_preallocs */ (GInstanceInitFunc) ags_mute_audio_run_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_mute_audio_run_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_dynamic_connectable_interface_info = { (GInterfaceInitFunc) ags_mute_audio_run_dynamic_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_plugin_interface_info = { (GInterfaceInitFunc) ags_mute_audio_run_plugin_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_mute_audio_run = g_type_register_static(AGS_TYPE_RECALL_AUDIO_RUN, "AgsMuteAudioRun\0", &ags_mute_audio_run_info, 0); g_type_add_interface_static(ags_type_mute_audio_run, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_mute_audio_run, AGS_TYPE_DYNAMIC_CONNECTABLE, &ags_dynamic_connectable_interface_info); g_type_add_interface_static(ags_type_mute_audio_run, AGS_TYPE_PLUGIN, &ags_plugin_interface_info); } return(ags_type_mute_audio_run); } void ags_mute_audio_run_class_init(AgsMuteAudioRunClass *mute_audio_run) { GObjectClass *gobject; AgsRecallClass *recall; GParamSpec *param_spec; ags_mute_audio_run_parent_class = g_type_class_peek_parent(mute_audio_run); /* GObjectClass */ gobject = (GObjectClass *) mute_audio_run; gobject->finalize = ags_mute_audio_run_finalize; /* AgsRecallClass */ recall = (AgsRecallClass *) mute_audio_run; } void ags_mute_audio_run_connectable_interface_init(AgsConnectableInterface *connectable) { ags_mute_audio_run_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_mute_audio_run_connect; connectable->disconnect = ags_mute_audio_run_disconnect; } void ags_mute_audio_run_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable) { ags_mute_audio_run_parent_dynamic_connectable_interface = g_type_interface_peek_parent(dynamic_connectable); dynamic_connectable->connect_dynamic = ags_mute_audio_run_connect_dynamic; dynamic_connectable->disconnect_dynamic = ags_mute_audio_run_disconnect_dynamic; } void ags_mute_audio_run_plugin_interface_init(AgsPluginInterface *plugin) { ags_mute_audio_run_parent_plugin_interface = g_type_interface_peek_parent(plugin); } void ags_mute_audio_run_init(AgsMuteAudioRun *mute_audio_run) { AGS_RECALL(mute_audio_run)->name = "ags-mute\0"; AGS_RECALL(mute_audio_run)->version = AGS_EFFECTS_DEFAULT_VERSION; AGS_RECALL(mute_audio_run)->build_id = AGS_BUILD_ID; AGS_RECALL(mute_audio_run)->xml_type = "ags-mute-audio-run\0"; AGS_RECALL(mute_audio_run)->port = NULL; } void ags_mute_audio_run_finalize(GObject *gobject) { AgsMuteAudioRun *mute_audio_run; mute_audio_run = AGS_MUTE_AUDIO_RUN(gobject); /* call parent */ G_OBJECT_CLASS(ags_mute_audio_run_parent_class)->finalize(gobject); } void ags_mute_audio_run_connect(AgsConnectable *connectable) { /* call parent */ ags_mute_audio_run_parent_connectable_interface->connect(connectable); } void ags_mute_audio_run_disconnect(AgsConnectable *connectable) { /* call parent */ ags_mute_audio_run_parent_connectable_interface->disconnect(connectable); } void ags_mute_audio_run_connect_dynamic(AgsDynamicConnectable *dynamic_connectable) { /* call parent */ ags_mute_audio_run_parent_dynamic_connectable_interface->connect_dynamic(dynamic_connectable); } void ags_mute_audio_run_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable) { /* call parent */ ags_mute_audio_run_parent_dynamic_connectable_interface->connect_dynamic(dynamic_connectable); } AgsRecall* ags_mute_audio_run_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter) { AgsMuteAudioRun *copy; copy = AGS_MUTE_AUDIO_RUN(AGS_RECALL_CLASS(ags_mute_audio_run_parent_class)->duplicate(recall, recall_id, n_params, parameter)); return((AgsRecall *) copy); } /** * ags_mute_audio_run_new: * * Creates an #AgsMuteAudioRun * * Returns: a new #AgsMuteAudioRun * * Since: 0.4 */ AgsMuteAudioRun* ags_mute_audio_run_new() { AgsMuteAudioRun *mute_audio_run; mute_audio_run = (AgsMuteAudioRun *) g_object_new(AGS_TYPE_MUTE_AUDIO_RUN, NULL); return(mute_audio_run); } gsequencer-0.6.37/src/ags/audio/recall/ags_stream_audio_signal.c0000644000175000017500000002501112626272146021613 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include void ags_stream_audio_signal_class_init(AgsStreamAudioSignalClass *stream_audio_signal); void ags_stream_audio_signal_connectable_interface_init(AgsConnectableInterface *connectable); void ags_stream_audio_signal_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable); void ags_stream_audio_signal_init(AgsStreamAudioSignal *stream_audio_signal); void ags_stream_audio_signal_connect(AgsConnectable *connectable); void ags_stream_audio_signal_disconnect(AgsConnectable *connectable); void ags_stream_audio_signal_connect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_stream_audio_signal_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_stream_audio_signal_finalize(GObject *gobject); void ags_stream_audio_signal_run_init_pre(AgsRecall *recall); void ags_stream_audio_signal_run_post(AgsRecall *recall); AgsRecall* ags_stream_audio_signal_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter); /** * SECTION:ags_stream_audio_signal * @short_description: streams audio signal * @title: AgsStreamAudioSignal * @section_id: * @include: ags/audio/recall/ags_stream_audio_signal.h * * The #AgsStreamAudioSignal class streams the audio signal. */ static gpointer ags_stream_audio_signal_parent_class = NULL; static AgsConnectableInterface *ags_stream_audio_signal_parent_connectable_interface; static AgsDynamicConnectableInterface *ags_stream_audio_signal_parent_dynamic_connectable_interface; GType ags_stream_audio_signal_get_type() { static GType ags_type_stream_audio_signal = 0; if(!ags_type_stream_audio_signal){ static const GTypeInfo ags_stream_audio_signal_info = { sizeof (AgsStreamAudioSignalClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_stream_audio_signal_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsStreamAudioSignal), 0, /* n_preallocs */ (GInstanceInitFunc) ags_stream_audio_signal_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_stream_audio_signal_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_dynamic_connectable_interface_info = { (GInterfaceInitFunc) ags_stream_audio_signal_dynamic_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_stream_audio_signal = g_type_register_static(AGS_TYPE_RECALL_AUDIO_SIGNAL, "AgsStreamAudioSignal\0", &ags_stream_audio_signal_info, 0); g_type_add_interface_static(ags_type_stream_audio_signal, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_stream_audio_signal, AGS_TYPE_DYNAMIC_CONNECTABLE, &ags_dynamic_connectable_interface_info); } return (ags_type_stream_audio_signal); } void ags_stream_audio_signal_class_init(AgsStreamAudioSignalClass *stream_audio_signal) { GObjectClass *gobject; AgsRecallClass *recall; GParamSpec *param_spec; ags_stream_audio_signal_parent_class = g_type_class_peek_parent(stream_audio_signal); /* GObjectClass */ gobject = (GObjectClass *) stream_audio_signal; gobject->finalize = ags_stream_audio_signal_finalize; /* AgsRecallClass */ recall = (AgsRecallClass *) stream_audio_signal; recall->run_init_pre = ags_stream_audio_signal_run_init_pre; recall->run_post = ags_stream_audio_signal_run_post; recall->duplicate = ags_stream_audio_signal_duplicate; } void ags_stream_audio_signal_connectable_interface_init(AgsConnectableInterface *connectable) { ags_stream_audio_signal_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_stream_audio_signal_connect; connectable->disconnect = ags_stream_audio_signal_disconnect; } void ags_stream_audio_signal_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable) { ags_stream_audio_signal_parent_dynamic_connectable_interface = g_type_interface_peek_parent(dynamic_connectable); dynamic_connectable->connect_dynamic = ags_stream_audio_signal_connect_dynamic; dynamic_connectable->disconnect_dynamic = ags_stream_audio_signal_disconnect_dynamic; } void ags_stream_audio_signal_init(AgsStreamAudioSignal *stream_audio_signal) { AGS_RECALL(stream_audio_signal)->name = "ags-stream\0"; AGS_RECALL(stream_audio_signal)->version = AGS_EFFECTS_DEFAULT_VERSION; AGS_RECALL(stream_audio_signal)->build_id = AGS_BUILD_ID; AGS_RECALL(stream_audio_signal)->xml_type = "ags-stream-audio-signal\0"; AGS_RECALL(stream_audio_signal)->port = NULL; AGS_RECALL(stream_audio_signal)->child_type = G_TYPE_NONE; } void ags_stream_audio_signal_finalize(GObject *gobject) { if(AGS_RECALL_AUDIO_SIGNAL(gobject)->source != NULL && AGS_RECALL(gobject)->parent != NULL){ ags_recycling_remove_audio_signal(AGS_RECALL_RECYCLING(AGS_RECALL(gobject)->parent)->source, AGS_RECALL_AUDIO_SIGNAL(gobject)->source); } // g_object_unref(AGS_RECALL_AUDIO_SIGNAL(gobject)->source); // g_object_unref(AGS_RECALL_AUDIO_SIGNAL(gobject)->source); /* call parent */ G_OBJECT_CLASS(ags_stream_audio_signal_parent_class)->finalize(gobject); } void ags_stream_audio_signal_connect(AgsConnectable *connectable) { if((AGS_RECALL_CONNECTED & (AGS_RECALL(connectable)->flags)) != 0){ return; } /* call parent */ ags_stream_audio_signal_parent_connectable_interface->connect(connectable); /* empty */ } void ags_stream_audio_signal_disconnect(AgsConnectable *connectable) { /* call parent */ ags_stream_audio_signal_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_stream_audio_signal_connect_dynamic(AgsDynamicConnectable *dynamic_connectable) { if((AGS_RECALL_DYNAMIC_CONNECTED & (AGS_RECALL(dynamic_connectable)->flags)) != 0){ return; } /* call parent */ ags_stream_audio_signal_parent_dynamic_connectable_interface->connect_dynamic(dynamic_connectable); /* empty */ } void ags_stream_audio_signal_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable) { /* call parent */ ags_stream_audio_signal_parent_dynamic_connectable_interface->disconnect_dynamic(dynamic_connectable); /* empty */ } void ags_stream_audio_signal_run_init_pre(AgsRecall *recall) { /* call parent */ AGS_RECALL_CLASS(ags_stream_audio_signal_parent_class)->run_init_pre(recall); // g_message("stream\0"); } void ags_stream_audio_signal_run_post(AgsRecall *recall) { AgsStreamChannel *stream_channel; AgsStreamChannelRun *stream_channel_run; AgsStreamAudioSignal *stream_audio_signal; stream_audio_signal = AGS_STREAM_AUDIO_SIGNAL(recall); if(recall->parent != NULL && recall->parent->parent != NULL){ stream_channel_run = (AgsStreamChannelRun *) recall->parent->parent; stream_channel = (AgsStreamChannel *) AGS_RECALL_CHANNEL_RUN(stream_channel_run)->recall_channel; }else{ stream_channel_run = NULL; stream_channel = NULL; } if(AGS_RECALL_AUDIO_SIGNAL(recall)->source->stream_current != NULL){ if(stream_channel != NULL && AGS_RECALL_AUDIO_SIGNAL(recall)->source->stream_current->next == NULL){ GValue value = {0,}; g_value_init(&value, G_TYPE_BOOLEAN); ags_port_safe_read(stream_channel->auto_sense, &value); if(g_value_get_boolean(&value)){ signed short *buffer; guint buffer_size; guint i; gboolean add_stream; buffer = AGS_RECALL_AUDIO_SIGNAL(recall)->source->stream_current->data; buffer_size = AGS_RECALL_AUDIO_SIGNAL(recall)->source->buffer_size; add_stream = FALSE; for(i = buffer_size - 1; i > buffer_size / 2; i--){ if(buffer[i] != 0){ add_stream = TRUE; break; } } if(add_stream){ ags_audio_signal_add_stream(AGS_RECALL_AUDIO_SIGNAL(recall)->source); } } } //g_message("stream %x %x\0", AGS_RECALL_AUDIO_SIGNAL(recall)->source, AGS_RECALL_ID(AGS_RECALL_AUDIO_SIGNAL(recall)->source->recall_id)->recycling_container); AGS_RECALL_AUDIO_SIGNAL(recall)->source->stream_current = AGS_RECALL_AUDIO_SIGNAL(recall)->source->stream_current->next; /* call parent */ AGS_RECALL_CLASS(ags_stream_audio_signal_parent_class)->run_post(recall); }else{ /* call parent */ AGS_RECALL_CLASS(ags_stream_audio_signal_parent_class)->run_post(recall); if(recall->parent != NULL){ ags_recycling_remove_audio_signal(AGS_RECALL_RECYCLING(recall->parent)->source, AGS_RECALL_AUDIO_SIGNAL(recall)->source); } ags_recall_done(recall); } } AgsRecall* ags_stream_audio_signal_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter) { AgsStreamAudioSignal *copy; copy = (AgsStreamAudioSignal *) AGS_RECALL_CLASS(ags_stream_audio_signal_parent_class)->duplicate(recall, recall_id, n_params, parameter); return((AgsRecall *) copy); } /** * ags_stream_audio_signal_new: * @audio_signal: an #AgsAudioSignal * * Creates an #AgsStreamAudioSignal * * Returns: a new #AgsStreamAudioSignal * * Since: 0.4 */ AgsStreamAudioSignal* ags_stream_audio_signal_new(AgsAudioSignal *audio_signal) { AgsStreamAudioSignal *stream_audio_signal; stream_audio_signal = (AgsStreamAudioSignal *) g_object_new(AGS_TYPE_STREAM_AUDIO_SIGNAL, "source\0", audio_signal, NULL); return(stream_audio_signal); } gsequencer-0.6.37/src/ags/audio/recall/ags_copy_audio_signal.c0000644000175000017500000002342112626272146021275 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include void ags_copy_audio_signal_class_init(AgsCopyAudioSignalClass *copy_audio_signal); void ags_copy_audio_signal_connectable_interface_init(AgsConnectableInterface *connectable); void ags_copy_audio_signal_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable); void ags_copy_audio_signal_init(AgsCopyAudioSignal *copy_audio_signal); void ags_copy_audio_signal_connect(AgsConnectable *connectable); void ags_copy_audio_signal_disconnect(AgsConnectable *connectable); void ags_copy_audio_signal_connect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_copy_audio_signal_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_copy_audio_signal_finalize(GObject *gobject); void ags_copy_audio_signal_run_inter(AgsRecall *recall); AgsRecall* ags_copy_audio_signal_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter); /** * SECTION:ags_copy_audio_signal * @short_description: copys audio signal * @title: AgsCopyAudioSignal * @section_id: * @include: ags/audio/recall/ags_copy_audio_signal.h * * The #AgsCopyAudioSignal class copys the audio signal. */ static gpointer ags_copy_audio_signal_parent_class = NULL; static AgsConnectableInterface *ags_copy_audio_signal_parent_connectable_interface; static AgsDynamicConnectableInterface *ags_copy_audio_signal_parent_dynamic_connectable_interface; //extern void ags_audio_signal_copy_buffer_to_buffer(signed short *destination, guint dchannels, // signed short *source, guint schannels, guint size) // __attribute__ ((hot)) // __attribute__ ((fastcall)); GType ags_copy_audio_signal_get_type() { static GType ags_type_copy_audio_signal = 0; if(!ags_type_copy_audio_signal){ static const GTypeInfo ags_copy_audio_signal_info = { sizeof (AgsCopyAudioSignalClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_copy_audio_signal_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsCopyAudioSignal), 0, /* n_preallocs */ (GInstanceInitFunc) ags_copy_audio_signal_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_copy_audio_signal_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_dynamic_connectable_interface_info = { (GInterfaceInitFunc) ags_copy_audio_signal_dynamic_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_copy_audio_signal = g_type_register_static(AGS_TYPE_RECALL_AUDIO_SIGNAL, "AgsCopyAudioSignal\0", &ags_copy_audio_signal_info, 0); g_type_add_interface_static(ags_type_copy_audio_signal, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_copy_audio_signal, AGS_TYPE_DYNAMIC_CONNECTABLE, &ags_dynamic_connectable_interface_info); } return(ags_type_copy_audio_signal); } void ags_copy_audio_signal_class_init(AgsCopyAudioSignalClass *copy_audio_signal) { GObjectClass *gobject; AgsRecallClass *recall; ags_copy_audio_signal_parent_class = g_type_class_peek_parent(copy_audio_signal); /* GObjectClass */ gobject = (GObjectClass *) copy_audio_signal; gobject->finalize = ags_copy_audio_signal_finalize; /* AgsRecallClass */ recall = (AgsRecallClass *) copy_audio_signal; recall->run_inter = ags_copy_audio_signal_run_inter; recall->duplicate = ags_copy_audio_signal_duplicate; } void ags_copy_audio_signal_connectable_interface_init(AgsConnectableInterface *connectable) { ags_copy_audio_signal_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_copy_audio_signal_connect; connectable->disconnect = ags_copy_audio_signal_disconnect; } void ags_copy_audio_signal_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable) { ags_copy_audio_signal_parent_dynamic_connectable_interface = g_type_interface_peek_parent(dynamic_connectable); dynamic_connectable->connect_dynamic = ags_copy_audio_signal_connect_dynamic; dynamic_connectable->disconnect_dynamic = ags_copy_audio_signal_disconnect_dynamic; } void ags_copy_audio_signal_init(AgsCopyAudioSignal *copy_audio_signal) { AGS_RECALL(copy_audio_signal)->name = "ags-copy\0"; AGS_RECALL(copy_audio_signal)->version = AGS_EFFECTS_DEFAULT_VERSION; AGS_RECALL(copy_audio_signal)->build_id = AGS_BUILD_ID; AGS_RECALL(copy_audio_signal)->xml_type = "ags-copy-audio-signal\0"; AGS_RECALL(copy_audio_signal)->port = NULL; AGS_RECALL(copy_audio_signal)->child_type = G_TYPE_NONE; } void ags_copy_audio_signal_connect(AgsConnectable *connectable) { /* call parent */ ags_copy_audio_signal_parent_connectable_interface->connect(connectable); /* empty */ } void ags_copy_audio_signal_disconnect(AgsConnectable *connectable) { /* call parent */ ags_copy_audio_signal_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_copy_audio_signal_connect_dynamic(AgsDynamicConnectable *dynamic_connectable) { /* call parent */ ags_copy_audio_signal_parent_dynamic_connectable_interface->connect_dynamic(dynamic_connectable); /* empty */ } void ags_copy_audio_signal_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable) { /* call parent */ ags_copy_audio_signal_parent_dynamic_connectable_interface->disconnect_dynamic(dynamic_connectable); /* empty */ } void ags_copy_audio_signal_finalize(GObject *gobject) { /* empty */ /* call parent */ G_OBJECT_CLASS(ags_copy_audio_signal_parent_class)->finalize(gobject); } void ags_copy_audio_signal_run_inter(AgsRecall *recall) { AgsDevout *devout; AgsCopyChannel *copy_channel; AgsCopyAudioSignal *copy_audio_signal; AgsAudioSignal *source, *destination; // AgsAttack *attack; GList *stream_source, *stream_destination; gboolean muted; GValue value = {0,}; AGS_RECALL_CLASS(ags_copy_audio_signal_parent_class)->run_inter(recall); copy_audio_signal = AGS_COPY_AUDIO_SIGNAL(recall); devout = AGS_DEVOUT(AGS_RECALL(copy_audio_signal)->devout); source = AGS_RECALL_AUDIO_SIGNAL(copy_audio_signal)->source; stream_source = source->stream_current; if(stream_source == NULL){ ags_recall_done(recall); return; } //FIXME:JK: attack probably needs to be removed destination = AGS_RECALL_AUDIO_SIGNAL(copy_audio_signal)->destination; if(destination == NULL){ g_warning("no destination\0"); return; } copy_channel = AGS_COPY_CHANNEL(AGS_RECALL_CHANNEL_RUN(recall->parent->parent)->recall_channel); g_value_init(&value, G_TYPE_BOOLEAN); ags_port_safe_read(copy_channel->muted, &value); muted = g_value_get_boolean(&value); g_value_unset(&value); if(muted){ return; } stream_destination = destination->stream_current; // attack = AGS_RECALL_AUDIO_SIGNAL(copy_audio_signal)->attack; if(stream_destination->next == NULL){ ags_audio_signal_add_stream(destination); } g_message("copy\0"); //TODO:JK ags_audio_signal_copy_buffer_to_buffer((signed short *) stream_destination->data, 1, (signed short *) stream_source->data, 1, source->buffer_size); // if(attack->first_start != 0){ // ags_audio_signal_copy_buffer_to_buffer((signed short *) stream_destination->data, 1, // &(((signed short *) stream_source->data)[attack->first_length]), 1, // attack->first_start); // } } AgsRecall* ags_copy_audio_signal_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter) { AgsCopyAudioSignal *copy; copy = (AgsCopyAudioSignal *) AGS_RECALL_CLASS(ags_copy_audio_signal_parent_class)->duplicate(recall, recall_id, n_params, parameter); return((AgsRecall *) copy); } /** * ags_copy_audio_signal_new: * @destination: the destination #AgsAudioSignal * @source: the source #AgsAudioSignal * @devout: the #AgsDevout defaulting to * @attack: the attack * * Creates an #AgsCopyAudioSignal * * Returns: a new #AgsCopyAudioSignal * * Since: 0.4 */ AgsCopyAudioSignal* ags_copy_audio_signal_new(AgsAudioSignal *destination, AgsAudioSignal *source, AgsDevout *devout, AgsAttack *attack) { AgsCopyAudioSignal *copy_audio_signal; copy_audio_signal = (AgsCopyAudioSignal *) g_object_new(AGS_TYPE_COPY_AUDIO_SIGNAL, "destination\0", destination, "source\0", source, "devout\0", devout, "attack\0", attack, NULL); return(copy_audio_signal); } gsequencer-0.6.37/src/ags/audio/recall/ags_envelope_channel.h0000644000175000017500000000416212621245070021107 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_ENVELOPE_CHANNEL_H__ #define __AGS_ENVELOPE_CHANNEL_H__ #include #include #include #include #define AGS_TYPE_ENVELOPE_CHANNEL (ags_envelope_channel_get_type()) #define AGS_ENVELOPE_CHANNEL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_ENVELOPE_CHANNEL, AgsEnvelopeChannel)) #define AGS_ENVELOPE_CHANNEL_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_ENVELOPE_CHANNEL, AgsEnvelopeChannel)) #define AGS_IS_ENVELOPE_CHANNEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_ENVELOPE_CHANNEL)) #define AGS_IS_ENVELOPE_CHANNEL_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_ENVELOPE_CHANNEL)) #define AGS_ENVELOPE_CHANNEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_ENVELOPE_CHANNEL, AgsEnvelopeChannelClass)) typedef struct _AgsEnvelopeChannel AgsEnvelopeChannel; typedef struct _AgsEnvelopeChannelClass AgsEnvelopeChannelClass; struct _AgsEnvelopeChannel { AgsRecallChannel recall_channel; AgsPort *attack; AgsPort *decay; AgsPort *sustain; AgsPort *release; AgsPort *ratio; }; struct _AgsEnvelopeChannelClass { AgsRecallChannelClass recall_channel; }; GType ags_envelope_channel_get_type(); AgsEnvelopeChannel* ags_envelope_channel_new(); #endif /*__AGS_ENVELOPE_CHANNEL_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_copy_pattern_audio_run.c0000644000175000017500000004745112626272146022372 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include void ags_copy_pattern_audio_run_class_init(AgsCopyPatternAudioRunClass *copy_pattern_audio_run); void ags_copy_pattern_audio_run_connectable_interface_init(AgsConnectableInterface *connectable); void ags_copy_pattern_audio_run_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable); void ags_copy_pattern_audio_run_plugin_interface_init(AgsPluginInterface *plugin); void ags_copy_pattern_audio_run_init(AgsCopyPatternAudioRun *copy_pattern_audio_run); void ags_copy_pattern_audio_run_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_copy_pattern_audio_run_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_copy_pattern_audio_run_finalize(GObject *gobject); void ags_copy_pattern_audio_run_connect(AgsConnectable *connectable); void ags_copy_pattern_audio_run_disconnect(AgsConnectable *connectable); void ags_copy_pattern_audio_run_connect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_copy_pattern_audio_run_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_copy_pattern_audio_run_read(AgsFile *file, xmlNode *node, AgsPlugin *plugin); xmlNode* ags_copy_pattern_audio_run_write(AgsFile *file, xmlNode *parent, AgsPlugin *plugin); void ags_copy_pattern_audio_run_resolve_dependencies(AgsRecall *recall); AgsRecall* ags_copy_pattern_audio_run_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter); void ags_copy_pattern_audio_run_notify_dependency(AgsRecall *recall, guint notify_mode, gint count); void ags_copy_pattern_audio_run_write_resolve_dependency(AgsFileLookup *file_lookup, GObject *recall); void ags_copy_pattern_audio_run_read_resolve_dependency(AgsFileLookup *file_lookup, GObject *recall); /** * SECTION:ags_copy_pattern_audio_run * @short_description: copy pattern * @title: AgsCopyPatternAudioRun * @section_id: * @include: ags/audio/recall/ags_copy_pattern_audio_run.h * * The #AgsCopyPatternAudioRun class copy pattern. */ enum{ PROP_0, PROP_DELAY_AUDIO_RUN, PROP_COUNT_BEATS_AUDIO_RUN, }; static gpointer ags_copy_pattern_audio_run_parent_class = NULL; static AgsConnectableInterface* ags_copy_pattern_audio_run_parent_connectable_interface; static AgsDynamicConnectableInterface *ags_copy_pattern_audio_run_parent_dynamic_connectable_interface; static AgsPluginInterface *ags_copy_pattern_audio_run_parent_plugin_interface; GType ags_copy_pattern_audio_run_get_type() { static GType ags_type_copy_pattern_audio_run = 0; if(!ags_type_copy_pattern_audio_run){ static const GTypeInfo ags_copy_pattern_audio_run_info = { sizeof (AgsCopyPatternAudioRunClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_copy_pattern_audio_run_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsCopyPatternAudioRun), 0, /* n_preallocs */ (GInstanceInitFunc) ags_copy_pattern_audio_run_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_copy_pattern_audio_run_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_dynamic_connectable_interface_info = { (GInterfaceInitFunc) ags_copy_pattern_audio_run_dynamic_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_plugin_interface_info = { (GInterfaceInitFunc) ags_copy_pattern_audio_run_plugin_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_copy_pattern_audio_run = g_type_register_static(AGS_TYPE_RECALL_AUDIO_RUN, "AgsCopyPatternAudioRun\0", &ags_copy_pattern_audio_run_info, 0); g_type_add_interface_static(ags_type_copy_pattern_audio_run, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_copy_pattern_audio_run, AGS_TYPE_DYNAMIC_CONNECTABLE, &ags_dynamic_connectable_interface_info); g_type_add_interface_static(ags_type_copy_pattern_audio_run, AGS_TYPE_PLUGIN, &ags_plugin_interface_info); } return(ags_type_copy_pattern_audio_run); } void ags_copy_pattern_audio_run_class_init(AgsCopyPatternAudioRunClass *copy_pattern_audio_run) { GObjectClass *gobject; AgsRecallClass *recall; GParamSpec *param_spec; ags_copy_pattern_audio_run_parent_class = g_type_class_peek_parent(copy_pattern_audio_run); /* GObjectClass */ gobject = (GObjectClass *) copy_pattern_audio_run; gobject->set_property = ags_copy_pattern_audio_run_set_property; gobject->get_property = ags_copy_pattern_audio_run_get_property; gobject->finalize = ags_copy_pattern_audio_run_finalize; /* properties */ param_spec = g_param_spec_object("delay-audio-run\0", "assigned AgsDelayAudioRun\0", "the AgsDelayAudioRun which emits alloc signal\0", AGS_TYPE_DELAY_AUDIO_RUN, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_DELAY_AUDIO_RUN, param_spec); param_spec = g_param_spec_object("count-beats-audio-run\0", "assigned AgsCountBeatsAudioRun\0", "the AgsCountBeatsAudioRun which emits beat signal\0", AGS_TYPE_COUNT_BEATS_AUDIO_RUN, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_COUNT_BEATS_AUDIO_RUN, param_spec); /* AgsRecallClass */ recall = (AgsRecallClass *) copy_pattern_audio_run; recall->resolve_dependencies = ags_copy_pattern_audio_run_resolve_dependencies; recall->duplicate = ags_copy_pattern_audio_run_duplicate; recall->notify_dependency = ags_copy_pattern_audio_run_notify_dependency; } void ags_copy_pattern_audio_run_connectable_interface_init(AgsConnectableInterface *connectable) { ags_copy_pattern_audio_run_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_copy_pattern_audio_run_connect; connectable->disconnect = ags_copy_pattern_audio_run_disconnect; } void ags_copy_pattern_audio_run_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable) { ags_copy_pattern_audio_run_parent_dynamic_connectable_interface = g_type_interface_peek_parent(dynamic_connectable); dynamic_connectable->connect_dynamic = ags_copy_pattern_audio_run_connect_dynamic; dynamic_connectable->disconnect_dynamic = ags_copy_pattern_audio_run_disconnect_dynamic; } void ags_copy_pattern_audio_run_plugin_interface_init(AgsPluginInterface *plugin) { ags_copy_pattern_audio_run_parent_plugin_interface = g_type_interface_peek_parent(plugin); plugin->read = ags_copy_pattern_audio_run_read; plugin->write = ags_copy_pattern_audio_run_write; } void ags_copy_pattern_audio_run_init(AgsCopyPatternAudioRun *copy_pattern_audio_run) { AGS_RECALL(copy_pattern_audio_run)->name = "ags-copy-pattern\0"; AGS_RECALL(copy_pattern_audio_run)->version = AGS_EFFECTS_DEFAULT_VERSION; AGS_RECALL(copy_pattern_audio_run)->build_id = AGS_BUILD_ID; AGS_RECALL(copy_pattern_audio_run)->xml_type = "ags-copy-pattern-audio-run\0"; AGS_RECALL(copy_pattern_audio_run)->port = NULL; copy_pattern_audio_run->hide_ref = 0; copy_pattern_audio_run->hide_ref_counter = 0; copy_pattern_audio_run->delay_audio_run = NULL; copy_pattern_audio_run->count_beats_audio_run = NULL; } void ags_copy_pattern_audio_run_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsCopyPatternAudioRun *copy_pattern_audio_run; copy_pattern_audio_run = AGS_COPY_PATTERN_AUDIO_RUN(gobject); switch(prop_id){ case PROP_DELAY_AUDIO_RUN: { AgsDelayAudioRun *delay_audio_run; gboolean is_template; delay_audio_run = (AgsCountBeatsAudioRun *) g_value_get_object(value); if(copy_pattern_audio_run->delay_audio_run == delay_audio_run) return; if(delay_audio_run != NULL && (AGS_RECALL_TEMPLATE & (AGS_RECALL(delay_audio_run)->flags)) != 0){ is_template = TRUE; }else{ is_template = FALSE; } if(copy_pattern_audio_run->delay_audio_run != NULL){ if(is_template){ ags_recall_remove_dependency(AGS_RECALL(copy_pattern_audio_run), (AgsRecall *) copy_pattern_audio_run->delay_audio_run); } g_object_unref(G_OBJECT(copy_pattern_audio_run->delay_audio_run)); } if(delay_audio_run != NULL){ g_object_ref(G_OBJECT(delay_audio_run)); if(is_template){ ags_recall_add_dependency(AGS_RECALL(copy_pattern_audio_run), ags_recall_dependency_new((GObject *) delay_audio_run)); } } copy_pattern_audio_run->delay_audio_run = delay_audio_run; } break; case PROP_COUNT_BEATS_AUDIO_RUN: { AgsCountBeatsAudioRun *count_beats_audio_run; gboolean is_template; count_beats_audio_run = (AgsCountBeatsAudioRun *) g_value_get_object(value); if(copy_pattern_audio_run->count_beats_audio_run == count_beats_audio_run) return; if(count_beats_audio_run != NULL && (AGS_RECALL_TEMPLATE & (AGS_RECALL(count_beats_audio_run)->flags)) != 0){ is_template = TRUE; }else{ is_template = FALSE; } if(copy_pattern_audio_run->count_beats_audio_run != NULL){ if(is_template){ ags_recall_remove_dependency(AGS_RECALL(copy_pattern_audio_run), (AgsRecall *) copy_pattern_audio_run->count_beats_audio_run); } g_object_unref(G_OBJECT(copy_pattern_audio_run->count_beats_audio_run)); } if(count_beats_audio_run != NULL){ g_object_ref(G_OBJECT(count_beats_audio_run)); if(is_template){ ags_recall_add_dependency(AGS_RECALL(copy_pattern_audio_run), ags_recall_dependency_new((GObject *) count_beats_audio_run)); } } copy_pattern_audio_run->count_beats_audio_run = count_beats_audio_run; } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; }; } void ags_copy_pattern_audio_run_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsCopyPatternAudioRun *copy_pattern_audio_run; copy_pattern_audio_run = AGS_COPY_PATTERN_AUDIO_RUN(gobject); switch(prop_id){ case PROP_DELAY_AUDIO_RUN: { g_value_set_object(value, copy_pattern_audio_run->delay_audio_run); } break; case PROP_COUNT_BEATS_AUDIO_RUN: { g_value_set_object(value, copy_pattern_audio_run->count_beats_audio_run); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; }; } void ags_copy_pattern_audio_run_finalize(GObject *gobject) { AgsCopyPatternAudioRun *copy_pattern_audio_run; copy_pattern_audio_run = AGS_COPY_PATTERN_AUDIO_RUN(gobject); if(copy_pattern_audio_run->delay_audio_run != NULL) g_object_unref(copy_pattern_audio_run->delay_audio_run); if(copy_pattern_audio_run->count_beats_audio_run != NULL) g_object_unref(copy_pattern_audio_run->count_beats_audio_run); /* call parent */ G_OBJECT_CLASS(ags_copy_pattern_audio_run_parent_class)->finalize(gobject); } void ags_copy_pattern_audio_run_connect(AgsConnectable *connectable) { /* call parent */ ags_copy_pattern_audio_run_parent_connectable_interface->connect(connectable); } void ags_copy_pattern_audio_run_disconnect(AgsConnectable *connectable) { /* call parent */ ags_copy_pattern_audio_run_parent_connectable_interface->disconnect(connectable); } void ags_copy_pattern_audio_run_connect_dynamic(AgsDynamicConnectable *dynamic_connectable) { /* call parent */ ags_copy_pattern_audio_run_parent_dynamic_connectable_interface->connect_dynamic(dynamic_connectable); } void ags_copy_pattern_audio_run_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable) { /* call parent */ ags_copy_pattern_audio_run_parent_dynamic_connectable_interface->connect_dynamic(dynamic_connectable); } void ags_copy_pattern_audio_run_read(AgsFile *file, xmlNode *node, AgsPlugin *plugin) { AgsFileLookup *file_lookup; xmlNode *iter; /* read parent */ ags_copy_pattern_audio_run_parent_plugin_interface->read(file, node, plugin); /* read depenendency */ iter = node->children; while(iter != NULL){ if(iter->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(iter->name, "ags-dependency-list\0", 19)){ xmlNode *dependency_node; dependency_node = iter->children; while(dependency_node != NULL){ if(dependency_node->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(dependency_node->name, "ags-dependency\0", 15)){ file_lookup = (AgsFileLookup *) g_object_new(AGS_TYPE_FILE_LOOKUP, "file\0", file, "node\0", dependency_node, "reference\0", G_OBJECT(plugin), NULL); ags_file_add_lookup(file, (GObject *) file_lookup); g_signal_connect(G_OBJECT(file_lookup), "resolve\0", G_CALLBACK(ags_copy_pattern_audio_run_read_resolve_dependency), AGS_RECALL(plugin)); } } dependency_node = dependency_node->next; } } } iter = iter->next; } } xmlNode* ags_copy_pattern_audio_run_write(AgsFile *file, xmlNode *parent, AgsPlugin *plugin) { AgsFileLookup *file_lookup; xmlNode *node, *child; xmlNode *dependency_node; GList *list; gchar *id; /* write parent */ node = ags_copy_pattern_audio_run_parent_plugin_interface->write(file, parent, plugin); /* write dependencies */ child = xmlNewNode(NULL, "ags-dependency-list\0"); xmlNewProp(child, AGS_FILE_ID_PROP, ags_id_generator_create_uuid()); xmlAddChild(node, child); list = AGS_RECALL(plugin)->dependencies; while(list != NULL){ id = ags_id_generator_create_uuid(); dependency_node = xmlNewNode(NULL, "ags-dependency\0"); xmlNewProp(dependency_node, AGS_FILE_ID_PROP, id); xmlAddChild(child, dependency_node); file_lookup = (AgsFileLookup *) g_object_new(AGS_TYPE_FILE_LOOKUP, "file\0", file, "node\0", dependency_node, "reference\0", list->data, NULL); ags_file_add_lookup(file, (GObject *) file_lookup); g_signal_connect(G_OBJECT(file_lookup), "resolve\0", G_CALLBACK(ags_copy_pattern_audio_run_write_resolve_dependency), AGS_RECALL(plugin)); list = list->next; } return(node); } AgsRecall* ags_copy_pattern_audio_run_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter) { AgsCopyPatternAudioRun *copy; copy = AGS_COPY_PATTERN_AUDIO_RUN(AGS_RECALL_CLASS(ags_copy_pattern_audio_run_parent_class)->duplicate(recall, recall_id, n_params, parameter)); return((AgsRecall *) copy); } void ags_copy_pattern_audio_run_notify_dependency(AgsRecall *recall, guint notify_mode, gint count) { AgsCopyPatternAudioRun *copy_pattern_audio_run; copy_pattern_audio_run = AGS_COPY_PATTERN_AUDIO_RUN(recall); switch(notify_mode){ case AGS_RECALL_NOTIFY_RUN: break; case AGS_RECALL_NOTIFY_AUDIO: break; case AGS_RECALL_NOTIFY_AUDIO_RUN: break; case AGS_RECALL_NOTIFY_CHANNEL: break; case AGS_RECALL_NOTIFY_CHANNEL_RUN: copy_pattern_audio_run->hide_ref += count; g_message("copy_pattern_audio_run->hide_ref: %u\n\0", copy_pattern_audio_run->hide_ref); break; default: g_message("ags_copy_pattern_audio_run.c - ags_copy_pattern_audio_run_notify: unknown notify\0"); } } void ags_copy_pattern_audio_run_resolve_dependencies(AgsRecall *recall) { AgsRecall *template; AgsRecallContainer *recall_container; AgsCopyPatternAudioRun *copy_pattern_audio_run; AgsRecallDependency *recall_dependency; AgsDelayAudioRun *delay_audio_run; AgsCountBeatsAudioRun *count_beats_audio_run; GList *list; AgsRecallID *recall_id; guint i, i_stop; copy_pattern_audio_run = AGS_COPY_PATTERN_AUDIO_RUN(recall); recall_container = AGS_RECALL_CONTAINER(recall->container); list = ags_recall_find_template(recall_container->recall_audio_run); if(list != NULL){ template = AGS_RECALL(list->data); }else{ g_warning("AgsRecallClass::resolve - missing dependency"); return; } list = template->dependencies; delay_audio_run = NULL; count_beats_audio_run = NULL; i_stop = 2; for(i = 0; i < i_stop && list != NULL;){ recall_dependency = AGS_RECALL_DEPENDENCY(list->data); recall_id = recall->recall_id; if(AGS_IS_DELAY_AUDIO_RUN(recall_dependency->dependency)){ delay_audio_run = (AgsDelayAudioRun *) ags_recall_dependency_resolve(recall_dependency, (AgsRecallID *) recall_id->recycling_container->parent->recall_id); i++; }else if(AGS_IS_COUNT_BEATS_AUDIO_RUN(recall_dependency->dependency)){ count_beats_audio_run = (AgsCountBeatsAudioRun *) ags_recall_dependency_resolve(recall_dependency, (AgsRecallID *) recall_id->recycling_container->parent->recall_id); i++; } list = list->next; } g_object_set(G_OBJECT(recall), "delay-audio-run\0", delay_audio_run, "count-beats-audio-run\0", count_beats_audio_run, NULL); } void ags_copy_pattern_audio_run_write_resolve_dependency(AgsFileLookup *file_lookup, GObject *recall) { AgsFileIdRef *id_ref; gchar *id; id_ref = (AgsFileIdRef *) ags_file_find_id_ref_by_reference(file_lookup->file, AGS_RECALL_DEPENDENCY(file_lookup->ref)->dependency); id = xmlGetProp(id_ref->node, AGS_FILE_ID_PROP); xmlNewProp(file_lookup->node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id)); } void ags_copy_pattern_audio_run_read_resolve_dependency(AgsFileLookup *file_lookup, GObject *recall) { AgsFileIdRef *id_ref; gchar *xpath; xpath = (gchar *) xmlGetProp(file_lookup->node, "xpath\0"); id_ref = (AgsFileIdRef *) ags_file_find_id_ref_by_xpath(file_lookup->file, xpath); if(AGS_IS_DELAY_AUDIO_RUN(id_ref->ref)){ g_object_set(G_OBJECT(recall), "delay-audio-run\0", id_ref->ref, NULL); }else if(AGS_IS_COUNT_BEATS_AUDIO_RUN(id_ref->ref)){ g_object_set(G_OBJECT(recall), "count-beats-audio-run\0", id_ref->ref, NULL); } } /** * ags_copy_pattern_audio_run_new: * @count_beats_audio_run: an #AgsCountBeatsAudioRun as dependency * * Creates an #AgsCopyPatternAudioRun * * Returns: a new #AgsCopyPatternAudioRun * * Since: 0.4 */ AgsCopyPatternAudioRun* ags_copy_pattern_audio_run_new(AgsCountBeatsAudioRun *count_beats_audio_run) { AgsCopyPatternAudioRun *copy_pattern_audio_run; copy_pattern_audio_run = (AgsCopyPatternAudioRun *) g_object_new(AGS_TYPE_COPY_PATTERN_AUDIO_RUN, "count-beats-audio-run\0", count_beats_audio_run, NULL); return(copy_pattern_audio_run); } gsequencer-0.6.37/src/ags/audio/recall/ags_play_channel.c0000644000175000017500000002613712626272146020251 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include void ags_play_channel_class_init(AgsPlayChannelClass *play_channel); void ags_play_channel_connectable_interface_init(AgsConnectableInterface *connectable); void ags_play_channel_mutable_interface_init(AgsMutableInterface *mutable); void ags_play_channel_plugin_interface_init(AgsPluginInterface *plugin); void ags_play_channel_init(AgsPlayChannel *play_channel); void ags_play_channel_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_play_channel_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_play_channel_connect(AgsConnectable *connectable); void ags_play_channel_disconnect(AgsConnectable *connectable); void ags_play_channel_set_ports(AgsPlugin *plugin, GList *port); void ags_play_channel_finalize(GObject *gobject); void ags_play_channel_set_muted(AgsMutable *mutable, gboolean muted); enum{ PROP_0, PROP_AUDIO_CHANNEL, PROP_MUTED, }; /** * SECTION:ags_play_channel * @short_description: plays channel * @title: AgsPlayChannel * @section_id: * @include: ags/audio/recall/ags_play_channel.h * * The #AgsPlayChannel class provides ports to the effect processor. */ static gpointer ags_play_channel_parent_class = NULL; static AgsConnectableInterface *ags_play_channel_parent_connectable_interface; static AgsMutableInterface *ags_play_channel_parent_mutable_interface; static AgsPluginInterface *ags_play_channel_parent_plugin_interface; static const gchar *ags_play_channel_plugin_name = "ags-play\0"; static const gchar *ags_play_channel_specifier[] = { "./audio-channel[0]\0", "./muted[0]\0", }; static const gchar *ags_play_channel_control_port[] = { "1/2\0", "2/2\0", }; GType ags_play_channel_get_type() { static GType ags_type_play_channel = 0; if(!ags_type_play_channel){ static const GTypeInfo ags_play_channel_info = { sizeof (AgsPlayChannelClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_play_channel_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsPlayChannel), 0, /* n_preallocs */ (GInstanceInitFunc) ags_play_channel_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_play_channel_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_mutable_interface_info = { (GInterfaceInitFunc) ags_play_channel_mutable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_plugin_interface_info = { (GInterfaceInitFunc) ags_play_channel_plugin_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_play_channel = g_type_register_static(AGS_TYPE_RECALL_CHANNEL, "AgsPlayChannel\0", &ags_play_channel_info, 0); g_type_add_interface_static(ags_type_play_channel, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_play_channel, AGS_TYPE_MUTABLE, &ags_mutable_interface_info); g_type_add_interface_static(ags_type_play_channel, AGS_TYPE_PLUGIN, &ags_plugin_interface_info); } return(ags_type_play_channel); } void ags_play_channel_class_init(AgsPlayChannelClass *play_channel) { GObjectClass *gobject; AgsRecallClass *recall; GParamSpec *param_spec; ags_play_channel_parent_class = g_type_class_peek_parent(play_channel); /* GObjectClass */ gobject = (GObjectClass *) play_channel; gobject->set_property = ags_play_channel_set_property; gobject->get_property = ags_play_channel_get_property; gobject->finalize = ags_play_channel_finalize; /* properties */ param_spec = g_param_spec_object("audio-channel\0", "assigned audio channel\0", "The audio channel this recall does output to\0", AGS_TYPE_PORT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_AUDIO_CHANNEL, param_spec); param_spec = g_param_spec_object("muted\0", "mute channel\0", "Mute the channel\0", AGS_TYPE_PORT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_MUTED, param_spec); } void ags_play_channel_connectable_interface_init(AgsConnectableInterface *connectable) { ags_play_channel_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_play_channel_connect; connectable->disconnect = ags_play_channel_disconnect; } void ags_play_channel_mutable_interface_init(AgsMutableInterface *mutable) { ags_play_channel_parent_mutable_interface = g_type_interface_peek_parent(mutable); mutable->set_muted = ags_play_channel_set_muted; } void ags_play_channel_plugin_interface_init(AgsPluginInterface *plugin) { ags_play_channel_parent_plugin_interface = g_type_interface_peek_parent(plugin); plugin->set_ports = ags_play_channel_set_ports; } void ags_play_channel_init(AgsPlayChannel *play_channel) { GList *port; AGS_RECALL(play_channel)->name = "ags-play\0"; AGS_RECALL(play_channel)->version = AGS_EFFECTS_DEFAULT_VERSION; AGS_RECALL(play_channel)->build_id = AGS_BUILD_ID; AGS_RECALL(play_channel)->xml_type = "ags-play-channel\0"; port = NULL; play_channel->audio_channel = g_object_new(AGS_TYPE_PORT, "plugin-name\0", ags_play_channel_plugin_name, "specifier\0", ags_play_channel_specifier[0], "control-port\0", ags_play_channel_control_port[0], "port-value-is-pointer\0", FALSE, "port-value-type\0", G_TYPE_UINT64, "port-value-size\0", sizeof(guint64), "port-value-length\0", 1, NULL); play_channel->audio_channel->port_value.ags_port_uint = 0; port = g_list_prepend(port, play_channel->audio_channel); play_channel->muted = g_object_new(AGS_TYPE_PORT, "plugin-name\0", ags_play_channel_plugin_name, "specifier\0", ags_play_channel_specifier[1], "control-port\0", ags_play_channel_control_port[1], "port-value-is-pointer\0", FALSE, "port-value-type\0", G_TYPE_BOOLEAN, "port-value-size\0", sizeof(gboolean), "port-value-length\0", 1, NULL); play_channel->muted->port_value.ags_port_boolean = FALSE; port = g_list_prepend(port, play_channel->muted); /* set port */ AGS_RECALL(play_channel)->port = port; } void ags_play_channel_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsPlayChannel *play_channel; play_channel = AGS_PLAY_CHANNEL(gobject); switch(prop_id){ case PROP_AUDIO_CHANNEL: { AgsPort *port; port = (AgsPort *) g_value_get_object(value); if(port == play_channel->audio_channel){ return; } if(play_channel->audio_channel != NULL){ g_object_unref(G_OBJECT(play_channel->audio_channel)); } if(port != NULL){ g_object_ref(G_OBJECT(port)); } play_channel->audio_channel = port; } break; case PROP_MUTED: { AgsPort *port; port = (AgsPort *) g_value_get_object(value); if(port == play_channel->muted){ return; } if(play_channel->muted != NULL){ g_object_unref(G_OBJECT(play_channel->muted)); } if(port != NULL){ g_object_ref(G_OBJECT(port)); } play_channel->muted = port; } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_play_channel_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsPlayChannel *play_channel; play_channel = AGS_PLAY_CHANNEL(gobject); switch(prop_id){ case PROP_AUDIO_CHANNEL: { g_value_set_object(value, play_channel->audio_channel); } break; case PROP_MUTED: { g_value_set_object(value, play_channel->muted); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_play_channel_finalize(GObject *gobject) { AgsPlayChannel *play_channel; play_channel = AGS_PLAY_CHANNEL(gobject); if(play_channel->audio_channel != NULL){ g_object_unref(G_OBJECT(play_channel->audio_channel)); } if(play_channel->muted != NULL){ g_object_unref(G_OBJECT(play_channel->muted)); } /* call parent */ G_OBJECT_CLASS(ags_play_channel_parent_class)->finalize(gobject); } void ags_play_channel_connect(AgsConnectable *connectable) { AgsPlayChannel *play_channel; ags_play_channel_parent_connectable_interface->connect(connectable); /* empty */ } void ags_play_channel_disconnect(AgsConnectable *connectable) { ags_play_channel_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_play_channel_set_ports(AgsPlugin *plugin, GList *port) { while(port != NULL){ if(!strncmp(AGS_PORT(port->data)->specifier, "./audio-channel[0]\0", 17)){ g_object_set(G_OBJECT(plugin), "audio-channel\0", AGS_PORT(port->data), NULL); }else if(!strncmp(AGS_PORT(port->data)->specifier, "./muted[0]\0", 9)){ g_object_set(G_OBJECT(plugin), "muted\0", AGS_PORT(port->data), NULL); } port = port->next; } } void ags_play_channel_set_muted(AgsMutable *mutable, gboolean muted) { GValue value = {0,}; g_value_init(&value, G_TYPE_BOOLEAN); g_value_set_boolean(&value, muted); ags_port_safe_write(AGS_PLAY_CHANNEL(mutable)->muted, &value); } /** * ags_play_channel_new: * @devout: the #AgsDevout outputting to * @audio_channel: the audio channel to use * * Creates an #AgsPlayChannel * * Returns: a new #AgsPlayChannel * * Since: 0.4 */ AgsPlayChannel* ags_play_channel_new(AgsDevout *devout, guint audio_channel) { AgsPlayChannel *play_channel; play_channel = (AgsPlayChannel *) g_object_new(AGS_TYPE_PLAY_CHANNEL, "devout\0", devout, NULL); play_channel->audio_channel->port_value.ags_port_uint = audio_channel; return(play_channel); } gsequencer-0.6.37/src/ags/audio/recall/ags_clone_channel_run.c0000644000175000017500000002334212626272146021263 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include void ags_clone_channel_run_class_init(AgsCloneChannelRunClass *clone_channel_run); void ags_clone_channel_run_connectable_interface_init(AgsConnectableInterface *connectable); void ags_clone_channel_run_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable); void ags_clone_channel_run_plugin_interface_init(AgsPluginInterface *plugin); void ags_clone_channel_run_init(AgsCloneChannelRun *clone_channel_run); void ags_clone_channel_run_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_clone_channel_run_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_clone_channel_run_connect(AgsConnectable *connectable); void ags_clone_channel_run_disconnect(AgsConnectable *connectable); void ags_clone_channel_run_connect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_clone_channel_run_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_clone_channel_run_finalize(GObject *gobject); void ags_clone_channel_run_run_init_pre(AgsRecall *recall); void ags_clone_channel_run_done(AgsRecall *recall); void ags_clone_channel_run_remove(AgsRecall *recall); void ags_clone_channel_run_cancel(AgsRecall *recall); AgsRecall* ags_clone_channel_run_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter); enum{ PROP_0, }; static gpointer ags_clone_channel_run_parent_class = NULL; static AgsConnectableInterface *ags_clone_channel_run_parent_connectable_interface; static AgsDynamicConnectableInterface *ags_clone_channel_run_parent_dynamic_connectable_interface; static AgsPluginInterface *ags_clone_channel_run_parent_plugin_interface; GType ags_clone_channel_run_get_type() { static GType ags_type_clone_channel_run = 0; if(!ags_type_clone_channel_run){ static const GTypeInfo ags_clone_channel_run_info = { sizeof (AgsCloneChannelRunClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_clone_channel_run_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsCloneChannelRun), 0, /* n_preallocs */ (GInstanceInitFunc) ags_clone_channel_run_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_clone_channel_run_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_dynamic_connectable_interface_info = { (GInterfaceInitFunc) ags_clone_channel_run_dynamic_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_plugin_interface_info = { (GInterfaceInitFunc) ags_clone_channel_run_plugin_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_clone_channel_run = g_type_register_static(AGS_TYPE_RECALL_CHANNEL_RUN, "AgsCloneChannelRun\0", &ags_clone_channel_run_info, 0); g_type_add_interface_static(ags_type_clone_channel_run, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_clone_channel_run, AGS_TYPE_DYNAMIC_CONNECTABLE, &ags_dynamic_connectable_interface_info); g_type_add_interface_static(ags_type_clone_channel_run, AGS_TYPE_PLUGIN, &ags_plugin_interface_info); } return(ags_type_clone_channel_run); } void ags_clone_channel_run_class_init(AgsCloneChannelRunClass *clone_channel_run) { GObjectClass *gobject; AgsRecallClass *recall; GParamSpec *param_spec; ags_clone_channel_run_parent_class = g_type_class_peek_parent(clone_channel_run); /* GObjectClass */ gobject = (GObjectClass *) clone_channel_run; gobject->set_property = ags_clone_channel_run_set_property; gobject->get_property = ags_clone_channel_run_get_property; gobject->finalize = ags_clone_channel_run_finalize; /* AgsRecallClass */ recall = (AgsRecallClass *) clone_channel_run; recall->run_init_pre = ags_clone_channel_run_run_init_pre; recall->done = ags_clone_channel_run_done; recall->cancel = ags_clone_channel_run_cancel; recall->duplicate = ags_clone_channel_run_duplicate; } void ags_clone_channel_run_connectable_interface_init(AgsConnectableInterface *connectable) { ags_clone_channel_run_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_clone_channel_run_connect; connectable->disconnect = ags_clone_channel_run_disconnect; } void ags_clone_channel_run_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable) { ags_clone_channel_run_parent_dynamic_connectable_interface = g_type_interface_peek_parent(dynamic_connectable); dynamic_connectable->connect_dynamic = ags_clone_channel_run_connect_dynamic; dynamic_connectable->disconnect_dynamic = ags_clone_channel_run_disconnect_dynamic; } void ags_clone_channel_run_plugin_interface_init(AgsPluginInterface *plugin) { ags_clone_channel_run_parent_plugin_interface = g_type_interface_peek_parent(plugin); } void ags_clone_channel_run_init(AgsCloneChannelRun *clone_channel_run) { AGS_RECALL(clone_channel_run)->flags |= AGS_RECALL_INPUT_ORIENTATED; AGS_RECALL(clone_channel_run)->child_type = G_TYPE_NONE; } void ags_clone_channel_run_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsCloneChannelRun *clone_channel_run; clone_channel_run = AGS_CLONE_CHANNEL_RUN(gobject); switch(prop_id){ default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_clone_channel_run_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsCloneChannelRun *clone_channel_run; clone_channel_run = AGS_CLONE_CHANNEL_RUN(gobject); switch(prop_id){ default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_clone_channel_run_finalize(GObject *gobject) { /* empty */ /* call parent */ G_OBJECT_CLASS(ags_clone_channel_run_parent_class)->finalize(gobject); } void ags_clone_channel_run_connect(AgsConnectable *connectable) { AgsCloneChannelRun *clone_channel_run; ags_clone_channel_run_parent_connectable_interface->connect(connectable); /* empty */ } void ags_clone_channel_run_disconnect(AgsConnectable *connectable) { ags_clone_channel_run_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_clone_channel_run_connect_dynamic(AgsDynamicConnectable *dynamic_connectable) { AgsCloneChannel *clone_channel; AgsCloneChannelRun *clone_channel_run; GObject *gobject; ags_clone_channel_run_parent_dynamic_connectable_interface->connect_dynamic(dynamic_connectable); /* AgsCloneChannelRun */ clone_channel_run = AGS_CLONE_CHANNEL_RUN(dynamic_connectable); } void ags_clone_channel_run_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable) { AgsCloneChannel *clone_channel; AgsCloneChannelRun *clone_channel_run; GObject *gobject; ags_clone_channel_run_parent_dynamic_connectable_interface->disconnect_dynamic(dynamic_connectable); /* AgsCloneChannelRun */ clone_channel_run = AGS_CLONE_CHANNEL_RUN(dynamic_connectable); /* AgsCloneChannel */ clone_channel = AGS_CLONE_CHANNEL(AGS_RECALL_CHANNEL_RUN(clone_channel_run)->recall_channel); } void ags_clone_channel_run_run_init_pre(AgsRecall *recall) { AGS_RECALL_CLASS(ags_clone_channel_run_parent_class)->run_init_pre(recall); /* empty */ } void ags_clone_channel_run_done(AgsRecall *recall) { AGS_RECALL_CLASS(ags_clone_channel_run_parent_class)->done(recall); /* empty */ } void ags_clone_channel_run_cancel(AgsRecall *recall) { AGS_RECALL_CLASS(ags_clone_channel_run_parent_class)->cancel(recall); /* empty */ } AgsRecall* ags_clone_channel_run_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter) { AgsCloneChannelRun *clone_channel_run, *copy; clone_channel_run = (AgsCloneChannelRun *) recall; copy = (AgsCloneChannelRun *) AGS_RECALL_CLASS(ags_clone_channel_run_parent_class)->duplicate(recall, recall_id, n_params, parameter); return((AgsRecall *) copy); } AgsCloneChannelRun* ags_clone_channel_run_new() { AgsCloneChannelRun *clone_channel_run; clone_channel_run = (AgsCloneChannelRun *) g_object_new(AGS_TYPE_CLONE_CHANNEL_RUN, NULL); return(clone_channel_run); } gsequencer-0.6.37/src/ags/audio/recall/ags_play_notation_audio.h0000644000175000017500000000410312612232540021634 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_PLAY_NOTATION_AUDIO_H__ #define __AGS_PLAY_NOTATION_AUDIO_H__ #include #include #include #define AGS_TYPE_PLAY_NOTATION_AUDIO (ags_play_notation_audio_get_type()) #define AGS_PLAY_NOTATION_AUDIO(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_PLAY_NOTATION_AUDIO, AgsPlayNotationAudio)) #define AGS_PLAY_NOTATION_AUDIO_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_PLAY_NOTATION_AUDIO, AgsPlayNotationAudio)) #define AGS_IS_PLAY_NOTATION_AUDIO(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_PLAY_NOTATION_AUDIO)) #define AGS_IS_PLAY_NOTATION_AUDIO_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_PLAY_NOTATION_AUDIO)) #define AGS_PLAY_NOTATION_AUDIO_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_PLAY_NOTATION_AUDIO, AgsPlayNotationAudioClass)) typedef struct _AgsPlayNotationAudio AgsPlayNotationAudio; typedef struct _AgsPlayNotationAudioClass AgsPlayNotationAudioClass; struct _AgsPlayNotationAudio { AgsRecallAudio recall_audio; AgsPort *monotonic; }; struct _AgsPlayNotationAudioClass { AgsRecallAudioClass recall_audio; }; GType ags_play_notation_audio_get_type(); AgsPlayNotationAudio* ags_play_notation_audio_new(); #endif /*__AGS_PLAY_NOTATION_AUDIO_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_peak_recycling.h0000644000175000017500000000373712612232540020566 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_PEAK_RECYCLING_H__ #define __AGS_PEAK_RECYCLING_H__ #include #include #include #define AGS_TYPE_PEAK_RECYCLING (ags_peak_recycling_get_type()) #define AGS_PEAK_RECYCLING(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_PEAK_RECYCLING, AgsPeakRecycling)) #define AGS_PEAK_RECYCLING_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_PEAK_RECYCLING, AgsPeakRecyclingClass)) #define AGS_IS_PEAK_RECYCLING(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_PEAK_RECYCLING)) #define AGS_IS_PEAK_RECYCLING_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_PEAK_RECYCLING)) #define AGS_PEAK_RECYCLING_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_PEAK_RECYCLING, AgsPeakRecyclingClass)) typedef struct _AgsPeakRecycling AgsPeakRecycling; typedef struct _AgsPeakRecyclingClass AgsPeakRecyclingClass; struct _AgsPeakRecycling { AgsRecallRecycling recall_recycling; }; struct _AgsPeakRecyclingClass { AgsRecallRecyclingClass recall_recycling; }; GType ags_peak_recycling_get_type(); AgsPeakRecycling* ags_peak_recycling_new(AgsRecycling *recycling); #endif /*__AGS_PEAK_RECYCLING_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_volume_channel.c0000644000175000017500000002004112626272146020577 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include void ags_volume_channel_class_init(AgsVolumeChannelClass *volume_channel); void ags_volume_channel_connectable_interface_init(AgsConnectableInterface *connectable); void ags_volume_channel_plugin_interface_init(AgsPluginInterface *plugin); void ags_volume_channel_init(AgsVolumeChannel *volume_channel); void ags_volume_channel_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_volume_channel_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_volume_channel_connect(AgsConnectable *connectable); void ags_volume_channel_disconnect(AgsConnectable *connectable); void ags_volume_channel_set_ports(AgsPlugin *plugin, GList *port); void ags_volume_channel_finalize(GObject *gobject); /** * SECTION:ags_volume_channel * @short_description: volumes channel * @title: AgsVolumeChannel * @section_id: * @include: ags/audio/recall/ags_volume_channel.h * * The #AgsVolumeChannel class provides ports to the effect processor. */ enum{ PROP_0, PROP_VOLUME, }; static gpointer ags_volume_channel_parent_class = NULL; static AgsConnectableInterface *ags_volume_channel_parent_connectable_interface; static const gchar *ags_volume_channel_plugin_name = "ags-volume\0"; static const gchar *ags_volume_channel_specifier[] = { "./volume[0]\0" }; static const gchar *ags_volume_channel_control_port[] = { "1/1\0" }; GType ags_volume_channel_get_type() { static GType ags_type_volume_channel = 0; if(!ags_type_volume_channel){ static const GTypeInfo ags_volume_channel_info = { sizeof (AgsVolumeChannelClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_volume_channel_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsVolumeChannel), 0, /* n_preallocs */ (GInstanceInitFunc) ags_volume_channel_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_volume_channel_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_plugin_interface_info = { (GInterfaceInitFunc) ags_volume_channel_plugin_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_volume_channel = g_type_register_static(AGS_TYPE_RECALL_CHANNEL, "AgsVolumeChannel\0", &ags_volume_channel_info, 0); g_type_add_interface_static(ags_type_volume_channel, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_volume_channel, AGS_TYPE_PLUGIN, &ags_plugin_interface_info); } return (ags_type_volume_channel); } void ags_volume_channel_connectable_interface_init(AgsConnectableInterface *connectable) { ags_volume_channel_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_volume_channel_connect; connectable->disconnect = ags_volume_channel_disconnect; } void ags_volume_channel_plugin_interface_init(AgsPluginInterface *plugin) { plugin->set_ports = ags_volume_channel_set_ports; } void ags_volume_channel_class_init(AgsVolumeChannelClass *volume_channel) { GObjectClass *gobject; AgsRecallClass *recall; GParamSpec *param_spec; ags_volume_channel_parent_class = g_type_class_peek_parent(volume_channel); /* GObjectClass */ gobject = (GObjectClass *) volume_channel; gobject->set_property = ags_volume_channel_set_property; gobject->get_property = ags_volume_channel_get_property; gobject->finalize = ags_volume_channel_finalize; /* properties */ param_spec = g_param_spec_object("volume\0", "volume to apply\0", "The volume to apply on the channel\0", AGS_TYPE_PORT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_VOLUME, param_spec); } void ags_volume_channel_init(AgsVolumeChannel *volume_channel) { GList *port; AGS_RECALL(volume_channel)->name = "ags-volume\0"; AGS_RECALL(volume_channel)->version = AGS_EFFECTS_DEFAULT_VERSION; AGS_RECALL(volume_channel)->build_id = AGS_BUILD_ID; AGS_RECALL(volume_channel)->xml_type = "ags-volume-channel\0"; port = NULL; /* volume */ volume_channel->volume = g_object_new(AGS_TYPE_PORT, "plugin-name\0", "ags-volume\0", "specifier\0", "./volume[0]\0", "control-port\0", "1/1\0", "port-value-is-pointer\0", FALSE, "port-value-type\0", G_TYPE_DOUBLE, "port-value-size\0", sizeof(gdouble), "port-value-length", 1, NULL); volume_channel->volume->port_value.ags_port_double = 1.0; port = g_list_prepend(port, volume_channel->volume); AGS_RECALL(volume_channel)->port = port; } void ags_volume_channel_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsVolumeChannel *volume_channel; volume_channel = AGS_VOLUME_CHANNEL(gobject); switch(prop_id){ case PROP_VOLUME: { AgsPort *port; port = (AgsPort *) g_value_get_object(value); if(port == volume_channel->volume){ return; } if(volume_channel->volume != NULL){ g_object_unref(G_OBJECT(volume_channel->volume)); } if(port != NULL){ g_object_ref(G_OBJECT(port)); } volume_channel->volume = port; } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_volume_channel_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsVolumeChannel *volume_channel; volume_channel = AGS_VOLUME_CHANNEL(gobject); switch(prop_id){ case PROP_VOLUME: { g_value_set_object(value, volume_channel->volume); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_volume_channel_connect(AgsConnectable *connectable) { ags_volume_channel_parent_connectable_interface->connect(connectable); /* empty */ } void ags_volume_channel_disconnect(AgsConnectable *connectable) { ags_volume_channel_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_volume_channel_set_ports(AgsPlugin *plugin, GList *port) { while(port != NULL){ if(!strncmp(AGS_PORT(port->data)->specifier, "./volume[0]\0", 12)){ g_object_set(G_OBJECT(plugin), "volume\0", AGS_PORT(port->data), NULL); } port = port->next; } } void ags_volume_channel_finalize(GObject *gobject) { AgsVolumeChannel *volume_channel; volume_channel = AGS_VOLUME_CHANNEL(gobject); if(volume_channel->volume != NULL){ g_object_unref(G_OBJECT(volume_channel->volume)); } /* call parent */ G_OBJECT_CLASS(ags_volume_channel_parent_class)->finalize(gobject); } /** * ags_volume_channel_new: * * Creates an #AgsVolumeChannel * * Returns: a new #AgsVolumeChannel * * Since: 0.4 */ AgsVolumeChannel* ags_volume_channel_new() { AgsVolumeChannel *volume_channel; volume_channel = (AgsVolumeChannel *) g_object_new(AGS_TYPE_VOLUME_CHANNEL, NULL); return(volume_channel); } gsequencer-0.6.37/src/ags/audio/recall/ags_copy_pattern_audio.c0000644000175000017500000002236212626272146021500 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include void ags_copy_pattern_audio_class_init(AgsCopyPatternAudioClass *copy_pattern_audio); void ags_copy_pattern_audio_plugin_interface_init(AgsPluginInterface *plugin); void ags_copy_pattern_audio_init(AgsCopyPatternAudio *copy_pattern_audio); void ags_copy_pattern_audio_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_copy_pattern_audio_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_copy_pattern_audio_set_ports(AgsPlugin *plugin, GList *port); void ags_copy_pattern_audio_finalize(GObject *gobject); /** * SECTION:ags_copy_pattern_audio * @short_description: copy audio pattern * @title: AgsCopyPatternAudio * @section_id: * @include: ags/audio/recall/ags_copy_pattern_audio.h * * The #AgsCopyPatternAudio class provides ports to the effect processor. */ enum{ PROP_0, PROP_BANK_INDEX_0, PROP_BANK_INDEX_1, }; static gpointer ags_copy_pattern_audio_parent_class = NULL; static const gchar *ags_copy_pattern_audio_plugin_name = "ags-copy-pattern\0"; static const gchar *ags_copy_pattern_audio_specifier[] = { "./bank-index-0[0]\0", "./bank-index-1[0]\0" }; static const gchar *ags_copy_pattern_audio_control_port[] = { "1/2\0", "2/2\0" }; GType ags_copy_pattern_audio_get_type() { static GType ags_type_copy_pattern_audio = 0; if(!ags_type_copy_pattern_audio){ static const GTypeInfo ags_copy_pattern_audio_info = { sizeof (AgsCopyPatternAudioClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_copy_pattern_audio_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsCopyPatternAudio), 0, /* n_preallocs */ (GInstanceInitFunc) ags_copy_pattern_audio_init, }; static const GInterfaceInfo ags_plugin_interface_info = { (GInterfaceInitFunc) ags_copy_pattern_audio_plugin_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_copy_pattern_audio = g_type_register_static(AGS_TYPE_RECALL_AUDIO, "AgsCopyPatternAudio\0", &ags_copy_pattern_audio_info, 0); g_type_add_interface_static(ags_type_copy_pattern_audio, AGS_TYPE_PLUGIN, &ags_plugin_interface_info); } return(ags_type_copy_pattern_audio); } void ags_copy_pattern_audio_plugin_interface_init(AgsPluginInterface *plugin) { plugin->set_ports = ags_copy_pattern_audio_set_ports; } void ags_copy_pattern_audio_class_init(AgsCopyPatternAudioClass *copy_pattern_audio) { GObjectClass *gobject; GParamSpec *param_spec; ags_copy_pattern_audio_parent_class = g_type_class_peek_parent(copy_pattern_audio); /* GObjectClass */ gobject = (GObjectClass *) copy_pattern_audio; gobject->set_property = ags_copy_pattern_audio_set_property; gobject->get_property = ags_copy_pattern_audio_get_property; gobject->finalize = ags_copy_pattern_audio_finalize; /* properties */ param_spec = g_param_spec_object("bank-index-0\0", "current bank index 0\0", "The current bank index 0 of the AgsPattern\0", AGS_TYPE_PORT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_BANK_INDEX_0, param_spec); param_spec = g_param_spec_object("bank-index-1\0", "current bank index 1\0", "The current bank index 1 of the AgsPattern\0", AGS_TYPE_PORT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_BANK_INDEX_1, param_spec); } void ags_copy_pattern_audio_init(AgsCopyPatternAudio *copy_pattern_audio) { GList *port; AGS_RECALL(copy_pattern_audio)->name = "ags-copy-pattern\0"; AGS_RECALL(copy_pattern_audio)->version = AGS_EFFECTS_DEFAULT_VERSION; AGS_RECALL(copy_pattern_audio)->build_id = AGS_BUILD_ID; AGS_RECALL(copy_pattern_audio)->xml_type = "ags-copy-pattern-audio\0"; port = NULL; copy_pattern_audio->bank_index_0 = g_object_new(AGS_TYPE_PORT, "plugin-name\0", ags_copy_pattern_audio_plugin_name, "specifier\0", ags_copy_pattern_audio_specifier[0], "control-port\0", ags_copy_pattern_audio_control_port[0], "port-value-is-pointer\0", FALSE, "port-value-type\0", G_TYPE_UINT64, "port-value-size\0", sizeof(guint), "port-value-length\0", 1, NULL); copy_pattern_audio->bank_index_0->port_value.ags_port_uint = 0; port = g_list_prepend(port, copy_pattern_audio->bank_index_0); copy_pattern_audio->bank_index_1 = g_object_new(AGS_TYPE_PORT, "plugin-name\0", ags_copy_pattern_audio_plugin_name, "specifier\0", ags_copy_pattern_audio_specifier[1], "control-port\0", ags_copy_pattern_audio_control_port[1], "port-value-is-pointer\0", FALSE, "port-value-type\0", G_TYPE_UINT64, "port-value-size\0", sizeof(guint), "port-value-length\0", 1, NULL); copy_pattern_audio->bank_index_1->port_value.ags_port_uint = 0; port = g_list_prepend(port, copy_pattern_audio->bank_index_1); AGS_RECALL(copy_pattern_audio)->port = port; } void ags_copy_pattern_audio_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsCopyPatternAudio *copy_pattern_audio; copy_pattern_audio = AGS_COPY_PATTERN_AUDIO(gobject); switch(prop_id){ case PROP_BANK_INDEX_0: { AgsPort *port; port = (AgsPort *) g_value_get_object(value); if(port == copy_pattern_audio->bank_index_0){ return; } if(copy_pattern_audio->bank_index_0 != NULL){ g_object_unref(G_OBJECT(copy_pattern_audio->bank_index_0)); } if(port != NULL){ g_object_ref(G_OBJECT(port)); } copy_pattern_audio->bank_index_0 = port; } break; case PROP_BANK_INDEX_1: { AgsPort *port; port = (AgsPort *) g_value_get_object(value); if(port == copy_pattern_audio->bank_index_1){ return; } if(copy_pattern_audio->bank_index_1 != NULL){ g_object_unref(G_OBJECT(copy_pattern_audio->bank_index_1)); } if(port != NULL){ g_object_ref(G_OBJECT(port)); } copy_pattern_audio->bank_index_1 = port; } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; }; } void ags_copy_pattern_audio_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsCopyPatternAudio *copy_pattern_audio; copy_pattern_audio = AGS_COPY_PATTERN_AUDIO(gobject); switch(prop_id){ case PROP_BANK_INDEX_0: { g_value_set_object(value, copy_pattern_audio->bank_index_0); } break; case PROP_BANK_INDEX_1: { g_value_set_object(value, copy_pattern_audio->bank_index_1); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; }; } void ags_copy_pattern_audio_set_ports(AgsPlugin *plugin, GList *port) { while(port != NULL){ if(!strncmp(AGS_PORT(port->data)->specifier, "./bank-index-0[0]\0", 16)){ g_object_set(G_OBJECT(plugin), "bank-index-0\0", AGS_PORT(port->data), NULL); }else if(!strncmp(AGS_PORT(port->data)->specifier, "./bank-index-1[0]\0", 16)){ g_object_set(G_OBJECT(plugin), "bank-index-1\0", AGS_PORT(port->data), NULL); } port = port->next; } } void ags_copy_pattern_audio_finalize(GObject *gobject) { AgsCopyPatternAudio *copy_pattern_audio; copy_pattern_audio = AGS_COPY_PATTERN_AUDIO(gobject); /* call parent */ G_OBJECT_CLASS(ags_copy_pattern_audio_parent_class)->finalize(gobject); } /** * ags_copy_pattern_audio_new: * @devout: the #AgsDevout defaulting to * @tact: the offset * @i: bank index 0 * @j: bank index 1 * * Creates an #AgsCopyPatternAudio * * Returns: a new #AgsCopyPatternAudio * * Since: 0.4 */ AgsCopyPatternAudio* ags_copy_pattern_audio_new(AgsDevout *devout, gdouble tact, guint i, guint j) { AgsCopyPatternAudio *copy_pattern_audio; copy_pattern_audio = (AgsCopyPatternAudio *) g_object_new(AGS_TYPE_COPY_PATTERN_AUDIO, "devout\0", devout, "tact\0", tact, "bank_index_0\0", i, "bank_index_1\0", j, NULL); return(copy_pattern_audio); } gsequencer-0.6.37/src/ags/audio/recall/ags_buffer_recycling.c0000644000175000017500000001705012626272146021116 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include void ags_buffer_recycling_class_init(AgsBufferRecyclingClass *buffer_recycling); void ags_buffer_recycling_connectable_interface_init(AgsConnectableInterface *connectable); void ags_buffer_recycling_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable); void ags_buffer_recycling_init(AgsBufferRecycling *buffer_recycling); void ags_buffer_recycling_connect(AgsConnectable *connectable); void ags_buffer_recycling_disconnect(AgsConnectable *connectable); void ags_buffer_recycling_connect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_buffer_recycling_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_buffer_recycling_finalize(GObject *gobject); AgsRecall* ags_buffer_recycling_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter); void ags_buffer_recycling_remove(AgsRecall *recall); /** * SECTION:ags_buffer_recycling * @short_description: buffers recycling * @title: AgsBufferRecycling * @section_id: * @include: ags/audio/recall/ags_buffer_recycling.h * * The #AgsBufferRecycling class buffers the recycling. */ static gpointer ags_buffer_recycling_parent_class = NULL; static AgsConnectableInterface *ags_buffer_recycling_parent_connectable_interface; static AgsDynamicConnectableInterface *ags_buffer_recycling_parent_dynamic_connectable_interface; GType ags_buffer_recycling_get_type() { static GType ags_type_buffer_recycling = 0; if(!ags_type_buffer_recycling){ static const GTypeInfo ags_buffer_recycling_info = { sizeof (AgsBufferRecyclingClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_buffer_recycling_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsBufferRecycling), 0, /* n_preallocs */ (GInstanceInitFunc) ags_buffer_recycling_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_buffer_recycling_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_dynamic_connectable_interface_info = { (GInterfaceInitFunc) ags_buffer_recycling_dynamic_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_buffer_recycling = g_type_register_static(AGS_TYPE_RECALL_RECYCLING, "AgsBufferRecycling\0", &ags_buffer_recycling_info, 0); g_type_add_interface_static(ags_type_buffer_recycling, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_buffer_recycling, AGS_TYPE_DYNAMIC_CONNECTABLE, &ags_dynamic_connectable_interface_info); } return (ags_type_buffer_recycling); } void ags_buffer_recycling_class_init(AgsBufferRecyclingClass *buffer_recycling) { GObjectClass *gobject; AgsRecallClass *recall; GParamSpec *param_spec; ags_buffer_recycling_parent_class = g_type_class_peek_parent(buffer_recycling); /* GObjectClass */ gobject = (GObjectClass *) buffer_recycling; gobject->finalize = ags_buffer_recycling_finalize; /* AgsRecallClass */ recall = (AgsRecallClass *) buffer_recycling; recall->duplicate = ags_buffer_recycling_duplicate; } void ags_buffer_recycling_connectable_interface_init(AgsConnectableInterface *connectable) { ags_buffer_recycling_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_buffer_recycling_connect; connectable->disconnect = ags_buffer_recycling_disconnect; } void ags_buffer_recycling_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable) { ags_buffer_recycling_parent_dynamic_connectable_interface = g_type_interface_peek_parent(dynamic_connectable); dynamic_connectable->connect_dynamic = ags_buffer_recycling_connect_dynamic; dynamic_connectable->disconnect_dynamic = ags_buffer_recycling_disconnect_dynamic; } void ags_buffer_recycling_init(AgsBufferRecycling *buffer_recycling) { AGS_RECALL(buffer_recycling)->name = "ags-buffer\0"; AGS_RECALL(buffer_recycling)->version = AGS_EFFECTS_DEFAULT_VERSION; AGS_RECALL(buffer_recycling)->build_id = AGS_BUILD_ID; AGS_RECALL(buffer_recycling)->xml_type = "ags-buffer-recycling\0"; AGS_RECALL(buffer_recycling)->port = NULL; AGS_RECALL(buffer_recycling)->child_type = AGS_TYPE_BUFFER_AUDIO_SIGNAL; AGS_RECALL_RECYCLING(buffer_recycling)->flags |= (AGS_RECALL_RECYCLING_MAP_CHILD_DESTINATION | AGS_RECALL_RECYCLING_CREATE_DESTINATION_ON_MAP_SOURCE); } void ags_buffer_recycling_finalize(GObject *gobject) { /* empty */ /* call parent */ G_OBJECT_CLASS(ags_buffer_recycling_parent_class)->finalize(gobject); } void ags_buffer_recycling_connect(AgsConnectable *connectable) { if((AGS_RECALL_CONNECTED & (AGS_RECALL(connectable)->flags)) != 0){ return; } ags_buffer_recycling_parent_connectable_interface->connect(connectable); /* empty */ } void ags_buffer_recycling_disconnect(AgsConnectable *connectable) { ags_buffer_recycling_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_buffer_recycling_connect_dynamic(AgsDynamicConnectable *dynamic_connectable) { if((AGS_RECALL_DYNAMIC_CONNECTED & (AGS_RECALL(dynamic_connectable)->flags)) != 0){ return; } ags_buffer_recycling_parent_dynamic_connectable_interface->connect_dynamic(dynamic_connectable); } void ags_buffer_recycling_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable) { ags_buffer_recycling_parent_dynamic_connectable_interface->disconnect_dynamic(dynamic_connectable); } AgsRecall* ags_buffer_recycling_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter) { AgsBufferRecycling *copy; copy = (AgsBufferRecycling *) AGS_RECALL_CLASS(ags_buffer_recycling_parent_class)->duplicate(recall, recall_id, n_params, parameter); return((AgsRecall *) copy); } /** * ags_buffer_recycling_new: * @recycling: an #AgsRecycling * * Creates an #AgsBufferRecycling * * Returns: a new #AgsBufferRecycling * * Since: 0.4 */ AgsBufferRecycling* ags_buffer_recycling_new(AgsRecycling *recycling) { AgsBufferRecycling *buffer_recycling; buffer_recycling = (AgsBufferRecycling *) g_object_new(AGS_TYPE_BUFFER_RECYCLING, "source\0", recycling, NULL); return(buffer_recycling); } gsequencer-0.6.37/src/ags/audio/recall/ags_play_notation_audio_run.h0000644000175000017500000000517312626272146022543 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_PLAY_NOTATION_AUDIO_RUN_H__ #define __AGS_PLAY_NOTATION_AUDIO_RUN_H__ #include #include #include #include #include #include #include #include #define AGS_TYPE_PLAY_NOTATION_AUDIO_RUN (ags_play_notation_audio_run_get_type()) #define AGS_PLAY_NOTATION_AUDIO_RUN(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_PLAY_NOTATION_AUDIO_RUN, AgsPlayNotationAudioRun)) #define AGS_PLAY_NOTATION_AUDIO_RUN_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_PLAY_NOTATION_AUDIO_RUN, AgsPlayNotationAudioRun)) #define AGS_IS_PLAY_NOTATION_AUDIO_RUN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_PLAY_NOTATION_AUDIO_RUN)) #define AGS_IS_PLAY_NOTATION_AUDIO_RUN_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_PLAY_NOTATION_AUDIO_RUN)) #define AGS_PLAY_NOTATION_AUDIO_RUN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_PLAY_NOTATION_AUDIO_RUN, AgsPlayNotationAudioRunClass)) typedef struct _AgsPlayNotationAudioRun AgsPlayNotationAudioRun; typedef struct _AgsPlayNotationAudioRunClass AgsPlayNotationAudioRunClass; typedef enum{ AGS_PLAY_NOTATION_AUDIO_RUN_DEFAULT = 1, }AgsPlayNotationAudioRunFlags; struct _AgsPlayNotationAudioRun { AgsRecallAudioRun recall; guint flags; AgsDelayAudioRun *delay_audio_run; gulong notation_alloc_input_handler; AgsCountBeatsAudioRun *count_beats_audio_run; AgsNotation *notation; }; struct _AgsPlayNotationAudioRunClass { AgsRecallAudioRunClass recall; }; GType ags_play_notation_audio_run_get_type(); AgsPlayNotationAudioRun* ags_play_notation_audio_run_new(); #endif /*__AGS_PLAY_NOTATION_AUDIO_RUN_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_volume_channel_run.h0000644000175000017500000000413112612232540021457 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_VOLUME_CHANNEL_RUN_H__ #define __AGS_VOLUME_CHANNEL_RUN_H__ #include #include #include #include #define AGS_TYPE_VOLUME_CHANNEL_RUN (ags_volume_channel_run_get_type()) #define AGS_VOLUME_CHANNEL_RUN(obj) (G_TYPE_CHECK_INSTANCE_CAST(obj, AGS_TYPE_VOLUME_CHANNEL_RUN, AgsVolumeChannelRun)) #define AGS_VOLUME_CHANNEL_RUN_CLASS(class) (G_TYPE_CHECK_INSTANCE_CAST(class, AGS_TYPE_VOLUME_CHANNEL_RUN, AgsVolumeChannelRunClass)) #define AGS_IS_VOLUME_CHANNEL_RUN(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_VOLUME_CHANNEL_RUN)) #define AGS_IS_VOLUME_CHANNEL_RUN_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_VOLUME_CHANNEL_RUN)) #define AGS_VOLUME_CHANNEL_RUN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_VOLUME_CHANNEL_RUN, AgsVolumeChannelRunClass)) typedef struct _AgsVolumeChannelRun AgsVolumeChannelRun; typedef struct _AgsVolumeChannelRunClass AgsVolumeChannelRunClass; struct _AgsVolumeChannelRun { AgsRecallChannelRun recall_channel_run; }; struct _AgsVolumeChannelRunClass { AgsRecallChannelRunClass recall_channel_run; }; GType ags_volume_channel_run_get_type(); AgsVolumeChannelRun* ags_volume_channel_run_new(AgsChannel *channel); #endif /*__AGS_VOLUME_CHANNEL_RUN_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_count_beats_audio.h0000644000175000017500000000427012612232540021267 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_COUNT_BEATS_AUDIO_H__ #define __AGS_COUNT_BEATS_AUDIO_H__ #include #include #include #define AGS_TYPE_COUNT_BEATS_AUDIO (ags_count_beats_audio_get_type()) #define AGS_COUNT_BEATS_AUDIO(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_COUNT_BEATS_AUDIO, AgsCountBeatsAudio)) #define AGS_COUNT_BEATS_AUDIO_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_COUNT_BEATS_AUDIO, AgsCountBeatsAudio)) #define AGS_IS_COUNT_BEATS_AUDIO(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_COUNT_BEATS_AUDIO)) #define AGS_IS_COUNT_BEATS_AUDIO_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_COUNT_BEATS_AUDIO)) #define AGS_COUNT_BEATS_AUDIO_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_COUNT_BEATS_AUDIO, AgsCountBeatsAudioClass)) typedef struct _AgsCountBeatsAudio AgsCountBeatsAudio; typedef struct _AgsCountBeatsAudioClass AgsCountBeatsAudioClass; struct _AgsCountBeatsAudio { AgsRecallAudio recall_audio; AgsPort *notation_loop; AgsPort *notation_loop_start; AgsPort *notation_loop_end; AgsPort *sequencer_loop; AgsPort *sequencer_loop_start; AgsPort *sequencer_loop_end; }; struct _AgsCountBeatsAudioClass { AgsRecallAudioClass recall_audio; }; GType ags_count_beats_audio_get_type(); AgsCountBeatsAudio* ags_count_beats_audio_new(gboolean loop); #endif /*__AGS_COUNT_BEATS_AUDIO_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_count_beats_audio.c0000644000175000017500000004601612626272146021301 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include void ags_count_beats_audio_class_init(AgsCountBeatsAudioClass *count_beats_audio); void ags_count_beats_audio_tactable_interface_init(AgsTactableInterface *tactable); void ags_count_beats_audio_init(AgsCountBeatsAudio *count_beats_audio); void ags_count_beats_audio_plugin_interface_init(AgsPluginInterface *plugin); void ags_count_beats_audio_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_count_beats_audio_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_count_beats_audio_set_ports(AgsPlugin *plugin, GList *port); void ags_count_beats_audio_finalize(GObject *gobject); void ags_count_beats_audio_change_sequencer_duration(AgsTactable *tactable, gdouble duration); void ags_count_beats_audio_change_notation_duration(AgsTactable *tactable, gdouble duration); /** * SECTION:ags_count_beats_audio * @short_description: count audio beats * @title: AgsCountBeatsAudio * @section_id: * @include: ags/audio/recall/ags_count_beats_audio.h * * The #AgsCountBeatsAudio class provides ports to the effect processor. */ enum{ PROP_0, PROP_NOTATION_LOOP, PROP_NOTATION_LOOP_START, PROP_NOTATION_LOOP_END, PROP_SEQUENCER_LOOP, PROP_SEQUENCER_LOOP_START, PROP_SEQUENCER_LOOP_END, }; static gpointer ags_count_beats_audio_parent_class = NULL; static const gchar *ags_count_beats_audio_plugin_name = "ags-count-beats\0"; static const gchar *ags_count_beats_audio_specifier[] = { "./loop[0]\0", "./sequencer_loop_start[0]\0", "./notation_loop_start[0]\0", "./sequencer_loop_end[0]\0", "./notation_loop_end[0]\0" }; static const gchar *ags_count_beats_audio_control_port[] = { "1/5\0", "2/5\0", "3/5\0", "4/5\0", "5/5\0", }; GType ags_count_beats_audio_get_type() { static GType ags_type_count_beats_audio = 0; if(!ags_type_count_beats_audio){ static const GTypeInfo ags_count_beats_audio_info = { sizeof (AgsCountBeatsAudioClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_count_beats_audio_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsCountBeatsAudio), 0, /* n_preallocs */ (GInstanceInitFunc) ags_count_beats_audio_init, }; static const GInterfaceInfo ags_tactable_interface_info = { (GInterfaceInitFunc) ags_count_beats_audio_tactable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_plugin_interface_info = { (GInterfaceInitFunc) ags_count_beats_audio_plugin_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_count_beats_audio = g_type_register_static(AGS_TYPE_RECALL_AUDIO, "AgsCountBeatsAudio\0", &ags_count_beats_audio_info, 0); g_type_add_interface_static(ags_type_count_beats_audio, AGS_TYPE_TACTABLE, &ags_tactable_interface_info); g_type_add_interface_static(ags_type_count_beats_audio, AGS_TYPE_PLUGIN, &ags_plugin_interface_info); } return(ags_type_count_beats_audio); } void ags_count_beats_audio_tactable_interface_init(AgsTactableInterface *tactable) { tactable->change_sequencer_duration = ags_count_beats_audio_change_sequencer_duration; tactable->change_notation_duration = ags_count_beats_audio_change_notation_duration; tactable->change_tact = NULL; tactable->change_bpm = NULL; } void ags_count_beats_audio_plugin_interface_init(AgsPluginInterface *plugin) { plugin->set_ports = ags_count_beats_audio_set_ports; } void ags_count_beats_audio_class_init(AgsCountBeatsAudioClass *count_beats_audio) { GObjectClass *gobject; GParamSpec *param_spec; ags_count_beats_audio_parent_class = g_type_class_peek_parent(count_beats_audio); gobject = (GObjectClass *) count_beats_audio; gobject->set_property = ags_count_beats_audio_set_property; gobject->get_property = ags_count_beats_audio_get_property; gobject->finalize = ags_count_beats_audio_finalize; /* properties */ /** * AgsCountBeatsAudio:notation-loop: * * Count until notation-loop-end and start at notation-loop-start. * * Since: 0.4 */ param_spec = g_param_spec_object("notation-loop\0", "notation-loop playing\0", "Play in a endless notation_loop\0", AGS_TYPE_PORT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_NOTATION_LOOP, param_spec); /** * AgsCountBeatsAudio:notation-loop-start: * * The notation's notation-loop-start. * * Since: 0.4 */ param_spec = g_param_spec_object("notation-loop-start\0", "start beat of notation loop\0", "The start beat of the notation loop\0", AGS_TYPE_PORT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_NOTATION_LOOP_START, param_spec); /** * AgsCountBeatsAudio:notation-loop-end: * * The notation's loop-end. * * Since: 0.4 */ param_spec = g_param_spec_object("notation-loop-end\0", "end beat of notation loop\0", "The end beat of the notation loop\0", AGS_TYPE_PORT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_NOTATION_LOOP_END, param_spec); /** * AgsCountBeatsAudio:sequencer-loop: * * Count until loop-end and start at loop-start. * * Since: 0.4 */ param_spec = g_param_spec_object("sequencer-loop\0", "sequencer loop playing\0", "Play sequencer in a endless loop\0", AGS_TYPE_PORT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_SEQUENCER_LOOP, param_spec); /** * AgsCountBeatsAudio:sequencer-loop-start: * * The sequencer's loop-start. * * Since: 0.4 */ param_spec = g_param_spec_object("sequencer_loop_start\0", "start beat of loop\0", "The start beat of the sequencer loop\0", AGS_TYPE_PORT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_SEQUENCER_LOOP_START, param_spec); /** * AgsCountBeatsAudio:sequencer-loop-end: * * The sequencer's loop-end. * * Since: 0.4 */ param_spec = g_param_spec_object("sequencer-loop-end\0", "end beat of sequencer loop\0", "The end beat of the sequencer loop\0", AGS_TYPE_PORT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_SEQUENCER_LOOP_END, param_spec); } void ags_count_beats_audio_init(AgsCountBeatsAudio *count_beats_audio) { GList *port; AGS_RECALL(count_beats_audio)->name = "ags-count-beats\0"; AGS_RECALL(count_beats_audio)->version = AGS_EFFECTS_DEFAULT_VERSION; AGS_RECALL(count_beats_audio)->build_id = AGS_BUILD_ID; AGS_RECALL(count_beats_audio)->xml_type = "ags-count-beats-audio\0"; port = NULL; /* sequencer loop */ count_beats_audio->sequencer_loop = g_object_new(AGS_TYPE_PORT, "plugin-name\0", ags_count_beats_audio_plugin_name, "specifier\0", ags_count_beats_audio_specifier[0], "control-port\0", ags_count_beats_audio_control_port[0], "port-value-is-pointer\0", FALSE, "port-value-type\0", G_TYPE_BOOLEAN, "port-value-size\0", sizeof(gboolean), "port-value-length", 1, NULL); count_beats_audio->sequencer_loop->port_value.ags_port_boolean = FALSE; port = g_list_prepend(port, count_beats_audio->sequencer_loop); /* notation loop */ count_beats_audio->notation_loop = g_object_new(AGS_TYPE_PORT, "plugin-name\0", ags_count_beats_audio_plugin_name, "specifier\0", ags_count_beats_audio_specifier[0], "control-port\0", ags_count_beats_audio_control_port[0], "port-value-is-pointer\0", FALSE, "port-value-type\0", G_TYPE_BOOLEAN, "port-value-size\0", sizeof(gboolean), "port-value-length", 1, NULL); count_beats_audio->notation_loop->port_value.ags_port_boolean = FALSE; port = g_list_prepend(port, count_beats_audio->notation_loop); /* sequencer-loop-start */ count_beats_audio->sequencer_loop_start = g_object_new(AGS_TYPE_PORT, "plugin-name\0", ags_count_beats_audio_plugin_name, "specifier\0", ags_count_beats_audio_specifier[1], "control-port\0", ags_count_beats_audio_control_port[1], "port-value-is-pointer\0", FALSE, "port-value-type\0", G_TYPE_DOUBLE, "port-value-size\0", sizeof(gdouble), "port-value-length", 1, NULL); count_beats_audio->sequencer_loop_start->port_value.ags_port_double = 0.0; port = g_list_prepend(port, count_beats_audio->sequencer_loop_start); /* notation-loop-start */ count_beats_audio->notation_loop_start = g_object_new(AGS_TYPE_PORT, "plugin-name\0", ags_count_beats_audio_plugin_name, "specifier\0", ags_count_beats_audio_specifier[2], "control-port\0", ags_count_beats_audio_control_port[2], "port-value-is-pointer\0", FALSE, "port-value-type\0", G_TYPE_DOUBLE, "port-value-size\0", sizeof(gdouble), "port-value-length", 1, NULL); count_beats_audio->notation_loop_start->port_value.ags_port_double = 0.0; port = g_list_prepend(port, count_beats_audio->notation_loop_start); /* sequencer-loop-end */ count_beats_audio->sequencer_loop_end = g_object_new(AGS_TYPE_PORT, "plugin-name\0", ags_count_beats_audio_plugin_name, "specifier\0", ags_count_beats_audio_specifier[3], "control-port\0", ags_count_beats_audio_control_port[3], "port-value-is-pointer\0", FALSE, "port-value-type\0", G_TYPE_DOUBLE, "port-value-size\0", sizeof(gdouble), "port-value-length", 1, NULL); count_beats_audio->sequencer_loop_end->port_value.ags_port_double = 16.0; port = g_list_prepend(port, count_beats_audio->sequencer_loop_end); /* notation-loop-end */ count_beats_audio->notation_loop_end = g_object_new(AGS_TYPE_PORT, "plugin-name\0", ags_count_beats_audio_plugin_name, "specifier\0", ags_count_beats_audio_specifier[4], "control-port\0", ags_count_beats_audio_control_port[4], "port-value-is-pointer\0", FALSE, "port-value-type\0", G_TYPE_DOUBLE, "port-value-size\0", sizeof(gdouble), "port-value-length", 1, NULL); count_beats_audio->notation_loop_end->port_value.ags_port_double = 64.0; port = g_list_prepend(port, count_beats_audio->notation_loop_end); /* port */ AGS_RECALL(count_beats_audio)->port = port; } void ags_count_beats_audio_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsCountBeatsAudio *count_beats_audio; count_beats_audio = AGS_COUNT_BEATS_AUDIO(gobject); switch(prop_id){ case PROP_NOTATION_LOOP: { AgsPort *port; port = (AgsPort *) g_value_get_object(value); if(port == count_beats_audio->notation_loop){ return; } if(count_beats_audio->notation_loop != NULL){ g_object_unref(G_OBJECT(count_beats_audio->notation_loop)); } if(port != NULL){ g_object_ref(G_OBJECT(port)); } count_beats_audio->notation_loop = port; } break; case PROP_NOTATION_LOOP_START: { AgsPort *port; port = (AgsPort *) g_value_get_object(value); if(port == count_beats_audio->notation_loop_start){ return; } if(count_beats_audio->notation_loop_start != NULL){ g_object_unref(G_OBJECT(count_beats_audio->notation_loop_start)); } if(port != NULL){ g_object_ref(G_OBJECT(port)); } count_beats_audio->notation_loop_start = port; } break; case PROP_NOTATION_LOOP_END: { AgsPort *port; port = (AgsPort *) g_value_get_object(value); if(port == count_beats_audio->notation_loop_end){ return; } if(count_beats_audio->notation_loop_end != NULL){ g_object_unref(G_OBJECT(count_beats_audio->notation_loop_end)); } if(port != NULL){ g_object_ref(G_OBJECT(port)); } count_beats_audio->notation_loop_end = port; } break; case PROP_SEQUENCER_LOOP: { AgsPort *port; port = (AgsPort *) g_value_get_object(value); if(port == count_beats_audio->sequencer_loop){ return; } if(count_beats_audio->sequencer_loop != NULL){ g_object_unref(G_OBJECT(count_beats_audio->sequencer_loop)); } if(port != NULL){ g_object_ref(G_OBJECT(port)); } count_beats_audio->sequencer_loop = port; } break; case PROP_SEQUENCER_LOOP_START: { AgsPort *port; port = (AgsPort *) g_value_get_object(value); if(port == count_beats_audio->sequencer_loop_start){ return; } if(count_beats_audio->sequencer_loop_start != NULL){ g_object_unref(G_OBJECT(count_beats_audio->sequencer_loop_start)); } if(port != NULL){ g_object_ref(G_OBJECT(port)); } count_beats_audio->sequencer_loop_start = port; } break; case PROP_SEQUENCER_LOOP_END: { AgsPort *port; port = (AgsPort *) g_value_get_object(value); if(port == count_beats_audio->sequencer_loop_end){ return; } if(count_beats_audio->sequencer_loop_end != NULL){ g_object_unref(G_OBJECT(count_beats_audio->sequencer_loop_end)); } if(port != NULL){ g_object_ref(G_OBJECT(port)); } count_beats_audio->sequencer_loop_end = port; } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; }; } void ags_count_beats_audio_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsCountBeatsAudio *count_beats; count_beats = AGS_COUNT_BEATS_AUDIO(gobject); switch(prop_id){ case PROP_NOTATION_LOOP: { g_value_set_object(value, count_beats->notation_loop); } break; case PROP_NOTATION_LOOP_START: { g_value_set_object(value, count_beats->notation_loop_start); } break; case PROP_NOTATION_LOOP_END: { g_value_set_object(value, count_beats->notation_loop_end); } break; case PROP_SEQUENCER_LOOP: { g_value_set_object(value, count_beats->sequencer_loop); } break; case PROP_SEQUENCER_LOOP_START: { g_value_set_object(value, count_beats->sequencer_loop_start); } break; case PROP_SEQUENCER_LOOP_END: { g_value_set_object(value, count_beats->sequencer_loop_end); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; }; } void ags_count_beats_audio_set_ports(AgsPlugin *plugin, GList *port) { while(port != NULL){ if(!strncmp(AGS_PORT(port->data)->specifier, "./notation-loop[0]\0", 18)){ g_object_set(G_OBJECT(plugin), "notation-loop\0", AGS_PORT(port->data), NULL); }else if(!strncmp(AGS_PORT(port->data)->specifier, "./notation-loop-start[0]\0", 23)){ g_object_set(G_OBJECT(plugin), "notation-loop-start\0", AGS_PORT(port->data), NULL); }else if(!strncmp(AGS_PORT(port->data)->specifier, "./notation-loop-end[0]\0", 21)){ g_object_set(G_OBJECT(plugin), "notation-loop-end\0", AGS_PORT(port->data), NULL); }else if(!strncmp(AGS_PORT(port->data)->specifier, "./sequencer-loop[0]\0", 19)){ g_object_set(G_OBJECT(plugin), "sequencer-loop\0", AGS_PORT(port->data), NULL); }else if(!strncmp(AGS_PORT(port->data)->specifier, "./sequencer-loop-start[0]\0", 24)){ g_object_set(G_OBJECT(plugin), "sequencer-loop-start\0", AGS_PORT(port->data), NULL); }else if(!strncmp(AGS_PORT(port->data)->specifier, "./sequencer-loop-end[0]\0", 22)){ g_object_set(G_OBJECT(plugin), "sequencer-loop-end\0", AGS_PORT(port->data), NULL); } port = port->next; } } void ags_count_beats_audio_finalize(GObject *gobject) { AgsCountBeatsAudio *count_beats_audio; count_beats_audio = AGS_COUNT_BEATS_AUDIO(gobject); if(count_beats_audio->sequencer_loop != NULL){ g_object_unref(G_OBJECT(count_beats_audio->sequencer_loop)); } if(count_beats_audio->notation_loop_start != NULL){ g_object_unref(G_OBJECT(count_beats_audio->notation_loop_start)); } if(count_beats_audio->notation_loop_end != NULL){ g_object_unref(G_OBJECT(count_beats_audio->notation_loop_end)); } if(count_beats_audio->notation_loop != NULL){ g_object_unref(G_OBJECT(count_beats_audio->notation_loop)); } if(count_beats_audio->sequencer_loop_start != NULL){ g_object_unref(G_OBJECT(count_beats_audio->sequencer_loop_start)); } if(count_beats_audio->sequencer_loop_end != NULL){ g_object_unref(G_OBJECT(count_beats_audio->sequencer_loop_end)); } /* call parent */ G_OBJECT_CLASS(ags_count_beats_audio_parent_class)->finalize(gobject); } void ags_count_beats_audio_change_sequencer_duration(AgsTactable *tactable, gdouble duration) { AgsCountBeatsAudio *count_beats_audio; GValue value = {0,}; count_beats_audio = AGS_COUNT_BEATS_AUDIO(tactable); g_value_init(&value, G_TYPE_DOUBLE); g_value_set_double(&value, duration); ags_port_safe_write(count_beats_audio->sequencer_loop_end, &value); } void ags_count_beats_audio_change_notation_duration(AgsTactable *tactable, gdouble duration) { AgsCountBeatsAudio *count_beats_audio; GValue value = {0,}; count_beats_audio = AGS_COUNT_BEATS_AUDIO(tactable); g_value_init(&value, G_TYPE_DOUBLE); g_value_set_double(&value, duration); ags_port_safe_write(count_beats_audio->notation_loop_end, &value); } /** * ags_count_beats_audio_new: * @loop: if %TRUE after exceeding counter, effect loops * * Creates an #AgsCountBeatsAudio * * Returns: a new #AgsCountBeatsAudio * * Since: 0.4 */ AgsCountBeatsAudio* ags_count_beats_audio_new(gboolean loop) { AgsCountBeatsAudio *count_beats_audio; count_beats_audio = (AgsCountBeatsAudio *) g_object_new(AGS_TYPE_COUNT_BEATS_AUDIO, "loop\0", loop, NULL); return(count_beats_audio); } gsequencer-0.6.37/src/ags/audio/recall/ags_delay_audio.h0000644000175000017500000000442412612232540020060 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_DELAY_AUDIO_H__ #define __AGS_DELAY_AUDIO_H__ #include #include #include #define AGS_TYPE_DELAY_AUDIO (ags_delay_audio_get_type()) #define AGS_DELAY_AUDIO(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_DELAY_AUDIO, AgsDelayAudio)) #define AGS_DELAY_AUDIO_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_DELAY_AUDIO, AgsDelayAudio)) #define AGS_IS_DELAY_AUDIO(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_DELAY_AUDIO)) #define AGS_IS_DELAY_AUDIO_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_DELAY_AUDIO)) #define AGS_DELAY_AUDIO_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_DELAY_AUDIO, AgsDelayAudioClass)) typedef struct _AgsDelayAudio AgsDelayAudio; typedef struct _AgsDelayAudioClass AgsDelayAudioClass; struct _AgsDelayAudio { AgsRecallAudio recall_audio; AgsPort *bpm; AgsPort *tact; AgsPort *notation_delay; AgsPort *sequencer_delay; AgsPort *sequencer_duration; AgsPort *notation_duration; }; struct _AgsDelayAudioClass { AgsRecallAudioClass recall_audio; void (*notation_duration_changed)(AgsDelayAudio *delay_audio); void (*sequencer_duration_changed)(AgsDelayAudio *delay_audio); }; GType ags_delay_audio_get_type(); void ags_delay_audio_notation_duration_changed(AgsDelayAudio *delay_audio); void ags_delay_audio_sequencer_duration_changed(AgsDelayAudio *delay_audio); AgsDelayAudio* ags_delay_audio_new(); #endif /*__AGS_DELAY_AUDIO_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_copy_pattern_audio_run.h0000644000175000017500000000455512612232540022362 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_COPY_PATTERN_AUDIO_RUN_H__ #define __AGS_COPY_PATTERN_AUDIO_RUN_H__ #include #include #include #include #define AGS_TYPE_COPY_PATTERN_AUDIO_RUN (ags_copy_pattern_audio_run_get_type()) #define AGS_COPY_PATTERN_AUDIO_RUN(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_COPY_PATTERN_AUDIO_RUN, AgsCopyPatternAudioRun)) #define AGS_COPY_PATTERN_AUDIO_RUN_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_COPY_PATTERN_AUDIO_RUN, AgsCopyPatternAudioRun)) #define AGS_IS_COPY_PATTERN_AUDIO_RUN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_COPY_PATTERN_AUDIO_RUN)) #define AGS_IS_COPY_PATTERN_AUDIO_RUN_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_COPY_PATTERN_AUDIO_RUN)) #define AGS_COPY_PATTERN_AUDIO_RUN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_COPY_PATTERN_AUDIO_RUN, AgsCopyPatternAudioRunClass)) typedef struct _AgsCopyPatternAudioRun AgsCopyPatternAudioRun; typedef struct _AgsCopyPatternAudioRunClass AgsCopyPatternAudioRunClass; struct _AgsCopyPatternAudioRun { AgsRecallAudioRun recall_audio_run; guint hide_ref; guint hide_ref_counter; AgsDelayAudioRun *delay_audio_run; AgsCountBeatsAudioRun *count_beats_audio_run; }; struct _AgsCopyPatternAudioRunClass { AgsRecallAudioRunClass recall_audio_run; }; GType ags_copy_pattern_audio_run_get_type(); AgsCopyPatternAudioRun* ags_copy_pattern_audio_run_new(AgsCountBeatsAudioRun *count_beats_audio_run); #endif /*__AGS_COPY_PATTERN_AUDIO_RUN_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_play_pattern.c0000644000175000017500000001467712626272146020324 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include void ags_play_pattern_class_init(AgsPlayPatternClass *play_pattern); void ags_play_pattern_init(AgsPlayPattern *play_pattern); void ags_play_pattern_finalize(GObject *gobject); void ags_play_pattern(AgsRecall *recall, AgsRecallID *recall_id); void ags_play_pattern_stop(AgsRecall *recall); void ags_play_pattern_cancel(AgsRecall *recall); void ags_play_pattern_play_channel_done(AgsRecall *recall); static gpointer ags_play_pattern_parent_class = NULL; GType ags_play_pattern_get_type() { static GType ags_type_play_pattern = 0; if(!ags_type_play_pattern){ static const GTypeInfo ags_play_pattern_info = { sizeof (AgsPlayPatternClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_play_pattern_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsPlayPattern), 0, /* n_preallocs */ (GInstanceInitFunc) ags_play_pattern_init, }; ags_type_play_pattern = g_type_register_static(AGS_TYPE_RECALL, "AgsPlayPattern\0", &ags_play_pattern_info, 0); } return (ags_type_play_pattern); } void ags_play_pattern_class_init(AgsPlayPatternClass *play_pattern) { GObjectClass *gobject; ags_play_pattern_parent_class = g_type_class_peek_parent(play_pattern); gobject = (GObjectClass *) play_pattern; gobject->finalize = ags_play_pattern_finalize; } void ags_play_pattern_init(AgsPlayPattern *play_pattern) { play_pattern->channel = NULL; play_pattern->pattern = NULL; play_pattern->i = 0; play_pattern->j = 0; play_pattern->bit = 0; play_pattern->length = 0; play_pattern->loop = FALSE; } void ags_play_pattern_finalize(GObject *gobject) { } void ags_play_pattern_connect(AgsPlayPattern *play_pattern) { // ags_recall_connect(AGS_RECALL(play_pattern)); } void ags_play_pattern(AgsRecall *recall, AgsRecallID *recall_id) { /* AgsDelay *delay; AgsPlayPattern *play_pattern; AgsPlayChannel *play_channel; pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; play_pattern = (AgsPlayPattern *) recall; delay = play_pattern->delay; // fprintf(stdout, "ags_play_pattern\n\0"); pthread_mutex_lock(&mutex); if(play_pattern->bit == play_pattern->length){ if(play_pattern->loop){ pthread_mutex_unlock(&mutex); if(delay->counter == 0){ play_pattern->bit = 0; goto ags_play_pattern0; } }else{ if(play_pattern->recall.recall == NULL){ AGS_RECALL_GET_CLASS((AgsRecall *) play_pattern)->done(AGS_RECALL(play_pattern), recall_id); // play_pattern->recall.flags |= AGS_RECALL_REMOVE; AGS_DELAY(play_pattern->recall.parent)->recall_ref--; play_pattern->bit = 0; } pthread_mutex_unlock(&mutex); } }else{ pthread_mutex_unlock(&mutex); if(delay->counter == 0){ // fprintf(stdout, " (AGS_RECALL_DELAY & recall->flags) == 0\n\0"); ags_play_pattern0: if(ags_pattern_get_bit(play_pattern->pattern, play_pattern->i, play_pattern->j, play_pattern->bit)){ // fprintf(stdout, " ags_pattern_get_bit(play_pattern->pattern, play_pattern->i, play_pattern->j, play_pattern->bit)\n\0"); play_channel = ags_play_channel_new(play_pattern->channel); play_channel->recall.parent = (GObject *) play_pattern; AGS_RECALL_GET_CLASS((AgsRecall *) play_channel)->done = ags_play_pattern_play_channel_done; ags_play_channel_map_play_audio_signal(play_channel, NULL); recall->recall = g_list_append(recall->recall, play_channel); } play_pattern->bit++; } } // _ags_recall_run(recall); */ } void ags_play_pattern_stop(AgsRecall *recall) { /* AgsDevout *devout; GList *list, *list_next; devout = AGS_DEVOUT(AGS_AUDIO(AGS_RECALL(recall->parent)->parent)->devout); list = recall->recall; recall->recall = NULL; while(list != NULL){ list_next = list->next; g_object_unref(G_OBJECT(list->data)); g_list_free1(list); list = list_next; } */ } void ags_play_pattern_play_channel_done(AgsRecall *recall) { /* AgsPlayPattern *play_pattern; AgsPlayChannel *play_channel; GList *list, *list_next; play_pattern = AGS_PLAY_PATTERN(recall->parent); play_channel = AGS_PLAY_CHANNEL(recall); AGS_RECALL(play_pattern)->recall = g_list_remove(AGS_RECALL(play_pattern)->recall, recall); list = play_channel->recall.recall; play_channel->recall.recall = NULL; while(list != NULL){ list_next = list->next; g_object_unref(G_OBJECT(list->data)); g_list_free1(list); list = list_next; } g_object_unref((GObject *) play_channel); */ } void ags_play_pattern_cancel(AgsRecall *recall) { AgsPlayPattern *play_pattern; /* play_pattern = (AgsPlayPattern *) recall; if(play_pattern->bit == play_pattern->length){ if(play_pattern->loop && play_pattern->recall.run_main) AGS_RECALL_GET_CLASS(recall)->loop(recall); if(play_pattern->recall.recall == NULL) AGS_RECALL_GET_CLASS((AgsRecall *) play_pattern)->done((AgsRecall *) play_pattern); }else if(recall->delay) play_pattern->bit++; _ags_recall_cancel(recall); */ } /* AgsPlayPattern* ags_play_pattern_new(AgsChannel *channel, AgsDelay *delay) { AgsPlayPattern *play_pattern; play_pattern = (AgsPlayPattern *) g_object_new(AGS_TYPE_PLAY_PATTERN, NULL); if(channel != NULL){ play_pattern->delay = delay; play_pattern->channel = channel; play_pattern->pattern = AGS_PATTERN(channel->pattern->data); } return(play_pattern); } */ gsequencer-0.6.37/src/ags/audio/recall/ags_stream_recycling.h0000644000175000017500000000402512612232540021130 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_STREAM_RECYCLING_H__ #define __AGS_STREAM_RECYCLING_H__ #include #include #include #define AGS_TYPE_STREAM_RECYCLING (ags_stream_recycling_get_type()) #define AGS_STREAM_RECYCLING(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_STREAM_RECYCLING, AgsStreamRecycling)) #define AGS_STREAM_RECYCLING_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_STREAM_RECYCLING, AgsStreamRecyclingClass)) #define AGS_IS_STREAM_RECYCLING(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_STREAM_RECYCLING)) #define AGS_IS_STREAM_RECYCLING_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_STREAM_RECYCLING)) #define AGS_STREAM_RECYCLING_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_STREAM_RECYCLING, AgsStreamRecyclingClass)) typedef struct _AgsStreamRecycling AgsStreamRecycling; typedef struct _AgsStreamRecyclingClass AgsStreamRecyclingClass; struct _AgsStreamRecycling { AgsRecallRecycling recall_recycling; }; struct _AgsStreamRecyclingClass { AgsRecallRecyclingClass recall_recycling; }; GType ags_stream_recycling_get_type(); AgsStreamRecycling* ags_stream_recycling_new(AgsRecycling *recycling); #endif /*__AGS_STREAM_RECYCLING_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_peak_audio_signal.h0000644000175000017500000000407012612232540021234 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_PEAK_AUDIO_SIGNAL_H__ #define __AGS_PEAK_AUDIO_SIGNAL_H__ #include #include #include #define AGS_TYPE_PEAK_AUDIO_SIGNAL (ags_peak_audio_signal_get_type()) #define AGS_PEAK_AUDIO_SIGNAL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_PEAK_AUDIO_SIGNAL, AgsPeakAudioSignal)) #define AGS_PEAK_AUDIO_SIGNAL_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_PEAK_AUDIO_SIGNAL, AgsPeakAudioSignalClass)) #define AGS_IS_PEAK_AUDIO_SIGNAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_PEAK_AUDIO_SIGNAL)) #define AGS_IS_PEAK_AUDIO_SIGNAL_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_PEAK_AUDIO_SIGNAL)) #define AGS_PEAK_AUDIO_SIGNAL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_PEAK_AUDIO_SIGNAL, AgsPeakAudioSignalClass)) typedef struct _AgsPeakAudioSignal AgsPeakAudioSignal; typedef struct _AgsPeakAudioSignalClass AgsPeakAudioSignalClass; struct _AgsPeakAudioSignal { AgsRecallAudioSignal recall_audio_signal; }; struct _AgsPeakAudioSignalClass { AgsRecallAudioSignalClass recall_audio_signal; }; GType ags_peak_audio_signal_get_type(); AgsPeakAudioSignal* ags_peak_audio_signal_new(AgsAudioSignal *audio_signal); #endif /*__AGS_PEAK_AUDIO_SIGNAL_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_delay_audio.c0000644000175000017500000006332412626272146020072 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include void ags_delay_audio_class_init(AgsDelayAudioClass *delay_audio); void ags_delay_audio_tactable_interface_init(AgsTactableInterface *tactable); void ags_delay_audio_plugin_interface_init(AgsPluginInterface *plugin); void ags_delay_audio_init(AgsDelayAudio *delay_audio); void ags_delay_audio_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_delay_audio_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_delay_audio_set_ports(AgsPlugin *plugin, GList *port); void ags_delay_audio_finalize(GObject *gobject); void ags_delay_audio_notify_devout_callback(GObject *gobject, GParamSpec *pspec, gpointer user_data); void ags_delay_audio_change_bpm(AgsTactable *tactable, gdouble bpm); void ags_delay_audio_change_tact(AgsTactable *tactable, gdouble tact); void ags_delay_audio_change_sequencer_duration(AgsTactable *tactable, gdouble duration); void ags_delay_audio_change_notation_duration(AgsTactable *tactable, gdouble duration); extern AgsConfig *config; /** * SECTION:ags_delay_audio * @short_description: delay audio * @title: AgsDelayAudio * @section_id: * @include: ags/audio/recall/ags_delay_audio.h * * The #AgsDelayAudio class provides ports to the effect processor. */ enum{ NOTATION_DURATION_CHANGED, SEQUENCER_DURATION_CHANGED, LAST_SIGNAL, }; enum{ PROP_0, PROP_NOTATION_DELAY, PROP_SEQUENCER_DELAY, PROP_TACT, PROP_BPM, PROP_SEQUENCER_DURATION, PROP_NOTATION_DURATION, }; static gpointer ags_delay_audio_parent_class = NULL; static guint delay_audio_signals[LAST_SIGNAL]; static const gchar *ags_delay_audio_plugin_name = "ags-delay\0"; static const gchar *ags_delay_audio_specifier[] = { "./bpm[0]\0", "./tact[0]\0", "./sequencer_delay[0]\0", "./notation_delay[0]\0", "./sequencer_duration[0]\0", "./notation_duration[0]\0" }; static const gchar *ags_delay_audio_control_port[] = { "1/6\0", "2/6\0", "3/6\0", "4/6\0", "5/6\0", "6/6\0", }; GType ags_delay_audio_get_type() { static GType ags_type_delay_audio = 0; if(!ags_type_delay_audio){ static const GTypeInfo ags_delay_audio_info = { sizeof (AgsDelayAudioClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_delay_audio_class_init, NULL, /* class_finalize */ NULL, /* class_audio */ sizeof (AgsDelayAudio), 0, /* n_preallocs */ (GInstanceInitFunc) ags_delay_audio_init, }; static const GInterfaceInfo ags_tactable_interface_info = { (GInterfaceInitFunc) ags_delay_audio_tactable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_plugin_interface_info = { (GInterfaceInitFunc) ags_delay_audio_plugin_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_delay_audio = g_type_register_static(AGS_TYPE_RECALL_AUDIO, "AgsDelayAudio\0", &ags_delay_audio_info, 0); g_type_add_interface_static(ags_type_delay_audio, AGS_TYPE_TACTABLE, &ags_tactable_interface_info); g_type_add_interface_static(ags_type_delay_audio, AGS_TYPE_PLUGIN, &ags_plugin_interface_info); } return(ags_type_delay_audio); } void ags_delay_audio_class_init(AgsDelayAudioClass *delay_audio) { GObjectClass *gobject; GParamSpec *param_spec; ags_delay_audio_parent_class = g_type_class_peek_parent(delay_audio); /* GObjectClass */ gobject = (GObjectClass *) delay_audio; gobject->set_property = ags_delay_audio_set_property; gobject->get_property = ags_delay_audio_get_property; gobject->finalize = ags_delay_audio_finalize; /* properties */ /** * AgsDelayAudio:bpm: * * The beats per minute. * * Since: 0.4 */ param_spec = g_param_spec_object("bpm\0", "bpm of recall\0", "The recall's bpm\0", AGS_TYPE_PORT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_BPM, param_spec); /** * AgsDelayAudio:tact: * * The tact segmentation. * * Since: 0.4 */ param_spec = g_param_spec_object("tact\0", "tact of recall\0", "The recall's tact\0", AGS_TYPE_PORT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_TACT, param_spec); /** * AgsDelayAudio:sequencer-delay: * * The sequencer's delay. * * Since: 0.4 */ param_spec = g_param_spec_object("sequencer-delay\0", "sequencer-delay of recall\0", "The delay of the sequencer\0", AGS_TYPE_PORT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_SEQUENCER_DELAY, param_spec); /** * AgsDelayAudio:notation-delay: * * The notation's delay. * * Since: 0.4 */ param_spec = g_param_spec_object("notation-delay\0", "notation-delay of recall\0", "The delay of the notation\0", AGS_TYPE_PORT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_NOTATION_DELAY, param_spec); /** * AgsDelayAudio:sequencer-duration: * * The sequencer's duration. * * Since: 0.4 */ param_spec = g_param_spec_object("sequencer-duration\0", "sequencer-duration of recall\0", "The duration of the sequencer\0", AGS_TYPE_PORT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_SEQUENCER_DURATION, param_spec); /** * AgsDelayAudio:notation-duration: * * The notation's duration. * * Since: 0.4 */ param_spec = g_param_spec_object("notation-duration\0", "notation-duration of recall\0", "The duration of the notation\0", AGS_TYPE_PORT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_NOTATION_DURATION, param_spec); /* signals */ /** * AgsDelayAudio::notation-duration-changed: * @delay_audio: the object to resolve * * The ::notation-duration-changed signal notifies about changed duration * of notation. */ delay_audio_signals[NOTATION_DURATION_CHANGED] = g_signal_new("notation-duration-changed\0", G_TYPE_FROM_CLASS(delay_audio), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsDelayAudioClass, notation_duration_changed), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); /** * AgsDelayAudio::sequencer-duration-changed: * @delay_audio: the object to resolve * * The ::sequencer-duration-changed signal notifies about changed duration * of sequencer. */ delay_audio_signals[SEQUENCER_DURATION_CHANGED] = g_signal_new("sequencer-duration-changed\0", G_TYPE_FROM_CLASS(delay_audio), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsDelayAudioClass, sequencer_duration_changed), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); } void ags_delay_audio_tactable_interface_init(AgsTactableInterface *tactable) { tactable->change_sequencer_duration = ags_delay_audio_change_sequencer_duration; tactable->change_notation_duration = ags_delay_audio_change_notation_duration; tactable->change_tact = ags_delay_audio_change_tact; tactable->change_bpm = ags_delay_audio_change_bpm; } void ags_delay_audio_plugin_interface_init(AgsPluginInterface *plugin) { plugin->set_ports = ags_delay_audio_set_ports; } void ags_delay_audio_init(AgsDelayAudio *delay_audio) { AGS_RECALL(delay_audio)->name = "ags-delay\0"; AGS_RECALL(delay_audio)->version = AGS_EFFECTS_DEFAULT_VERSION; AGS_RECALL(delay_audio)->build_id = AGS_BUILD_ID; AGS_RECALL(delay_audio)->xml_type = "ags-delay-audio\0"; g_signal_connect_after(delay_audio, "notify::devout", G_CALLBACK(ags_delay_audio_notify_devout_callback), NULL); } void ags_delay_audio_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsDelayAudio *delay_audio; delay_audio = AGS_DELAY_AUDIO(gobject); switch(prop_id){ case PROP_BPM: { AgsPort *port; port = (AgsPort *) g_value_get_object(value); if(port == delay_audio->bpm){ return; } if(delay_audio->bpm != NULL){ g_object_unref(G_OBJECT(delay_audio->bpm)); } if(port != NULL){ g_object_ref(G_OBJECT(port)); } delay_audio->bpm = port; } break; case PROP_TACT: { AgsPort *port; port = (AgsPort *) g_value_get_object(value); if(port == delay_audio->tact){ return; } if(delay_audio->tact != NULL){ g_object_unref(G_OBJECT(delay_audio->tact)); } if(port != NULL){ g_object_ref(G_OBJECT(port)); } delay_audio->tact = port; } break; case PROP_NOTATION_DELAY: { AgsPort *port; port = (AgsPort *) g_value_get_object(value); if(port == delay_audio->notation_delay){ return; } if(delay_audio->notation_delay != NULL){ g_object_unref(G_OBJECT(delay_audio->notation_delay)); } if(port != NULL){ g_object_ref(G_OBJECT(port)); } delay_audio->notation_delay = port; } break; case PROP_SEQUENCER_DELAY: { AgsPort *port; port = (AgsPort *) g_value_get_object(value); if(port == delay_audio->sequencer_delay){ return; } if(delay_audio->sequencer_delay != NULL){ g_object_unref(G_OBJECT(delay_audio->sequencer_delay)); } if(port != NULL){ g_object_ref(G_OBJECT(port)); } delay_audio->sequencer_delay = port; } break; case PROP_NOTATION_DURATION: { AgsPort *port; port = (AgsPort *) g_value_get_object(value); if(port == delay_audio->notation_duration){ return; } if(delay_audio->notation_duration != NULL){ g_object_unref(G_OBJECT(delay_audio->notation_duration)); } if(port != NULL){ g_object_ref(G_OBJECT(port)); } delay_audio->notation_duration = port; } break; case PROP_SEQUENCER_DURATION: { AgsPort *port; port = (AgsPort *) g_value_get_object(value); if(port == delay_audio->sequencer_duration){ return; } if(delay_audio->sequencer_duration != NULL){ g_object_unref(G_OBJECT(delay_audio->sequencer_duration)); } if(port != NULL){ g_object_ref(G_OBJECT(port)); } delay_audio->sequencer_duration = port; } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_delay_audio_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsDelayAudio *delay_audio; delay_audio = AGS_DELAY_AUDIO(gobject); switch(prop_id){ case PROP_BPM: g_value_set_object(value, delay_audio->bpm); break; case PROP_TACT: g_value_set_object(value, delay_audio->tact); break; case PROP_NOTATION_DELAY: g_value_set_object(value, delay_audio->notation_delay); break; case PROP_SEQUENCER_DELAY: g_value_set_object(value, delay_audio->sequencer_delay); break; case PROP_NOTATION_DURATION: g_value_set_object(value, delay_audio->notation_duration); break; case PROP_SEQUENCER_DURATION: g_value_set_object(value, delay_audio->sequencer_duration); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_delay_audio_set_ports(AgsPlugin *plugin, GList *port) { while(port != NULL){ if(!strncmp(AGS_PORT(port->data)->specifier, "./bpm[0]\0", 8)){ g_object_set(G_OBJECT(plugin), "bpm\0", AGS_PORT(port->data), NULL); }else if(!strncmp(AGS_PORT(port->data)->specifier, "./tact[0]\0", 9)){ g_object_set(G_OBJECT(plugin), "tact\0", AGS_PORT(port->data), NULL); }else if(!strncmp(AGS_PORT(port->data)->specifier, "./notation-delay[0]\0", 18)){ g_object_set(G_OBJECT(plugin), "notation-delay\0", AGS_PORT(port->data), NULL); }else if(!strncmp(AGS_PORT(port->data)->specifier, "./sequencer-delay[0]\0", 19)){ g_object_set(G_OBJECT(plugin), "sequencer-delay\0", AGS_PORT(port->data), NULL); }else if(!strncmp(AGS_PORT(port->data)->specifier, "./notation-duration[0]\0", 21)){ g_object_set(G_OBJECT(plugin), "notation-duration\0", AGS_PORT(port->data), NULL); }else if(!strncmp(AGS_PORT(port->data)->specifier, "./sequencer-duration[0]\0", 22)){ g_object_set(G_OBJECT(plugin), "sequencer-duration\0", AGS_PORT(port->data), NULL); } port = port->next; } } void ags_delay_audio_finalize(GObject *gobject) { AgsDelayAudio *delay_audio; delay_audio = AGS_DELAY_AUDIO(gobject); if(delay_audio->bpm != NULL){ g_object_unref(G_OBJECT(delay_audio->bpm)); } if(delay_audio->tact != NULL){ g_object_unref(G_OBJECT(delay_audio->tact)); } if(delay_audio->notation_delay != NULL){ g_object_unref(G_OBJECT(delay_audio->notation_delay)); } if(delay_audio->sequencer_delay != NULL){ g_object_unref(G_OBJECT(delay_audio->sequencer_delay)); } if(delay_audio->notation_duration != NULL){ g_object_unref(G_OBJECT(delay_audio->notation_duration)); } if(delay_audio->sequencer_duration != NULL){ g_object_unref(G_OBJECT(delay_audio->sequencer_duration)); } /* call parent */ G_OBJECT_CLASS(ags_delay_audio_parent_class)->finalize(gobject); } void ags_delay_audio_notify_devout_callback(GObject *gobject, GParamSpec *pspec, gpointer user_data) { AgsDelayAudio *delay_audio; GList *port; guint buffer_size; guint samplerate; AgsDevout *devout; gdouble bpm; gdouble delay; gchar *str; delay_audio = AGS_DELAY_AUDIO(gobject); devout = AGS_RECALL(delay_audio)->devout; port = NULL; str = ags_config_get(config, AGS_CONFIG_DEVOUT, "buffer-size\0"); buffer_size = g_ascii_strtoull(str, NULL, 10); free(str); str = ags_config_get(config, AGS_CONFIG_DEVOUT, "samplerate\0"); samplerate = g_ascii_strtoull(str, NULL, 10); free(str); bpm = devout->bpm; delay = devout->delay[devout->tic_counter]; /* bpm */ delay_audio->bpm = g_object_new(AGS_TYPE_PORT, "plugin-name\0", ags_delay_audio_plugin_name, "specifier\0", ags_delay_audio_specifier[0], "control-port\0", ags_delay_audio_control_port[0], "port-value-is-pointer\0", FALSE, "port-value-type\0", G_TYPE_DOUBLE, "port-value-size\0", sizeof(gdouble), "port-value-length", 1, NULL); delay_audio->bpm->port_value.ags_port_double = bpm; port = g_list_prepend(port, delay_audio->bpm); /* tact */ delay_audio->tact = g_object_new(AGS_TYPE_PORT, "plugin-name\0", ags_delay_audio_plugin_name, "specifier\0", ags_delay_audio_specifier[1], "control-port\0", ags_delay_audio_control_port[1], "port-value-is-pointer\0", FALSE, "port-value-type\0", G_TYPE_DOUBLE, "port-value-size\0", sizeof(gdouble), "port-value-length", 1, NULL); delay_audio->tact->port_value.ags_port_double = AGS_DEVOUT_DEFAULT_TACT; port = g_list_prepend(port, delay_audio->tact); /* sequencer delay */ delay_audio->sequencer_delay = g_object_new(AGS_TYPE_PORT, "plugin-name\0", ags_delay_audio_plugin_name, "specifier\0", ags_delay_audio_specifier[2], "control-port\0", ags_delay_audio_control_port[2], "port-value-is-pointer\0", FALSE, "port-value-type\0", G_TYPE_DOUBLE, "port-value-size\0", sizeof(gdouble), "port-value-length", 1, NULL); delay_audio->sequencer_delay->port_value.ags_port_double = delay; port = g_list_prepend(port, delay_audio->sequencer_delay); /* notation delay */ delay_audio->notation_delay = g_object_new(AGS_TYPE_PORT, "plugin-name\0", ags_delay_audio_plugin_name, "specifier\0", ags_delay_audio_specifier[3], "control-port\0", ags_delay_audio_control_port[3], "port-value-is-pointer\0", FALSE, "port-value-type\0", G_TYPE_DOUBLE, "port-value-size\0", sizeof(gdouble), "port-value-length", 1, NULL); delay_audio->notation_delay->port_value.ags_port_double = delay; port = g_list_prepend(port, delay_audio->notation_delay); /* sequencer duration */ delay_audio->sequencer_duration = g_object_new(AGS_TYPE_PORT, "plugin-name\0", ags_delay_audio_plugin_name, "specifier\0", ags_delay_audio_specifier[4], "control-port\0", ags_delay_audio_control_port[4], "port-value-is-pointer\0", FALSE, "port-value-type\0", G_TYPE_DOUBLE, "port-value-size\0", sizeof(gdouble), "port-value-length", 1, NULL); delay_audio->sequencer_duration->port_value.ags_port_double = ceil(16.0 * delay); port = g_list_prepend(port, delay_audio->sequencer_duration); /* notation duration */ delay_audio->notation_duration = g_object_new(AGS_TYPE_PORT, "plugin-name\0", ags_delay_audio_plugin_name, "specifier\0", ags_delay_audio_specifier[5], "control-port\0", ags_delay_audio_control_port[5], "port-value-is-pointer\0", FALSE, "port-value-type\0", G_TYPE_DOUBLE, "port-value-size\0", sizeof(gdouble), "port-value-length", 1, NULL); delay_audio->notation_duration->port_value.ags_port_double = ceil(AGS_NOTATION_DEFAULT_DURATION * delay); port = g_list_prepend(port, delay_audio->notation_duration); /* */ AGS_RECALL(delay_audio)->port = port; } void ags_delay_audio_change_bpm(AgsTactable *tactable, gdouble new_bpm) { AgsDevout *devout; AgsDelayAudio *delay_audio; gdouble old_bpm; gdouble sequencer_delay, notation_delay; gdouble sequencer_duration, notation_duration; GValue value = {0,}; delay_audio = AGS_DELAY_AUDIO(tactable); devout = AGS_DEVOUT(AGS_RECALL(delay_audio)->devout); /* retrieve old bpm */ g_value_init(&value, G_TYPE_DOUBLE); ags_port_safe_read(delay_audio->bpm, &value); old_bpm = g_value_get_double(&value); /* retrieve sequencer_delay */ g_value_reset(&value); ags_port_safe_read(delay_audio->sequencer_delay, &value); sequencer_delay = g_value_get_double(&value); /* retrieve notation_delay */ g_value_reset(&value); ags_port_safe_read(delay_audio->notation_delay, &value); notation_delay = g_value_get_double(&value); /* retrieve sequencer_duration */ g_value_reset(&value); ags_port_safe_read(delay_audio->sequencer_duration, &value); sequencer_duration = g_value_get_double(&value); /* retrieve notation_duration */ g_value_reset(&value); ags_port_safe_read(delay_audio->notation_duration, &value); notation_duration = g_value_get_double(&value); /* -- start adjust -- */ /* notation-delay */ g_value_reset(&value); g_value_set_double(&value, notation_delay * (old_bpm / new_bpm)); ags_port_safe_write(delay_audio->notation_delay, &value); /* sequencer-delay */ g_value_reset(&value); g_value_set_double(&value, sequencer_delay * (old_bpm / new_bpm)); ags_port_safe_write(delay_audio->sequencer_delay, &value); /**/ g_value_reset(&value); g_value_set_double(&value, new_bpm); ags_port_safe_write(delay_audio->bpm, &value); /* notation-duration */ g_value_reset(&value); g_value_set_double(&value, notation_duration * (old_bpm / new_bpm)); ags_port_safe_write(delay_audio->notation_duration, &value); /* sequencer-duration */ g_value_reset(&value); g_value_set_double(&value, sequencer_duration * (old_bpm / new_bpm)); ags_port_safe_write(delay_audio->sequencer_duration, &value); /* -- finish adjust -- */ /* emit changed */ ags_delay_audio_sequencer_duration_changed(delay_audio); } void ags_delay_audio_change_tact(AgsTactable *tactable, gdouble new_tact) { AgsDevout *devout; AgsDelayAudio *delay_audio; gdouble old_tact; gdouble sequencer_delay, notation_delay; gdouble sequencer_duration, notation_duration; gdouble factor; GValue value = {0,}; delay_audio = AGS_DELAY_AUDIO(tactable); devout = AGS_DEVOUT(AGS_RECALL(delay_audio)->devout); /* retrieve old tact */ g_value_init(&value, G_TYPE_DOUBLE); ags_port_safe_read(delay_audio->tact, &value); old_tact = g_value_get_double(&value); /* retrieve sequencer_delay */ g_value_reset(&value); ags_port_safe_read(delay_audio->sequencer_delay, &value); sequencer_delay = g_value_get_double(&value); /* retrieve notation_delay */ g_value_reset(&value); ags_port_safe_read(delay_audio->notation_delay, &value); notation_delay = g_value_get_double(&value); /* retrieve sequencer_duration */ g_value_reset(&value); ags_port_safe_read(delay_audio->sequencer_duration, &value); sequencer_duration = g_value_get_double(&value); /* retrieve notation_duration */ g_value_reset(&value); ags_port_safe_read(delay_audio->notation_duration, &value); notation_duration = g_value_get_double(&value); /* -- start adjust -- */ factor = (new_tact / old_tact); /* notation-delay */ g_value_reset(&value); g_value_set_double(&value, notation_delay * factor); ags_port_safe_write(delay_audio->notation_delay, &value); /* sequencer-delay */ g_value_reset(&value); g_value_set_double(&value, sequencer_delay * factor); ags_port_safe_write(delay_audio->sequencer_delay, &value); /**/ g_value_reset(&value); g_value_set_double(&value, new_tact); ags_port_safe_write(delay_audio->tact, &value); /* notation-duration */ g_value_reset(&value); g_value_set_double(&value, notation_duration * factor); ags_port_safe_write(delay_audio->notation_duration, &value); /* sequencer-duration */ g_value_reset(&value); g_value_set_double(&value, sequencer_duration * factor); ags_port_safe_write(delay_audio->sequencer_duration, &value); /* -- finish adjust -- */ /* emit changed */ ags_delay_audio_sequencer_duration_changed(delay_audio); } void ags_delay_audio_change_sequencer_duration(AgsTactable *tactable, gdouble duration) { AgsDelayAudio *delay_audio; guint buffer_size; guint samplerate; gdouble delay; gchar *str; GValue value = {0,}; str = ags_config_get(config, AGS_CONFIG_DEVOUT, "buffer-size\0"); buffer_size = g_ascii_strtoull(str, NULL, 10); free(str); str = ags_config_get(config, AGS_CONFIG_DEVOUT, "samplerate\0"); samplerate = g_ascii_strtoull(str, NULL, 10); free(str); delay = ((gdouble) samplerate / (gdouble) buffer_size) * (60.0 / AGS_DEVOUT_DEFAULT_BPM); delay_audio = AGS_DELAY_AUDIO(tactable); g_value_init(&value, G_TYPE_DOUBLE); g_value_set_double(&value, duration * delay * AGS_DEVOUT_DEFAULT_SCALE); ags_port_safe_write(delay_audio->sequencer_duration, &value); } void ags_delay_audio_change_notation_duration(AgsTactable *tactable, gdouble duration) { AgsDelayAudio *delay_audio; guint buffer_size; guint samplerate; gdouble delay; gchar *str; GValue value = {0,}; delay_audio = AGS_DELAY_AUDIO(tactable); str = ags_config_get(config, AGS_CONFIG_DEVOUT, "buffer-size\0"); buffer_size = g_ascii_strtoull(str, NULL, 10); free(str); str = ags_config_get(config, AGS_CONFIG_DEVOUT, "samplerate\0"); samplerate = g_ascii_strtoull(str, NULL, 10); free(str); delay = ((gdouble) samplerate / (gdouble) buffer_size) * (60.0 / AGS_DEVOUT_DEFAULT_BPM); // g_message("%f\0", duration * delay * AGS_DEVOUT_DEFAULT_SCALE); g_value_init(&value, G_TYPE_DOUBLE); g_value_set_double(&value, duration * delay * AGS_DEVOUT_DEFAULT_SCALE); ags_port_safe_write(delay_audio->notation_duration, &value); } /** * ags_delay_audio_new: * @delay_audio: the #AgsDelayAudio * * Notation duration changed of #AgsDelayAudio * * Since: 0.4 */ void ags_delay_audio_notation_duration_changed(AgsDelayAudio *delay_audio) { g_return_if_fail(AGS_IS_DELAY_AUDIO(delay_audio)); g_object_ref((GObject *) delay_audio); g_signal_emit(G_OBJECT(delay_audio), delay_audio_signals[NOTATION_DURATION_CHANGED], 0); g_object_unref((GObject *) delay_audio); } /** * ags_delay_audio_new: * @delay_audio: the #AgsDelayAudio * * Sequencer duration changed of #AgsDelayAudio * * Since: 0.4 */ void ags_delay_audio_sequencer_duration_changed(AgsDelayAudio *delay_audio) { g_return_if_fail(AGS_IS_DELAY_AUDIO(delay_audio)); g_object_ref((GObject *) delay_audio); g_signal_emit(G_OBJECT(delay_audio), delay_audio_signals[SEQUENCER_DURATION_CHANGED], 0); g_object_unref((GObject *) delay_audio); } /** * ags_delay_audio_new: * * Creates an #AgsDelayAudio * * Returns: a new #AgsDelayAudio * * Since: 0.4 */ AgsDelayAudio* ags_delay_audio_new() { AgsDelayAudio *delay_audio; delay_audio = (AgsDelayAudio *) g_object_new(AGS_TYPE_DELAY_AUDIO, NULL); return(delay_audio); } gsequencer-0.6.37/src/ags/audio/recall/ags_mute_channel.c0000644000175000017500000002114412626272146020247 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include void ags_mute_channel_class_init(AgsMuteChannelClass *mute_channel); void ags_mute_channel_connectable_interface_init(AgsConnectableInterface *connectable); void ags_mute_channel_mutable_interface_init(AgsMutableInterface *mutable); void ags_mute_channel_plugin_interface_init(AgsPluginInterface *plugin); void ags_mute_channel_init(AgsMuteChannel *mute_channel); void ags_mute_channel_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_mute_channel_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_mute_channel_connect(AgsConnectable *connectable); void ags_mute_channel_disconnect(AgsConnectable *connectable); void ags_mute_channel_set_ports(AgsPlugin *plugin, GList *port); void ags_mute_channel_finalize(GObject *gobject); void ags_mute_channel_set_muted(AgsMutable *mutable, gboolean muted); /** * SECTION:ags_mute_channel * @short_description: mutes channel * @title: AgsMuteChannel * @section_id: * @include: ags/audio/recall/ags_mute_channel.h * * The #AgsMuteChannel class provides ports to the effect processor. */ enum{ PROP_0, PROP_MUTED, }; static gpointer ags_mute_channel_parent_class = NULL; static AgsConnectableInterface *ags_mute_channel_parent_connectable_interface; static AgsMutableInterface *ags_mute_channel_parent_mutable_interface; GType ags_mute_channel_get_type() { static GType ags_type_mute_channel = 0; if(!ags_type_mute_channel){ static const GTypeInfo ags_mute_channel_info = { sizeof (AgsMuteChannelClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_mute_channel_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsMuteChannel), 0, /* n_preallocs */ (GInstanceInitFunc) ags_mute_channel_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_mute_channel_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_mutable_interface_info = { (GInterfaceInitFunc) ags_mute_channel_mutable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_plugin_interface_info = { (GInterfaceInitFunc) ags_mute_channel_plugin_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_mute_channel = g_type_register_static(AGS_TYPE_RECALL_CHANNEL, "AgsMuteChannel\0", &ags_mute_channel_info, 0); g_type_add_interface_static(ags_type_mute_channel, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_mute_channel, AGS_TYPE_MUTABLE, &ags_mutable_interface_info); g_type_add_interface_static(ags_type_mute_channel, AGS_TYPE_PLUGIN, &ags_plugin_interface_info); } return(ags_type_mute_channel); } void ags_mute_channel_connectable_interface_init(AgsConnectableInterface *connectable) { ags_mute_channel_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_mute_channel_connect; connectable->disconnect = ags_mute_channel_disconnect; } void ags_mute_channel_mutable_interface_init(AgsMutableInterface *mutable) { ags_mute_channel_parent_mutable_interface = g_type_interface_peek_parent(mutable); mutable->set_muted = ags_mute_channel_set_muted; } void ags_mute_channel_plugin_interface_init(AgsPluginInterface *plugin) { plugin->set_ports = ags_mute_channel_set_ports; } void ags_mute_channel_class_init(AgsMuteChannelClass *mute_channel) { GObjectClass *gobject; GParamSpec *param_spec; ags_mute_channel_parent_class = g_type_class_peek_parent(mute_channel); /* GObjectClass */ gobject = (GObjectClass *) mute_channel; gobject->set_property = ags_mute_channel_set_property; gobject->get_property = ags_mute_channel_get_property; gobject->finalize = ags_mute_channel_finalize; /* properties */ param_spec = g_param_spec_object("muted\0", "mute channel\0", "Mute the channel\0", AGS_TYPE_PORT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_MUTED, param_spec); } void ags_mute_channel_init(AgsMuteChannel *mute_channel) { GList *port; AGS_RECALL(mute_channel)->name = "ags-mute\0"; AGS_RECALL(mute_channel)->version = AGS_EFFECTS_DEFAULT_VERSION; AGS_RECALL(mute_channel)->build_id = AGS_BUILD_ID; AGS_RECALL(mute_channel)->xml_type = "ags-mute-channel\0"; port = NULL; mute_channel->muted = g_object_new(AGS_TYPE_PORT, "plugin-name\0", g_strdup("ags-mute\0"), "specifier\0", "./muted[0]\0", "control-port\0", "1/1\0", "port-value-is-pointer\0", FALSE, "port-value-type\0", G_TYPE_BOOLEAN, "port-value-size\0", sizeof(gboolean), "port-value-length\0", 1, NULL); mute_channel->muted->port_value.ags_port_boolean = FALSE; port = g_list_prepend(port, mute_channel->muted); AGS_RECALL(mute_channel)->port = port; } void ags_mute_channel_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsMuteChannel *mute_channel; mute_channel = AGS_MUTE_CHANNEL(gobject); switch(prop_id){ case PROP_MUTED: { AgsPort *port; port = (AgsPort *) g_value_get_object(value); if(port == mute_channel->muted){ return; } if(mute_channel->muted != NULL){ g_object_unref(G_OBJECT(mute_channel->muted)); } if(port != NULL){ g_object_ref(G_OBJECT(port)); } mute_channel->muted = port; } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_mute_channel_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsMuteChannel *mute_channel; mute_channel = AGS_MUTE_CHANNEL(gobject); switch(prop_id){ case PROP_MUTED: { g_value_set_object(value, mute_channel->muted); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_mute_channel_connect(AgsConnectable *connectable) { ags_mute_channel_parent_connectable_interface->connect(connectable); /* empty */ } void ags_mute_channel_disconnect(AgsConnectable *connectable) { ags_mute_channel_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_mute_channel_set_ports(AgsPlugin *plugin, GList *port) { while(port != NULL){ if(!strncmp(AGS_PORT(port->data)->specifier, "muted[0]\0", 9)){ g_object_set(G_OBJECT(plugin), "muted\0", AGS_PORT(port->data), NULL); } port = port->next; } } void ags_mute_channel_finalize(GObject *gobject) { AgsMuteChannel *mute_channel; mute_channel = AGS_MUTE_CHANNEL(gobject); if(mute_channel->muted != NULL){ g_object_unref(G_OBJECT(mute_channel->muted)); } /* call parent */ G_OBJECT_CLASS(ags_mute_channel_parent_class)->finalize(gobject); } void ags_mute_channel_set_muted(AgsMutable *mutable, gboolean muted) { GValue value = {0,}; g_value_init(&value, G_TYPE_BOOLEAN); g_value_set_boolean(&value, muted); ags_port_safe_write(AGS_MUTE_CHANNEL(mutable)->muted, &value); } /** * ags_mute_channel_new: * * Creates an #AgsMuteChannel * * Returns: a new #AgsMuteChannel * * Since: 0.4 */ AgsMuteChannel* ags_mute_channel_new() { AgsMuteChannel *mute_channel; mute_channel = (AgsMuteChannel *) g_object_new(AGS_TYPE_MUTE_CHANNEL, NULL); return(mute_channel); } gsequencer-0.6.37/src/ags/audio/recall/ags_buffer_channel.c0000644000175000017500000002252312626272146020550 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include void ags_buffer_channel_class_init(AgsBufferChannelClass *buffer_channel); void ags_buffer_channel_connectable_interface_init(AgsConnectableInterface *connectable); void ags_buffer_channel_mutable_interface_init(AgsMutableInterface *mutable); void ags_buffer_channel_plugin_interface_init(AgsPluginInterface *plugin); void ags_buffer_channel_init(AgsBufferChannel *buffer_channel); void ags_buffer_channel_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_buffer_channel_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_buffer_channel_connect(AgsConnectable *connectable); void ags_buffer_channel_disconnect(AgsConnectable *connectable); void ags_buffer_channel_set_ports(AgsPlugin *plugin, GList *port); void ags_buffer_channel_finalize(GObject *gobject); void ags_buffer_channel_set_muted(AgsMutable *mutable, gboolean muted); /** * SECTION:ags_buffer_channel * @short_description: buffers channel * @title: AgsBufferChannel * @section_id: * @include: ags/audio/recall/ags_buffer_channel.h * * The #AgsBufferChannel class provides ports to the effect processor. */ enum{ PROP_0, PROP_MUTED, }; static gpointer ags_buffer_channel_parent_class = NULL; static AgsConnectableInterface *ags_buffer_channel_parent_connectable_interface; static AgsMutableInterface *ags_buffer_channel_parent_mutable_interface; static AgsPluginInterface *ags_buffer_channel_parent_plugin_interface; static const gchar *ags_buffer_channel_plugin_name = "ags-buffer\0"; static const gchar *ags_buffer_channel_plugin_specifier[] = { "./muted[0]\0", }; static const gchar *ags_buffer_channel_plugin_control_port[] = { "1/1\0", }; GType ags_buffer_channel_get_type() { static GType ags_type_buffer_channel = 0; if(!ags_type_buffer_channel){ static const GTypeInfo ags_buffer_channel_info = { sizeof (AgsBufferChannelClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_buffer_channel_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsBufferChannel), 0, /* n_preallocs */ (GInstanceInitFunc) ags_buffer_channel_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_buffer_channel_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_mutable_interface_info = { (GInterfaceInitFunc) ags_buffer_channel_mutable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_plugin_interface_info = { (GInterfaceInitFunc) ags_buffer_channel_plugin_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_buffer_channel = g_type_register_static(AGS_TYPE_RECALL_CHANNEL, "AgsBufferChannel\0", &ags_buffer_channel_info, 0); g_type_add_interface_static(ags_type_buffer_channel, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_buffer_channel, AGS_TYPE_MUTABLE, &ags_mutable_interface_info); g_type_add_interface_static(ags_type_buffer_channel, AGS_TYPE_PLUGIN, &ags_plugin_interface_info); } return (ags_type_buffer_channel); } void ags_buffer_channel_connectable_interface_init(AgsConnectableInterface *connectable) { ags_buffer_channel_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_buffer_channel_connect; connectable->disconnect = ags_buffer_channel_disconnect; } void ags_buffer_channel_mutable_interface_init(AgsMutableInterface *mutable) { ags_buffer_channel_parent_mutable_interface = g_type_interface_peek_parent(mutable); mutable->set_muted = ags_buffer_channel_set_muted; } void ags_buffer_channel_plugin_interface_init(AgsPluginInterface *plugin) { ags_buffer_channel_parent_plugin_interface = g_type_interface_peek_parent(plugin); plugin->set_ports = ags_buffer_channel_set_ports; } void ags_buffer_channel_class_init(AgsBufferChannelClass *buffer_channel) { GObjectClass *gobject; AgsRecallClass *recall; GParamSpec *param_spec; ags_buffer_channel_parent_class = g_type_class_peek_parent(buffer_channel); /* GObjectClass */ gobject = (GObjectClass *) buffer_channel; gobject->set_property = ags_buffer_channel_set_property; gobject->get_property = ags_buffer_channel_get_property; gobject->finalize = ags_buffer_channel_finalize; /* properties */ param_spec = g_param_spec_object("muted\0", "mute channel\0", "Mute the channel\0", AGS_TYPE_PORT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_MUTED, param_spec); } void ags_buffer_channel_init(AgsBufferChannel *buffer_channel) { GList *port; AGS_RECALL(buffer_channel)->name = "ags-buffer\0"; AGS_RECALL(buffer_channel)->version = AGS_EFFECTS_DEFAULT_VERSION; AGS_RECALL(buffer_channel)->build_id = AGS_BUILD_ID; AGS_RECALL(buffer_channel)->xml_type = "ags-buffer-channel\0"; port = NULL; buffer_channel->muted = g_object_new(AGS_TYPE_PORT, "plugin-name\0", ags_buffer_channel_plugin_name, "specifier\0", ags_buffer_channel_plugin_specifier[0], "control-port\0", ags_buffer_channel_plugin_control_port[0], "port-value-is-pointer\0", FALSE, "port-value-type\0", G_TYPE_BOOLEAN, "port-value-size\0", sizeof(gboolean), "port-value-length\0", 1, NULL); buffer_channel->muted->port_value.ags_port_boolean = FALSE; port = g_list_prepend(port, buffer_channel->muted); /* set port */ AGS_RECALL(buffer_channel)->port = port; } void ags_buffer_channel_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsBufferChannel *buffer_channel; buffer_channel = AGS_BUFFER_CHANNEL(gobject); switch(prop_id){ case PROP_MUTED: { AgsPort *port; port = (AgsPort *) g_value_get_object(value); if(port == buffer_channel->muted){ return; } if(buffer_channel->muted != NULL){ g_object_unref(G_OBJECT(buffer_channel->muted)); } if(port != NULL){ g_object_ref(G_OBJECT(port)); } buffer_channel->muted = port; } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_buffer_channel_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsBufferChannel *buffer_channel; buffer_channel = AGS_BUFFER_CHANNEL(gobject); switch(prop_id){ case PROP_MUTED: { g_value_set_object(value, buffer_channel->muted); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_buffer_channel_finalize(GObject *gobject) { AgsBufferChannel *buffer_channel; buffer_channel = AGS_BUFFER_CHANNEL(gobject); if(buffer_channel->muted != NULL){ g_object_unref(G_OBJECT(buffer_channel->muted)); } /* call parent */ G_OBJECT_CLASS(ags_buffer_channel_parent_class)->finalize(gobject); } void ags_buffer_channel_connect(AgsConnectable *connectable) { ags_buffer_channel_parent_connectable_interface->connect(connectable); /* empty */ } void ags_buffer_channel_disconnect(AgsConnectable *connectable) { ags_buffer_channel_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_buffer_channel_set_ports(AgsPlugin *plugin, GList *port) { while(port != NULL){ if(!strncmp(AGS_PORT(port->data)->specifier, "./muted[0]\0", 9)){ g_object_set(G_OBJECT(plugin), "muted\0", AGS_PORT(port->data), NULL); } port = port->next; } } void ags_buffer_channel_set_muted(AgsMutable *mutable, gboolean muted) { GValue value = {0,}; g_value_init(&value, G_TYPE_BOOLEAN); g_value_set_boolean(&value, muted); ags_port_safe_write(AGS_BUFFER_CHANNEL(mutable)->muted, &value); } /** * ags_buffer_channel_new: * * Creates an #AgsBufferChannel * * Returns: a new #AgsBufferChannel * * Since: 0.4 */ AgsBufferChannel* ags_buffer_channel_new() { AgsBufferChannel *buffer_channel; buffer_channel = (AgsBufferChannel *) g_object_new(AGS_TYPE_BUFFER_CHANNEL, NULL); return(buffer_channel); } gsequencer-0.6.37/src/ags/audio/recall/ags_play_pattern.h0000644000175000017500000000352112626272146020313 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_PLAY_PATTERN_H__ #define __AGS_PLAY_PATTERN_H__ #include #include //#include #include #include #define AGS_TYPE_PLAY_PATTERN (ags_play_pattern_get_type()) #define AGS_PLAY_PATTERN(obj) (G_TYPE_CHECK_INSTANCE_CAST(obj, AGS_TYPE_PLAY_PATTERN, AgsPlayPattern)) #define AGS_PLAY_PATTERN_CLASS(class) (G_TYPE_CHECK_CLASS_CAST(class, AGS_TYPE_PLAY_PATTERN, AgsPlayPattern)) typedef struct _AgsPlayPattern AgsPlayPattern; typedef struct _AgsPlayPatternClass AgsPlayPatternClass; struct _AgsPlayPattern{ AgsRecall recall; // AgsDelay *delay; AgsChannel *channel; AgsPattern *pattern; guint i; guint j; guint bit; guint length; gboolean loop; }; struct _AgsPlayPatternClass{ AgsRecallClass recall; }; GType ags_play_pattern_get_type(); void ags_play_pattern_connect(AgsPlayPattern *play_pattern); //AgsPlayPattern* ags_play_pattern_new(AgsChannel *channel, AgsDelay *delay); #endif /*__AGS_PLAY_PATTERN_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_copy_channel.c0000644000175000017500000002235712626272146020256 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include void ags_copy_channel_class_init(AgsCopyChannelClass *copy_channel); void ags_copy_channel_connectable_interface_init(AgsConnectableInterface *connectable); void ags_copy_channel_mutable_interface_init(AgsMutableInterface *mutable); void ags_copy_channel_plugin_interface_init(AgsPluginInterface *plugin); void ags_copy_channel_init(AgsCopyChannel *copy_channel); void ags_copy_channel_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_copy_channel_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_copy_channel_connect(AgsConnectable *connectable); void ags_copy_channel_disconnect(AgsConnectable *connectable); void ags_copy_channel_set_ports(AgsPlugin *plugin, GList *port); void ags_copy_channel_finalize(GObject *gobject); void ags_copy_channel_set_muted(AgsMutable *mutable, gboolean muted); /** * SECTION:ags_copy_channel * @short_description: copys channel * @title: AgsCopyChannel * @section_id: * @include: ags/audio/recall/ags_copy_channel.h * * The #AgsCopyChannel class provides ports to the effect processor. */ enum{ PROP_0, PROP_MUTED, }; static gpointer ags_copy_channel_parent_class = NULL; static AgsConnectableInterface *ags_copy_channel_parent_connectable_interface; static AgsMutableInterface *ags_copy_channel_parent_mutable_interface; static AgsPluginInterface *ags_copy_channel_parent_plugin_interface; static const gchar *ags_copy_channel_plugin_name = "ags-copy\0"; static const gchar *ags_copy_channel_plugin_specifier[] = { "./muted[0]\0", }; static const gchar *ags_copy_channel_plugin_control_port[] = { "1/1\0", }; GType ags_copy_channel_get_type() { static GType ags_type_copy_channel = 0; if(!ags_type_copy_channel){ static const GTypeInfo ags_copy_channel_info = { sizeof (AgsCopyChannelClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_copy_channel_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsCopyChannel), 0, /* n_preallocs */ (GInstanceInitFunc) ags_copy_channel_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_copy_channel_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_mutable_interface_info = { (GInterfaceInitFunc) ags_copy_channel_mutable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_plugin_interface_info = { (GInterfaceInitFunc) ags_copy_channel_plugin_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_copy_channel = g_type_register_static(AGS_TYPE_RECALL_CHANNEL, "AgsCopyChannel\0", &ags_copy_channel_info, 0); g_type_add_interface_static(ags_type_copy_channel, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_copy_channel, AGS_TYPE_MUTABLE, &ags_mutable_interface_info); g_type_add_interface_static(ags_type_copy_channel, AGS_TYPE_PLUGIN, &ags_plugin_interface_info); } return(ags_type_copy_channel); } void ags_copy_channel_connectable_interface_init(AgsConnectableInterface *connectable) { ags_copy_channel_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_copy_channel_connect; connectable->disconnect = ags_copy_channel_disconnect; } void ags_copy_channel_mutable_interface_init(AgsMutableInterface *mutable) { ags_copy_channel_parent_mutable_interface = g_type_interface_peek_parent(mutable); mutable->set_muted = ags_copy_channel_set_muted; } void ags_copy_channel_plugin_interface_init(AgsPluginInterface *plugin) { ags_copy_channel_parent_plugin_interface = g_type_interface_peek_parent(plugin); plugin->set_ports = ags_copy_channel_set_ports; } void ags_copy_channel_class_init(AgsCopyChannelClass *copy_channel) { GObjectClass *gobject; GParamSpec *param_spec; ags_copy_channel_parent_class = g_type_class_peek_parent(copy_channel); /* GObjectClass */ gobject = (GObjectClass *) copy_channel; gobject->set_property = ags_copy_channel_set_property; gobject->get_property = ags_copy_channel_get_property; gobject->finalize = ags_copy_channel_finalize; /* properties */ param_spec = g_param_spec_object("muted\0", "mute channel\0", "Mute the channel\0", AGS_TYPE_PORT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_MUTED, param_spec); } void ags_copy_channel_init(AgsCopyChannel *copy_channel) { GList *port; AGS_RECALL(copy_channel)->name = "ags-copy\0"; AGS_RECALL(copy_channel)->version = AGS_EFFECTS_DEFAULT_VERSION; AGS_RECALL(copy_channel)->build_id = AGS_BUILD_ID; AGS_RECALL(copy_channel)->xml_type = "ags-copy-channel\0"; port = NULL; copy_channel->muted = g_object_new(AGS_TYPE_PORT, "plugin-name\0", ags_copy_channel_plugin_name, "specifier\0", ags_copy_channel_plugin_specifier[0], "control-port\0", ags_copy_channel_plugin_control_port[0], "port-value-is-pointer\0", FALSE, "port-value-type\0", G_TYPE_BOOLEAN, "port-value-size\0", sizeof(gboolean), "port-value-length\0", 1, NULL); copy_channel->muted->port_value.ags_port_boolean = FALSE; port = g_list_prepend(port, copy_channel->muted); /* set port */ AGS_RECALL(copy_channel)->port = port; } void ags_copy_channel_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsCopyChannel *copy_channel; copy_channel = AGS_COPY_CHANNEL(gobject); switch(prop_id){ case PROP_MUTED: { AgsPort *port; port = (AgsPort *) g_value_get_object(value); if(port == copy_channel->muted){ return; } if(copy_channel->muted != NULL){ g_object_unref(G_OBJECT(copy_channel->muted)); } if(port != NULL){ g_object_ref(G_OBJECT(port)); } copy_channel->muted = port; } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_copy_channel_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsCopyChannel *copy_channel; copy_channel = AGS_COPY_CHANNEL(gobject); switch(prop_id){ case PROP_MUTED: { g_value_set_object(value, copy_channel->muted); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_copy_channel_finalize(GObject *gobject) { AgsCopyChannel *copy_channel; copy_channel = AGS_COPY_CHANNEL(gobject); if(copy_channel->muted != NULL){ g_object_unref(G_OBJECT(copy_channel->muted)); } /* call parent */ G_OBJECT_CLASS(ags_copy_channel_parent_class)->finalize(gobject); } void ags_copy_channel_connect(AgsConnectable *connectable) { ags_copy_channel_parent_connectable_interface->connect(connectable); /* empty */ } void ags_copy_channel_disconnect(AgsConnectable *connectable) { ags_copy_channel_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_copy_channel_set_ports(AgsPlugin *plugin, GList *port) { while(port != NULL){ if(!strncmp(AGS_PORT(port->data)->specifier, "./muted[0]\0", 9)){ g_object_set(G_OBJECT(plugin), "muted\0", AGS_PORT(port->data), NULL); } port = port->next; } } void ags_copy_channel_set_muted(AgsMutable *mutable, gboolean muted) { GValue value = {0,}; g_value_init(&value, G_TYPE_BOOLEAN); g_value_set_boolean(&value, muted); ags_port_safe_write(AGS_COPY_CHANNEL(mutable)->muted, &value); } /** * ags_copy_channel_new: * @destination: the destination #AgsChannel * @source: the source #AgsChannel * * Creates an #AgsCopyChannel * * Returns: a new #AgsCopyChannel * * Since: 0.4 */ AgsCopyChannel* ags_copy_channel_new(AgsChannel *destination, AgsChannel *source) { AgsCopyChannel *copy_channel; copy_channel = (AgsCopyChannel *) g_object_new(AGS_TYPE_COPY_CHANNEL, "destination\0", destination, "channel\0", source, NULL); return(copy_channel); } gsequencer-0.6.37/src/ags/audio/recall/ags_buffer_channel_run.c0000644000175000017500000002056212626272146021435 00000000000000/* AGS - Advanced GTK Sequencer * Copyright (C) 2014 Joël Krähemann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include #include #include #include #include #include void ags_buffer_channel_run_class_init(AgsBufferChannelRunClass *buffer_channel_run); void ags_buffer_channel_run_connectable_interface_init(AgsConnectableInterface *connectable); void ags_buffer_channel_run_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable); void ags_buffer_channel_run_plugin_interface_init(AgsPluginInterface *plugin); void ags_buffer_channel_run_init(AgsBufferChannelRun *buffer_channel_run); void ags_buffer_channel_run_connect(AgsConnectable *connectable); void ags_buffer_channel_run_disconnect(AgsConnectable *connectable); void ags_buffer_channel_run_connect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_buffer_channel_run_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_buffer_channel_run_finalize(GObject *gobject); AgsRecall* ags_buffer_channel_run_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter); /** * SECTION:ags_buffer_channel_run * @short_description: buffers channel * @title: AgsBufferChannelRun * @section_id: * @include: ags/audio/recall/ags_buffer_channel_run.h * * The #AgsBufferChannelRun class buffers the channel. */ static gpointer ags_buffer_channel_run_parent_class = NULL; static AgsConnectableInterface *ags_buffer_channel_run_parent_connectable_interface; static AgsDynamicConnectableInterface *ags_buffer_channel_run_parent_dynamic_connectable_interface; static AgsPluginInterface *ags_buffer_channel_run_parent_plugin_interface; GType ags_buffer_channel_run_get_type() { static GType ags_type_buffer_channel_run = 0; if(!ags_type_buffer_channel_run){ static const GTypeInfo ags_buffer_channel_run_info = { sizeof (AgsBufferChannelRunClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_buffer_channel_run_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsBufferChannelRun), 0, /* n_preallocs */ (GInstanceInitFunc) ags_buffer_channel_run_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_buffer_channel_run_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_dynamic_connectable_interface_info = { (GInterfaceInitFunc) ags_buffer_channel_run_dynamic_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_plugin_interface_info = { (GInterfaceInitFunc) ags_buffer_channel_run_plugin_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_buffer_channel_run = g_type_register_static(AGS_TYPE_RECALL_CHANNEL_RUN, "AgsBufferChannelRun\0", &ags_buffer_channel_run_info, 0); g_type_add_interface_static(ags_type_buffer_channel_run, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_buffer_channel_run, AGS_TYPE_DYNAMIC_CONNECTABLE, &ags_dynamic_connectable_interface_info); g_type_add_interface_static(ags_type_buffer_channel_run, AGS_TYPE_PLUGIN, &ags_plugin_interface_info); } return (ags_type_buffer_channel_run); } void ags_buffer_channel_run_class_init(AgsBufferChannelRunClass *buffer_channel_run) { GObjectClass *gobject; AgsRecallClass *recall; ags_buffer_channel_run_parent_class = g_type_class_peek_parent(buffer_channel_run); /* GObjectClass */ gobject = (GObjectClass *) buffer_channel_run; gobject->finalize = ags_buffer_channel_run_finalize; /* AgsRecallClass */ recall = (AgsRecallClass *) buffer_channel_run; recall->duplicate = ags_buffer_channel_run_duplicate; } void ags_buffer_channel_run_connectable_interface_init(AgsConnectableInterface *connectable) { ags_buffer_channel_run_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_buffer_channel_run_connect; connectable->disconnect = ags_buffer_channel_run_disconnect; } void ags_buffer_channel_run_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable) { ags_buffer_channel_run_parent_dynamic_connectable_interface = g_type_interface_peek_parent(dynamic_connectable); dynamic_connectable->connect_dynamic = ags_buffer_channel_run_connect_dynamic; dynamic_connectable->disconnect_dynamic = ags_buffer_channel_run_disconnect_dynamic; } void ags_buffer_channel_run_plugin_interface_init(AgsPluginInterface *plugin) { ags_buffer_channel_run_parent_plugin_interface = g_type_interface_peek_parent(plugin); } void ags_buffer_channel_run_init(AgsBufferChannelRun *buffer_channel_run) { AGS_RECALL(buffer_channel_run)->name = "ags-buffer\0"; AGS_RECALL(buffer_channel_run)->version = AGS_EFFECTS_DEFAULT_VERSION; AGS_RECALL(buffer_channel_run)->build_id = AGS_BUILD_ID; AGS_RECALL(buffer_channel_run)->xml_type = "ags-buffer-channel-run\0"; AGS_RECALL(buffer_channel_run)->port = NULL; AGS_RECALL(buffer_channel_run)->flags |= AGS_RECALL_INPUT_ORIENTATED; AGS_RECALL(buffer_channel_run)->child_type = AGS_TYPE_BUFFER_RECYCLING; } void ags_buffer_channel_run_finalize(GObject *gobject) { /* empty */ /* call parent */ G_OBJECT_CLASS(ags_buffer_channel_run_parent_class)->finalize(gobject); } void ags_buffer_channel_run_connect(AgsConnectable *connectable) { if((AGS_RECALL_CONNECTED & (AGS_RECALL(connectable)->flags)) != 0){ return; } /* call parent */ ags_buffer_channel_run_parent_connectable_interface->connect(connectable); /* empty */ } void ags_buffer_channel_run_disconnect(AgsConnectable *connectable) { /* call parent */ ags_buffer_channel_run_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_buffer_channel_run_connect_dynamic(AgsDynamicConnectable *dynamic_connectable) { if((AGS_RECALL_DYNAMIC_CONNECTED & (AGS_RECALL(dynamic_connectable)->flags)) != 0){ return; } /* call parent */ ags_buffer_channel_run_parent_dynamic_connectable_interface->connect_dynamic(dynamic_connectable); /* empty */ } void ags_buffer_channel_run_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable) { AgsChannel *channel; AgsBufferChannelRun *buffer_channel_run; ags_buffer_channel_run_parent_dynamic_connectable_interface->disconnect_dynamic(dynamic_connectable); /* empty */ } AgsRecall* ags_buffer_channel_run_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter) { AgsBufferChannelRun *buffer_channel_run, *copy; buffer_channel_run = (AgsBufferChannelRun *) recall; copy = (AgsBufferChannelRun *) AGS_RECALL_CLASS(ags_buffer_channel_run_parent_class)->duplicate(recall, recall_id, n_params, parameter); return((AgsRecall *) copy); } /** * ags_buffer_channel_run_new: * * Creates an #AgsBufferChannelRun * * Returns: a new #AgsBufferChannelRun * * Since: 0.4 */ AgsBufferChannelRun* ags_buffer_channel_run_new() { AgsBufferChannelRun *buffer_channel_run; buffer_channel_run = (AgsBufferChannelRun *) g_object_new(AGS_TYPE_BUFFER_CHANNEL_RUN, NULL); return(buffer_channel_run); } gsequencer-0.6.37/src/ags/audio/recall/ags_delay_audio_run.c0000644000175000017500000005547712632325474020770 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void ags_delay_audio_run_class_init(AgsDelayAudioRunClass *delay_audio_run); void ags_delay_audio_run_connectable_interface_init(AgsConnectableInterface *connectable); void ags_delay_audio_run_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable); void ags_delay_audio_run_plugin_interface_init(AgsPluginInterface *plugin); void ags_delay_audio_run_init(AgsDelayAudioRun *delay_audio_run); void ags_delay_audio_run_connect(AgsConnectable *connectable); void ags_delay_audio_run_disconnect(AgsConnectable *connectable); void ags_delay_audio_run_connect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_delay_audio_run_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_delay_audio_run_finalize(GObject *gobject); void ags_delay_audio_run_read(AgsFile *file, xmlNode *node, AgsPlugin *plugin); xmlNode* ags_delay_audio_run_write(AgsFile *file, xmlNode *parent, AgsPlugin *plugin); void ags_delay_audio_run_run_init_pre(AgsRecall *recall); void ags_delay_audio_run_run_pre(AgsRecall *recall); void ags_delay_audio_run_done(AgsRecall *recall); void ags_delay_audio_run_cancel(AgsRecall *recall); void ags_delay_audio_run_remove(AgsRecall *recall); AgsRecall* ags_delay_audio_run_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter); void ags_delay_audio_run_notify_dependency(AgsRecall *recall, guint notify_mode, gint count); /** * SECTION:ags_delay_audio_run * @short_description: delay * @title: AgsDelayAudioRun * @section_id: * @include: ags/audio/recall/ags_delay_audio_run.h * * The #AgsDelayNotationAudioRun class delays. */ enum{ NOTATION_ALLOC_OUTPUT, NOTATION_ALLOC_INPUT, NOTATION_COUNT, SEQUENCER_ALLOC_OUTPUT, SEQUENCER_ALLOC_INPUT, SEQUENCER_COUNT, LAST_SIGNAL, }; static gpointer ags_delay_audio_run_parent_class = NULL; static AgsConnectableInterface *ags_delay_audio_run_parent_connectable_interface; static AgsDynamicConnectableInterface *ags_delay_audio_run_parent_dynamic_connectable_interface; static AgsPluginInterface *ags_delay_audio_run_parent_plugin_interface; static guint delay_audio_run_signals[LAST_SIGNAL]; GType ags_delay_audio_run_get_type() { static GType ags_type_delay_audio_run = 0; if(!ags_type_delay_audio_run){ static const GTypeInfo ags_delay_audio_run_info = { sizeof (AgsDelayAudioRunClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_delay_audio_run_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsDelayAudioRun), 0, /* n_preallocs */ (GInstanceInitFunc) ags_delay_audio_run_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_delay_audio_run_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_dynamic_connectable_interface_info = { (GInterfaceInitFunc) ags_delay_audio_run_dynamic_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_plugin_interface_info = { (GInterfaceInitFunc) ags_delay_audio_run_plugin_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_delay_audio_run = g_type_register_static(AGS_TYPE_RECALL_AUDIO_RUN, "AgsDelayAudioRun\0", &ags_delay_audio_run_info, 0); g_type_add_interface_static(ags_type_delay_audio_run, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_delay_audio_run, AGS_TYPE_DYNAMIC_CONNECTABLE, &ags_dynamic_connectable_interface_info); g_type_add_interface_static(ags_type_delay_audio_run, AGS_TYPE_PLUGIN, &ags_plugin_interface_info); } return (ags_type_delay_audio_run); } void ags_delay_audio_run_class_init(AgsDelayAudioRunClass *delay_audio_run) { GObjectClass *gobject; AgsRecallClass *recall; ags_delay_audio_run_parent_class = g_type_class_peek_parent(delay_audio_run); /* GObjectClass */ gobject = (GObjectClass *) delay_audio_run; gobject->finalize = ags_delay_audio_run_finalize; /* AgsRecallClass */ recall = (AgsRecallClass *) delay_audio_run; recall->run_init_pre = ags_delay_audio_run_run_init_pre; recall->run_pre = ags_delay_audio_run_run_pre; recall->done = ags_delay_audio_run_done; recall->cancel = ags_delay_audio_run_cancel; recall->remove = ags_delay_audio_run_remove; recall->duplicate = ags_delay_audio_run_duplicate; recall->notify_dependency = ags_delay_audio_run_notify_dependency; /* AgsDelayAudioRun */ delay_audio_run->notation_alloc_output = NULL; delay_audio_run->notation_alloc_input = NULL; delay_audio_run->notation_count = NULL; delay_audio_run->sequencer_alloc_output = NULL; delay_audio_run->sequencer_alloc_input = NULL; delay_audio_run->sequencer_count = NULL; /* signals */ /** * AgsDelayAudioRun::notation-alloc-output: * @delay_audio_run: the #AgsDelayAudioRun * @run_order: the nth run * @delay: the delay * @attack: the attack * * The ::notation-alloc-output signal is emited while allocating * notation output. */ delay_audio_run_signals[NOTATION_ALLOC_OUTPUT] = g_signal_new("notation-alloc-output\0", G_TYPE_FROM_CLASS(delay_audio_run), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsDelayAudioRunClass, notation_alloc_output), NULL, NULL, g_cclosure_user_marshal_VOID__UINT_DOUBLE_UINT, G_TYPE_NONE, 3, G_TYPE_UINT, G_TYPE_DOUBLE, G_TYPE_UINT); /** * AgsDelayAudioRun::notation-alloc-input: * @delay_audio_run: the #AgsDelayAudioRun * @run_order: the nth run * @delay: the delay * @attack: the attack * * The ::notation-alloc-input signal is emited while allocating * notation input. */ delay_audio_run_signals[NOTATION_ALLOC_INPUT] = g_signal_new("notation-alloc-input\0", G_TYPE_FROM_CLASS(delay_audio_run), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsDelayAudioRunClass, notation_alloc_input), NULL, NULL, g_cclosure_user_marshal_VOID__UINT_DOUBLE_UINT, G_TYPE_NONE, 3, G_TYPE_UINT, G_TYPE_DOUBLE, G_TYPE_UINT); /** * AgsDelayAudioRun::notation-count: * @delay_audio_run: the #AgsDelayAudioRun * @run_order: the nth run * @delay: the delay * @attack: the attack * * The ::notation-count signal is emited while counting * notation. */ delay_audio_run_signals[NOTATION_COUNT] = g_signal_new("notation-count\0", G_TYPE_FROM_CLASS(delay_audio_run), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsDelayAudioRunClass, notation_count), NULL, NULL, g_cclosure_user_marshal_VOID__UINT_DOUBLE_UINT, G_TYPE_NONE, 3, G_TYPE_UINT, G_TYPE_DOUBLE, G_TYPE_UINT); /** * AgsDelayAudioRun::sequencer-alloc-output: * @delay_audio_run: the #AgsDelayAudioRun * @run_order: the nth run * @delay: the delay * @attack: the attack * * The ::sequencer-alloc-output signal is emited while allocating * sequencer output. */ delay_audio_run_signals[SEQUENCER_ALLOC_OUTPUT] = g_signal_new("sequencer-alloc-output\0", G_TYPE_FROM_CLASS(delay_audio_run), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsDelayAudioRunClass, sequencer_alloc_output), NULL, NULL, g_cclosure_user_marshal_VOID__UINT_DOUBLE_UINT, G_TYPE_NONE, 3, G_TYPE_UINT, G_TYPE_DOUBLE, G_TYPE_UINT); /** * AgsDelayAudioRun::sequencer-alloc-input: * @delay_audio_run: the #AgsDelayAudioRun * @run_order: the nth run * @delay: the delay * @attack: the attack * * The ::sequencer-alloc-input signal is emited while allocating * sequencer input. */ delay_audio_run_signals[SEQUENCER_ALLOC_INPUT] = g_signal_new("sequencer-alloc-input\0", G_TYPE_FROM_CLASS(delay_audio_run), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsDelayAudioRunClass, sequencer_alloc_input), NULL, NULL, g_cclosure_user_marshal_VOID__UINT_DOUBLE_UINT, G_TYPE_NONE, 3, G_TYPE_UINT, G_TYPE_DOUBLE, G_TYPE_UINT); /** * AgsDelayAudioRun::sequencer-count: * @delay_audio_run: the #AgsDelayAudioRun * @run_order: the nth run * @delay: the delay * @attack: the attack * * The ::sequencer-count signal is emited while counting * sequencer. */ delay_audio_run_signals[SEQUENCER_COUNT] = g_signal_new("sequencer-count\0", G_TYPE_FROM_CLASS(delay_audio_run), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsDelayAudioRunClass, sequencer_count), NULL, NULL, g_cclosure_user_marshal_VOID__UINT_DOUBLE_UINT, G_TYPE_NONE, 3, G_TYPE_UINT, G_TYPE_DOUBLE, G_TYPE_UINT); } void ags_delay_audio_run_connectable_interface_init(AgsConnectableInterface *connectable) { ags_delay_audio_run_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_delay_audio_run_connect; connectable->disconnect = ags_delay_audio_run_disconnect; } void ags_delay_audio_run_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable) { ags_delay_audio_run_parent_dynamic_connectable_interface = g_type_interface_peek_parent(dynamic_connectable); dynamic_connectable->connect_dynamic = ags_delay_audio_run_connect_dynamic; dynamic_connectable->disconnect_dynamic = ags_delay_audio_run_disconnect_dynamic; } void ags_delay_audio_run_plugin_interface_init(AgsPluginInterface *plugin) { ags_delay_audio_run_parent_plugin_interface = g_type_interface_peek_parent(plugin); plugin->read = ags_delay_audio_run_read; plugin->write = ags_delay_audio_run_write; } void ags_delay_audio_run_init(AgsDelayAudioRun *delay_audio_run) { AGS_RECALL(delay_audio_run)->flags |= AGS_RECALL_PERSISTENT; AGS_RECALL(delay_audio_run)->name = "ags-delay\0"; AGS_RECALL(delay_audio_run)->version = AGS_EFFECTS_DEFAULT_VERSION; AGS_RECALL(delay_audio_run)->build_id = AGS_BUILD_ID; AGS_RECALL(delay_audio_run)->xml_type = "ags-delay-audio-run\0"; AGS_RECALL(delay_audio_run)->port = NULL; delay_audio_run->dependency_ref = 0; delay_audio_run->hide_ref = 0; delay_audio_run->hide_ref_counter = 0; delay_audio_run->notation_counter = 0; delay_audio_run->sequencer_counter = 0; } void ags_delay_audio_run_connect(AgsConnectable *connectable) { if((AGS_RECALL_CONNECTED & (AGS_RECALL(connectable)->flags)) != 0){ return; } ags_delay_audio_run_parent_connectable_interface->connect(connectable); } void ags_delay_audio_run_disconnect(AgsConnectable *connectable) { ags_delay_audio_run_parent_connectable_interface->disconnect(connectable); } void ags_delay_audio_run_connect_dynamic(AgsDynamicConnectable *dynamic_connectable) { if((AGS_RECALL_DYNAMIC_CONNECTED & (AGS_RECALL(dynamic_connectable)->flags)) != 0){ return; } ags_delay_audio_run_parent_dynamic_connectable_interface->connect_dynamic(dynamic_connectable); } void ags_delay_audio_run_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable) { ags_delay_audio_run_parent_dynamic_connectable_interface->disconnect_dynamic(dynamic_connectable); } void ags_delay_audio_run_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_delay_audio_run_parent_class)->finalize(gobject); } void ags_delay_audio_run_read(AgsFile *file, xmlNode *node, AgsPlugin *plugin) { AgsFileLookup *file_lookup; xmlNode *iter; /* read parent */ ags_delay_audio_run_parent_plugin_interface->read(file, node, plugin); } xmlNode* ags_delay_audio_run_write(AgsFile *file, xmlNode *parent, AgsPlugin *plugin) { AgsFileLookup *file_lookup; xmlNode *node, *child; xmlNode *dependency_node; GList *list; gchar *id; /* write parent */ node = ags_delay_audio_run_parent_plugin_interface->write(file, parent, plugin); return(node); } void ags_delay_audio_run_run_init_pre(AgsRecall *recall) { AgsDevout *devout; AgsDelayAudio *delay_audio; AgsDelayAudioRun *delay_audio_run; /* call parent class */ AGS_RECALL_CLASS(ags_delay_audio_run_parent_class)->run_init_pre(recall); /* AgsDelayAudioRun */ delay_audio = AGS_DELAY_AUDIO(AGS_RECALL_AUDIO_RUN(recall)->recall_audio); delay_audio_run = AGS_DELAY_AUDIO_RUN(recall); devout = AGS_DEVOUT(AGS_RECALL_AUDIO(delay_audio)->audio->devout); /* run order */ delay_audio_run->hide_ref_counter = 0; } void ags_delay_audio_run_run_pre(AgsRecall *recall) { AgsDelayAudio *delay_audio; AgsDelayAudioRun *delay_audio_run; gdouble notation_delay, sequencer_delay; GValue value = { 0, }; AGS_RECALL_CLASS(ags_delay_audio_run_parent_class)->run_pre(recall); delay_audio_run = AGS_DELAY_AUDIO_RUN(recall); if((AGS_RECALL_PERSISTENT & (recall->flags)) == 0 && delay_audio_run->dependency_ref == 0){ delay_audio_run->notation_counter = 0; delay_audio_run->sequencer_counter = 0; ags_recall_done(recall); return; } delay_audio = AGS_DELAY_AUDIO(AGS_RECALL_AUDIO_RUN(delay_audio_run)->recall_audio); /* read notation-delay port */ g_value_init(&value, G_TYPE_DOUBLE); ags_port_safe_read(delay_audio->notation_delay, &value); notation_delay = g_value_get_double(&value); /* read sequencer-delay port */ g_value_reset(&value); ags_port_safe_read(delay_audio->sequencer_delay, &value); sequencer_delay = g_value_get_double(&value); g_value_unset(&value); if(delay_audio_run->notation_counter + 1 >= (guint) notation_delay){ delay_audio_run->notation_counter = 0; }else{ delay_audio_run->notation_counter += 1; } if(delay_audio_run->sequencer_counter + 1 >= (guint) sequencer_delay){ delay_audio_run->sequencer_counter = 0; }else{ delay_audio_run->sequencer_counter += 1; } if(delay_audio_run->notation_counter == 0){ AgsDevout *devout; guint run_order; gdouble delay; guint attack; devout = AGS_DEVOUT(AGS_RECALL_AUDIO(delay_audio)->audio->devout); run_order = 0; //NOTE:JK: old hide_ref style /* delay and attack */ //TODO:JK: unclear attack = 0; // devout->attack[((devout->tic_counter + 1 == AGS_NOTATION_TICS_PER_BEAT) ? // 0: // devout->tic_counter + 1)]; delay = 0.0; // devout->delay[((devout->tic_counter + 1 == AGS_NOTATION_TICS_PER_BEAT) ? // 0: // devout->tic_counter + 1)]; // g_message("ags_delay_audio_run_run_pre@%llu: alloc notation[%u]\0", // delay_audio_run, // run_order); /* notation speed */ ags_delay_audio_run_notation_alloc_output(delay_audio_run, run_order, delay, attack); ags_delay_audio_run_notation_alloc_input(delay_audio_run, run_order, delay, attack); ags_delay_audio_run_notation_count(delay_audio_run, run_order, delay, attack); } if(delay_audio_run->sequencer_counter == 0){ AgsDevout *devout; guint run_order; gdouble delay; guint attack; devout = AGS_DEVOUT(AGS_RECALL_AUDIO(delay_audio)->audio->devout); /* delay and attack */ //TODO:JK: unclear attack = 0; // devout->attack[((devout->tic_counter + 1 == AGS_NOTATION_TICS_PER_BEAT) ? // 0: // devout->tic_counter + 1)]; delay = 0.0; // devout->delay[((devout->tic_counter + 1 == AGS_NOTATION_TICS_PER_BEAT) ? // 0: // devout->tic_counter + 1)]; run_order = 0; // g_message("ags_delay_audio_run_run_pre@%llu: alloc sequencer[%u]\0", // delay_audio_run, // run_order); /* sequencer speed */ ags_delay_audio_run_sequencer_alloc_output(delay_audio_run, run_order, delay, attack); ags_delay_audio_run_sequencer_alloc_input(delay_audio_run, run_order, delay, attack); ags_delay_audio_run_sequencer_count(delay_audio_run, run_order, delay, attack); } } void ags_delay_audio_run_done(AgsRecall *recall) { AGS_RECALL_CLASS(ags_delay_audio_run_parent_class)->done(recall); /* empty */ } void ags_delay_audio_run_cancel(AgsRecall *recall) { AGS_RECALL_CLASS(ags_delay_audio_run_parent_class)->cancel(recall); /* empty */ } void ags_delay_audio_run_remove(AgsRecall *recall) { AGS_RECALL_CLASS(ags_delay_audio_run_parent_class)->remove(recall); /* empty */ } AgsRecall* ags_delay_audio_run_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter) { AgsDelayAudioRun *delay_audio_run, *copy; delay_audio_run = (AgsDelayAudioRun *) recall; copy = (AgsDelayAudioRun *) AGS_RECALL_CLASS(ags_delay_audio_run_parent_class)->duplicate(recall, recall_id, n_params, parameter); copy->dependency_ref = delay_audio_run->dependency_ref; copy->hide_ref = delay_audio_run->hide_ref; // copy->hide_ref_counter = delay_audio_run->hide_ref_counter; //TODO:JK: may be you want to make a AgsRecallDependency, but a AgsCountable isn't a AgsRecall at all copy->notation_counter = delay_audio_run->notation_counter; copy->sequencer_counter = delay_audio_run->sequencer_counter; return((AgsRecall *) copy); } void ags_delay_audio_run_notify_dependency(AgsRecall *recall, guint notify_mode, gint count) { AgsDelayAudioRun *delay_audio_run; delay_audio_run = AGS_DELAY_AUDIO_RUN(recall); switch(notify_mode){ case AGS_RECALL_NOTIFY_RUN: delay_audio_run->hide_ref += count; // g_message("delay_audio_run->hide_ref: %u\n\0", delay_audio_run->hide_ref); break; case AGS_RECALL_NOTIFY_AUDIO: break; case AGS_RECALL_NOTIFY_AUDIO_RUN: break; case AGS_RECALL_NOTIFY_CHANNEL: break; case AGS_RECALL_NOTIFY_CHANNEL_RUN: delay_audio_run->dependency_ref += count; break; default: g_message("ags_delay_audio_run.c - ags_delay_audio_run_notify: unknown notify\0"); } } /** * ags_delay_audio_run_notation_alloc_output: * @delay_audio_run: the #AgsDelayAudioRun * @run_order: the nth run * @delay: the delay * @attack: the attack * * Emitted as notation allocs output. * * Since: 0.4 */ void ags_delay_audio_run_notation_alloc_output(AgsDelayAudioRun *delay_audio_run, guint run_order, gdouble delay, guint attack) { g_return_if_fail(AGS_IS_DELAY_AUDIO_RUN(delay_audio_run)); g_object_ref(G_OBJECT(delay_audio_run)); g_signal_emit(G_OBJECT(delay_audio_run), delay_audio_run_signals[NOTATION_ALLOC_OUTPUT], 0, run_order, delay, attack); g_object_unref(G_OBJECT(delay_audio_run)); } /** * ags_delay_audio_run_notation_alloc_input: * @delay_audio_run: the #AgsDelayAudioRun * @run_order: the nth run * @delay: the delay * @attack: the attack * * Emitted as notation allocs output. * * Since: 0.4 */ void ags_delay_audio_run_notation_alloc_input(AgsDelayAudioRun *delay_audio_run, guint run_order, gdouble delay, guint attack) { g_return_if_fail(AGS_IS_DELAY_AUDIO_RUN(delay_audio_run)); g_object_ref(G_OBJECT(delay_audio_run)); g_signal_emit(G_OBJECT(delay_audio_run), delay_audio_run_signals[NOTATION_ALLOC_INPUT], 0, run_order, delay, attack); g_object_unref(G_OBJECT(delay_audio_run)); } /** * ags_delay_audio_run_notation_count: * @delay_audio_run: the #AgsDelayAudioRun * @run_order: the nth run * @delay: the delay * @attack: the attack * * Emitted as notation counts. * * Since: 0.4 */ void ags_delay_audio_run_notation_count(AgsDelayAudioRun *delay_audio_run, guint run_order, gdouble delay, guint attack) { g_return_if_fail(AGS_IS_DELAY_AUDIO_RUN(delay_audio_run)); g_object_ref(G_OBJECT(delay_audio_run)); g_signal_emit(G_OBJECT(delay_audio_run), delay_audio_run_signals[NOTATION_COUNT], 0, run_order, delay, attack); g_object_unref(G_OBJECT(delay_audio_run)); } /** * ags_delay_audio_run_sequencer_alloc_output: * @delay_audio_run: the #AgsDelayAudioRun * @run_order: the nth run * @delay: the delay * @attack: the attack * * Emitted as sequencer allocs output. * * Since: 0.4 */ void ags_delay_audio_run_sequencer_alloc_output(AgsDelayAudioRun *delay_audio_run, guint run_order, gdouble delay, guint attack) { g_return_if_fail(AGS_IS_DELAY_AUDIO_RUN(delay_audio_run)); g_object_ref(G_OBJECT(delay_audio_run)); g_signal_emit(G_OBJECT(delay_audio_run), delay_audio_run_signals[SEQUENCER_ALLOC_OUTPUT], 0, run_order, delay, attack); g_object_unref(G_OBJECT(delay_audio_run)); } /** * ags_delay_audio_run_sequencer_alloc_input: * @delay_audio_run: the #AgsDelayAudioRun * @run_order: the nth run * @delay: the delay * @attack: the attack * * Emitted as sequencer allocs output. * * Since: 0.4 */ void ags_delay_audio_run_sequencer_alloc_input(AgsDelayAudioRun *delay_audio_run, guint run_order, gdouble delay, guint attack) { g_return_if_fail(AGS_IS_DELAY_AUDIO_RUN(delay_audio_run)); g_object_ref(G_OBJECT(delay_audio_run)); g_signal_emit(G_OBJECT(delay_audio_run), delay_audio_run_signals[SEQUENCER_ALLOC_INPUT], 0, run_order, delay, attack); g_object_unref(G_OBJECT(delay_audio_run)); } /** * ags_delay_audio_run_sequencer_count: * @delay_audio_run: the #AgsDelayAudioRun * @run_order: the nth run * @delay: the delay * @attack: the attack * * Emitted as sequencer counts. * * Since: 0.4 */ void ags_delay_audio_run_sequencer_count(AgsDelayAudioRun *delay_audio_run, guint run_order, gdouble delay, guint attack) { g_return_if_fail(AGS_IS_DELAY_AUDIO_RUN(delay_audio_run)); g_object_ref(G_OBJECT(delay_audio_run)); g_signal_emit(G_OBJECT(delay_audio_run), delay_audio_run_signals[SEQUENCER_COUNT], 0, run_order, delay, attack); g_object_unref(G_OBJECT(delay_audio_run)); } /** * ags_delay_audio_run_new: * * Creates an #AgsDelayAudioRun * * Returns: a new #AgsDelayAudioRun * * Since: 0.4 */ AgsDelayAudioRun* ags_delay_audio_run_new() { AgsDelayAudioRun *delay_audio_run; delay_audio_run = (AgsDelayAudioRun *) g_object_new(AGS_TYPE_DELAY_AUDIO_RUN, NULL); return(delay_audio_run); } gsequencer-0.6.37/src/ags/audio/recall/ags_play_channel_run.c0000644000175000017500000004203712626272146021132 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void ags_play_channel_run_class_init(AgsPlayChannelRunClass *play_channel_run); void ags_play_channel_run_connectable_interface_init(AgsConnectableInterface *connectable); void ags_play_channel_run_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable); void ags_play_channel_run_plugin_interface_init(AgsPluginInterface *plugin); void ags_play_channel_run_init(AgsPlayChannelRun *play_channel_run); void ags_play_channel_run_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_play_channel_run_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_play_channel_run_connect(AgsConnectable *connectable); void ags_play_channel_run_disconnect(AgsConnectable *connectable); void ags_play_channel_run_connect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_play_channel_run_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_play_channel_run_finalize(GObject *gobject); void ags_play_channel_run_run_init_inter(AgsRecall *recall); void ags_play_channel_run_run_pre(AgsRecall *recall); void ags_play_channel_run_run_post(AgsRecall *recall); void ags_play_channel_run_done(AgsRecall *recall); void ags_play_channel_run_remove(AgsRecall *recall); void ags_play_channel_run_cancel(AgsRecall *recall); void ags_play_channel_run_resolve_dependencies(AgsRecall *recall); AgsRecall* ags_play_channel_run_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter); void ags_play_channel_run_stream_audio_signal_done_callback(AgsRecall *recall, AgsPlayChannelRun *play_channel_run); void ags_play_channel_run_stop(AgsPlayChannelRun *play_channel_run); /** * SECTION:ags_play_channel_run * @short_description: plays channel * @title: AgsPlayChannel * @section_id: * @include: ags/audio/recall/ags_play_channel.h * * The #AgsPlayChannel class plays the channel. */ enum{ PROP_0, PROP_STREAM_CHANNEL_RUN, }; static gpointer ags_play_channel_run_parent_class = NULL; static AgsConnectableInterface *ags_play_channel_run_parent_connectable_interface; static AgsDynamicConnectableInterface *ags_play_channel_run_parent_dynamic_connectable_interface; static AgsPluginInterface *ags_play_channel_run_parent_plugin_interface; static const gchar *ags_play_channel_run_plugin_name = "ags-play\0"; extern pthread_mutex_t ags_application_mutex; GType ags_play_channel_run_get_type() { static GType ags_type_play_channel_run = 0; if(!ags_type_play_channel_run){ static const GTypeInfo ags_play_channel_run_info = { sizeof (AgsPlayChannelRunClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_play_channel_run_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsPlayChannelRun), 0, /* n_preallocs */ (GInstanceInitFunc) ags_play_channel_run_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_play_channel_run_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_dynamic_connectable_interface_info = { (GInterfaceInitFunc) ags_play_channel_run_dynamic_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_plugin_interface_info = { (GInterfaceInitFunc) ags_play_channel_run_plugin_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_play_channel_run = g_type_register_static(AGS_TYPE_RECALL_CHANNEL_RUN, "AgsPlayChannelRun\0", &ags_play_channel_run_info, 0); g_type_add_interface_static(ags_type_play_channel_run, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_play_channel_run, AGS_TYPE_DYNAMIC_CONNECTABLE, &ags_dynamic_connectable_interface_info); g_type_add_interface_static(ags_type_play_channel_run, AGS_TYPE_PLUGIN, &ags_plugin_interface_info); } return(ags_type_play_channel_run); } void ags_play_channel_run_class_init(AgsPlayChannelRunClass *play_channel_run) { GObjectClass *gobject; AgsRecallClass *recall; GParamSpec *param_spec; ags_play_channel_run_parent_class = g_type_class_peek_parent(play_channel_run); /* GObjectClass */ gobject = (GObjectClass *) play_channel_run; gobject->set_property = ags_play_channel_run_set_property; gobject->get_property = ags_play_channel_run_get_property; gobject->finalize = ags_play_channel_run_finalize; /* properties */ param_spec = g_param_spec_object("stream-channel-run\0", "assigned AgsStreamChannelRun\0", "the assigned AgsStreamChannelRun\0", AGS_TYPE_STREAM_CHANNEL_RUN, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_STREAM_CHANNEL_RUN, param_spec); /* AgsRecallClass */ recall = (AgsRecallClass *) play_channel_run; recall->run_init_inter = ags_play_channel_run_run_init_inter; recall->run_pre = ags_play_channel_run_run_pre; recall->run_post = ags_play_channel_run_run_post; recall->done = ags_play_channel_run_done; recall->cancel = ags_play_channel_run_cancel; recall->resolve_dependencies = ags_play_channel_run_resolve_dependencies; recall->duplicate = ags_play_channel_run_duplicate; } void ags_play_channel_run_connectable_interface_init(AgsConnectableInterface *connectable) { ags_play_channel_run_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_play_channel_run_connect; connectable->disconnect = ags_play_channel_run_disconnect; } void ags_play_channel_run_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable) { ags_play_channel_run_parent_dynamic_connectable_interface = g_type_interface_peek_parent(dynamic_connectable); dynamic_connectable->connect_dynamic = ags_play_channel_run_connect_dynamic; dynamic_connectable->disconnect_dynamic = ags_play_channel_run_disconnect_dynamic; } void ags_play_channel_run_plugin_interface_init(AgsPluginInterface *plugin) { ags_play_channel_run_parent_plugin_interface = g_type_interface_peek_parent(plugin); } void ags_play_channel_run_init(AgsPlayChannelRun *play_channel_run) { AGS_RECALL(play_channel_run)->name = "ags-play\0"; AGS_RECALL(play_channel_run)->version = AGS_EFFECTS_DEFAULT_VERSION; AGS_RECALL(play_channel_run)->build_id = AGS_BUILD_ID; AGS_RECALL(play_channel_run)->xml_type = "ags-play-channel-run\0"; AGS_RECALL(play_channel_run)->port = NULL; AGS_RECALL(play_channel_run)->flags |= (AGS_RECALL_INPUT_ORIENTATED); AGS_RECALL(play_channel_run)->child_type = AGS_TYPE_PLAY_RECYCLING; play_channel_run->flags = 0; play_channel_run->stream_channel_run = NULL; } void ags_play_channel_run_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsPlayChannelRun *play_channel_run; play_channel_run = AGS_PLAY_CHANNEL_RUN(gobject); switch(prop_id){ case PROP_STREAM_CHANNEL_RUN: { AgsStreamChannelRun *stream_channel_run; gboolean is_template; stream_channel_run = (AgsStreamChannelRun *) g_value_get_object(value); if(stream_channel_run == play_channel_run->stream_channel_run) return; if(stream_channel_run != NULL && (AGS_RECALL_TEMPLATE & (AGS_RECALL(stream_channel_run)->flags)) != 0){ is_template = TRUE; }else{ is_template = FALSE; } if(play_channel_run->stream_channel_run != NULL){ if(is_template){ ags_recall_remove_dependency(AGS_RECALL(play_channel_run), (AgsRecall *) play_channel_run->stream_channel_run); } g_object_unref(G_OBJECT(play_channel_run->stream_channel_run)); } if(stream_channel_run != NULL){ g_object_ref(G_OBJECT(stream_channel_run)); if(is_template){ ags_recall_add_dependency(AGS_RECALL(play_channel_run), ags_recall_dependency_new((GObject *) stream_channel_run)); } } play_channel_run->stream_channel_run = stream_channel_run; } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_play_channel_run_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsPlayChannelRun *play_channel_run; play_channel_run = AGS_PLAY_CHANNEL_RUN(gobject); switch(prop_id){ case PROP_STREAM_CHANNEL_RUN: { g_value_set_object(value, G_OBJECT(play_channel_run->stream_channel_run)); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_play_channel_run_finalize(GObject *gobject) { AgsPlayChannelRun *play_channel_run; play_channel_run = AGS_PLAY_CHANNEL_RUN(gobject); if(play_channel_run->stream_channel_run != NULL){ g_object_unref(G_OBJECT(play_channel_run->stream_channel_run)); } /* call parent */ G_OBJECT_CLASS(ags_play_channel_run_parent_class)->finalize(gobject); } void ags_play_channel_run_connect(AgsConnectable *connectable) { AgsPlayChannelRun *play_channel_run; ags_play_channel_run_parent_connectable_interface->connect(connectable); /* empty */ } void ags_play_channel_run_disconnect(AgsConnectable *connectable) { ags_play_channel_run_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_play_channel_run_connect_dynamic(AgsDynamicConnectable *dynamic_connectable) { /* call parent */ ags_play_channel_run_parent_dynamic_connectable_interface->connect_dynamic(dynamic_connectable); } void ags_play_channel_run_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable) { /* call parent */ ags_play_channel_run_parent_dynamic_connectable_interface->disconnect_dynamic(dynamic_connectable); } void ags_play_channel_run_run_init_inter(AgsRecall *recall) { AGS_PLAY_CHANNEL_RUN(recall)->flags |= AGS_PLAY_CHANNEL_RUN_INITIAL_RUN; /* call parent */ AGS_RECALL_CLASS(ags_play_channel_run_parent_class)->run_init_inter(recall); } void ags_play_channel_run_run_pre(AgsRecall *recall) { /* empty */ /* call parent */ AGS_RECALL_CLASS(ags_play_channel_run_parent_class)->run_pre(recall); } void ags_play_channel_run_run_post(AgsRecall *recall) { AgsStreamChannelRun *stream_channel_run; AgsChannel *source; GList *list; GList *recall_recycling_list, *recall_audio_signal_list; gboolean found; AGS_RECALL_CLASS(ags_play_channel_run_parent_class)->run_post(recall); if((AGS_PLAY_CHANNEL_RUN_INITIAL_RUN & (AGS_PLAY_CHANNEL_RUN(recall)->flags)) == 0){ return; } AGS_PLAY_CHANNEL_RUN(recall)->flags &= (~AGS_PLAY_CHANNEL_RUN_INITIAL_RUN); /* connect done */ source = AGS_RECALL_CHANNEL_RUN(recall)->source; found = FALSE; list = ags_recall_find_type_with_recycling_container(source->play, AGS_TYPE_STREAM_CHANNEL_RUN, (GObject *) recall->recall_id->recycling_container); stream_channel_run = AGS_STREAM_CHANNEL_RUN(list->data); recall_recycling_list = AGS_RECALL(stream_channel_run)->children; while(recall_recycling_list != NULL){ recall_audio_signal_list = AGS_RECALL(recall_recycling_list->data)->children; while(recall_audio_signal_list != NULL){ found = TRUE; g_signal_connect_after(G_OBJECT(recall_audio_signal_list->data), "done\0", G_CALLBACK(ags_play_channel_run_stream_audio_signal_done_callback), recall); recall_audio_signal_list = recall_audio_signal_list->next; } recall_recycling_list = recall_recycling_list->next; } if(!found){ ags_play_channel_run_stop((AgsPlayChannelRun *) recall); } } void ags_play_channel_run_done(AgsRecall *recall) { AGS_RECALL_CLASS(ags_play_channel_run_parent_class)->done(recall); /* empty */ } void ags_play_channel_run_cancel(AgsRecall *recall) { AGS_RECALL_CLASS(ags_play_channel_run_parent_class)->cancel(recall); /* empty */ } void ags_play_channel_run_resolve_dependencies(AgsRecall *recall) { AgsRecall *template; AgsPlayChannelRun *play_channel_run; AgsRecallDependency *recall_dependency; AgsStreamChannelRun *stream_channel_run; GList *list; AgsRecallID *recall_id; guint i, i_stop; play_channel_run = AGS_PLAY_CHANNEL_RUN(recall); template = AGS_RECALL(ags_recall_find_template(AGS_RECALL_CONTAINER(recall->container)->recall_channel_run)->data); list = template->dependencies; recall_id = recall->recall_id; stream_channel_run = NULL; i_stop = 1; for(i = 0; i < i_stop && list != NULL;){ recall_dependency = AGS_RECALL_DEPENDENCY(list->data); if(AGS_IS_STREAM_CHANNEL_RUN(recall_dependency->dependency)){ stream_channel_run = (AgsStreamChannelRun *) ags_recall_dependency_resolve(recall_dependency, recall_id); i++; } list = list->next; } g_object_set(G_OBJECT(recall), "stream_channel_run\0", stream_channel_run, NULL); } AgsRecall* ags_play_channel_run_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter) { AgsPlayChannelRun *play_channel_run, *copy; play_channel_run = (AgsPlayChannelRun *) recall; copy = (AgsPlayChannelRun *) AGS_RECALL_CLASS(ags_play_channel_run_parent_class)->duplicate(recall, recall_id, n_params, parameter); return((AgsRecall *) copy); } void ags_play_channel_run_stream_audio_signal_done_callback(AgsRecall *recall, AgsPlayChannelRun *play_channel_run) { ags_play_channel_run_stop(play_channel_run); } void ags_play_channel_run_stop(AgsPlayChannelRun *play_channel_run) { AgsDevout *devout; AgsChannel *channel; AgsCancelChannel *cancel_channel; AgsMutexManager *mutex_manager; AgsThread *main_loop; AgsThread *async_queue; AgsMain *ags_main; pthread_mutex_t *devout_mutex; channel = AGS_RECALL_CHANNEL_RUN(play_channel_run)->source; devout = AGS_AUDIO(channel->audio)->devout; /* lookup devout mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); devout_mutex = ags_mutex_manager_lookup(mutex_manager, devout); pthread_mutex_unlock(&(ags_application_mutex)); /* get ags_main */ pthread_mutex_lock(devout_mutex); ags_main = devout->ags_main; pthread_mutex_unlock(devout_mutex); /* get main loop */ pthread_mutex_lock(&(ags_application_mutex)); main_loop = ags_main->main_loop; pthread_mutex_unlock(&(ags_application_mutex)); /* get async queue */ async_queue = (AgsThread *) ags_thread_find_type(main_loop, AGS_TYPE_TASK_THREAD); /* create append task */ cancel_channel = ags_cancel_channel_new(channel, AGS_DEVOUT_PLAY(channel->devout_play)->recall_id[0], AGS_DEVOUT_PLAY(channel->devout_play)); /* append AgsCancelAudio */ ags_task_thread_append_task((AgsTaskThread *) async_queue, (AgsTask *) cancel_channel); } /** * ags_play_channel_run_new: * @stream_channel_run: the #AgsStreamChannelRun as dependency * * Creates an #AgsPlayChannelRun * * Returns: a new #AgsPlayChannelRun * * Since: 0.4 */ AgsPlayChannelRun* ags_play_channel_run_new(AgsStreamChannelRun *stream_channel_run) { AgsPlayChannelRun *play_channel_run; play_channel_run = (AgsPlayChannelRun *) g_object_new(AGS_TYPE_PLAY_CHANNEL_RUN, "stream-channel-run\0", stream_channel_run, NULL); return(play_channel_run); } gsequencer-0.6.37/src/ags/audio/recall/ags_stream.h0000644000175000017500000000312412612232540017070 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_STREAM_H__ #define __AGS_STREAM_H__ #include #include #include #include #include #define AGS_TYPE_STREAM (ags_stream_get_type()) #define AGS_STREAM(obj) (G_TYPE_CHECK_INSTANCE_CAST(obj, AGS_TYPE_STREAM, AgsStream)) #define AGS_STREAM_CLASS(class) (G_TYPE_CHECK_CLASS_CAST(class, AGS_TYPE_STREAM, AgsStream)) typedef struct _AgsStream AgsStream; typedef struct _AgsStreamClass AgsStreamClass; struct _AgsStream{ AgsRecall recall; AgsAudioSignal *audio_signal; }; struct _AgsStreamClass{ AgsRecallClass recall; }; GType ags_stream_get_type(); void ags_stream(AgsRecall *recall, AgsRecallID *recall_id, gpointer data); AgsStream* ags_stream_new(); #endif /*__AGS_STREAM_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_play_recycling.h0000644000175000017500000000402012626272146020610 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_PLAY_RECYCLING_H__ #define __AGS_PLAY_RECYCLING_H__ #include #include #include #define AGS_TYPE_PLAY_RECYCLING (ags_play_recycling_get_type()) #define AGS_PLAY_RECYCLING(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_PLAY_RECYCLING, AgsPlayRecycling)) #define AGS_PLAY_RECYCLING_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_PLAY_RECYCLING, AgsPlayRecyclingClass)) #define AGS_IS_PLAY_RECYCLING(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_PLAY_RECYCLING)) #define AGS_IS_PLAY_RECYCLING_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_PLAY_RECYCLING)) #define AGS_PLAY_RECYCLING_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_PLAY_RECYCLING, AgsPlayRecyclingClass)) typedef struct _AgsPlayRecycling AgsPlayRecycling; typedef struct _AgsPlayRecyclingClass AgsPlayRecyclingClass; struct _AgsPlayRecycling { AgsRecallRecycling recall_recycling; }; struct _AgsPlayRecyclingClass { AgsRecallRecyclingClass recall_recycling; }; GType ags_play_recycling_get_type(); AgsPlayRecycling* ags_play_recycling_new(AgsRecycling *source, AgsDevout *devout, guint audio_channel); #endif /*__AGS_PLAY_RECYCLING_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_peak_audio_signal.c0000644000175000017500000001770512626272146021253 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include void ags_peak_audio_signal_class_init(AgsPeakAudioSignalClass *peak_audio_signal); void ags_peak_audio_signal_connectable_interface_init(AgsConnectableInterface *connectable); void ags_peak_audio_signal_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable); void ags_peak_audio_signal_init(AgsPeakAudioSignal *peak_audio_signal); void ags_peak_audio_signal_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_peak_audio_signal_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_peak_audio_signal_connect(AgsConnectable *connectable); void ags_peak_audio_signal_disconnect(AgsConnectable *connectable); void ags_peak_audio_signal_connect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_peak_audio_signal_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_peak_audio_signal_finalize(GObject *gobject); void ags_peak_audio_signal_run_inter(AgsRecall *recall); AgsRecall* ags_peak_audio_signal_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter); /** * SECTION:ags_peak_audio_signal * @short_description: peaks audio signal * @title: AgsPeakAudioSignal * @section_id: * @include: ags/audio/recall/ags_peak_audio_signal.h * * The #AgsPeakAudioSignal class peaks the audio signal. */ enum{ PROP_0, PROP_PEAK, }; static gpointer ags_peak_audio_signal_parent_class = NULL; static AgsConnectableInterface *ags_peak_audio_signal_parent_connectable_interface; static AgsDynamicConnectableInterface *ags_peak_audio_signal_parent_dynamic_connectable_interface; GType ags_peak_audio_signal_get_type() { static GType ags_type_peak_audio_signal = 0; if(!ags_type_peak_audio_signal){ static const GTypeInfo ags_peak_audio_signal_info = { sizeof (AgsPeakAudioSignalClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_peak_audio_signal_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsPeakAudioSignal), 0, /* n_preallocs */ (GInstanceInitFunc) ags_peak_audio_signal_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_peak_audio_signal_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_dynamic_connectable_interface_info = { (GInterfaceInitFunc) ags_peak_audio_signal_dynamic_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_peak_audio_signal = g_type_register_static(AGS_TYPE_RECALL_AUDIO_SIGNAL, "AgsPeakAudioSignal\0", &ags_peak_audio_signal_info, 0); g_type_add_interface_static(ags_type_peak_audio_signal, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_peak_audio_signal, AGS_TYPE_DYNAMIC_CONNECTABLE, &ags_dynamic_connectable_interface_info); } return (ags_type_peak_audio_signal); } void ags_peak_audio_signal_class_init(AgsPeakAudioSignalClass *peak_audio_signal) { GObjectClass *gobject; AgsRecallClass *recall; GParamSpec *param_spec; ags_peak_audio_signal_parent_class = g_type_class_peek_parent(peak_audio_signal); /* GObjectClass */ gobject = (GObjectClass *) peak_audio_signal; gobject->finalize = ags_peak_audio_signal_finalize; /* AgsRecallClass */ recall = (AgsRecallClass *) peak_audio_signal; recall->run_inter = ags_peak_audio_signal_run_inter; } void ags_peak_audio_signal_connectable_interface_init(AgsConnectableInterface *connectable) { ags_peak_audio_signal_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_peak_audio_signal_connect; connectable->disconnect = ags_peak_audio_signal_disconnect; } void ags_peak_audio_signal_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable) { ags_peak_audio_signal_parent_dynamic_connectable_interface = g_type_interface_peek_parent(dynamic_connectable); dynamic_connectable->connect_dynamic = ags_peak_audio_signal_connect_dynamic; dynamic_connectable->disconnect_dynamic = ags_peak_audio_signal_disconnect_dynamic; } void ags_peak_audio_signal_init(AgsPeakAudioSignal *peak_audio_signal) { AGS_RECALL(peak_audio_signal)->name = "ags-peak\0"; AGS_RECALL(peak_audio_signal)->version = AGS_EFFECTS_DEFAULT_VERSION; AGS_RECALL(peak_audio_signal)->build_id = AGS_BUILD_ID; AGS_RECALL(peak_audio_signal)->xml_type = "ags-peak-audio-signal\0"; AGS_RECALL(peak_audio_signal)->port = NULL; } void ags_peak_audio_signal_finalize(GObject *gobject) { /* call parent */ G_OBJECT_CLASS(ags_peak_audio_signal_parent_class)->finalize(gobject); /* empty */ } void ags_peak_audio_signal_connect(AgsConnectable *connectable) { if((AGS_RECALL_CONNECTED & (AGS_RECALL(connectable)->flags)) != 0){ return; } /* call parent */ ags_peak_audio_signal_parent_connectable_interface->connect(connectable); /* empty */ } void ags_peak_audio_signal_disconnect(AgsConnectable *connectable) { /* call parent */ ags_peak_audio_signal_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_peak_audio_signal_connect_dynamic(AgsDynamicConnectable *dynamic_connectable) { if((AGS_RECALL_DYNAMIC_CONNECTED & (AGS_RECALL(dynamic_connectable)->flags)) != 0){ return; } /* call parent */ ags_peak_audio_signal_parent_dynamic_connectable_interface->connect_dynamic(dynamic_connectable); /* empty */ } void ags_peak_audio_signal_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable) { /* call parent */ ags_peak_audio_signal_parent_dynamic_connectable_interface->disconnect_dynamic(dynamic_connectable); /* empty */ } void ags_peak_audio_signal_run_inter(AgsRecall *recall) { AgsPeakAudioSignal *peak_audio_signal; AGS_RECALL_CLASS(ags_peak_audio_signal_parent_class)->run_inter(recall); peak_audio_signal = AGS_PEAK_AUDIO_SIGNAL(recall); if(AGS_RECALL_AUDIO_SIGNAL(recall)->source->stream_current != NULL){ AgsPeakChannel *peak_channel; signed short *buffer; gdouble peak; guint buffer_size; guint i; GValue value = {0,}; peak_channel = AGS_PEAK_CHANNEL(AGS_RECALL_CHANNEL_RUN(recall->parent->parent)->recall_channel); ags_peak_channel_retrieve_peak(peak_channel, TRUE); }else{ ags_recall_done(recall); } } /** * ags_peak_audio_signal_new: * @audio_signal: an #AgsAudioSignal * * Creates an #AgsPeakAudioSignal * * Returns: a new #AgsPeakAudioSignal * * Since: 0.4 */ AgsPeakAudioSignal* ags_peak_audio_signal_new(AgsAudioSignal *audio_signal) { AgsPeakAudioSignal *peak_audio_signal; peak_audio_signal = (AgsPeakAudioSignal *) g_object_new(AGS_TYPE_PEAK_AUDIO_SIGNAL, NULL); return(peak_audio_signal); } gsequencer-0.6.37/src/ags/audio/recall/ags_peak_channel_run.c0000644000175000017500000001704312626272146021104 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include void ags_peak_channel_run_class_init(AgsPeakChannelRunClass *peak_channel_run); void ags_peak_channel_run_connectable_interface_init(AgsConnectableInterface *connectable); void ags_peak_channel_run_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable); void ags_peak_channel_run_init(AgsPeakChannelRun *peak_channel_run); void ags_peak_channel_run_connect(AgsConnectable *connectable); void ags_peak_channel_run_disconnect(AgsConnectable *connectable); void ags_peak_channel_run_connect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_peak_channel_run_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_peak_channel_run_finalize(GObject *gobject); AgsRecall* ags_peak_channel_run_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter); /** * SECTION:ags_peak_channel_run * @short_description: peak * @title: AgsPeakChannelRun * @section_id: * @include: ags/audio/recall/ags_peak_channel_run.h * * The #AgsPeakChannelRun class peaks the channel. */ static gpointer ags_peak_channel_run_parent_class = NULL; static AgsConnectableInterface *ags_peak_channel_run_parent_connectable_interface; static AgsDynamicConnectableInterface *ags_peak_channel_run_parent_dynamic_connectable_interface; GType ags_peak_channel_run_get_type() { static GType ags_type_peak_channel_run = 0; if(!ags_type_peak_channel_run){ static const GTypeInfo ags_peak_channel_run_info = { sizeof (AgsPeakChannelRunClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_peak_channel_run_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsPeakChannelRun), 0, /* n_preallocs */ (GInstanceInitFunc) ags_peak_channel_run_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_peak_channel_run_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_dynamic_connectable_interface_info = { (GInterfaceInitFunc) ags_peak_channel_run_dynamic_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_peak_channel_run = g_type_register_static(AGS_TYPE_RECALL_CHANNEL_RUN, "AgsPeakChannelRun\0", &ags_peak_channel_run_info, 0); g_type_add_interface_static(ags_type_peak_channel_run, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_peak_channel_run, AGS_TYPE_DYNAMIC_CONNECTABLE, &ags_dynamic_connectable_interface_info); } return (ags_type_peak_channel_run); } void ags_peak_channel_run_class_init(AgsPeakChannelRunClass *peak_channel_run) { GObjectClass *gobject; AgsRecallClass *recall; ags_peak_channel_run_parent_class = g_type_class_peek_parent(peak_channel_run); /* GObjectClass */ gobject = (GObjectClass *) peak_channel_run; gobject->finalize = ags_peak_channel_run_finalize; /* AgsRecallClass */ recall = (AgsRecallClass *) peak_channel_run; recall->duplicate = ags_peak_channel_run_duplicate; } void ags_peak_channel_run_connectable_interface_init(AgsConnectableInterface *connectable) { ags_peak_channel_run_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_peak_channel_run_connect; connectable->disconnect = ags_peak_channel_run_disconnect; } void ags_peak_channel_run_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable) { ags_peak_channel_run_parent_dynamic_connectable_interface = g_type_interface_peek_parent(dynamic_connectable); dynamic_connectable->connect_dynamic = ags_peak_channel_run_connect_dynamic; dynamic_connectable->disconnect_dynamic = ags_peak_channel_run_disconnect_dynamic; } void ags_peak_channel_run_init(AgsPeakChannelRun *peak_channel_run) { AGS_RECALL(peak_channel_run)->name = "ags-peak\0"; AGS_RECALL(peak_channel_run)->version = AGS_EFFECTS_DEFAULT_VERSION; AGS_RECALL(peak_channel_run)->build_id = AGS_BUILD_ID; AGS_RECALL(peak_channel_run)->xml_type = "ags-peak-channel-run\0"; AGS_RECALL(peak_channel_run)->port = NULL; AGS_RECALL(peak_channel_run)->flags |= AGS_RECALL_INPUT_ORIENTATED; AGS_RECALL(peak_channel_run)->child_type = AGS_TYPE_PEAK_RECYCLING; } void ags_peak_channel_run_finalize(GObject *gobject) { AgsPeakChannelRun *peak_channel_run; peak_channel_run = AGS_PEAK_CHANNEL_RUN(gobject); /* call parent */ G_OBJECT_CLASS(ags_peak_channel_run_parent_class)->finalize(gobject); } void ags_peak_channel_run_connect(AgsConnectable *connectable) { AgsPeakChannelRun *peak_channel_run; ags_peak_channel_run_parent_connectable_interface->connect(connectable); peak_channel_run = AGS_PEAK_CHANNEL_RUN(connectable); } void ags_peak_channel_run_disconnect(AgsConnectable *connectable) { ags_peak_channel_run_parent_connectable_interface->disconnect(connectable); } void ags_peak_channel_run_connect_dynamic(AgsDynamicConnectable *dynamic_connectable) { ags_peak_channel_run_parent_dynamic_connectable_interface->connect_dynamic(dynamic_connectable); } void ags_peak_channel_run_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable) { ags_peak_channel_run_parent_dynamic_connectable_interface->disconnect_dynamic(dynamic_connectable); } AgsRecall* ags_peak_channel_run_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter) { AgsPeakChannelRun *peak_channel_run, *copy; peak_channel_run = (AgsPeakChannelRun *) recall; parameter = ags_parameter_grow(G_OBJECT_TYPE(recall), parameter, n_params, NULL); copy = (AgsPeakChannelRun *) AGS_RECALL_CLASS(ags_peak_channel_run_parent_class)->duplicate(recall, recall_id, n_params, parameter); return((AgsRecall *) copy); } /** * ags_peak_channel_run_new: * @channel: the #AgsChannel as source * * Creates an #AgsPeakChannelRun * * Returns: a new #AgsPeakChannelRun * * Since: 0.4 */ AgsPeakChannelRun* ags_peak_channel_run_new(AgsChannel *channel) { AgsPeakChannelRun *peak_channel_run; peak_channel_run = (AgsPeakChannelRun *) g_object_new(AGS_TYPE_PEAK_CHANNEL_RUN, "source\0", channel, NULL); return(peak_channel_run); } gsequencer-0.6.37/src/ags/audio/recall/ags_delay_audio_run.h0000644000175000017500000000707512612232540020751 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_DELAY_AUDIO_RUN_H__ #define __AGS_DELAY_AUDIO_RUN_H__ #include #include #include #define AGS_TYPE_DELAY_AUDIO_RUN (ags_delay_audio_run_get_type()) #define AGS_DELAY_AUDIO_RUN(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_DELAY_AUDIO_RUN, AgsDelayAudioRun)) #define AGS_DELAY_AUDIO_RUN_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_DELAY_AUDIO_RUN, AgsDelayAudioRun)) #define AGS_IS_DELAY_AUDIO_RUN(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_DELAY_AUDIO_RUN)) #define AGS_IS_DELAY_AUDIO_RUN_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_DELAY_AUDIO_RUN)) #define AGS_DELAY_AUDIO_RUN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_DELAY_AUDIO_RUN, AgsDelayAudioRunClass)) typedef struct _AgsDelayAudioRun AgsDelayAudioRun; typedef struct _AgsDelayAudioRunClass AgsDelayAudioRunClass; struct _AgsDelayAudioRun { AgsRecallAudioRun recall_audio_run; guint dependency_ref; guint hide_ref; guint hide_ref_counter; guint notation_counter; guint sequencer_counter; }; struct _AgsDelayAudioRunClass { AgsRecallAudioRunClass recall_audio_run; void (*notation_alloc_output)(AgsDelayAudioRun *delay_audio_run, guint run_order, gdouble delay, guint attack); void (*notation_alloc_input)(AgsDelayAudioRun *delay_audio_run, guint run_order, gdouble delay, guint attack); void (*notation_count)(AgsDelayAudioRun *delay_audio_run, guint run_order, gdouble delay, guint attack); void (*sequencer_alloc_output)(AgsDelayAudioRun *delay_audio_run, guint run_order, gdouble delay, guint attack); void (*sequencer_alloc_input)(AgsDelayAudioRun *delay_audio_run, guint run_order, gdouble delay, guint attack); void (*sequencer_count)(AgsDelayAudioRun *delay_audio_run, guint run_order, gdouble delay, guint attack); }; GType ags_delay_audio_run_get_type(); void ags_delay_audio_run_notation_alloc_output(AgsDelayAudioRun *delay_audio_run, guint run_order, gdouble delay, guint attack); void ags_delay_audio_run_notation_alloc_input(AgsDelayAudioRun *delay_audio_run, guint run_order, gdouble delay, guint attack); void ags_delay_audio_run_notation_count(AgsDelayAudioRun *delay_audio_run, guint run_order, gdouble delay, guint attack); void ags_delay_audio_run_sequencer_alloc_output(AgsDelayAudioRun *delay_audio_run, guint run_order, gdouble delay, guint attack); void ags_delay_audio_run_sequencer_alloc_input(AgsDelayAudioRun *delay_audio_run, guint run_order, gdouble delay, guint attack); void ags_delay_audio_run_sequencer_count(AgsDelayAudioRun *delay_audio_run, guint run_order, gdouble delay, guint attack); AgsDelayAudioRun* ags_delay_audio_run_new(); #endif /*__AGS_DELAY_AUDIO_RUN_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_play_channel.h0000644000175000017500000000405012626272146020244 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_PLAY_CHANNEL_H__ #define __AGS_PLAY_CHANNEL_H__ #include #include #include #include #include #define AGS_TYPE_PLAY_CHANNEL (ags_play_channel_get_type()) #define AGS_PLAY_CHANNEL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_PLAY_CHANNEL, AgsPlayChannel)) #define AGS_PLAY_CHANNEL_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_PLAY_CHANNEL, AgsPlayChannelClass)) #define AGS_IS_PLAY_CHANNEL(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_PLAY_CHANNEL)) #define AGS_IS_PLAY_CHANNEL_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_PLAY_CHANNEL)) #define AGS_PLAY_CHANNEL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_PLAY_CHANNEL, AgsPlayChannelClass)) typedef struct _AgsPlayChannel AgsPlayChannel; typedef struct _AgsPlayChannelClass AgsPlayChannelClass; struct _AgsPlayChannel { AgsRecallChannel recall_channel; AgsPort *audio_channel; AgsPort *muted; }; struct _AgsPlayChannelClass { AgsRecallChannelClass recall_channel; }; GType ags_play_channel_get_type(); AgsPlayChannel* ags_play_channel_new(AgsDevout *devout, guint audio_channel); #endif /*__AGS_PLAY_CHANNEL_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_loop_channel_run.h0000644000175000017500000000453512612232540021131 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_LOOP_CHANNEL_RUN_H__ #define __AGS_LOOP_CHANNEL_RUN_H__ #include #include #include #include #include #include #define AGS_TYPE_LOOP_CHANNEL_RUN (ags_loop_channel_run_get_type()) #define AGS_LOOP_CHANNEL_RUN(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_LOOP_CHANNEL_RUN, AgsLoopChannelRun)) #define AGS_LOOP_CHANNEL_RUN_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_LOOP_CHANNEL_RUN, AgsLoopChannelRunClass)) #define AGS_IS_LOOP_CHANNEL_RUN(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_LOOP_CHANNEL_RUN)) #define AGS_IS_LOOP_CHANNEL_RUN_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_LOOP_CHANNEL_RUN)) #define AGS_LOOP_CHANNEL_RUN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_LOOP_CHANNEL_RUN, AgsLoopChannelRunClass)) typedef struct _AgsLoopChannelRun AgsLoopChannelRun; typedef struct _AgsLoopChannelRunClass AgsLoopChannelRunClass; struct _AgsLoopChannelRun { AgsRecallChannelRun recall_channel_run; AgsCountBeatsAudioRun *count_beats_audio_run; gulong start_handler; gulong loop_handler; gulong stop_handler; }; struct _AgsLoopChannelRunClass { AgsRecallChannelRunClass recall_channel_run; }; GType ags_loop_channel_run_get_type(); AgsLoopChannelRun* ags_loop_channel_run_new(AgsChannel *channel, AgsCountBeatsAudioRun *count_beats_audio_run, gboolean is_template); #endif /*__AGS_LOOP_CHANNEL_RUN_H__*/ gsequencer-0.6.37/src/ags/audio/recall/ags_envelope_channel_run.c0000644000175000017500000001612612626272146022002 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include void ags_envelope_channel_run_class_init(AgsEnvelopeChannelRunClass *envelope_channel_run); void ags_envelope_channel_run_connectable_interface_init(AgsConnectableInterface *connectable); void ags_envelope_channel_run_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable); void ags_envelope_channel_run_init(AgsEnvelopeChannelRun *envelope_channel_run); void ags_envelope_channel_run_connect(AgsConnectable *connectable); void ags_envelope_channel_run_disconnect(AgsConnectable *connectable); void ags_envelope_channel_run_connect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_envelope_channel_run_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable); void ags_envelope_channel_run_finalize(GObject *gobject); AgsRecall* ags_envelope_channel_run_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter); static gpointer ags_envelope_channel_run_parent_class = NULL; static AgsConnectableInterface *ags_envelope_channel_run_parent_connectable_interface; static AgsDynamicConnectableInterface *ags_envelope_channel_run_parent_dynamic_connectable_interface; GType ags_envelope_channel_run_get_type() { static GType ags_type_envelope_channel_run = 0; if(!ags_type_envelope_channel_run){ static const GTypeInfo ags_envelope_channel_run_info = { sizeof (AgsEnvelopeChannelRunClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_envelope_channel_run_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsEnvelopeChannelRun), 0, /* n_preallocs */ (GInstanceInitFunc) ags_envelope_channel_run_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_envelope_channel_run_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_dynamic_connectable_interface_info = { (GInterfaceInitFunc) ags_envelope_channel_run_dynamic_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_envelope_channel_run = g_type_register_static(AGS_TYPE_RECALL_CHANNEL_RUN, "AgsEnvelopeChannelRun\0", &ags_envelope_channel_run_info, 0); g_type_add_interface_static(ags_type_envelope_channel_run, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_envelope_channel_run, AGS_TYPE_DYNAMIC_CONNECTABLE, &ags_dynamic_connectable_interface_info); } return(ags_type_envelope_channel_run); } void ags_envelope_channel_run_class_init(AgsEnvelopeChannelRunClass *envelope_channel_run) { GObjectClass *gobject; AgsRecallClass *recall; GParamSpec *param_spec; ags_envelope_channel_run_parent_class = g_type_class_peek_parent(envelope_channel_run); /* GObjectClass */ gobject = (GObjectClass *) envelope_channel_run; gobject->finalize = ags_envelope_channel_run_finalize; /* AgsRecallClass */ recall = (AgsRecallClass *) envelope_channel_run; } void ags_envelope_channel_run_connectable_interface_init(AgsConnectableInterface *connectable) { ags_envelope_channel_run_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_envelope_channel_run_connect; connectable->disconnect = ags_envelope_channel_run_disconnect; } void ags_envelope_channel_run_dynamic_connectable_interface_init(AgsDynamicConnectableInterface *dynamic_connectable) { ags_envelope_channel_run_parent_dynamic_connectable_interface = g_type_interface_peek_parent(dynamic_connectable); dynamic_connectable->connect_dynamic = ags_envelope_channel_run_connect_dynamic; dynamic_connectable->disconnect_dynamic = ags_envelope_channel_run_disconnect_dynamic; } void ags_envelope_channel_run_init(AgsEnvelopeChannelRun *envelope_channel_run) { AGS_RECALL(envelope_channel_run)->name = "ags-envelope\0"; AGS_RECALL(envelope_channel_run)->version = AGS_EFFECTS_DEFAULT_VERSION; AGS_RECALL(envelope_channel_run)->build_id = AGS_BUILD_ID; AGS_RECALL(envelope_channel_run)->xml_type = "ags-envelope-channel-run\0"; AGS_RECALL(envelope_channel_run)->port = NULL; AGS_RECALL(envelope_channel_run)->flags |= (AGS_RECALL_OUTPUT_ORIENTATED | AGS_RECALL_INPUT_ORIENTATED); AGS_RECALL(envelope_channel_run)->child_type = AGS_TYPE_ENVELOPE_RECYCLING; } void ags_envelope_channel_run_connect(AgsConnectable *connectable) { ags_envelope_channel_run_parent_connectable_interface->connect(connectable); /* empty */ } void ags_envelope_channel_run_disconnect(AgsConnectable *connectable) { ags_envelope_channel_run_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_envelope_channel_run_connect_dynamic(AgsDynamicConnectable *dynamic_connectable) { ags_envelope_channel_run_parent_dynamic_connectable_interface->connect_dynamic(dynamic_connectable); /* empty */ } void ags_envelope_channel_run_disconnect_dynamic(AgsDynamicConnectable *dynamic_connectable) { ags_envelope_channel_run_parent_dynamic_connectable_interface->disconnect_dynamic(dynamic_connectable); /* empty */ } void ags_envelope_channel_run_finalize(GObject *gobject) { /* empty */ /* call parent */ G_OBJECT_CLASS(ags_envelope_channel_run_parent_class)->finalize(gobject); } AgsRecall* ags_envelope_channel_run_duplicate(AgsRecall *recall, AgsRecallID *recall_id, guint *n_params, GParameter *parameter) { AgsEnvelopeChannelRun *envelope; envelope = (AgsEnvelopeChannelRun *) AGS_RECALL_CLASS(ags_envelope_channel_run_parent_class)->duplicate(recall, recall_id, n_params, parameter); return((AgsRecall *) envelope); } AgsEnvelopeChannelRun* ags_envelope_channel_run_new(AgsChannel *source) { AgsEnvelopeChannelRun *envelope_channel_run; envelope_channel_run = (AgsEnvelopeChannelRun *) g_object_new(AGS_TYPE_ENVELOPE_CHANNEL_RUN, "source\0", source, NULL); return(envelope_channel_run); } gsequencer-0.6.37/src/ags/plugin/0000755000175000017500000000000012633241335013612 500000000000000gsequencer-0.6.37/src/ags/plugin/ags_plugin_factory.h0000644000175000017500000000622212621463700017563 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_PLUGIN_FACTORY_H__ #define __AGS_PLUGIN_FACTORY_H__ #include #include #include #define AGS_TYPE_PLUGIN_FACTORY (ags_plugin_factory_get_type()) #define AGS_PLUGIN_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_PLUGIN_FACTORY, AgsPluginFactory)) #define AGS_PLUGIN_FACTORY_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_PLUGIN_FACTORY, AgsPluginFactoryClass)) #define AGS_IS_PLUGIN_FACTORY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_PLUGIN_FACTORY)) #define AGS_IS_PLUGIN_FACTORY_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_PLUGIN_FACTORY)) #define AGS_PLUGIN_FACTORY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_PLUGIN_FACTORY, AgsPluginFactoryClass)) typedef struct _AgsPluginFactory AgsPluginFactory; typedef struct _AgsPluginFactoryClass AgsPluginFactoryClass; typedef struct _AgsPluginMetadata AgsPluginMetadata; struct _AgsPluginFactory { GObject object; GList *plugin; }; struct _AgsPluginFactoryClass { GObjectClass object; void (*add)(AgsPluginFactory *plugin_factory, GType plugin_type, gchar *plugin_name, gchar *version, gchar *build_id, gchar *xml_type, GParameter *control, guint control_count); AgsPlugin* (*create)(AgsPluginFactory *plugin_factory, gchar *plugin_name, gchar *version, gchar *build_id); }; struct _AgsPluginMetadata { GType plugin_type; gchar *plugin_name; gchar *version; gchar *build_id; gchar *xml_type; GParameter *control; guint control_count; }; GType ags_plugin_factory_get_type(void); void ags_plugin_factory_read_file(AgsPluginFactory *plugin_factory, gchar *path); GList* ags_plugin_factory_list_by_name(AgsPluginFactory *plugin_factory, gchar *plugin_name); void ags_plugin_factory_add(AgsPluginFactory *plugin_factory, GType plugin_type, gchar *plugin_name, gchar *version, gchar *build_id, gchar *xml_type, GParameter *control, guint control_count); AgsPlugin* ags_plugin_factory_create(AgsPluginFactory *plugin_factory, gchar *plugin_name, gchar *version, gchar *build_id); /* */ AgsPluginFactory* ags_plugin_factory_get_instance(); AgsPluginFactory* ags_plugin_factory_new_from_file(gchar *path); AgsPluginFactory* ags_plugin_factory_new(); #endif /*__AGS_PLUGIN_FACTORY_H__*/ gsequencer-0.6.37/src/ags/plugin/ags_plugin_stock.h0000644000175000017500000000167612621463700017247 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_PLUGIN_STOCK_H__ #define __AGS_PLUGIN_STOCK_H__ #include #include #define AGS_PLUGIN_NAME_VOLUME "ags-volume\0" #endif /*__AGS_PLUGIN_STOCK_H__*/ gsequencer-0.6.37/src/ags/plugin/ags_ladspa_manager.c0000644000175000017500000001723312626272146017502 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include void ags_ladspa_manager_class_init(AgsLadspaManagerClass *ladspa_manager); void ags_ladspa_manager_init (AgsLadspaManager *ladspa_manager); void ags_ladspa_manager_finalize(GObject *gobject); /** * SECTION:ags_ladspa_manager * @short_description: Singleton pattern to organize LADSPA * @title: AgsLadspaManager * @section_id: * @include: ags/object/ags_ladspa_manager.h * * The #AgsLadspaManager loads/unloads LADSPA plugins. */ enum{ ADD, CREATE, LAST_SIGNAL, }; static gpointer ags_ladspa_manager_parent_class = NULL; static guint ladspa_manager_signals[LAST_SIGNAL]; AgsLadspaManager *ags_ladspa_manager = NULL; static const gchar *ags_ladspa_default_path = "/usr/lib/ladspa\0"; GType ags_ladspa_manager_get_type (void) { static GType ags_type_ladspa_manager = 0; if(!ags_type_ladspa_manager){ static const GTypeInfo ags_ladspa_manager_info = { sizeof (AgsLadspaManagerClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_ladspa_manager_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsLadspaManager), 0, /* n_preallocs */ (GInstanceInitFunc) ags_ladspa_manager_init, }; ags_type_ladspa_manager = g_type_register_static(G_TYPE_OBJECT, "AgsLadspaManager\0", &ags_ladspa_manager_info, 0); } return (ags_type_ladspa_manager); } void ags_ladspa_manager_class_init(AgsLadspaManagerClass *ladspa_manager) { GObjectClass *gobject; ags_ladspa_manager_parent_class = g_type_class_peek_parent(ladspa_manager); /* GObjectClass */ gobject = (GObjectClass *) ladspa_manager; gobject->finalize = ags_ladspa_manager_finalize; } void ags_ladspa_manager_init(AgsLadspaManager *ladspa_manager) { ladspa_manager->ladspa_plugin = NULL; } void ags_ladspa_manager_finalize(GObject *gobject) { AgsLadspaManager *ladspa_manager; GList *ladspa_plugin; ladspa_manager = AGS_LADSPA_MANAGER(gobject); ladspa_plugin = ladspa_manager->ladspa_plugin; g_list_free_full(ladspa_plugin, (GDestroyNotify) ags_ladspa_plugin_free); } /** * ags_ladspa_plugin_alloc: * * Alloc the #AgsLadspaPlugin-struct * * Returns: the #AgsLadspaPlugin-struct * * Since: 0.4 */ AgsLadspaPlugin* ags_ladspa_plugin_alloc() { AgsLadspaPlugin *ladspa_plugin; ladspa_plugin = (AgsLadspaPlugin *) malloc(sizeof(AgsLadspaPlugin)); ladspa_plugin->flags = 0; ladspa_plugin->filename = NULL; ladspa_plugin->plugin_so = NULL; return(ladspa_plugin); } /** * ags_ladspa_plugin_free: * @ladspa_plugin: the #AgsLadspaPlugin-struct * * Free the #AgsLadspaPlugin-struct * * Since: 0.4 */ void ags_ladspa_plugin_free(AgsLadspaPlugin *ladspa_plugin) { if(ladspa_plugin->plugin_so != NULL){ dlclose(ladspa_plugin->plugin_so); } free(ladspa_plugin->filename); free(ladspa_plugin); } /** * ags_ladspa_manager_get_filenames: * * Retrieve all filenames * * Returns: a %NULL-terminated array of filenames * * Since: 0.4 */ gchar** ags_ladspa_manager_get_filenames() { AgsLadspaManager *ladspa_manager; GList *ladspa_plugin; gchar **filenames; guint length; guint i; ladspa_manager = ags_ladspa_manager_get_instance(); length = g_list_length(ladspa_manager->ladspa_plugin); ladspa_plugin = ladspa_manager->ladspa_plugin; filenames = (gchar **) malloc((length + 1) * sizeof(gchar *)); for(i = 0; i < length; i++){ filenames[i] = AGS_LADSPA_PLUGIN(ladspa_plugin->data)->filename; ladspa_plugin = ladspa_plugin->next; } filenames[i] = NULL; return(filenames); } /** * ags_ladspa_manager_find_ladspa_plugin: * @filename: the filename of the plugin * * Lookup filename in loaded plugins. * * Returns: the #AgsLadspaPlugin-struct * * Since: 0.4 */ AgsLadspaPlugin* ags_ladspa_manager_find_ladspa_plugin(gchar *filename) { AgsLadspaManager *ladspa_manager; AgsLadspaPlugin *ladspa_plugin; GList *list; ladspa_manager = ags_ladspa_manager_get_instance(); list = ladspa_manager->ladspa_plugin; while(list != NULL){ ladspa_plugin = AGS_LADSPA_PLUGIN(list->data); if(!g_strcmp0(ladspa_plugin->filename, filename)){ return(ladspa_plugin); } list = list->next; } return(NULL); } /** * ags_ladspa_manager_load_file: * @filename: the filename of the plugin * * Load @filename specified plugin. * * Since: 0.4 */ void ags_ladspa_manager_load_file(gchar *filename) { AgsLadspaManager *ladspa_manager; AgsLadspaPlugin *ladspa_plugin; gchar *path; static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; ladspa_manager = ags_ladspa_manager_get_instance(); pthread_mutex_lock(&(mutex)); path = g_strdup_printf("%s/%s\0", ags_ladspa_default_path, filename); ladspa_plugin = ags_ladspa_manager_find_ladspa_plugin(filename); g_message("loading: %s\0", filename); if(ladspa_plugin == NULL){ ladspa_plugin = ags_ladspa_plugin_alloc(); ladspa_plugin->filename = g_strdup(filename); ladspa_manager->ladspa_plugin = g_list_prepend(ladspa_manager->ladspa_plugin, ladspa_plugin); ladspa_plugin->plugin_so = dlopen(path, RTLD_NOW); if(ladspa_plugin->plugin_so){ dlerror(); } } pthread_mutex_unlock(&(mutex)); g_free(path); } /** * ags_ladspa_manager_load_default_directory: * * Loads all available plugins. * * Since: 0.4 */ void ags_ladspa_manager_load_default_directory() { AgsLadspaManager *ladspa_manager; AgsLadspaPlugin *ladspa_plugin; GDir *dir; gchar *filename; GError *error; ladspa_manager = ags_ladspa_manager_get_instance(); error = NULL; dir = g_dir_open(ags_ladspa_default_path, 0, &error); if(error != NULL){ g_warning("%s\0", error->message); } while((filename = g_dir_read_name(dir)) != NULL){ if(g_str_has_suffix(filename, ".so\0")){ ags_ladspa_manager_load_file(filename); } } } /** * ags_ladspa_manager_get_instance: * * Get instance. * * Returns: the #AgsLadspaManager * * Since: 0.4 */ AgsLadspaManager* ags_ladspa_manager_get_instance() { static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_lock(&(mutex)); if(ags_ladspa_manager == NULL){ ags_ladspa_manager = ags_ladspa_manager_new(); pthread_mutex_unlock(&(mutex)); ags_ladspa_manager_load_default_directory(); }else{ pthread_mutex_unlock(&(mutex)); } return(ags_ladspa_manager); } /** * ags_ladspa_manager_new: * @devout: an #AgsDevout * * Creates an #AgsLadspaManager * * Returns: a new #AgsLadspaManager * * Since: 0.4 */ AgsLadspaManager* ags_ladspa_manager_new() { AgsLadspaManager *ladspa_manager; ladspa_manager = (AgsLadspaManager *) g_object_new(AGS_TYPE_LADSPA_MANAGER, NULL); return(ladspa_manager); } gsequencer-0.6.37/src/ags/plugin/ags_ladspa_manager.h0000644000175000017500000000504012626272146017500 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_LADSPA_MANAGER_H__ #define __AGS_LADSPA_MANAGER_H__ #include #include #define AGS_TYPE_LADSPA_MANAGER (ags_ladspa_manager_get_type()) #define AGS_LADSPA_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_LADSPA_MANAGER, AgsLadspaManager)) #define AGS_LADSPA_MANAGER_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_LADSPA_MANAGER, AgsLadspaManagerClass)) #define AGS_IS_LADSPA_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_LADSPA_MANAGER)) #define AGS_IS_LADSPA_MANAGER_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_LADSPA_MANAGER)) #define AGS_LADSPA_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_LADSPA_MANAGER, AgsLadspaManagerClass)) #define AGS_LADSPA_PLUGIN(ptr) ((AgsLadspaPlugin *)(ptr)) typedef struct _AgsLadspaManager AgsLadspaManager; typedef struct _AgsLadspaManagerClass AgsLadspaManagerClass; typedef struct _AgsLadspaPlugin AgsLadspaPlugin; typedef enum{ AGS_LADSPA_PLUGIN_IS_LOADED = 1, }AgsLadspaPluginFlags; struct _AgsLadspaManager { GObject object; GList *ladspa_plugin; }; struct _AgsLadspaManagerClass { GObjectClass object; }; struct _AgsLadspaPlugin { guint flags; gchar *filename; void *plugin_so; }; GType ags_ladspa_manager_get_type(void); AgsLadspaPlugin* ags_ladspa_plugin_alloc(); void ags_ladspa_plugin_free(AgsLadspaPlugin *ladspa_plugin); gchar** ags_ladspa_manager_get_filenames(); AgsLadspaPlugin* ags_ladspa_manager_find_ladspa_plugin(gchar *filename); void ags_ladspa_manager_load_file(gchar *filename); void ags_ladspa_manager_load_default_directory(); /* */ AgsLadspaManager* ags_ladspa_manager_get_instance(); AgsLadspaManager* ags_ladspa_manager_new(); #endif /*__AGS_LADSPA_MANAGER_H__*/ gsequencer-0.6.37/src/ags/plugin/ags_plugin_factory.c0000644000175000017500000001300112621463700017547 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_plugin_factory_class_init(AgsPluginFactoryClass *plugin_factory); void ags_plugin_factory_init (AgsPluginFactory *plugin_factory); void ags_plugin_factory_finalize(GObject *gobject); void ags_plugin_factory_real_add(AgsPluginFactory *plugin_factory, GType plugin_type, gchar *plugin_name, gchar *version, gchar *build_id, gchar *xml_type, GParameter *control, guint control_count); AgsPlugin* ags_plugin_factory_real_create(AgsPluginFactory *plugin_factory, gchar *plugin_name, gchar *version, gchar *build_id); enum{ ADD, CREATE, LAST_SIGNAL, }; static gpointer ags_plugin_factory_parent_class = NULL; static guint plugin_factory_signals[LAST_SIGNAL]; static AgsPluginFactory *ags_plugin_factory = NULL; GType ags_plugin_factory_get_type (void) { static GType ags_type_plugin_factory = 0; if(!ags_type_plugin_factory){ static const GTypeInfo ags_plugin_factory_info = { sizeof (AgsPluginFactoryClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_plugin_factory_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsPluginFactory), 0, /* n_preallocs */ (GInstanceInitFunc) ags_plugin_factory_init, }; ags_type_plugin_factory = g_type_register_static(G_TYPE_OBJECT, "AgsPluginFactory\0", &ags_plugin_factory_info, 0); } return (ags_type_plugin_factory); } void ags_plugin_factory_class_init(AgsPluginFactoryClass *plugin_factory) { GObjectClass *gobject; ags_plugin_factory_parent_class = g_type_class_peek_parent(plugin_factory); /* GObjectClass */ gobject = (GObjectClass *) plugin_factory; gobject->finalize = ags_plugin_factory_finalize; /* */ plugin_factory->add = ags_plugin_factory_real_add; plugin_factory->create = ags_plugin_factory_real_create; plugin_factory_signals[ADD] = g_signal_new("add\0", G_TYPE_FROM_CLASS (plugin_factory), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AgsPluginFactoryClass, add), NULL, NULL, g_cclosure_user_marshal_STRING__ULONG_STRING_STRING_STRING_STRING_UINT_POINTER, G_TYPE_OBJECT, 7, G_TYPE_ULONG, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_UINT, G_TYPE_POINTER); plugin_factory_signals[CREATE] = g_signal_new("create\0", G_TYPE_FROM_CLASS (plugin_factory), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AgsPluginFactoryClass, create), NULL, NULL, g_cclosure_user_marshal_OBJECT__STRING_STRING_STRING, G_TYPE_OBJECT, 3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); } void ags_plugin_factory_init(AgsPluginFactory *plugin_factory) { plugin_factory->plugin = NULL; } void ags_plugin_factory_finalize(GObject *gobject) { //TODO:JK: implement me } void ags_plugin_factory_read_file(AgsPluginFactory *plugin_factory, gchar *path) { //TODO:JK: implement me } GList* ags_plugin_factory_list_by_name(AgsPluginFactory *plugin_factory, gchar *plugin_name) { GList *list; list = NULL; //TODO:JK: implement me return(list); } void ags_plugin_factory_real_add(AgsPluginFactory *plugin_factory, GType plugin_type, gchar *plugin_name, gchar *version, gchar *build_id, gchar *xml_type, GParameter *control, guint control_count) { //TODO:JK: implement me } void ags_plugin_factory_add(AgsPluginFactory *plugin_factory, GType plugin_type, gchar *plugin_name, gchar *version, gchar *build_id, gchar *xml_type, GParameter *control, guint control_count) { //TODO:JK: implement me } AgsPlugin* ags_plugin_factory_real_create(AgsPluginFactory *plugin_factory, gchar *plugin_name, gchar *version, gchar *build_id) { AgsPlugin *plugin; plugin = NULL; //TODO:JK: implement me return(plugin); } AgsPlugin* ags_plugin_factory_create(AgsPluginFactory *plugin_factory, gchar *plugin_name, gchar *version, gchar *build_id) { //TODO:JK: implement me } AgsPluginFactory* ags_plugin_factory_get_instance() { pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_lock(&(mutex)); if(ags_plugin_factory == NULL){ ags_plugin_factory = ags_plugin_factory_new(); } pthread_mutex_unlock(&(mutex)); return(ags_plugin_factory); } AgsPluginFactory* ags_plugin_factory_new_from_file(gchar *path) { AgsPluginFactory *plugin_factory; plugin_factory = (AgsPluginFactory *) g_object_new(AGS_TYPE_PLUGIN_FACTORY, NULL); ags_plugin_factory_read_file(plugin_factory, path); return(plugin_factory); } AgsPluginFactory* ags_plugin_factory_new() { AgsPluginFactory *plugin_factory; plugin_factory = (AgsPluginFactory *) g_object_new(AGS_TYPE_PLUGIN_FACTORY, NULL); return(plugin_factory); } gsequencer-0.6.37/src/ags/server/0000755000175000017500000000000012633241335013622 500000000000000gsequencer-0.6.37/src/ags/server/ags_remote_task.h0000644000175000017500000000422312621463700017062 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_REMOTE_TASK_H__ #define __AGS_REMOTE_TASK_H__ #include #include #ifdef AGS_WITH_XMLRPC_C #include #include #endif #define AGS_TYPE_REMOTE_TASK (ags_remote_task_get_type()) #define AGS_REMOTE_TASK(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_REMOTE_TASK, AgsRemoteTask)) #define AGS_REMOTE_TASK_CLASS(class) (G_TYPE_CHECK_CLASS_CAST(class, AGS_TYPE_REMOTE_TASK, AgsRemoteTaskClass)) #define AGS_IS_REMOTE_TASK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_REMOTE_TASK)) #define AGS_IS_REMOTE_TASK_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_REMOTE_TASK)) #define AGS_REMOTE_TASK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS(obj, AGS_TYPE_REMOTE_TASK, AgsRemoteTaskClass)) typedef struct _AgsRemoteTask AgsRemoteTask; typedef struct _AgsRemoteTaskClass AgsRemoteTaskClass; struct _AgsRemoteTask { GObject object; GObject *server; }; struct _AgsRemoteTaskClass { GObjectClass object; }; GType ags_remote_task_get_type(); #ifdef AGS_WITH_XMLRPC_C xmlrpc_value* ags_remote_task_launch(xmlrpc_env *env, xmlrpc_value *param_array, void *server_info); xmlrpc_value* ags_remote_task_launch_timed(xmlrpc_env *env, xmlrpc_value *param_array, void *server_info); #endif AgsRemoteTask* ags_remote_task_new(); #endif /*__AGS_REMOTE_TASK_H__*/ gsequencer-0.6.37/src/ags/server/ags_registry.h0000644000175000017500000000535612621463700016425 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_REGISTRY_H__ #define __AGS_REGISTRY_H__ #include #include #include #ifdef AGS_WITH_XMLRPC_C #include #include #endif #include #define AGS_TYPE_REGISTRY (ags_registry_get_type()) #define AGS_REGISTRY(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_REGISTRY, AgsRegistry)) #define AGS_REGISTRY_CLASS(class) (G_TYPE_CHECK_CLASS_CAST(class, AGS_TYPE_REGISTRY, AgsRegistryClass)) #define AGS_IS_REGISTRY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_REGISTRY)) #define AGS_IS_REGISTRY_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_REGISTRY)) #define AGS_REGISTRY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS(obj, AGS_TYPE_REGISTRY, AgsRegistryClass)) #define AGS_REGISTRY_DEFAULT_ID_LENGTH 16 typedef struct _AgsRegistry AgsRegistry; typedef struct _AgsRegistryClass AgsRegistryClass; typedef struct _AgsRegistryEntry AgsRegistryEntry; typedef enum{ AGS_REGISTRY_XML_DOCUMENT = 1, AGS_REGISTRY_XML_RPC = 1 << 1, AGS_REGISTRY_DIRTY = 1 << 2, }AgsRegistryFlags; struct _AgsRegistry { GObject object; guint flags; pthread_mutex_t mutex; AgsFile *previous; AgsFile *current; #ifdef AGS_WITH_XMLRPC_C xmlrpc_registry *registry; #endif GObject *server; guint id_length; guint counter; GList *entry; }; struct _AgsRegistryClass { GObjectClass object; }; struct _AgsRegistryEntry { gchar *id; GValue entry; }; GType ags_registry_get_type(); AgsRegistryEntry* ags_registry_entry_alloc(AgsRegistry *registry); void ags_registry_add(AgsRegistry *registry, AgsRegistryEntry *registry_entry); AgsRegistryEntry* ags_registry_entry_find(AgsRegistry *registry, gchar *id); #ifdef AGS_WITH_XMLRPC_C xmlrpc_value* ags_registry_entry_bulk(xmlrpc_env *env, xmlrpc_value *param_array, void *server_info); #endif AgsRegistry* ags_registry_new(); #endif /*__AGS_REGISTRY_H__*/ gsequencer-0.6.37/src/ags/server/ags_server.h0000644000175000017500000000540412626272146016064 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_SERVER_H__ #define __AGS_SERVER_H__ #include #include #include #include #include #ifdef AGS_WITH_XMLRPC_C #include #include #include #include #include #endif //#include "config.h" #include #include #define AGS_TYPE_SERVER (ags_server_get_type()) #define AGS_SERVER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_SERVER, AgsServer)) #define AGS_SERVER_CLASS(class) (G_TYPE_CHECK_CLASS_CAST(class, AGS_TYPE_SERVER, AgsServerClass)) #define AGS_IS_SERVER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_SERVER)) #define AGS_IS_SERVER_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_SERVER)) #define AGS_SERVER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS(obj, AGS_TYPE_SERVER, AgsServerClass)) typedef struct _AgsServer AgsServer; typedef struct _AgsServerClass AgsServerClass; typedef enum{ AGS_SERVER_STARTED = 1, AGS_SERVER_RUNNING = 1 << 1, }AgsServerFlags; struct _AgsServer { GObject object; guint flags; #ifdef AGS_WITH_XMLRPC_C TServer abyss_server; TSocket *socket; #endif int socket_fd; struct sockaddr_in address; void *server_info; GObject *main; AgsRegistry *registry; AgsRemoteTask *remote_task; }; struct _AgsServerClass { GObjectClass object; void (*start)(AgsServer *server); }; GType ags_server_get_type(); void ags_server_start(AgsServer *server); AgsServer* ags_server_lookup(void *server_info); #ifdef AGS_WITH_XMLRPC_C xmlrpc_value* ags_server_create_object(xmlrpc_env *env, xmlrpc_value *param_array, void *server_info); xmlrpc_value* ags_server_object_set_property(xmlrpc_env *env, xmlrpc_value *param_array, void *server_info); #endif AgsServer* ags_server_new(GObject *main); #endif /*__AGS_SERVER_H__*/ gsequencer-0.6.37/src/ags/server/ags_remote_task.c0000644000175000017500000001417012626272146017066 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include void ags_remote_task_class_init(AgsRemoteTaskClass *remote_task); void ags_remote_task_connectable_interface_init(AgsConnectableInterface *connectable); void ags_remote_task_init(AgsRemoteTask *remote_task); void ags_remote_task_add_to_registry(AgsConnectable *connectable); void ags_remote_task_remove_from_registry(AgsConnectable *connectable); void ags_remote_task_connect(AgsConnectable *connectable); void ags_remote_task_disconnect(AgsConnectable *connectable); void ags_remote_task_finalize(GObject *gobject); void* ags_remote_task_launch_timed_thread(void *ptr); static gpointer ags_remote_task_parent_class = NULL; GType ags_remote_task_get_type() { static GType ags_type_remote_task = 0; if(!ags_type_remote_task){ static const GTypeInfo ags_remote_task_info = { sizeof (AgsRemoteTaskClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_remote_task_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsRemoteTask), 0, /* n_preallocs */ (GInstanceInitFunc) ags_remote_task_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_remote_task_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_remote_task = g_type_register_static(G_TYPE_OBJECT, "AgsRemoteTask\0", &ags_remote_task_info, 0); g_type_add_interface_static(ags_type_remote_task, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_remote_task); } void ags_remote_task_class_init(AgsRemoteTaskClass *remote_task) { GObjectClass *gobject; ags_remote_task_parent_class = g_type_class_peek_parent(remote_task); /* GObjectClass */ gobject = (GObjectClass *) remote_task; gobject->finalize = ags_remote_task_finalize; } void ags_remote_task_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->add_to_registry = ags_remote_task_add_to_registry; connectable->remove_from_registry = ags_remote_task_remove_from_registry; connectable->connect = ags_remote_task_connect; connectable->disconnect = ags_remote_task_disconnect; } void ags_remote_task_init(AgsRemoteTask *remote_task) { remote_task->server = NULL; } void ags_remote_task_add_to_registry(AgsConnectable *connectable) { AgsServer *server; AgsRegistry *registry; AgsRemoteTask *remote_task; struct xmlrpc_method_info3 *method_info; remote_task = AGS_REMOTE_TASK(connectable); server = AGS_SERVER(remote_task->server); registry = AGS_REGISTRY(server->registry); #ifdef AGS_WITH_XMLRPC_C /* bulk */ method_info = (struct xmlrpc_method_info3 *) malloc(sizeof(struct xmlrpc_method_info3)); method_info->methodName = "ags_remote_task_launch\0"; method_info->methodFunction = &ags_remote_task_launch; method_info->serverInfo = NULL; xmlrpc_registry_add_method3(&(AGS_MAIN(server->main)->env), registry->registry, method_info); #endif /* AGS_WITH_XMLRPC_C */ } void ags_remote_task_remove_from_registry(AgsConnectable *connectable) { //TODO:JK: implement me } void ags_remote_task_connect(AgsConnectable *connectable) { /* empty */ } void ags_remote_task_disconnect(AgsConnectable *connectable) { /* empty */ } void ags_remote_task_finalize(GObject *gobject) { AgsRemoteTask *remote_task; remote_task = AGS_REMOTE_TASK(gobject); G_OBJECT_CLASS(ags_remote_task_parent_class)->finalize(gobject); } #ifdef AGS_WITH_XMLRPC_C xmlrpc_value* ags_remote_task_launch(xmlrpc_env *env, xmlrpc_value *param_array, void *server_info) { AgsServer *server; AgsTask *task; AgsRegistryEntry *registry_entry; gchar *registry_id; xmlrpc_value *item; if(xmlrpc_array_size(env, param_array) != 1){ return(NULL); } server = ags_server_lookup(server_info); /* read registry id */ xmlrpc_array_read_item(env, param_array, 1, &item); xmlrpc_read_string(env, item, ®istry_id); xmlrpc_DECREF(item); registry_entry = ags_registry_entry_find(server->registry, registry_id); task = (AgsTask *) g_value_get_object(&(registry_entry->entry)); /* launch */ ags_task_launch(task); return(NULL); } void* ags_remote_task_launch_timed_thread(void *ptr) { //TODO:JK: implement me } xmlrpc_value* ags_remote_task_launch_timed(xmlrpc_env *env, xmlrpc_value *param_array, void *server_info) { AgsServer *server; AgsTask *task; AgsRegistryEntry *registry_entry; gchar *registry_id; xmlrpc_value *item; if(xmlrpc_array_size(env, param_array) != 1){ return(NULL); } server = ags_server_lookup(server_info); /* read registry id */ xmlrpc_array_read_item(env, param_array, 1, &item); xmlrpc_read_string(env, item, ®istry_id); xmlrpc_DECREF(item); registry_entry = ags_registry_entry_find(server->registry, registry_id); task = (AgsTask *) g_value_get_object(&(registry_entry->entry)); /* launch timed */ //TODO:JK: implement me } #endif /* AGS_WITH_XMLRPC_C */ AgsRemoteTask* ags_remote_task_new() { AgsRemoteTask *remote_task; remote_task = (AgsRemoteTask *) g_object_new(AGS_TYPE_REMOTE_TASK, NULL); return(remote_task); } gsequencer-0.6.37/src/ags/server/ags_server.c0000644000175000017500000002601512626272146016060 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include void ags_server_class_init(AgsServerClass *server); void ags_server_connectable_interface_init(AgsConnectableInterface *connectable); void ags_server_init(AgsServer *server); void ags_server_add_to_registry(AgsConnectable *connectable); void ags_server_remove_from_registry(AgsConnectable *connectable); void ags_server_connect(AgsConnectable *connectable); void ags_server_disconnect(AgsConnectable *connectable); void ags_server_finalize(GObject *gobject); void ags_server_real_start(AgsServer *server); enum{ START, LAST_SIGNAL, }; static gpointer ags_server_parent_class = NULL; static guint server_signals[LAST_SIGNAL]; static GList *ags_server_list = NULL; GType ags_server_get_type() { static GType ags_type_server = 0; if(!ags_type_server){ static const GTypeInfo ags_server_info = { sizeof (AgsServerClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_server_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsServer), 0, /* n_preallocs */ (GInstanceInitFunc) ags_server_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_server_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_server = g_type_register_static(G_TYPE_OBJECT, "AgsServer\0", &ags_server_info, 0); g_type_add_interface_static(ags_type_server, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_server); } void ags_server_class_init(AgsServerClass *server) { GObjectClass *gobject; ags_server_parent_class = g_type_class_peek_parent(server); /* GObjectClass */ gobject = (GObjectClass *) server; gobject->finalize = ags_server_finalize; /* AgsServer */ server->start = ags_server_real_start; server_signals[START] = g_signal_new("start\0", G_TYPE_FROM_CLASS(server), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsServerClass, start), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); } void ags_server_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->add_to_registry = ags_server_add_to_registry; connectable->remove_from_registry = ags_server_remove_from_registry; connectable->connect = ags_server_connect; connectable->disconnect = ags_server_disconnect; } void ags_server_init(AgsServer *server) { server->flags = 0; memset(&(server->address), 0, sizeof(struct sockaddr_in)); server->address.sin_port = 8080; server->address.sin_family = AF_INET; inet_aton("127.0.0.1\0", &(server->address.sin_addr.s_addr)); server->server_info = NULL; server->main = NULL; server->registry = ags_registry_new(); server->remote_task = ags_remote_task_new(); } void ags_server_add_to_registry(AgsConnectable *connectable) { AgsServer *server; AgsRegistry *registry; #ifdef AGS_WITH_XMLRPC_C struct xmlrpc_method_info3 *method_info; #endif /* AGS_WITH_XMLRPC_C */ server = AGS_SERVER(connectable); registry = AGS_REGISTRY(server->registry); #ifdef AGS_WITH_XMLRPC_C /* create object */ method_info = (struct xmlrpc_method_info3 *) malloc(sizeof(struct xmlrpc_method_info3)); method_info->methodName = "ags_server_create_object\0"; method_info->methodFunction = &ags_server_create_object; method_info->serverInfo = NULL; xmlrpc_registry_add_method3(&(AGS_MAIN(server->main)->env), registry->registry, method_info); /* set property */ method_info = (struct xmlrpc_method_info3 *) malloc(sizeof(struct xmlrpc_method_info3)); method_info->methodName = "ags_server_object_set_property\0"; method_info->methodFunction = &ags_server_object_set_property; method_info->serverInfo = NULL; xmlrpc_registry_add_method3(&(AGS_MAIN(server->main)->env), registry->registry, method_info); #endif /* AGS_WITH_XMLRPC_C */ /* children */ ags_connectable_add_to_registry(AGS_CONNECTABLE(server->registry)); ags_connectable_add_to_registry(AGS_CONNECTABLE(server->remote_task)); } void ags_server_remove_from_registry(AgsConnectable *connectable) { //TODO:JK: implement me } void ags_server_connect(AgsConnectable *connectable) { /* empty */ } void ags_server_disconnect(AgsConnectable *connectable) { /* empty */ } void ags_server_finalize(GObject *gobject) { AgsServer *server; server = AGS_SERVER(gobject); G_OBJECT_CLASS(ags_server_parent_class)->finalize(gobject); } void ags_server_real_start(AgsServer *server) { AgsMain *main; AgsRegistry *registry; const char *error; main = AGS_MAIN(server->main); registry = AGS_REGISTRY(server->registry); #ifdef AGS_WITH_XMLRPC_C registry->registry = xmlrpc_registry_new(&(main->env)); #endif /* AGS_WITH_XMLRPC_C */ ags_connectable_add_to_registry(AGS_CONNECTABLE(main->main_loop)); ags_connectable_add_to_registry(AGS_CONNECTABLE(server)); ags_connectable_add_to_registry(AGS_CONNECTABLE(main->devout)); ags_connectable_add_to_registry(AGS_CONNECTABLE(main->window)); // xmlrpc_registry_set_shutdown(registry, // &requestShutdown, &terminationRequested); server->socket_fd = socket(AF_INET, SOCK_RDM, PF_INET); bind(server->socket_fd, &(server->address), sizeof(struct sockaddr_in)); #ifdef AGS_WITH_XMLRPC_C SocketUnixCreateFd(server->socket_fd, &(server->socket)); ServerCreateSocket2(&(server->abyss_server), server->socket, &error); xmlrpc_server_abyss_set_handlers2(&(server->abyss_server), "/RPC2", registry->registry); ServerInit(&(server->abyss_server)); // setupSignalHandlers(); while((AGS_SERVER_RUNNING & (server->flags)) != 0){ printf("Waiting for next RPC...\n"); ServerRunOnce(&(server->abyss_server)); /* This waits for the next connection, accepts it, reads the HTTP POST request, executes the indicated RPC, and closes the connection. */ } #endif /* AGS_WITH_XMLRPC_C */ } void ags_server_start(AgsServer *server) { g_return_if_fail(AGS_IS_SERVER(server)); g_object_ref((GObject *) server); g_signal_emit(G_OBJECT(server), server_signals[START], 0); g_object_unref((GObject *) server); } AgsServer* ags_server_lookup(void *server_info) { GList *current; current = ags_server_list; while(current != NULL){ if(server_info == AGS_SERVER(current)->server_info){ return(AGS_SERVER(current->data)); } current = current->next; } return(NULL); } #ifdef AGS_WITH_XMLRPC_C xmlrpc_value* ags_server_create_object(xmlrpc_env *env, xmlrpc_value *param_array, void *server_info) { AgsServer *server; GType type; GObjectClass *object_class; GParameter *parameter; GObject *object; AgsRegistryEntry *registry_entry; gchar *type_name; xmlrpc_value *item, *retval; guint n_params; guint i; if(xmlrpc_array_size(env, param_array) % 2 != 1){ return(NULL); } server = ags_server_lookup(server_info); /* read type */ xmlrpc_array_read_item(env, param_array, 0, &item); xmlrpc_read_string(env, item, &type_name); xmlrpc_DECREF(item); type = g_type_from_name(type_name); object_class = g_type_class_ref(type); /* read parameters */ n_params = (xmlrpc_array_size(env, param_array) - 1) / 2; parameter = g_new(GParameter, n_params); for(i = 0; i < n_params; i++){ GParamSpec *pspec; AgsRegistryEntry *registry_entry; gchar *param_name, *registry_id; gchar *error; /* read parameter name */ xmlrpc_array_read_item(env, param_array, 1 + i * 2, &item); xmlrpc_read_string(env, item, ¶m_name); xmlrpc_DECREF(item); pspec = g_object_class_find_property(object_class, param_name); parameter[i].name = param_name; parameter[i].value.g_type = 0; /* read registry id */ xmlrpc_array_read_item(env, param_array, 2 + i * 2, &item); xmlrpc_read_string(env, item, ®istry_id); xmlrpc_DECREF(item); /* find registry entry */ registry_entry = ags_registry_entry_find(server->registry, registry_id); /* copy GValue from registry entry to parameter array */ g_value_init(¶meter[i].value, G_PARAM_SPEC_VALUE_TYPE(pspec)); g_value_copy(&(registry_entry->entry), ¶meter[i].value); /* free not needed strings */ g_free(param_name); g_free(registry_id); if(error){ g_warning ("%s: %s\0", G_STRFUNC, error); g_free (error); g_value_unset (¶meter[i].value); break; } } /* instantiate object */ object = g_object_newv(type, n_params, parameter); registry_entry = ags_registry_entry_alloc(server->registry); g_value_init(&(registry_entry->entry), G_TYPE_OBJECT); g_value_set_object(&(registry_entry->entry), object); /* create return value */ retval = xmlrpc_string_new(env, registry_entry->id); return(retval); } xmlrpc_value* ags_server_object_set_property(xmlrpc_env *env, xmlrpc_value *param_array, void *server_info) { AgsServer *server; GObject *object, *property; AgsRegistryEntry *registry_entry; gchar *param_name, *registry_id; xmlrpc_value *item; if(xmlrpc_array_size(env, param_array) != 3){ return(NULL); } server = ags_server_lookup(server_info); /* read registry id */ xmlrpc_array_read_item(env, param_array, 1, &item); xmlrpc_read_string(env, item, ®istry_id); xmlrpc_DECREF(item); registry_entry = ags_registry_entry_find(server->registry, registry_id); object = g_value_get_object(&(registry_entry->entry)); /* read parameter name */ xmlrpc_array_read_item(env, param_array, 1, &item); xmlrpc_read_string(env, item, ¶m_name); xmlrpc_DECREF(item); /* read registry id of object to set as property */ xmlrpc_array_read_item(env, param_array, 1, &item); xmlrpc_read_string(env, item, ®istry_id); xmlrpc_DECREF(item); registry_entry = ags_registry_entry_find(server->registry, registry_id); property = g_value_get_object(&(registry_entry->entry)); /* set property */ g_object_set(object, param_name, property, NULL); return(NULL); } #endif /* AGS_WITH_XMLRPC_C */ AgsServer* ags_server_new(GObject *main) { AgsServer *server; server = (AgsServer *) g_object_new(AGS_TYPE_SERVER, NULL); server->main = main; return(server); } gsequencer-0.6.37/src/ags/server/ags_registry.c0000644000175000017500000001447212626272146016426 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include void ags_registry_class_init(AgsRegistryClass *registry); void ags_registry_connectable_interface_init(AgsConnectableInterface *connectable); void ags_registry_init(AgsRegistry *registry); void ags_registry_add_to_registry(AgsConnectable *connectable); void ags_registry_remove_from_registry(AgsConnectable *connectable); void ags_registry_connect(AgsConnectable *connectable); void ags_registry_disconnect(AgsConnectable *connectable); void ags_registry_finalize(GObject *gobject); static gpointer ags_registry_parent_class = NULL; GType ags_registry_get_type() { static GType ags_type_registry = 0; if(!ags_type_registry){ static const GTypeInfo ags_registry_info = { sizeof (AgsRegistryClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_registry_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsRegistry), 0, /* n_preallocs */ (GInstanceInitFunc) ags_registry_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_registry_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_registry = g_type_register_static(G_TYPE_OBJECT, "AgsRegistry\0", &ags_registry_info, 0); g_type_add_interface_static(ags_type_registry, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_registry); } void ags_registry_class_init(AgsRegistryClass *registry) { GObjectClass *gobject; ags_registry_parent_class = g_type_class_peek_parent(registry); /* GObjectClass */ gobject = (GObjectClass *) registry; gobject->finalize = ags_registry_finalize; } void ags_registry_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->add_to_registry = ags_registry_add_to_registry; connectable->remove_from_registry = ags_registry_remove_from_registry; connectable->connect = ags_registry_connect; connectable->disconnect = ags_registry_disconnect; } void ags_registry_init(AgsRegistry *registry) { registry->flags = 0; pthread_mutex_init(&(registry->mutex), NULL); registry->previous = NULL; registry->current = NULL; #ifdef AGS_WITH_XMLRPC_C registry->registry = NULL; #endif registry->id_length = AGS_REGISTRY_DEFAULT_ID_LENGTH; registry->counter = 0; registry->entry = NULL; } void ags_registry_add_to_registry(AgsConnectable *connectable) { AgsServer *server; AgsRegistry *registry; struct xmlrpc_method_info3 *method_info; registry = AGS_REGISTRY(connectable); server = AGS_SERVER(registry->server); #ifdef AGS_WITH_XMLRPC_C /* bulk */ method_info = (struct xmlrpc_method_info3 *) malloc(sizeof(struct xmlrpc_method_info3)); method_info->methodName = "ags_registry_entry_bulk\0"; method_info->methodFunction = &ags_registry_entry_bulk; method_info->serverInfo = NULL; xmlrpc_registry_add_method3(&(AGS_MAIN(server->main)->env), registry->registry, method_info); #endif /* AGS_WITH_XMLRPC_C */ } void ags_registry_remove_from_registry(AgsConnectable *connectable) { //TODO:JK: implement me } void ags_registry_connect(AgsConnectable *connectable) { /* empty */ } void ags_registry_disconnect(AgsConnectable *connectable) { /* empty */ } void ags_registry_finalize(GObject *gobject) { AgsRegistry *registry; registry = AGS_REGISTRY(gobject); G_OBJECT_CLASS(ags_registry_parent_class)->finalize(gobject); } AgsRegistryEntry* ags_registry_entry_alloc(AgsRegistry *registry) { AgsRegistryEntry *registry_entry; registry_entry = (AgsRegistryEntry *) malloc(sizeof(AgsRegistryEntry)); registry_entry->id = ags_id_generator_create_uuid(); return(registry_entry); } void ags_registry_add(AgsRegistry *registry, AgsRegistryEntry *registry_entry) { pthread_mutex_lock(&(registry->mutex)); registry->entry = g_list_prepend(registry->entry, registry_entry); pthread_mutex_unlock(&(registry->mutex)); } AgsRegistryEntry* ags_registry_entry_find(AgsRegistry *registry, gchar *id) { static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; GList *current; AgsRegistryEntry *entry; pthread_mutex_lock(&(registry->mutex)); current = registry->entry; while(current != NULL){ entry = (AgsRegistryEntry *) current->data; if(!strncmp(entry->id, id, registry->id_length)){ return(entry); } current = current->next; } pthread_mutex_unlock(&(registry->mutex)); return(entry); } #ifdef AGS_WITH_XMLRPC_C xmlrpc_value* ags_registry_entry_bulk(xmlrpc_env *env, xmlrpc_value *param_array, void *server_info) { AgsServer *server; AgsRegistry *registry; AgsRegistryEntry *entry; GList *current; xmlrpc_value *bulk; xmlrpc_value *item; server = ags_server_lookup(server_info); registry = server->registry; bulk = xmlrpc_array_new(env); pthread_mutex_lock(&(registry->mutex)); current = registry->entry; while(current != NULL){ entry = (AgsRegistryEntry *) current->data; item = xmlrpc_string_new(env, entry->id); xmlrpc_array_append_item(env, bulk, item); current = current->next; } pthread_mutex_unlock(&(registry->mutex)); return(bulk); } #endif /* AGS_WITH_XMLRPC_C */ AgsRegistry* ags_registry_new() { AgsRegistry *registry; registry = (AgsRegistry *) g_object_new(AGS_TYPE_REGISTRY, NULL); return(registry); } gsequencer-0.6.37/src/ags/widget/0000755000175000017500000000000012633241335013577 500000000000000gsequencer-0.6.37/src/ags/widget/ags_table.c0000644000175000017500000000347312621463700015612 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include void ags_table_class_init(AgsTableClass *table); void ags_table_init(AgsTable *table); GType ags_table_get_type(void) { static GType ags_type_table = 0; if(!ags_type_table){ static const GTypeInfo ags_table_info = { sizeof(AgsTableClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_table_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(AgsTable), 0, /* n_preallocs */ (GInstanceInitFunc) ags_table_init, }; ags_type_table = g_type_register_static(GTK_TYPE_TABLE, "AgsTable\0", &ags_table_info, 0); } return(ags_type_table); } void ags_table_class_init(AgsTableClass *table) { } void ags_table_init(AgsTable *table) { } AgsTable* ags_table_new(guint row, guint columns, gboolean homogeneous) { AgsTable *table; table = (AgsTable *) g_object_new(AGS_TYPE_TABLE, "n-rows\0", row, "n-columns\0", columns, "homogeneous\0", homogeneous, NULL); return(table); } gsequencer-0.6.37/src/ags/widget/ags_expander.c0000644000175000017500000002662512626272146016344 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include "ags_expander.h" #include #include void ags_expander_class_init(AgsExpanderClass *expander); void ags_expander_init(AgsExpander *expander); void ags_expander_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_expander_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_expander_finalize(GObject *gobject); void ags_expander_show(GtkWidget *widget); void ags_expander_realize(GtkWidget *widget); void ags_expander_size_request(GtkWidget *widget, GtkRequisition *requisition); void ags_expander_size_allocate(GtkWidget *widget, GtkAllocation *allocation); gboolean ags_expander_expose(GtkWidget *widget, GdkEventExpose *event); void ags_expander_activate(GtkExpander *expander); void ags_expander_width_changed(GObject *gobject, GParamSpec *pspec, AgsExpander *expander); void ags_expander_height_changed(GObject *gobject, GParamSpec *pspec, AgsExpander *expander); void ags_expander_draw(AgsExpander *expander); void ags_expander_insert_child(AgsExpander *expander, AgsExpanderChild *child); void ags_expander_remove_child(AgsExpander *expander, AgsExpanderChild *child); /** * SECTION:ags_expander * @short_description: A expander widget * @title: AgsExpander * @section_id: * @include: ags/widget/ags_expander.h * * #AgsExpander is a composite widget containing a #GtkTable. It * is mainly used to layout childs in rows and columns that can * be expanded. */ enum{ PROP_0, PROP_WIDTH, PROP_HEIGHT, PROP_CHILD, }; static gpointer ags_expander_parent_class = NULL; GType ags_expander_get_type(void) { static GType ags_type_expander = 0; if(!ags_type_expander){ static const GTypeInfo ags_expander_info = { sizeof(AgsExpanderClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_expander_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(AgsExpander), 0, /* n_preallocs */ (GInstanceInitFunc) ags_expander_init, }; ags_type_expander = g_type_register_static(GTK_TYPE_EXPANDER, "AgsExpander\0", &ags_expander_info, 0); } return(ags_type_expander); } void ags_expander_class_init(AgsExpanderClass *expander) { GObjectClass *gobject; GtkWidgetClass *widget; GtkExpanderClass *parent; GParamSpec *param_spec; ags_expander_parent_class = g_type_class_peek_parent(expander); /* GObjectClass */ gobject = G_OBJECT_CLASS(expander); gobject->set_property = ags_expander_set_property; gobject->get_property = ags_expander_get_property; gobject->finalize = ags_expander_finalize; /* properties */ param_spec = g_param_spec_uint("width\0", "width of expander grid\0", "The width of the expander's grid\0", 0, G_MAXUINT, 1, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_WIDTH, param_spec); param_spec = g_param_spec_uint("height\0", "height of expander\0", "The height which this expander is packed into\0", 0, G_MAXUINT, 1, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_HEIGHT, param_spec); param_spec = g_param_spec_object("child\0", "child of expander\0", "The child which this expander is packed into\0", GTK_TYPE_WIDGET, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_CHILD, param_spec); /* GtkWidgetClass */ widget = (GtkWidgetClass *) expander; // widget->realize = ags_expander_realize; // widget->expose_event = ags_expander_expose; // widget->size_request = ags_expander_size_request; // widget->size_allocate = ags_expander_size_allocate; /* GtkExpanderClass */ parent = (GtkExpanderClass *) expander; parent->activate = ags_expander_activate; } void ags_expander_init(AgsExpander *expander) { g_object_set(G_OBJECT(expander), "app-paintable\0", TRUE, NULL); g_signal_connect(expander, "notify::width\0", G_CALLBACK(ags_expander_width_changed), expander); g_signal_connect(expander, "notify::height\0", G_CALLBACK(ags_expander_height_changed), expander); expander->flags = 0; expander->table = (GtkTable *) gtk_table_new(2, 2, FALSE); gtk_container_add(GTK_CONTAINER(expander), GTK_WIDGET(expander->table)); expander->children = NULL; } void ags_expander_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsExpander *expander; expander = AGS_EXPANDER(gobject); switch(prop_id){ case PROP_WIDTH: { guint width, height; gtk_table_get_size(expander->table, &width, &height); width = g_value_get_uint(value); gtk_table_resize(expander->table, width, height); } break; case PROP_HEIGHT: { guint width, height; gtk_table_get_size(expander->table, &width, &height); height = g_value_get_uint(value); gtk_table_resize(expander->table, width, height); } break; case PROP_CHILD: { AgsExpanderChild *child; child = (AgsExpanderChild *) g_value_get_pointer(value); ags_expander_insert_child(expander, child); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_expander_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsExpander *expander; expander = AGS_EXPANDER(gobject); switch(prop_id){ case PROP_WIDTH: { guint width, height; gtk_table_get_size(expander->table, &width, &height); g_value_set_uint(value, width); } break; case PROP_HEIGHT: { guint width, height; gtk_table_get_size(expander->table, &width, &height); g_value_set_uint(value, height); } break; case PROP_CHILD: g_value_set_pointer(value, expander->children); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_expander_finalize(GObject *gobject) { AgsExpander *expander; expander = AGS_EXPANDER(gobject); if(expander->children != NULL){ ags_list_free_and_free_link(expander->children); } /* call parent */ G_OBJECT_CLASS(ags_expander_parent_class)->finalize(gobject); } void ags_expander_realize(GtkWidget *widget) { //TODO:JK: implement me } void ags_expander_size_request(GtkWidget *widget, GtkRequisition *requisition) { //TODO:JK: implement me } void ags_expander_size_allocate(GtkWidget *widget, GtkAllocation *allocation) { //TODO:JK: implement me } gboolean ags_expander_expose(GtkWidget *widget, GdkEventExpose *event) { //TODO:JK: implement me } void ags_expander_activate(GtkExpander *expander) { GTK_EXPANDER_CLASS(ags_expander_parent_class)->activate(expander); if(gtk_expander_get_expanded(expander)){ gtk_widget_show_all(GTK_WIDGET(AGS_EXPANDER(expander)->table)); }else{ gtk_widget_hide(GTK_WIDGET(AGS_EXPANDER(expander)->table)); } } void ags_expander_width_changed(GObject *gobject, GParamSpec *pspec, AgsExpander *expander) { //TODO:JK: implement me } void ags_expander_height_changed(GObject *gobject, GParamSpec *pspec, AgsExpander *expander) { //TODO:JK: implement me } void ags_expander_flags(AgsExpander *expander, guint flags) { //TODO:JK: implement me } AgsExpanderChild* ags_expander_child_alloc(guint x, guint y, guint width, guint height) { AgsExpanderChild *child; child = (AgsExpanderChild *) malloc(sizeof(AgsExpanderChild)); child->x = x; child->y = y; child->width = width; child->height = height; return(child); } void ags_expander_draw(AgsExpander *expander) { //TODO:JK: implement me } AgsExpanderChild* ags_expander_child_find(AgsExpander *expander, GtkWidget *child) { GList *list; list = expander->children; while(list != NULL){ if(AGS_EXPANDER_CHILD(list->data)->child == child){ return((AgsExpanderChild *) list->data); } list = list->next; } return(NULL); } void ags_expander_insert_child(AgsExpander *expander, AgsExpanderChild *child) { GList *list; guint i; list = expander->children; i = 0; while(list != NULL){ if(AGS_EXPANDER_CHILD(list->data)->x > child->x){ break; } if(AGS_EXPANDER_CHILD(list->data)->x == child->x){ while(list != NULL){ if(AGS_EXPANDER_CHILD(list->data)->x > child->x){ break; } if(AGS_EXPANDER_CHILD(list->data)->x == child->x && AGS_EXPANDER_CHILD(list->data)->y >= child->y){ break; } i++; list = list->next; } break; } i++; list = list->next; } gtk_table_attach(expander->table, child->child, child->x, child->x + child->width, child->y, child->y + child->height, 0, 0, 0, 0); expander->children = g_list_insert(expander->children, child, i); } void ags_expander_remove_child(AgsExpander *expander, AgsExpanderChild *child) { gtk_container_remove(GTK_CONTAINER(expander->table), child->child); expander->children = g_list_remove(expander->children, child); free(child); } /** * ags_expander_add: * @expander: the #AgsExpander * @widget: the child #GtkWidget * @x: x-position * @y: y-position * @width: allocation width * @height: allocation height * * Adds a #GtkWidget to #AgsExpander * * Since: 0.4 */ void ags_expander_add(AgsExpander *expander, GtkWidget *widget, guint x, guint y, guint width, guint height) { AgsExpanderChild *child; child = ags_expander_child_alloc(x, y, width, height); child->child = widget; ags_expander_insert_child(expander, child); if(GTK_WIDGET_VISIBLE(expander)){ gtk_widget_show_all(child->child); } } /** * ags_expander_remove: * @expander: the #AgsExpander * @widget: the child #GtkWidget * * Removes a #GtkWidget of #AgsExpander * * Since: 0.4 */ void ags_expander_remove(AgsExpander *expander, GtkWidget *widget) { ags_expander_remove_child(expander, ags_expander_child_find(expander, widget)); } /** * ags_expander_new: * @height: the table's height * @width: the table's width * * Creates an #AgsExpander * * Returns: a new #AgsExpander * * Since: 0.4 */ AgsExpander* ags_expander_new(guint width, guint height) { AgsExpander *expander; expander = (AgsExpander *) g_object_new(AGS_TYPE_EXPANDER, "width\0", width, "height\0", height, NULL); return(expander); } gsequencer-0.6.37/src/ags/widget/ags_timebar.c0000644000175000017500000000144712621463700016145 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include gsequencer-0.6.37/src/ags/widget/ags_menu.h0000644000175000017500000000327612621463700015475 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_MENU_H__ #define __AGS_MENU_H__ #include #include #include #include #define AGS_TYPE_MENU (ags_menu_get_type()) #define AGS_MENU(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_MENU, AgsMenu)) #define AGS_MENU_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_MENU, AgsMenuClass)) #define AGS_IS_MENU(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_MENU)) #define AGS_IS_MENU_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_MENU)) #define AGS_MENU_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_MENU, AgsMenuClass)) typedef struct _AgsMenu AgsMenu; typedef struct _AgsMenuClass AgsMenuClass; struct _AgsMenu { GtkWindow window; AgsTable *table; }; struct _AgsMenuClass { GtkWindowClass window; }; GType ags_menu_get_type(void); AgsMenu* ags_menu_new(); #endif /*__AGS_MENU_H__*/ gsequencer-0.6.37/src/ags/widget/ags_expander_set.h0000644000175000017500000000565312621463700017213 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_EXPANDER_SET_H__ #define __AGS_EXPANDER_SET_H__ #include #include #include #define AGS_TYPE_EXPANDER_SET (ags_expander_set_get_type()) #define AGS_EXPANDER_SET(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_EXPANDER_SET, AgsExpanderSet)) #define AGS_EXPANDER_SET_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_EXPANDER_SET, AgsExpanderSetClass)) #define AGS_IS_EXPANDER_SET(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_EXPANDER_SET)) #define AGS_IS_EXPANDER_SET_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_EXPANDER_SET)) #define AGS_EXPANDER_SET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_EXPANDER_SET, AgsExpanderSetClass)) #define AGS_EXPANDER_SET_CHILD(ptr) ((AgsExpanderSetChild *)(ptr)) typedef struct _AgsExpanderSet AgsExpanderSet; typedef struct _AgsExpanderSetClass AgsExpanderSetClass; typedef struct _AgsExpanderSetChild AgsExpanderSetChild; typedef enum{ AGS_EXPANDER_SET_DRAW_GHOST = 1, AGS_EXPANDER_SET_DRAW_LEFT_ENDING = 1 << 1, AGS_EXPANDER_SET_DRAW_RIGHT_ENDING = 1 << 2, AGS_EXPANDER_SET_DRAW_LEFT_CONNECTOR = 1 << 3, AGS_EXPANDER_SET_DRAW_RIGHT_CONNECTOR = 1 << 4, }AgsExpanderSetFlags; struct _AgsExpanderSet { GtkTable table; guint flags; GList *ghost; GList *location; }; struct _AgsExpanderSetClass { GtkTableClass table; }; struct _AgsExpanderSetChild { GtkWidget *child; guint x; guint y; guint width; guint height; }; GType ags_expander_set_get_type(void); AgsExpanderSetChild* ags_expander_set_child_alloc(guint x, guint y, guint width, guint height); AgsExpanderSetChild* ags_expander_set_child_find(AgsExpanderSet *expander_set, GtkWidget *child); void ags_expander_set_set_flags(AgsExpanderSet *expander_set, guint flags); void ags_expander_set_add(AgsExpanderSet *expander_set, GtkWidget *widget, guint x, guint y, guint width, guint height); void ags_expander_set_remove(AgsExpanderSet *expander_set, GtkWidget *widget); AgsExpanderSet* ags_expander_set_new(guint width, guint height); #endif /*__AGS_EXPANDER_SET_H__*/ gsequencer-0.6.37/src/ags/widget/ags_dial.c0000644000175000017500000010365412626422440015437 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include "ags_dial.h" #include #include #include #include static GType ags_accessible_dial_get_type(void); void ags_dial_class_init(AgsDialClass *dial); void ags_accessible_dial_class_init(AtkObject *object); void ags_accessible_dial_value_interface_init(AtkValueIface *value); void ags_accessible_dial_action_interface_init(AtkActionIface *action); void ags_dial_init(AgsDial *dial); void ags_dial_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_dial_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); AtkObject* ags_dial_get_accessible(GtkWidget *widget); void ags_dial_show(GtkWidget *widget); void ags_accessible_dial_get_value_and_text(AtkValue *value, gdouble *current_value, gchar **text); AtkRange* ags_accessible_dial_get_range(AtkValue *value); gdouble ags_accessible_dial_get_increment(AtkValue *value); void ags_accessible_dial_set_value(AtkValue *value, gdouble new_value); gboolean ags_accessible_dial_do_action(AtkAction *action, gint i); gint ags_accessible_dial_get_n_actions(AtkAction *action); const gchar* ags_accessible_dial_get_description(AtkAction *action, gint i); const gchar* ags_accessible_dial_get_name(AtkAction *action, gint i); const gchar* ags_accessible_dial_get_keybinding(AtkAction *action, gint i); gboolean ags_accessible_dial_set_description(AtkAction *action, gint i); gchar* ags_accessible_dial_get_localized_name(AtkAction *action, gint i); void ags_dial_map(GtkWidget *widget); void ags_dial_realize(GtkWidget *widget); void ags_dial_size_request(GtkWidget *widget, GtkRequisition *requisition); void ags_dial_size_allocate(GtkWidget *widget, GtkAllocation *allocation); gboolean ags_dial_expose(GtkWidget *widget, GdkEventExpose *event); gboolean ags_dial_button_press(GtkWidget *widget, GdkEventButton *event); gboolean ags_dial_button_release(GtkWidget *widget, GdkEventButton *event); gboolean ags_dial_key_press(GtkWidget *widget, GdkEventKey *event); gboolean ags_dial_key_release(GtkWidget *widget, GdkEventKey *event); gboolean ags_dial_motion_notify(GtkWidget *widget, GdkEventMotion *event); void ags_dial_draw(AgsDial *dial); void* ags_dial_idle(void *dial0); void ags_dial_adjustment_changed_callback(GtkAdjustment *adjustment, AgsDial *dial); /** * SECTION:ags_dial * @short_description: A dial widget * @title: AgsDial * @section_id: * @include: ags/widget/ags_dial.h * * #AgsDial is a widget representing a #GtkAdjustment. */ enum{ VALUE_CHANGED, LAST_SIGNAL, }; enum{ PROP_0, PROP_ADJUSTMENT, }; static gpointer ags_dial_parent_class = NULL; static guint dial_signals[LAST_SIGNAL]; static GQuark quark_accessible_object = 0; GtkStyle *dial_style; GType ags_dial_get_type(void) { static GType ags_type_dial = 0; if(!ags_type_dial){ static const GTypeInfo ags_dial_info = { sizeof(AgsDialClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_dial_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(AgsDial), 0, /* n_preallocs */ (GInstanceInitFunc) ags_dial_init, }; ags_type_dial = g_type_register_static(GTK_TYPE_WIDGET, "AgsDial\0", &ags_dial_info, 0); } return(ags_type_dial); } static GType ags_accessible_dial_get_type(void) { static GType ags_type_accessible_dial = 0; if(!ags_type_accessible_dial){ const GTypeInfo ags_accesssible_dial_info = { sizeof(GtkAccessibleClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_accessible_dial_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(GtkAccessible), 0, /* n_preallocs */ NULL, NULL }; static const GInterfaceInfo atk_value_interface_info = { (GInterfaceInitFunc) ags_accessible_dial_value_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo atk_action_interface_info = { (GInterfaceInitFunc) ags_accessible_dial_action_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_accessible_dial = g_type_register_static(GTK_TYPE_ACCESSIBLE, "AgsAccessibleDial\0", &ags_accesssible_dial_info, 0); g_type_add_interface_static(ags_type_accessible_dial, ATK_TYPE_VALUE, &atk_value_interface_info); g_type_add_interface_static(ags_type_accessible_dial, ATK_TYPE_ACTION, &atk_action_interface_info); } return(ags_type_accessible_dial); } void ags_dial_class_init(AgsDialClass *dial) { GObjectClass *gobject; GtkWidgetClass *widget; GParamSpec *param_spec; ags_dial_parent_class = g_type_class_peek_parent(dial); quark_accessible_object = g_quark_from_static_string("ags-accessible-object\0"); /* GObjectClass */ gobject = (GObjectClass *) dial; gobject->set_property = ags_dial_set_property; gobject->get_property = ags_dial_get_property; /* GtkWidgetClass */ widget = (GtkWidgetClass *) dial; widget->get_accessible = ags_dial_get_accessible; // widget->map = ags_dial_map; widget->realize = ags_dial_realize; widget->expose_event = ags_dial_expose; widget->size_request = ags_dial_size_request; widget->size_allocate = ags_dial_size_allocate; widget->button_press_event = ags_dial_button_press; widget->button_release_event = ags_dial_button_release; widget->key_press_event = ags_dial_key_press; widget->key_release_event = ags_dial_key_release; widget->motion_notify_event = ags_dial_motion_notify; widget->show = ags_dial_show; /* properties */ param_spec = g_param_spec_object("adjustment\0", "assigned adjustment\0", "The adjustment it is assigned with\0", G_TYPE_OBJECT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_ADJUSTMENT, param_spec); /* AgsDialClass */ dial->value_changed = NULL; /* signals */ /** * AgsDial::value-changed: * @dial: the #AgsDial * @port_data: the port's data * * The ::value-changed signal notifies adjustment value changed. */ dial_signals[VALUE_CHANGED] = g_signal_new("value-changed\0", G_TYPE_FROM_CLASS(dial), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsDialClass, value_changed), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); } void ags_accessible_dial_class_init(AtkObject *object) { /* empty */ } void ags_accessible_dial_value_interface_init(AtkValueIface *value) { value->get_current_value = NULL; value->get_maximum_value = NULL; value->get_minimum_value = NULL; value->set_current_value = NULL; value->get_minimum_increment = NULL; value->get_value_and_text = ags_accessible_dial_get_value_and_text; value->get_range = ags_accessible_dial_get_range; value->get_increment = ags_accessible_dial_get_increment; value->get_sub_ranges = NULL; value->set_value = ags_accessible_dial_set_value; } void ags_accessible_dial_action_interface_init(AtkActionIface *action) { action->do_action = ags_accessible_dial_do_action; action->get_n_actions = ags_accessible_dial_get_n_actions; action->get_description = ags_accessible_dial_get_description; action->get_name = ags_accessible_dial_get_name; action->get_keybinding = ags_accessible_dial_get_keybinding; action->set_description = ags_accessible_dial_set_description; action->get_localized_name = ags_accessible_dial_get_localized_name; } void ags_dial_init(AgsDial *dial) { AtkObject *accessible; gtk_widget_set_can_focus(dial, TRUE); accessible = gtk_widget_get_accessible(dial); g_object_set(accessible, "accessible-name\0", "dial\0", "accessible-description\0", "Adjust a value\0", NULL); g_object_set(G_OBJECT(dial), "app-paintable\0", TRUE, "can-focus\0", TRUE, NULL); gtk_widget_set_style((GtkWidget *) dial, dial_style); dial->flags = AGS_DIAL_WITH_BUTTONS; dial->adjustment = NULL; dial->radius = 8; dial->scale_precision = AGS_DIAL_DEFAULT_PRECISION; dial->outline_strength = 4; dial->font_size = 6; dial->button_width = 10; dial->button_height = 0; dial->margin_left = 4.0; dial->margin_right = 4.0; dial->tolerance = 0.9; dial->negated_tolerance = 1.1; dial->gravity_x = 0.0; dial->gravity_y = 0.0; dial->current_x = 0.0; dial->current_y = 0.0; } void ags_dial_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsDial *dial; dial = AGS_DIAL(gobject); switch(prop_id){ case PROP_ADJUSTMENT: { GtkAdjustment *adjustment; adjustment = (GtkAdjustment *) g_value_get_object(value); if(dial->adjustment == adjustment){ return; } if(dial->adjustment != NULL){ g_object_unref(G_OBJECT(dial->adjustment)); } if(adjustment != NULL){ g_object_ref(G_OBJECT(adjustment)); g_signal_connect(adjustment, "value-changed\0", G_CALLBACK(ags_dial_adjustment_changed_callback), dial); } dial->adjustment = adjustment; } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_dial_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsDial *dial; dial = AGS_DIAL(gobject); switch(prop_id){ case PROP_ADJUSTMENT: g_value_set_object(value, dial->adjustment); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_accessible_dial_get_value_and_text(AtkValue *value, gdouble *current_value, gchar **text) { AgsDial *dial; dial = (AgsDial *) gtk_accessible_get_widget(GTK_ACCESSIBLE(value)); if(current_value != NULL){ *current_value = gtk_adjustment_get_value(dial->adjustment); } if(text != NULL){ *text = g_strdup_printf("%f\0", gtk_adjustment_get_value(dial->adjustment)); } } AtkRange* ags_accessible_dial_get_range(AtkValue *value) { AgsDial *dial; AtkRange *range; dial = (AgsDial *) gtk_accessible_get_widget(GTK_ACCESSIBLE(value)); range = atk_range_new(gtk_adjustment_get_lower(dial->adjustment), gtk_adjustment_get_upper(dial->adjustment), "Valid lower and upper input range of this dial\0"); } gdouble ags_accessible_dial_get_increment(AtkValue *value) { AgsDial *dial; dial = (AgsDial *) gtk_accessible_get_widget(GTK_ACCESSIBLE(value)); return(gtk_adjustment_get_step_increment(dial->adjustment)); } void ags_accessible_dial_set_value(AtkValue *value, gdouble new_value) { AgsDial *dial; dial = (AgsDial *) gtk_accessible_get_widget(GTK_ACCESSIBLE(value)); gtk_adjustment_set_value(dial->adjustment, new_value); gtk_widget_queue_draw(dial); } gboolean ags_accessible_dial_do_action(AtkAction *action, gint i) { AgsDial *dial; GdkEventKey *key_press, *key_release; if(!(i >= 0 && i < 2)){ return(FALSE); } dial = gtk_accessible_get_widget(ATK_OBJECT(action)); key_press = gdk_event_new(GDK_KEY_PRESS); key_release = gdk_event_new(GDK_KEY_RELEASE); switch(i){ case AGS_DIAL_INCREMENT: { key_press->keyval = key_release->keyval = GDK_KEY_Up; /* send event */ gtk_widget_event(dial, key_press); gtk_widget_event(dial, key_release); } break; case AGS_DIAL_DECREMENT: { key_press->keyval = key_release->keyval = GDK_KEY_Down; /* send event */ gtk_widget_event(dial, key_press); gtk_widget_event(dial, key_release); } break; } return(TRUE); } gint ags_accessible_dial_get_n_actions(AtkAction *action) { return(2); } const gchar* ags_accessible_dial_get_description(AtkAction *action, gint i) { static const gchar **actions = { "increment dial value\0", "decrement dial value\0", }; if(i >= 0 && i < 2){ return(actions[i]); }else{ return(NULL); } } const gchar* ags_accessible_dial_get_name(AtkAction *action, gint i) { static const gchar **actions = { "increment\0", "decrement\0", }; if(i >= 0 && i < 2){ return(actions[i]); }else{ return(NULL); } } const gchar* ags_accessible_dial_get_keybinding(AtkAction *action, gint i) { static const gchar **actions = { "up\0", "down\0", }; if(i >= 0 && i < 2){ return(actions[i]); }else{ return(NULL); } } gboolean ags_accessible_dial_set_description(AtkAction *action, gint i) { //TODO:JK: implement me return(FALSE); } gchar* ags_accessible_dial_get_localized_name(AtkAction *action, gint i) { //TODO:JK: implement me return(NULL); } void ags_dial_map(GtkWidget *widget) { if (gtk_widget_get_realized (widget) && !gtk_widget_get_mapped (widget)) { GTK_WIDGET_CLASS (ags_dial_parent_class)->map(widget); gdk_window_show(widget->window); ags_dial_draw((AgsDial *) widget); } } void ags_dial_realize(GtkWidget *widget) { AgsDial *dial; GdkWindowAttr attributes; gint attributes_mask; gint buttons_width; gint border_left, border_top; g_return_if_fail (widget != NULL); g_return_if_fail (AGS_IS_DIAL (widget)); dial = AGS_DIAL(widget); gtk_widget_set_realized (widget, TRUE); /* calculate some display dependend fields */ buttons_width = 0; if((AGS_DIAL_WITH_BUTTONS & (dial->flags)) != 0){ cairo_t *cr; cairo_text_extents_t te_up, te_down; cr = gdk_cairo_create(widget->parent->window); cairo_select_font_face (cr, "Georgia\0", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD); cairo_set_font_size (cr, (gdouble) dial->font_size); cairo_text_extents (cr, "-\0", &te_down); cairo_text_extents (cr, "+\0", &te_up); if(te_down.width < te_up.width){ dial->button_width = te_up.width * 3; }else{ dial->button_width = te_down.width * 3; } buttons_width = 2 * dial->button_width; if(te_down.height < te_up.height){ dial->button_height = te_up.height * 2; }else{ dial->button_height = te_down.height * 2; } cairo_destroy(cr); } /* */ attributes.window_type = GDK_WINDOW_CHILD; attributes.x = widget->allocation.x; attributes.y = widget->allocation.y; attributes.width = widget->allocation.width; attributes.height = widget->allocation.height; attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP; attributes.window_type = GDK_WINDOW_CHILD; attributes.wclass = GDK_INPUT_OUTPUT; attributes.visual = gtk_widget_get_visual (widget); attributes.colormap = gtk_widget_get_colormap (widget); attributes.event_mask = gtk_widget_get_events (widget); attributes.event_mask |= (GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_CONTROL_MASK | GDK_BUTTON1_MOTION_MASK | GDK_BUTTON3_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_POINTER_MOTION_MASK | GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK); widget->window = gdk_window_new (gtk_widget_get_parent_window (widget), &attributes, attributes_mask); gdk_window_set_user_data (widget->window, dial); widget->style = gtk_style_attach (widget->style, widget->window); gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL); gtk_widget_queue_resize (widget); } AtkObject* ags_dial_get_accessible(GtkWidget *widget) { AtkObject* accessible; accessible = g_object_get_qdata(G_OBJECT(widget), quark_accessible_object); if(!accessible){ accessible = g_object_new(ags_accessible_dial_get_type(), NULL); g_object_set_qdata(G_OBJECT(widget), quark_accessible_object, accessible); gtk_accessible_set_widget(accessible, widget); } return(accessible); } void ags_dial_show(GtkWidget *widget) { GTK_WIDGET_CLASS(ags_dial_parent_class)->show(widget); } void ags_dial_size_request(GtkWidget *widget, GtkRequisition *requisition) { GTK_WIDGET_CLASS(ags_dial_parent_class)->size_request(widget, requisition); /* implement me */ //TODO:JK: } void ags_dial_size_allocate(GtkWidget *widget, GtkAllocation *allocation) { GTK_WIDGET_CLASS(ags_dial_parent_class)->size_allocate(widget, allocation); /* implement me */ //TODO:JK: } gboolean ags_dial_expose(GtkWidget *widget, GdkEventExpose *event) { ags_dial_draw(AGS_DIAL(widget)); return(FALSE); } gboolean ags_dial_button_press(GtkWidget *widget, GdkEventButton *event) { AgsDial *dial; gint border_left, border_top; gint dial_left_position; auto gboolean ags_dial_button_press_is_down_event(); auto gboolean ags_dial_button_press_is_up_event(); auto gboolean ags_dial_button_press_is_dial_event(); gboolean ags_dial_button_press_is_down_event(){ if(event->x >= border_left && event->x <= border_left + dial->button_width && event->y >= border_top + 2 * dial->radius + 2 * dial->outline_strength - dial->button_height && event->y <= border_top + 2 * dial->radius + 2 * dial->outline_strength){ return(TRUE); }else{ return(FALSE); } } gboolean ags_dial_button_press_is_up_event(){ gint offset; offset = border_left + dial->button_width + 2 * dial->radius + dial->margin_left + dial->margin_right; if(event->x >= offset && event->x <= offset + dial->button_width && event->y >= border_top + 2 * dial->radius + 2 * dial->outline_strength - dial->button_height && event->y <= border_top + 2 * dial->radius + 2 * dial->outline_strength){ return(TRUE); }else{ return(FALSE); } } gboolean ags_dial_button_press_is_dial_event(){ if(event->x >= dial_left_position && event->x <= dial_left_position + 2 * dial->radius + 2 * dial->outline_strength){ if((cos(event->y) < 0.0 && cos(event->y) >= -1.0) || (sin(event->y) > 0.0 && sin(event->y) <= 1.0) || (cos(event->y) < 0.0 && sin(event->y) >= -1.0) || (sin(event->y) < 0.0 && cos(event->y) >= -1.0)){ return(TRUE); }else{ return(FALSE); } }else{ return(FALSE); } } // GTK_WIDGET_CLASS(ags_dial_parent_class)->button_press_event(widget, event); dial = AGS_DIAL(widget); dial->flags |= AGS_DIAL_MOUSE_BUTTON_PRESSED; //TODO:JK: retrieve borders border_left = 0; border_top = 0; if((AGS_DIAL_WITH_BUTTONS & (dial->flags)) != 0){ if(ags_dial_button_press_is_down_event()){ dial->flags |= AGS_DIAL_BUTTON_DOWN_PRESSED; }else if(ags_dial_button_press_is_up_event()){ dial->flags |= AGS_DIAL_BUTTON_UP_PRESSED; }else{ dial_left_position = border_left + dial->button_width; if(ags_dial_button_press_is_dial_event()){ dial->flags |= AGS_DIAL_MOTION_CAPTURING; } } }else{ dial_left_position = border_left; if(ags_dial_button_press_is_dial_event()){ dial->gravity_x = event->x; dial->gravity_y = event->y; dial->current_x = event->x; dial->current_y = event->y; dial->flags |= AGS_DIAL_MOTION_CAPTURING_INIT; dial->flags |= AGS_DIAL_MOTION_CAPTURING; } } return(FALSE); } gboolean ags_dial_button_release(GtkWidget *widget, GdkEventButton *event) { AgsDial *dial; // GTK_WIDGET_CLASS(ags_dial_parent_class)->button_release_event(widget, event); gtk_widget_grab_focus(widget); dial = AGS_DIAL(widget); dial->flags &= (~AGS_DIAL_MOUSE_BUTTON_PRESSED); if((AGS_DIAL_BUTTON_DOWN_PRESSED & (dial->flags)) != 0){ GtkAdjustment *adjustment; adjustment = dial->adjustment; if(adjustment->value > adjustment->lower){ gtk_adjustment_set_value(adjustment, adjustment->value - adjustment->step_increment); ags_dial_draw(dial); } dial->flags &= (~AGS_DIAL_BUTTON_DOWN_PRESSED); }else if((AGS_DIAL_BUTTON_UP_PRESSED & (dial->flags)) != 0){ GtkAdjustment *adjustment; adjustment = dial->adjustment; if(adjustment->value < adjustment->upper){ gtk_adjustment_set_value(adjustment, adjustment->value + adjustment->step_increment); ags_dial_draw(dial); } dial->flags &= (~AGS_DIAL_BUTTON_UP_PRESSED); }else if((AGS_DIAL_MOTION_CAPTURING & (dial->flags)) != 0){ dial->flags &= (~AGS_DIAL_MOTION_CAPTURING); } return(FALSE); } gboolean ags_dial_key_press(GtkWidget *widget, GdkEventKey *event) { if(event->keyval == GDK_KEY_Tab || event->keyval == GDK_ISO_Left_Tab || event->keyval == GDK_KEY_Shift_L || event->keyval == GDK_KEY_Shift_R || event->keyval == GDK_KEY_Alt_L || event->keyval == GDK_KEY_Alt_R || event->keyval == GDK_KEY_Control_L || event->keyval == GDK_KEY_Control_R ){ return(GTK_WIDGET_CLASS(ags_dial_parent_class)->key_press_event(widget, event)); } return(TRUE); } gboolean ags_dial_key_release(GtkWidget *widget, GdkEventKey *event) { AgsDial *dial; if(event->keyval == GDK_KEY_Tab || event->keyval == GDK_ISO_Left_Tab || event->keyval == GDK_KEY_Shift_L || event->keyval == GDK_KEY_Shift_R || event->keyval == GDK_KEY_Alt_L || event->keyval == GDK_KEY_Alt_R || event->keyval == GDK_KEY_Control_L || event->keyval == GDK_KEY_Control_R){ return(GTK_WIDGET_CLASS(ags_dial_parent_class)->key_release_event(widget, event)); } dial = AGS_DIAL(widget); switch(event->keyval){ case GDK_KEY_Up: case GDK_KEY_uparrow: { gdouble value, step, upper; value = gtk_adjustment_get_value(dial->adjustment); step = gtk_adjustment_get_step_increment(dial->adjustment); upper = gtk_adjustment_get_upper(dial->adjustment); if(value + step > upper){ gtk_adjustment_set_value(dial->adjustment, upper); }else{ gtk_adjustment_set_value(dial->adjustment, value + step); } gtk_widget_queue_draw(widget); } break; case GDK_KEY_Down: case GDK_KEY_downarrow: { gdouble value, step, lower; value = gtk_adjustment_get_value(dial->adjustment); step = gtk_adjustment_get_step_increment(dial->adjustment); lower = gtk_adjustment_get_lower(dial->adjustment); if(value - step < lower){ gtk_adjustment_set_value(dial->adjustment, lower); }else{ gtk_adjustment_set_value(dial->adjustment, value - step); } gtk_widget_queue_draw(widget); } break; } return(TRUE); } gboolean ags_dial_motion_notify(GtkWidget *widget, GdkEventMotion *event) { AgsDial *dial; auto void ags_dial_motion_notify_do_dial(); void ags_dial_motion_notify_do_dial(){ GtkAdjustment *adjustment; guint i; gint sign_one; gboolean gravity_up; static const gboolean movement_matrix[] = { FALSE, TRUE, FALSE, FALSE, TRUE, FALSE, TRUE, TRUE, }; adjustment = dial->adjustment; gravity_up = FALSE; for(i = 0; i < 8 ; i++){ if(!movement_matrix[i]){ sign_one = -1; }else{ sign_one = 1; } if((movement_matrix[i] && (sign_one * (dial->gravity_x - dial->current_x) < sign_one * (dial->gravity_y - dial->current_y))) || (!movement_matrix[i] && (sign_one * (dial->gravity_x - dial->current_x) > sign_one * (dial->gravity_y - dial->current_y)))){ gravity_up = TRUE; break; } } if(!gravity_up){ if(adjustment->value > adjustment->lower){ gtk_adjustment_set_value(adjustment, adjustment->value - adjustment->step_increment); ags_dial_draw(dial); } }else{ if(adjustment->value < adjustment->upper){ gtk_adjustment_set_value(adjustment, adjustment->value + adjustment->step_increment); ags_dial_draw(dial); } } } // GTK_WIDGET_CLASS(ags_dial_parent_class)->motion_notify_event(widget, event); dial = AGS_DIAL(widget); if((AGS_DIAL_MOTION_CAPTURING & (dial->flags)) != 0){ if((AGS_DIAL_MOTION_CAPTURING_INIT & (dial->flags)) != 0){ dial->current_x = event->x; dial->current_y = event->y; dial->flags &= (~AGS_DIAL_MOTION_CAPTURING_INIT); ags_dial_motion_notify_do_dial(); }else{ dial->gravity_x = dial->current_x; dial->gravity_y = dial->current_y; dial->current_x = event->x; dial->current_y = event->y; ags_dial_motion_notify_do_dial(); } } return(FALSE); } /** * ags_dial_draw: * @dial an #AgsDial * * draws the widget */ void ags_dial_draw(AgsDial *dial) { GtkWidget *widget; GtkStyle *dial_style; cairo_t *cr; cairo_text_extents_t te_up, te_down; gdouble button_width, button_height, margin_left, margin_right; gdouble radius, outline_strength; gdouble unused; gdouble scale_area, scale_width, scale_inverted_width; gdouble starter_angle; gdouble translated_value; gdouble range; guint scale_precision; guint i; static const gdouble white_gc = 65535.0; widget = GTK_WIDGET(dial); dial_style = gtk_widget_get_style(widget); cr = gdk_cairo_create(widget->window); radius = (gdouble) dial->radius; outline_strength = (gdouble) dial->outline_strength; margin_left = (gdouble) dial->margin_left; margin_right = (gdouble) dial->margin_right; cairo_select_font_face (cr, "Georgia\0", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD); cairo_set_font_size (cr, (gdouble) dial->font_size); cairo_text_extents (cr, "-\0", &te_down); cairo_text_extents (cr, "+\0", &te_up); button_width = dial->button_width; button_height = dial->button_height; if((AGS_DIAL_WITH_BUTTONS & (dial->flags)) != 0){ /* draw controller button down */ cairo_set_source_rgb(cr, dial_style->fg[0].red / white_gc, dial_style->fg[0].green / white_gc, dial_style->fg[0].blue / white_gc); cairo_set_line_width(cr, 2.0); cairo_rectangle(cr, 1.0, (2.0 * radius) - button_height + outline_strength, button_width, button_height); cairo_stroke(cr); cairo_move_to (cr, 1.0 + 0.5 - te_down.width / 2.0 - te_down.x_bearing + button_width / 2.25, 0.5 - te_down.height / 2.0 - te_down.y_bearing + (radius * 2.0) - button_height / 2.0 + outline_strength); cairo_show_text (cr, "-\0"); } /* border fill */ cairo_set_source_rgb(cr, dial_style->fg[0].red / white_gc, dial_style->fg[0].green / white_gc, dial_style->fg[0].blue / white_gc); cairo_arc(cr, 1.0 + button_width + margin_left + radius, radius + outline_strength, radius + 2.0, -1.0 * M_PI, 1.0 * M_PI); cairo_stroke(cr); /* background */ cairo_set_source_rgb(cr, dial_style->dark[0].red / white_gc, dial_style->dark[0].green / white_gc, dial_style->dark[0].blue / white_gc); cairo_arc(cr, 1.0 + button_width + margin_left + radius, radius + outline_strength, radius, -1.0 * M_PI, 1.0 * M_PI); cairo_fill(cr); /* light effect */ cairo_set_source_rgba(cr, dial_style->light[0].red / white_gc, dial_style->light[0].green / white_gc, dial_style->light[0].blue / white_gc, 0.3); cairo_line_to(cr, 1.0 + button_width + margin_left + radius, radius + 2.0 * outline_strength - 2.0 - outline_strength); cairo_line_to(cr, 1.0 + sin(-1 * (0.35 * M_PI) / (0.65 * M_PI)) + button_width + margin_left + radius, cos((0.65 * M_PI) / (0.35 * M_PI)) + radius + 2.0 * outline_strength - 1.0); cairo_line_to(cr, 1.0 + sin((0.65 * M_PI) / (0.35 * M_PI)) + button_width + margin_left + radius, -1 * cos((0.35 * M_PI) / (0.65 * M_PI)) + radius + 2.0 * outline_strength - 1.0); cairo_close_path(cr); cairo_arc (cr, 1.0 + button_width + margin_left + radius, radius + outline_strength, radius, 0.35 * M_PI, 0.65 * M_PI); cairo_fill(cr); cairo_line_to(cr, 1.0 + cos((0.65 * M_PI) / (0.35 * M_PI)) + button_width + margin_left + radius, -1 * sin((0.35 * M_PI) / (0.65 * M_PI)) + radius + 2.0 * outline_strength - 1.0); cairo_line_to(cr, 1.0 + -1 * cos((0.35 * M_PI) / (0.65 * M_PI)) + button_width + margin_left + radius, sin((0.65 * M_PI) / (0.35 * M_PI)) + radius + 2.0 * outline_strength - 1.0); cairo_line_to(cr, 1.0 + button_width + margin_left + radius, radius + 2.0 * outline_strength - 1.0); cairo_close_path(cr); cairo_arc (cr, 1.0 + button_width + margin_left + radius, radius + outline_strength, radius, -0.65 * M_PI, -0.35 * M_PI); cairo_fill(cr); /* outline */ cairo_set_source_rgb(cr, dial_style->fg[0].red / white_gc, dial_style->fg[0].green / white_gc, dial_style->fg[0].blue / white_gc); // cairo_set_line_width(cr, 1.0 - (2.0 / M_PI)); cairo_set_line_width(cr, 1.0); cairo_arc (cr, 1.0 + button_width + margin_left + radius, radius + outline_strength, radius, -1.0 * M_PI, 1.0 * M_PI); cairo_stroke(cr); /* scale */ cairo_set_source_rgb(cr, dial_style->fg[0].red / white_gc, dial_style->fg[0].green / white_gc, dial_style->fg[0].blue / white_gc); cairo_set_line_width(cr, 3.0); unused = 0.25 * 2.0 * M_PI; starter_angle = (2.0 * M_PI - unused) * 0.5; scale_precision = (gdouble) dial->scale_precision; scale_inverted_width = (2.0 * (radius + outline_strength) * M_PI - ((radius + outline_strength) * unused)) / scale_precision - 4.0; scale_width = (2.0 * (radius + outline_strength) * M_PI - ((radius + outline_strength) * unused)) / scale_precision - scale_inverted_width; scale_inverted_width /= (radius + outline_strength); scale_width /= (radius + outline_strength); for(i = 0; i <= scale_precision; i++){ cairo_arc (cr, 1.0 + button_width + margin_left + radius, radius + outline_strength, radius + outline_strength / M_PI, starter_angle + ((gdouble) i * scale_inverted_width) + ((gdouble) i * scale_width), starter_angle + ((gdouble) i * scale_inverted_width) + ((gdouble) i * scale_width) + scale_width); cairo_stroke(cr); } /* draw value */ if(dial->adjustment->upper >= 0.0 && dial->adjustment->lower >= 0.0){ range = (dial->adjustment->upper - dial->adjustment->lower); }else if(dial->adjustment->upper < 0.0 && dial->adjustment->lower < 0.0){ range = -1.0 * (dial->adjustment->lower - dial->adjustment->upper); }else{ range = (dial->adjustment->upper - dial->adjustment->lower); } if(range == 0.0){ g_warning("ags_dial.c - range = 0.0\0"); return; } if(dial->adjustment->lower < 0.0){ translated_value = (gdouble) scale_precision * (dial->adjustment->value - dial->adjustment->lower) / range; }else{ translated_value = (gdouble) scale_precision * (dial->adjustment->value + dial->adjustment->lower) / range; } // g_message("value: %f\nupper: %f\ntranslated_value: %f\n\0", GTK_RANGE(dial)->adjustment->value, GTK_RANGE(dial)->adjustment->upper, translated_value); cairo_set_line_width(cr, 4.0); cairo_set_source_rgb(cr, dial_style->fg[0].red / white_gc, dial_style->fg[0].green / white_gc, dial_style->fg[0].blue / white_gc); cairo_arc (cr, 1.0 + button_width + margin_left + radius, radius + outline_strength, radius - (outline_strength + 4.0) / M_PI, starter_angle + (translated_value * scale_inverted_width) + (translated_value * scale_width), starter_angle + (translated_value * scale_inverted_width) + (translated_value * scale_width) + scale_width); cairo_stroke(cr); if((AGS_DIAL_WITH_BUTTONS & (dial->flags)) != 0){ /* draw controller button up */ cairo_set_source_rgb(cr, dial_style->fg[0].red / white_gc, dial_style->fg[0].green / white_gc, dial_style->fg[0].blue / white_gc); cairo_set_line_width(cr, 2.0); cairo_rectangle(cr, 1.0 + (2.0 * radius) + button_width + margin_left + margin_right, (2.0 * radius) - button_height + outline_strength, button_width, button_height); cairo_set_line_join(cr, CAIRO_LINE_JOIN_MITER); cairo_stroke(cr); cairo_move_to (cr, 1.0 + 0.5 - te_up.width / 2.0 - te_up.x_bearing + (radius * 2.0) + margin_left + margin_right + button_width + button_width / 2.25, 0.5 - te_up.height / 2.0 - te_up.y_bearing + (radius * 2.0) - button_height / 2.0 + outline_strength); cairo_show_text (cr, "+\0"); } cairo_destroy(cr); } void* ags_dial_idle(void *dial0) { AgsDial *dial; dial = AGS_DIAL(dial0); usleep(dial->sleep_interval); dial->flags &= (~AGS_DIAL_IDLE); return(NULL); } void ags_dial_value_changed(AgsDial *dial) { g_return_if_fail(AGS_IS_DIAL(dial)); g_object_ref((GObject *) dial); g_signal_emit(G_OBJECT(dial), dial_signals[VALUE_CHANGED], 0); g_object_unref((GObject *) dial); } void ags_dial_adjustment_changed_callback(GtkAdjustment *adjustment, AgsDial *dial) { ags_dial_value_changed(dial); } /** * ags_dial_new: * * Creates an #AgsDial * * Returns: a new #AgsDial * * Since: 0.4 */ AgsDial* ags_dial_new() { AgsDial *dial; GtkAdjustment *adjustment; adjustment = (GtkAdjustment *) gtk_adjustment_new(0.0, 0.0, 1.0, 0.1, 0.1, 0.0); dial = (AgsDial *) g_object_new(AGS_TYPE_DIAL, "adjustment\0", adjustment, NULL); return(dial); } gsequencer-0.6.37/src/ags/widget/ags_led.h0000644000175000017500000000337112621463700015271 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_LED_H__ #define __AGS_LED_H__ #include #include #include #define AGS_TYPE_LED (ags_led_get_type()) #define AGS_LED(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_LED, AgsLed)) #define AGS_LED_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_LED, AgsLedClass)) #define AGS_IS_LED(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_LED)) #define AGS_IS_LED_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_LED)) #define AGS_LED_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_LED, AgsLedClass)) typedef struct _AgsLed AgsLed; typedef struct _AgsLedClass AgsLedClass; typedef enum{ AGS_LED_ACTIVE = 1, }AgsLedFlags; struct _AgsLed { GtkBin bin; guint flags; }; struct _AgsLedClass { GtkBinClass bin; }; GType ags_led_get_type(void); void ags_led_set_active(AgsLed *led); void ags_led_unset_active(AgsLed *led); AgsLed* ags_led_new(); #endif /*__AGS_LED_H__*/ gsequencer-0.6.37/src/ags/widget/ags_timebar.h0000644000175000017500000000326112621463700016146 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_TIMEBAR_H__ #define __AGS_TIMEBAR_H__ #include #include #include #define AGS_TYPE_TIMEBAR (ags_timebar_get_type()) #define AGS_TIMEBAR(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_TIMEBAR, AgsTimebar)) #define AGS_TIMEBAR_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_TIMEBAR, AgsTimebarClass)) #define AGS_IS_TIMEBAR(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_TIMEBAR)) #define AGS_IS_TIMEBAR_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_TIMEBAR)) #define AGS_TIMEBAR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_TIMEBAR, AgsTimebarClass)) typedef struct _AgsTimebar AgsTimebar; typedef struct _AgsTimebarClass AgsTimebarClass; struct _AgsTimebar { GtkRange range; }; struct _AgsTimebarClass { GtkRangeClass range; }; AgsTimebar* ags_timebar_new(); #endif /*__AGS_TIMEBAR_H__*/ gsequencer-0.6.37/src/ags/widget/ags_menu.c0000644000175000017500000000366212621463700015467 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include void ags_menu_class_init(AgsMenuClass *menu); void ags_menu_init(AgsMenu *menu); GType ags_menu_get_type(void) { static GType ags_type_menu = 0; if(!ags_type_menu){ static const GTypeInfo ags_menu_info = { sizeof(AgsMenuClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_menu_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(AgsMenu), 0, /* n_preallocs */ (GInstanceInitFunc) ags_menu_init, }; ags_type_menu = g_type_register_static(GTK_TYPE_WINDOW, "AgsMenu\0", &ags_menu_info, 0); } return(ags_type_menu); } void ags_menu_class_init(AgsMenuClass *menu) { } void ags_menu_init(AgsMenu *menu) { GValue window_type_value = {0,}; g_value_init(&window_type_value, G_TYPE_ENUM); g_value_set_enum(&window_type_value, GTK_WINDOW_POPUP); g_object_set_property(G_OBJECT(menu), "type\0", &window_type_value); g_value_unset(&window_type_value); menu->table = ags_table_new(0, 0, FALSE); } AgsMenu* ags_menu_new() { AgsMenu *menu; menu = (AgsMenu *) g_object_new(AGS_TYPE_MENU, NULL); return(menu); } gsequencer-0.6.37/src/ags/widget/ags_indicator.c0000644000175000017500000001673612621463700016505 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include "ags_indicator.h" void ags_indicator_class_init(AgsIndicatorClass *indicator); void ags_indicator_init(AgsIndicator *indicator); void ags_indicator_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_indicator_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_indicator_show(GtkWidget *widget); void ags_indicator_map(GtkWidget *widget); void ags_indicator_realize(GtkWidget *widget); void ags_indicator_size_request(GtkWidget *widget, GtkRequisition *requisition); void ags_indicator_size_allocate(GtkWidget *widget, GtkAllocation *allocation); /** * SECTION:ags_indicator * @short_description: A indicator widget * @title: AgsIndicator * @section_id: * @include: ags/widget/ags_indicator.h * * #AgsIndicator is a widget representing a #GtkAdjustment. */ enum{ PROP_0, PROP_ADJUSTMENT, }; static gpointer ags_indicator_parent_class = NULL; GtkStyle *indicator_style; GType ags_indicator_get_type(void) { static GType ags_type_indicator = 0; if(!ags_type_indicator){ static const GTypeInfo ags_indicator_info = { sizeof(AgsIndicatorClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_indicator_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(AgsIndicator), 0, /* n_preallocs */ (GInstanceInitFunc) ags_indicator_init, }; ags_type_indicator = g_type_register_static(GTK_TYPE_WIDGET, "AgsIndicator\0", &ags_indicator_info, 0); } return(ags_type_indicator); } void ags_indicator_class_init(AgsIndicatorClass *indicator) { GObjectClass *gobject; GtkWidgetClass *widget; GParamSpec *param_spec; ags_indicator_parent_class = g_type_class_peek_parent(indicator); /* GObjectClass */ gobject = (GObjectClass *) indicator; gobject->set_property = ags_indicator_set_property; gobject->get_property = ags_indicator_get_property; /* GtkWidgetClass */ widget = (GtkWidgetClass *) indicator; widget->realize = ags_indicator_realize; widget->size_request = ags_indicator_size_request; widget->size_allocate = ags_indicator_size_allocate; widget->show = ags_indicator_show; /* properties */ param_spec = g_param_spec_object("adjustment\0", "assigned adjustment\0", "The adjustment it is assigned with\0", G_TYPE_OBJECT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_ADJUSTMENT, param_spec); } void ags_indicator_init(AgsIndicator *indicator) { g_object_set(G_OBJECT(indicator), "app-paintable\0", TRUE, NULL); gtk_widget_set_style((GtkWidget *) indicator, indicator_style); indicator->adjustment = NULL; } void ags_indicator_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsIndicator *indicator; indicator = AGS_INDICATOR(gobject); switch(prop_id){ case PROP_ADJUSTMENT: { GtkAdjustment *adjustment; adjustment = (GtkAdjustment *) g_value_get_object(value); if(indicator->adjustment == adjustment) return; if(indicator->adjustment != NULL){ g_object_unref(G_OBJECT(indicator->adjustment)); } if(adjustment != NULL){ g_object_ref(G_OBJECT(adjustment)); } indicator->adjustment = adjustment; } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_indicator_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsIndicator *indicator; indicator = AGS_INDICATOR(gobject); switch(prop_id){ case PROP_ADJUSTMENT: g_value_set_object(value, indicator->adjustment); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_indicator_map(GtkWidget *widget) { if (gtk_widget_get_realized (widget) && !gtk_widget_get_mapped (widget)) { GTK_WIDGET_CLASS (ags_indicator_parent_class)->map(widget); gdk_window_show(widget->window); // ags_indicator_draw(widget); } } void ags_indicator_realize(GtkWidget *widget) { AgsIndicator *indicator; GdkWindowAttr attributes; gint attributes_mask; gint buttons_width; gint border_left, border_top; g_return_if_fail (widget != NULL); g_return_if_fail (AGS_IS_INDICATOR (widget)); indicator = AGS_INDICATOR(widget); gtk_widget_set_realized (widget, TRUE); /* */ attributes.window_type = GDK_WINDOW_CHILD; attributes.x = widget->allocation.x; attributes.y = widget->allocation.y; attributes.width = widget->allocation.width; attributes.height = widget->allocation.height; attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP; attributes.window_type = GDK_WINDOW_CHILD; attributes.wclass = GDK_INPUT_OUTPUT; attributes.visual = gtk_widget_get_visual (widget); attributes.colormap = gtk_widget_get_colormap (widget); attributes.event_mask = gtk_widget_get_events (widget); attributes.event_mask |= (GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_BUTTON1_MOTION_MASK | GDK_BUTTON3_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_POINTER_MOTION_MASK | GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK); widget->window = gdk_window_new (gtk_widget_get_parent_window (widget), &attributes, attributes_mask); gdk_window_set_user_data (widget->window, indicator); widget->style = gtk_style_attach (widget->style, widget->window); gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL); gtk_widget_queue_resize (widget); } void ags_indicator_show(GtkWidget *widget) { GTK_WIDGET_CLASS(ags_indicator_parent_class)->show(widget); } void ags_indicator_size_request(GtkWidget *widget, GtkRequisition *requisition) { GTK_WIDGET_CLASS(ags_indicator_parent_class)->size_request(widget, requisition); /* implement me */ //TODO:JK: } void ags_indicator_size_allocate(GtkWidget *widget, GtkAllocation *allocation) { GTK_WIDGET_CLASS(ags_indicator_parent_class)->size_allocate(widget, allocation); /* implement me */ //TODO:JK: } /** * ags_indicator_new: * * Creates an #AgsIndicator. Note, use rather its implementation #AgsVIndicator or * #AgsHIndicator. * * Returns: a new #AgsIndicator * * Since: 0.4 */ AgsIndicator* ags_indicator_new() { AgsIndicator *indicator; indicator = (AgsIndicator *) g_object_new(AGS_TYPE_INDICATOR, NULL); return(indicator); } gsequencer-0.6.37/src/ags/widget/ags_indicator.h0000644000175000017500000000345412621463700016503 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_INDICATOR_H__ #define __AGS_INDICATOR_H__ #include #include #include #define AGS_TYPE_INDICATOR (ags_indicator_get_type()) #define AGS_INDICATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_INDICATOR, AgsIndicator)) #define AGS_INDICATOR_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_INDICATOR, AgsIndicatorClass)) #define AGS_IS_INDICATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_INDICATOR)) #define AGS_IS_INDICATOR_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_INDICATOR)) #define AGS_INDICATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_INDICATOR, AgsIndicatorClass)) typedef struct _AgsIndicator AgsIndicator; typedef struct _AgsIndicatorClass AgsIndicatorClass; struct _AgsIndicator { GtkWidget widget; GtkAdjustment *adjustment; }; struct _AgsIndicatorClass { GtkWidgetClass widget; }; GType ags_indicator_get_type(void); AgsIndicator* ags_indicator_new(); #endif /*__AGS_INDICATOR_H__*/ gsequencer-0.6.37/src/ags/widget/ags_hindicator.h0000644000175000017500000000351212621463700016646 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_HINDICATOR_H__ #define __AGS_HINDICATOR_H__ #include #include #include #include "ags_indicator.h" #define AGS_TYPE_HINDICATOR (ags_hindicator_get_type()) #define AGS_HINDICATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_INDICATOR, AgsHIndicator)) #define AGS_HINDICATOR_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_INDICATOR, AgsHIndicatorClass)) #define AGS_IS_HINDICATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_INDICATOR)) #define AGS_IS_HINDICATOR_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_INDICATOR)) #define AGS_HINDICATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_INDICATOR, AgsHIndicatorClass)) typedef struct _AgsHIndicator AgsHIndicator; typedef struct _AgsHIndicatorClass AgsHIndicatorClass; struct _AgsHIndicator { AgsIndicator indicator; }; struct _AgsHIndicatorClass { GtkWidgetClass indicator; }; GType ags_hindicator_get_type(void); AgsHIndicator* ags_hindicator_new(); #endif /*__AGS_HINDICATOR_H__*/ gsequencer-0.6.37/src/ags/widget/ags_table.h0000644000175000017500000000331512621463700015612 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_TABLE_H__ #define __AGS_TABLE_H__ #include #include #include #define AGS_TYPE_TABLE (ags_table_get_type()) #define AGS_TABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_TABLE, AgsTable)) #define AGS_TABLE_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_TABLE, AgsTableClass)) #define AGS_IS_TABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_TABLE)) #define AGS_IS_TABLE_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_TABLE)) #define AGS_TABLE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_TABLE, AgsTableClass)) typedef struct _AgsTable AgsTable; typedef struct _AgsTableClass AgsTableClass; struct _AgsTable { GtkTable table; }; struct _AgsTableClass { GtkTableClass table; }; GType ags_table_get_type(void); AgsTable* ags_table_new(guint row, guint columns, gboolean homogeneous); #endif /*__AGS_TABLE_H__*/ gsequencer-0.6.37/src/ags/widget/ags_expander_set.c0000644000175000017500000002523312626272146017211 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include "ags_expander_set.h" #include #include void ags_expander_set_class_init(AgsExpanderSetClass *expander_set); void ags_expander_set_init(AgsExpanderSet *expander_set); void ags_expander_set_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_expander_set_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_expander_set_finalize(GObject *gobject); void ags_expander_set_show(GtkWidget *widget); void ags_expander_set_realize(GtkWidget *widget); void ags_expander_set_size_request(GtkWidget *widget, GtkRequisition *requisition); void ags_expander_set_size_allocate(GtkWidget *widget, GtkAllocation *allocation); gboolean ags_expander_set_expose(GtkWidget *widget, GdkEventExpose *event); void ags_expander_set_width_changed(GObject *gobject, GParamSpec *pspec, AgsExpanderSet *expander_set); void ags_expander_set_height_changed(GObject *gobject, GParamSpec *pspec, AgsExpanderSet *expander_set); void ags_expander_set_draw(AgsExpanderSet *expander_set); void ags_expander_set_insert_child(AgsExpanderSet *expander_set, AgsExpanderSetChild *child, gboolean ghost); void ags_expander_set_remove_child(AgsExpanderSet *expander_set, AgsExpanderSetChild *child, gboolean ghost); /** * SECTION:ags_expander_set * @short_description: A container * @title: AgsExpanderSet * @section_id: * @include: ags/widget/ags_expander_set.h * * #AgsExpanderSet is a composite widget containing a #GtkTable. */ enum{ PROP_0, PROP_GHOST, PROP_LOCATION, }; static gpointer ags_expander_set_parent_class = NULL; GType ags_expander_set_get_type(void) { static GType ags_type_expander_set = 0; if(!ags_type_expander_set){ static const GTypeInfo ags_expander_set_info = { sizeof(AgsExpanderSetClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_expander_set_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(AgsExpanderSet), 0, /* n_preallocs */ (GInstanceInitFunc) ags_expander_set_init, }; ags_type_expander_set = g_type_register_static(GTK_TYPE_TABLE, "AgsExpanderSet\0", &ags_expander_set_info, 0); } return(ags_type_expander_set); } void ags_expander_set_class_init(AgsExpanderSetClass *expander_set) { GObjectClass *gobject; GtkWidgetClass *widget; GParamSpec *param_spec; ags_expander_set_parent_class = g_type_class_peek_parent(expander_set); /* GObjectClass */ gobject = G_OBJECT_CLASS(expander_set); gobject->set_property = ags_expander_set_set_property; gobject->get_property = ags_expander_set_get_property; gobject->finalize = ags_expander_set_finalize; /* GtkWidgetClass */ widget = (GtkWidgetClass *) expander_set; // widget->realize = ags_expander_set_realize; // widget->expose_event = ags_expander_set_expose; // widget->size_request = ags_expander_set_size_request; // widget->size_allocate = ags_expander_set_size_allocate; } void ags_expander_set_init(AgsExpanderSet *expander_set) { g_object_set(G_OBJECT(expander_set), "app-paintable\0", TRUE, "homogeneous", FALSE, NULL); g_signal_connect(expander_set, "notify::n-columns\0", G_CALLBACK(ags_expander_set_width_changed), expander_set); g_signal_connect(expander_set, "notify::n-rows\0", G_CALLBACK(ags_expander_set_height_changed), expander_set); expander_set->flags = 0; expander_set->ghost = NULL; expander_set->location = NULL; } void ags_expander_set_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsExpanderSet *expander_set; expander_set = AGS_EXPANDER_SET(gobject); switch(prop_id){ case PROP_GHOST: { AgsExpanderSetChild *ghost; ghost = (AgsExpanderSetChild *) g_value_get_pointer(value); ags_expander_set_insert_child(expander_set, ghost, TRUE); } break; case PROP_LOCATION: { AgsExpanderSetChild *location; location = (AgsExpanderSetChild *) g_value_get_pointer(value); ags_expander_set_insert_child(expander_set, location, FALSE); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_expander_set_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsExpanderSet *expander_set; expander_set = AGS_EXPANDER_SET(gobject); switch(prop_id){ case PROP_GHOST: g_value_set_pointer(value, expander_set->ghost); break; case PROP_LOCATION: g_value_set_pointer(value, expander_set->location); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_expander_set_finalize(GObject *gobject) { AgsExpanderSet *expander_set; expander_set = AGS_EXPANDER_SET(gobject); if(expander_set->ghost != NULL){ ags_list_free_and_free_link(expander_set->ghost); } if(expander_set->location != NULL){ ags_list_free_and_free_link(expander_set->location); } /* call parent */ G_OBJECT_CLASS(ags_expander_set_parent_class)->finalize(gobject); } void ags_expander_set_realize(GtkWidget *widget) { //TODO:JK: implement me } void ags_expander_set_size_request(GtkWidget *widget, GtkRequisition *requisition) { //TODO:JK: implement me } void ags_expander_set_size_allocate(GtkWidget *widget, GtkAllocation *allocation) { //TODO:JK: implement me } gboolean ags_expander_set_expose(GtkWidget *widget, GdkEventExpose *event) { //TODO:JK: implement me } void ags_expander_set_width_changed(GObject *gobject, GParamSpec *pspec, AgsExpanderSet *expander_set) { //TODO:JK: implement me } void ags_expander_set_height_changed(GObject *gobject, GParamSpec *pspec, AgsExpanderSet *expander_set) { //TODO:JK: implement me } void ags_expander_set_set_flags(AgsExpanderSet *expander_set, guint flags) { //TODO:JK: implement me } AgsExpanderSetChild* ags_expander_set_child_alloc(guint x, guint y, guint width, guint height) { AgsExpanderSetChild *child; child = (AgsExpanderSetChild *) malloc(sizeof(AgsExpanderSetChild)); child->x = x; child->y = y; child->width = width; child->height = height; return(child); } AgsExpanderSetChild* ags_expander_set_child_find(AgsExpanderSet *expander_set, GtkWidget *child) { GList *list; list = expander_set->location; while(list != NULL){ if(AGS_EXPANDER_SET_CHILD(list->data)->child == child){ return((AgsExpanderSetChild *) list->data); } list = list->next; } return(NULL); } void ags_expander_set_draw(AgsExpanderSet *expander_set) { //TODO:JK: implement me } void ags_expander_set_insert_child(AgsExpanderSet *expander_set, AgsExpanderSetChild *child, gboolean ghost) { GList *list; guint i; if(ghost){ list = expander_set->ghost; }else{ list = expander_set->location; } i = 0; while(list != NULL){ if(AGS_EXPANDER_SET_CHILD(list->data)->x > child->x){ break; } if(AGS_EXPANDER_SET_CHILD(list->data)->x == child->x){ while(list != NULL){ if(AGS_EXPANDER_SET_CHILD(list->data)->x > child->x){ break; } if(AGS_EXPANDER_SET_CHILD(list->data)->x == child->x && AGS_EXPANDER_SET_CHILD(list->data)->y >= child->y){ break; } i++; list = list->next; } break; } i++; list = list->next; } gtk_table_attach(GTK_TABLE(expander_set), child->child, child->x, child->x + child->width, child->y, child->y + child->height, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 0, 0); if(ghost){ expander_set->ghost = g_list_insert(expander_set->ghost, child, i); }else{ expander_set->location = g_list_insert(expander_set->location, child, i); } } void ags_expander_set_remove_child(AgsExpanderSet *expander_set, AgsExpanderSetChild *child, gboolean ghost) { gtk_container_remove(GTK_CONTAINER(expander_set), child->child); if(ghost){ expander_set->ghost = g_list_remove(expander_set->ghost, child); }else{ expander_set->location = g_list_remove(expander_set->location, child); } free(child); } /** * ags_expander_set_add: * @expander_set: the #AgsExpanderSet * @widget: the child #GtkWidget * @x: x-position * @y: y-position * @width: allocation width * @height: allocation height * * Adds a #GtkWidget to #AgsExpanderSet * * Since: 0.4 */ void ags_expander_set_add(AgsExpanderSet *expander_set, GtkWidget *widget, guint x, guint y, guint width, guint height) { AgsExpanderSetChild *child; child = ags_expander_set_child_alloc(x, y, width, height); child->child = widget; if(widget != NULL){ ags_expander_set_insert_child(expander_set, child, FALSE); }else{ ags_expander_set_insert_child(expander_set, child, TRUE); } } /** * ags_expander_set_remove: * @expander_set: the #AgsExpanderSet * @widget: the child #GtkWidget * * Removes a #GtkWidget of #AgsExpanderSet * * Since: 0.4 */ void ags_expander_set_remove(AgsExpanderSet *expander_set, GtkWidget *widget) { ags_expander_set_remove_child(expander_set, ags_expander_set_child_find(expander_set, widget), FALSE); } /** * ags_expander_set_new: * @height: the table's height * @width: the table's width * * Creates an #AgsExpanderSet * * Returns: a new #AgsExpanderSet * * Since: 0.4 */ AgsExpanderSet* ags_expander_set_new(guint width, guint height) { AgsExpanderSet *expander_set; expander_set = (AgsExpanderSet *) g_object_new(AGS_TYPE_EXPANDER_SET, "n-columns\0", width, "n-rows\0", height, NULL); return(expander_set); } gsequencer-0.6.37/src/ags/widget/ags_segment.c0000644000175000017500000000144612612232541016160 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include gsequencer-0.6.37/src/ags/widget/ags_vindicator.c0000644000175000017500000001222212626272146016664 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include "ags_vindicator.h" void ags_vindicator_class_init(AgsVIndicatorClass *indicator); void ags_vindicator_init(AgsVIndicator *indicator); void ags_vindicator_show(GtkWidget *widget); gboolean ags_vindicator_expose(GtkWidget *widget, GdkEventExpose *event); gboolean ags_vindicator_configure(GtkWidget *widget, GdkEventConfigure *event); void ags_vindicator_draw(AgsVIndicator *indicator); /** * SECTION:ags_vindicator * @short_description: A vertical indicator widget * @title: AgsVIndicator * @section_id: * @include: ags/widget/ags_vindicator.h * * #AgsVIndicator is a widget visualizing a #GtkAdjustment. */ static gpointer ags_vindicator_parent_class = NULL; extern GtkStyle *indicator_style; GType ags_vindicator_get_type(void) { static GType ags_type_vindicator = 0; if(!ags_type_vindicator){ static const GTypeInfo ags_vindicator_info = { sizeof(AgsVIndicatorClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_vindicator_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(AgsVIndicator), 0, /* n_preallocs */ (GInstanceInitFunc) ags_vindicator_init, }; ags_type_vindicator = g_type_register_static(AGS_TYPE_INDICATOR, "AgsVIndicator\0", &ags_vindicator_info, 0); } return(ags_type_vindicator); } void ags_vindicator_class_init(AgsVIndicatorClass *indicator) { GtkWidgetClass *widget; ags_vindicator_parent_class = g_type_class_peek_parent(indicator); /* GtkWidgetClass */ widget = (GtkWidgetClass *) indicator; widget->expose_event = ags_vindicator_expose; widget->configure_event = ags_vindicator_configure; } void ags_vindicator_init(AgsVIndicator *indicator) { gtk_widget_set_size_request((GtkWidget *) indicator, 16, 100); } gboolean ags_vindicator_configure(GtkWidget *widget, GdkEventConfigure *event) { ags_vindicator_draw((AgsVIndicator *) widget); return(FALSE); } gboolean ags_vindicator_expose(GtkWidget *widget, GdkEventExpose *event) { ags_vindicator_draw((AgsVIndicator *) widget); return(FALSE); } void ags_vindicator_draw(AgsVIndicator *indicator) { GtkWidget *widget; GtkAdjustment *adjustment; GtkStyle *indicator_style; cairo_t *cr; gdouble value; guint width, height; guint segment_width, segment_height; guint padding; guint i; static const gdouble white_gc = 65535.0; widget = GTK_WIDGET(indicator); indicator_style = gtk_widget_get_style(widget); adjustment = AGS_INDICATOR(indicator)->adjustment; // g_message("draw %f\0", adjustment->value); cr = gdk_cairo_create(widget->window); if(cr == NULL){ return; } width = 16; height = 100; segment_width = 16; segment_height = 7; padding = 3; cairo_surface_flush(cairo_get_target(cr)); cairo_push_group(cr); for(i = 0; i < height / (segment_height + padding); i++){ if(adjustment->value > 0.0 && (1.0 / adjustment->value * i < (height / (segment_height + padding)))){ /* active */ cairo_set_source_rgb(cr, indicator_style->light[0].red / white_gc, indicator_style->light[0].green / white_gc, indicator_style->light[0].blue / white_gc); }else{ /* normal */ cairo_set_source_rgb(cr, indicator_style->dark[0].red / white_gc, indicator_style->dark[0].green / white_gc, indicator_style->dark[0].blue / white_gc); } cairo_rectangle(cr, 0, height - i * (segment_height + padding) - segment_height, segment_width, segment_height); cairo_fill(cr); /* outline */ cairo_set_source_rgb(cr, indicator_style->fg[0].red / white_gc, indicator_style->fg[0].green / white_gc, indicator_style->fg[0].blue / white_gc); cairo_rectangle(cr, 0, height - i * (segment_height + padding) - segment_height, segment_width, segment_height); cairo_stroke(cr); } cairo_pop_group_to_source(cr); cairo_paint(cr); cairo_surface_mark_dirty(cairo_get_target(cr)); cairo_destroy(cr); } /** * ags_vindicator_new: * * Creates an #AgsVIndicator. * * Since: 0.4 */ AgsVIndicator* ags_vindicator_new() { AgsVIndicator *indicator; GtkAdjustment *adjustment; adjustment = (GtkAdjustment *) gtk_adjustment_new(0.0, 0.0, 1.0, 0.1, 0.1, 0.0); indicator = (AgsVIndicator *) g_object_new(AGS_TYPE_VINDICATOR, "adjustment\0", adjustment, NULL); return(indicator); } gsequencer-0.6.37/src/ags/widget/ags_waveform.c0000644000175000017500000000403212621463700016341 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include "ags_waveform.h" void ags_waveform_class_init(AgsWaveformClass *waveform); void ags_waveform_init(AgsWaveform *waveform); void ags_waveform_show(GtkWidget *widget); static gpointer ags_waveform_parent_class = NULL; GType ags_waveform_get_type(void) { static GType ags_type_waveform = 0; if(!ags_type_waveform){ static const GTypeInfo ags_waveform_info = { sizeof(AgsWaveformClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_waveform_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(AgsWaveform), 0, /* n_preallocs */ (GInstanceInitFunc) ags_waveform_init, }; ags_type_waveform = g_type_register_static(GTK_TYPE_WIDGET, "AgsWaveform\0", &ags_waveform_info, 0); } return(ags_type_waveform); } void ags_waveform_class_init(AgsWaveformClass *waveform) { GtkWidgetClass *widget; ags_waveform_parent_class = g_type_class_peek_parent(waveform); } void ags_waveform_init(AgsWaveform *waveform) { g_object_set(G_OBJECT(waveform), "app-paintable\0", TRUE, NULL); } AgsWaveform* ags_waveform_new() { AgsWaveform *waveform; waveform = (AgsWaveform *) g_object_new(AGS_TYPE_WAVEFORM, NULL); return(waveform); } gsequencer-0.6.37/src/ags/widget/ags_option_menu.c0000644000175000017500000000410612621463700017051 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include void ags_option_menu_class_init(AgsOptionMenuClass *option_menu); void ags_option_menu_init(AgsOptionMenu *option_menu); void ags_option_menu_changed(AgsOptionMenu *option_menu); GType ags_option_menu_get_type(void) { static GType ags_type_option_menu = 0; if(!ags_type_option_menu){ static const GTypeInfo ags_option_menu_info = { sizeof(AgsOptionMenuClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_option_menu_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(AgsOptionMenu), 0, /* n_preallocs */ (GInstanceInitFunc) ags_option_menu_init, }; ags_type_option_menu = g_type_register_static(GTK_TYPE_HBOX, "AgsOptionMenu\0", &ags_option_menu_info, 0); } return(ags_type_option_menu); } void ags_option_menu_class_init(AgsOptionMenuClass *option_menu) { option_menu->changed = NULL; option_menu->focus_changed = NULL; } void ags_option_menu_init(AgsOptionMenu *option_menu) { option_menu->menu = NULL; option_menu->active_item = NULL; option_menu->focus = NULL; } AgsOptionMenu* ags_option_menu_new() { AgsOptionMenu *option_menu; option_menu = (AgsOptionMenu *) g_object_new(AGS_TYPE_OPTION_MENU, NULL); return(option_menu); } gsequencer-0.6.37/src/ags/widget/ags_ruler.h0000644000175000017500000000362712621463700015662 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_RULER_H__ #define __AGS_RULER_H__ #include #include #include #define AGS_TYPE_RULER (ags_ruler_get_type()) #define AGS_RULER(obj) (G_TYPE_CHECK_INSTANCE_CAST(obj, AGS_TYPE_RULER, AgsRuler)) #define AGS_RULER_CLASS(class) (G_TYPE_CHECK_CLASS_CAST(class, AGS_TYPE_RULER, AgsRulerClass)) #define AGS_IS_RULER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_RULER)) #define AGS_IS_RULER_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_RULER)) #define AGS_RULER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS(obj, AGS_TYPE_RULER, AgsRulerClass)) #define AGS_RULER_DEFAULT_STEP (16) #define AGS_RULER_LARGE_STEP (8.0) #define AGS_RULER_SMALL_STEP (6.0) typedef struct _AgsRuler AgsRuler; typedef struct _AgsRulerClass AgsRulerClass; struct _AgsRuler { GtkWidget widget; guint flags; guint font_size; GtkAdjustment *adjustment; guint step; gdouble factor; gdouble precision; gdouble scale_precision; }; struct _AgsRulerClass { GtkWidgetClass widget; }; GType ags_ruler_get_type(); AgsRuler* ags_ruler_new(); #endif /*__AGS_RULER_H__*/ gsequencer-0.6.37/src/ags/widget/ags_expander.h0000644000175000017500000000477412621463700016343 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_EXPANDER_H__ #define __AGS_EXPANDER_H__ #include #include #include #define AGS_TYPE_EXPANDER (ags_expander_get_type()) #define AGS_EXPANDER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_EXPANDER, AgsExpander)) #define AGS_EXPANDER_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_EXPANDER, AgsExpanderClass)) #define AGS_IS_EXPANDER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_EXPANDER)) #define AGS_IS_EXPANDER_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_EXPANDER)) #define AGS_EXPANDER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_EXPANDER, AgsExpanderClass)) #define AGS_EXPANDER_CHILD(ptr) ((AgsExpanderChild *)(ptr)) typedef struct _AgsExpander AgsExpander; typedef struct _AgsExpanderClass AgsExpanderClass; typedef struct _AgsExpanderChild AgsExpanderChild; typedef enum{ AGS_EXPANDER_DRAW_BORDER = 1, }AgsExpanderFlags; struct _AgsExpander { GtkExpander expander; guint flags; GtkTable *table; GList *children; }; struct _AgsExpanderClass { GtkExpanderClass expander; }; struct _AgsExpanderChild { GtkWidget *child; guint x; guint y; guint width; guint height; }; GType ags_expander_get_type(void); AgsExpanderChild* ags_expander_child_alloc(guint x, guint y, guint width, guint height); AgsExpanderChild* ags_expander_child_find(AgsExpander *expander, GtkWidget *child); void ags_expander_add(AgsExpander *expander, GtkWidget *widget, guint x, guint y, guint width, guint height); void ags_expander_remove(AgsExpander *expander, GtkWidget *widget); AgsExpander* ags_expander_new(guint width, guint height); #endif /*__AGS_EXPANDER_H__*/ gsequencer-0.6.37/src/ags/widget/ags_waveform.h0000644000175000017500000000336312621463700016354 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_WAVEFORM_H__ #define __AGS_WAVEFORM_H__ #include #include #include #define AGS_TYPE_WAVEFORM (ags_waveform_get_type()) #define AGS_WAVEFORM(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_WAVEFORM, AgsWaveform)) #define AGS_WAVEFORM_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_WAVEFORM, AgsWaveformClass)) #define AGS_IS_WAVEFORM(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_WAVEFORM)) #define AGS_IS_WAVEFORM_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_WAVEFORM)) #define AGS_WAVEFORM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_WAVEFORM, AgsWaveformClass)) typedef struct _AgsWaveform AgsWaveform; typedef struct _AgsWaveformClass AgsWaveformClass; struct _AgsWaveform { GtkWidget widget; }; struct _AgsWaveformClass { GtkWidgetClass widget; }; GType ags_waveform_get_type(void); AgsWaveform* ags_waveform_new(); #endif /*__AGS_WAVEFORM_H__*/ gsequencer-0.6.37/src/ags/widget/ags_option_menu.h0000644000175000017500000000404112621463700017054 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_OPTION_MENU_H__ #define __AGS_OPTION_MENU_H__ #include #include #include #include #define AGS_TYPE_OPTION_MENU (ags_option_menu_get_type()) #define AGS_OPTION_MENU(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_OPTION_MENU, AgsOptionMenu)) #define AGS_OPTION_MENU_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_OPTION_MENU, AgsOptionMenuClass)) #define AGS_IS_OPTION_MENU(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_OPTION_MENU)) #define AGS_IS_OPTION_MENU_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_OPTION_MENU)) #define AGS_OPTION_MENU_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_OPTION_MENU, AgsOptionMenuClass)) typedef struct _AgsOptionMenu AgsOptionMenu; typedef struct _AgsOptionMenuClass AgsOptionMenuClass; struct _AgsOptionMenu { GtkHBox hbox; GtkWidget *button; AgsTable *table; GtkWidget *menu; GList *active_item; GtkWidget *focus; }; struct _AgsOptionMenuClass { GtkHBoxClass hbox; void (*changed)(AgsOptionMenu *option_menu); void (*focus_changed)(AgsOptionMenu *option_menu); }; GType ags_option_menu_get_type(void); AgsOptionMenu* ags_option_menu_new(); #endif /*__AGS_OPTION_MENU_H__*/ gsequencer-0.6.37/src/ags/widget/ags_menu_item.c0000644000175000017500000000343612621463700016504 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include void ags_menu_item_class_init(AgsMenuItemClass *menu_item); void ags_menu_item_init(AgsMenuItem *menu_item); GType ags_menu_item_get_type(void) { static GType ags_type_menu_item = 0; if(!ags_type_menu_item){ static const GTypeInfo ags_menu_item_info = { sizeof(AgsMenuItemClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_menu_item_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(AgsMenuItem), 0, /* n_preallocs */ (GInstanceInitFunc) ags_menu_item_init, }; ags_type_menu_item = g_type_register_static(AGS_TYPE_TABLE, "AgsMenuItem\0", &ags_menu_item_info, 0); } return(ags_type_menu_item); } void ags_menu_item_class_init(AgsMenuItemClass *menu_item) { } void ags_menu_item_init(AgsMenuItem *menu_item) { } AgsMenuItem* ags_menu_item_new() { AgsMenuItem *menu_item; menu_item = (AgsMenuItem *) g_object_new(AGS_TYPE_MENU_ITEM, NULL); return(menu_item); } gsequencer-0.6.37/src/ags/widget/ags_htimebar.h0000644000175000017500000000336612621463700016324 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_HTIMEBAR_H__ #define __AGS_HTIMEBAR_H__ #include #include #include #include #define AGS_TYPE_HTIMEBAR (ags_htimebar_get_type()) #define AGS_HTIMEBAR(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_HTIMEBAR, AgsHTimebar)) #define AGS_HTIMEBAR_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_HTIMEBAR, AgsHTimebarClass)) #define AGS_IS_HTIMEBAR(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_HTIMEBAR)) #define AGS_IS_HTIMEBAR_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_HTIMEBAR)) #define AGS_HTIMEBAR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_HTIMEBAR, AgsHTimebarClass)) typedef struct _AgsHTimebar AgsHTimebar; typedef struct _AgsHTimebarClass AgsHTimebarClass; struct _AgsHTimebar { AgsTimebar range; }; struct _AgsHTimebarClass { AgsTimebarClass timebar; }; AgsHTimebar* ags_htimebar_new(); #endif /*__AGS_HTIMEBAR_H__*/ gsequencer-0.6.37/src/ags/widget/ags_vindicator.h0000644000175000017500000000351312621463700016665 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_VINDICATOR_H__ #define __AGS_VINDICATOR_H__ #include #include #include #include "ags_indicator.h" #define AGS_TYPE_VINDICATOR (ags_vindicator_get_type()) #define AGS_VINDICATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_INDICATOR, AgsVIndicator)) #define AGS_VINDICATOR_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_INDICATOR, AgsVIndicatorClass)) #define AGS_IS_VINDICATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_INDICATOR)) #define AGS_IS_VINDICATOR_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_INDICATOR)) #define AGS_VINDICATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_INDICATOR, AgsVIndicatorClass)) typedef struct _AgsVIndicator AgsVIndicator; typedef struct _AgsVIndicatorClass AgsVIndicatorClass; struct _AgsVIndicator { AgsIndicator indicator; }; struct _AgsVIndicatorClass { GtkWidgetClass indicator; }; GType ags_vindicator_get_type(void); AgsVIndicator* ags_vindicator_new(); #endif /*__AGS_VINDICATOR_H__*/ gsequencer-0.6.37/src/ags/widget/ags_cartesian.h0000644000175000017500000000341712621463700016477 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_CARTESIAN_H__ #define __AGS_CARTESIAN_H__ #include #include #include #define AGS_TYPE_CARTESIAN (ags_cartesian_get_type()) #define AGS_CARTESIAN(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_CARTESIAN, AgsCartesian)) #define AGS_CARTESIAN_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_CARTESIAN, AgsCartesianClass)) #define AGS_IS_CARTESIAN(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_CARTESIAN)) #define AGS_IS_CARTESIAN_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_CARTESIAN)) #define AGS_CARTESIAN_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_CARTESIAN, AgsCartesianClass)) typedef struct _AgsCartesian AgsCartesian; typedef struct _AgsCartesianClass AgsCartesianClass; struct _AgsCartesian { GtkWidget widget; }; struct _AgsCartesianClass { GtkWidgetClass widget; }; GType ags_cartesian_get_type(void); AgsCartesian* ags_cartesian_new(); #endif /*__AGS_CARTESIAN_H__*/ gsequencer-0.6.37/src/ags/widget/ags_segment.h0000644000175000017500000000622112612232541016161 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_SEGMENT_H__ #define __AGS_SEGMENT_H__ #include #include #include #define AGS_TYPE_SEGMENT (ags_segment_get_type()) #define AGS_SEGMENT(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_SEGMENT, AgsSegment)) #define AGS_SEGMENT_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_SEGMENT, AgsSegmentClass)) #define AGS_IS_SEGMENT(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_SEGMENT)) #define AGS_IS_SEGMENT_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_SEGMENT)) #define AGS_SEGMENT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_SEGMENT, AgsSegmentClass)) typedef struct _AgsSegment AgsSegment; typedef struct _AgsSegmentClass AgsSegmentClass; typedef enum{ AGS_SEGMENT_MONOCHROME = 1, AGS_SEGMENT_COLOR_RED = 1 << 1, AGS_SEGMENT_COLOR_BLUE = 1 << 2, AGS_SGEMENT_COLOR_GREEN = 1 << 3, }AGS_SEGMENT_FLAGS; typedef enum{ AGS_SEGMENT_UPPER_LEFT = 1, AGS_SEGMENT_UPPER_RIGHT = 1 << 1, AGS_SEGMENT_LOWER_LEFT = 1 << 2, AGS_SEGMENT_LOWER_RIGHT = 1 << 3, AGS_SEGMENT_LEFT_UPPER_1 = 1 << 4, AGS_SEGMENT_LEFT_UPPER_2 = 1 << 5, AGS_SEGMENT_LEFT_LOWER_1 = 1 << 6, AGS_SEGMENT_LEFT_LOWER_2 = 1 << 7, AGS_SEGMENT_RIGHT_UPPER_1 = 1 << 8, AGS_SEGMENT_RIGHT_UPPER_2 = 1 << 9, AGS_SEGMENT_RIGHT_LOWER_1 = 1 << 10, AGS_SEGMENT_RIGHT_LOWER_2 = 1 << 11, AGS_SEGMENT_DIAGONAL_UPPER_LEFT_1 = 1 << 12, AGS_SEGMENT_DIAGONAL_UPPER_LEFT_2 = 1 << 13, AGS_SEGMENT_DIAGONAL_UPPER_RIGHT_1 = 1 << 14, AGS_SEGMENT_DIAGONAL_UPPER_RIGHT_2 = 1 << 15, AGS_SEGMENT_DIAGONAL_LOWER_LEFT_1 = 1 << 16, AGS_SEGMENT_DIAGONAL_LOWER_LEFT_2 = 1 << 17, AGS_SEGMENT_DIAGONAL_LOWER_RIGHT_1 = 1 << 18, AGS_SEGMENT_DIAGONAL_LOWER_RIGHT_2 = 1 << 19, }AgsSegmentFields; struct _AgsSegment { GtkWidget widget; guint flags; guint count; }; struct _AgsSegmentClass { GtkWidgetClass widget; }; GType ags_segment_get_type(void); void ags_segment_field_on(AgsSegment *segment, guint field); void ags_segment_field_off(AgsSegment *segment, guint field); void ags_segment_draw_string(AgsSegment *segment, gchar **string); AgsSegment* ags_segment_new(); #endif /*__AGS_SEGMENT_H__*/ gsequencer-0.6.37/src/ags/widget/ags_menu_item.h0000644000175000017500000000343612621463700016511 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_MENU_ITEM_H__ #define __AGS_MENU_ITEM_H__ #include #include #include #include #define AGS_TYPE_MENU_ITEM (ags_menu_get_type()) #define AGS_MENU_ITEM(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_MENU_ITEM, AgsMenuItem)) #define AGS_MENU_ITEM_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_MENU_ITEM, AgsMenuItemClass)) #define AGS_IS_MENU_ITEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_MENU_ITEM)) #define AGS_IS_MENU_ITEM_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_MENU_ITEM)) #define AGS_MENU_ITEM_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_MENU_ITEM, AgsMenuItemClass)) typedef struct _AgsMenuItem AgsMenuItem; typedef struct _AgsMenuItemClass AgsMenuItemClass; struct _AgsMenuItem { AgsTable table; }; struct _AgsMenuItemClass { AgsTableClass table; }; GType ags_menu_item_get_type(void); AgsMenuItem* ags_menu_item_new(); #endif /*__AGS_MENU_ITEM_H__*/ gsequencer-0.6.37/src/ags/widget/ags_dial.h0000644000175000017500000000511212621463700015431 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_DIAL_H__ #define __AGS_DIAL_H__ #include #include #include #define __USE_UNIX98 #include #define AGS_TYPE_DIAL (ags_dial_get_type()) #define AGS_DIAL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_DIAL, AgsDial)) #define AGS_DIAL_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_DIAL, AgsDialClass)) #define AGS_IS_DIAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_DIAL)) #define AGS_IS_DIAL_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_DIAL)) #define AGS_DIAL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_DIAL, AgsDialClass)) #define AGS_DIAL_DEFAULT_PRECISION (8.0) typedef struct _AgsDial AgsDial; typedef struct _AgsDialClass AgsDialClass; typedef enum{ AGS_DIAL_WITH_BUTTONS = 1, AGS_DIAL_MOUSE_BUTTON_PRESSED = 1 << 1, AGS_DIAL_BUTTON_DOWN_PRESSED = 1 << 2, AGS_DIAL_BUTTON_UP_PRESSED = 1 << 3, AGS_DIAL_MOTION_CAPTURING_INIT = 1 << 4, AGS_DIAL_MOTION_CAPTURING = 1 << 5, AGS_DIAL_IDLE = 1 << 6, }AgsDialFlags; typedef enum{ AGS_DIAL_INCREMENT, AGS_DIAL_DECREMENT, }AgsDialAction; struct _AgsDial { GtkWidget widget; guint flags; guint radius; guint outline_strength; guint scale_precision; guint font_size; gint button_width; gint button_height; gint margin_left; gint margin_right; gdouble tolerance; gdouble negated_tolerance; gint sleep_interval; GtkAdjustment *adjustment; gdouble gravity_x; gdouble gravity_y; gdouble current_x; gdouble current_y; }; struct _AgsDialClass { GtkWidgetClass widget; void (*value_changed)(AgsDial *dial); }; GType ags_dial_get_type(void); void ags_dial_value_changed(AgsDial *dial); AgsDial* ags_dial_new(); #endif /*__AGS_DIAL_H__*/ gsequencer-0.6.37/src/ags/widget/ags_hindicator.c0000644000175000017500000000413112621463700016637 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include "ags_hindicator.h" void ags_hindicator_class_init(AgsHIndicatorClass *indicator); void ags_hindicator_init(AgsHIndicator *indicator); void ags_hindicator_show(GtkWidget *widget); static gpointer ags_hindicator_parent_class = NULL; GType ags_hindicator_get_type(void) { static GType ags_type_hindicator = 0; if(!ags_type_hindicator){ static const GTypeInfo ags_hindicator_info = { sizeof(AgsHIndicatorClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_hindicator_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(AgsHIndicator), 0, /* n_preallocs */ (GInstanceInitFunc) ags_hindicator_init, }; ags_type_hindicator = g_type_register_static(AGS_TYPE_INDICATOR, "AgsHIndicator\0", &ags_hindicator_info, 0); } return(ags_type_hindicator); } void ags_hindicator_class_init(AgsHIndicatorClass *indicator) { GtkWidgetClass *widget; ags_hindicator_parent_class = g_type_class_peek_parent(indicator); } void ags_hindicator_init(AgsHIndicator *indicator) { g_object_set(G_OBJECT(indicator), "app-paintable\0", TRUE, NULL); } AgsHIndicator* ags_hindicator_new() { AgsHIndicator *indicator; indicator = (AgsHIndicator *) g_object_new(AGS_TYPE_HINDICATOR, NULL); return(indicator); } gsequencer-0.6.37/src/ags/widget/ags_ruler.c0000644000175000017500000002606512621463700015656 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include "ags_ruler.h" #include void ags_ruler_class_init(AgsRulerClass *ruler); void ags_ruler_init(AgsRuler *ruler); void ags_ruler_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_ruler_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_ruler_show(GtkWidget *widget); void ags_ruler_map(GtkWidget *widget); void ags_ruler_realize(GtkWidget *widget); void ags_ruler_size_request(GtkWidget *widget, GtkRequisition *requisition); void ags_ruler_size_allocate(GtkWidget *widget, GtkAllocation *allocation); gboolean ags_ruler_expose(GtkWidget *widget, GdkEventExpose *event); void ags_ruler_draw(AgsRuler *ruler); /** * SECTION:ags_ruler * @short_description: A ruler widget * @title: AgsRuler * @section_id: * @include: ags/widget/ags_ruler.h * * #AgsRuler is a widget representing a #GtkAdjustment. */ enum{ PROP_0, PROP_ADJUSTMENT, }; static gpointer ags_ruler_parent_class = NULL; GType ags_ruler_get_type() { static GType ags_type_ruler = 0; if(!ags_type_ruler){ static const GTypeInfo ags_ruler_info = { sizeof(AgsRulerClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_ruler_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(AgsRuler), 0, /* n_preallocs */ (GInstanceInitFunc) ags_ruler_init, }; ags_type_ruler = g_type_register_static(GTK_TYPE_WIDGET, "AgsRuler\0", &ags_ruler_info, 0); } return(ags_type_ruler); } void ags_ruler_class_init(AgsRulerClass *ruler) { GObjectClass *gobject; GtkWidgetClass *widget; GParamSpec *param_spec; ags_ruler_parent_class = g_type_class_peek_parent(ruler); /* GObjectClass */ gobject = (GObjectClass *) ruler; gobject->set_property = ags_ruler_set_property; gobject->get_property = ags_ruler_get_property; /* GtkWidgetClass */ widget = (GtkWidgetClass *) ruler; // widget->map = ags_ruler_map; widget->realize = ags_ruler_realize; widget->expose_event = ags_ruler_expose; widget->size_request = ags_ruler_size_request; widget->size_allocate = ags_ruler_size_allocate; widget->show = ags_ruler_show; /* properties */ param_spec = g_param_spec_object("adjustment\0", "assigned adjustment\0", "The adjustment it is assigned with\0", G_TYPE_OBJECT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_ADJUSTMENT, param_spec); } void ags_ruler_init(AgsRuler *ruler) { g_object_set(G_OBJECT(ruler), "app-paintable\0", TRUE, NULL); ruler->flags = 0; ruler->font_size = 14; ruler->adjustment = NULL; ruler->step = AGS_RULER_DEFAULT_STEP; ruler->factor = 16.0; ruler->precision = 1.0; ruler->scale_precision = 1.0; gtk_widget_set_size_request((GtkWidget *) ruler, 20, 24); } void ags_ruler_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsRuler *ruler; ruler = AGS_RULER(gobject); switch(prop_id){ case PROP_ADJUSTMENT: { GtkAdjustment *adjustment; adjustment = (GtkAdjustment *) g_value_get_object(value); if(ruler->adjustment == adjustment) return; if(ruler->adjustment != NULL){ g_object_unref(G_OBJECT(ruler->adjustment)); } if(adjustment != NULL){ g_object_ref(G_OBJECT(adjustment)); } ruler->adjustment = adjustment; } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_ruler_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsRuler *ruler; ruler = AGS_RULER(gobject); switch(prop_id){ case PROP_ADJUSTMENT: g_value_set_object(value, ruler->adjustment); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_ruler_map(GtkWidget *widget) { if (gtk_widget_get_realized (widget) && !gtk_widget_get_mapped (widget)) { GTK_WIDGET_CLASS (ags_ruler_parent_class)->map(widget); gdk_window_show(widget->window); ags_ruler_draw((AgsRuler *) widget); } } void ags_ruler_realize(GtkWidget *widget) { AgsRuler *ruler; GdkWindowAttr attributes; gint attributes_mask; gint border_left, border_top; g_return_if_fail (widget != NULL); g_return_if_fail (AGS_IS_RULER (widget)); ruler = AGS_RULER(widget); gtk_widget_set_realized (widget, TRUE); /* */ attributes.window_type = GDK_WINDOW_CHILD; attributes.x = widget->allocation.x; attributes.y = widget->allocation.y; attributes.width = widget->allocation.width; attributes.height = widget->allocation.height; attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP; attributes.window_type = GDK_WINDOW_CHILD; attributes.wclass = GDK_INPUT_OUTPUT; attributes.visual = gtk_widget_get_visual (widget); attributes.colormap = gtk_widget_get_colormap (widget); attributes.event_mask = gtk_widget_get_events (widget); attributes.event_mask |= (GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_BUTTON1_MOTION_MASK | GDK_BUTTON3_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_POINTER_MOTION_MASK | GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK); widget->window = gdk_window_new (gtk_widget_get_parent_window (widget), &attributes, attributes_mask); gdk_window_set_user_data (widget->window, ruler); widget->style = gtk_style_attach (widget->style, widget->window); gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL); gtk_widget_queue_resize (widget); } void ags_ruler_show(GtkWidget *widget) { GTK_WIDGET_CLASS(ags_ruler_parent_class)->show(widget); } void ags_ruler_size_request(GtkWidget *widget, GtkRequisition *requisition) { GTK_WIDGET_CLASS(ags_ruler_parent_class)->size_request(widget, requisition); /* implement me */ //TODO:JK: } void ags_ruler_size_allocate(GtkWidget *widget, GtkAllocation *allocation) { GTK_WIDGET_CLASS(ags_ruler_parent_class)->size_allocate(widget, allocation); /* implement me */ //TODO:JK: } gboolean ags_ruler_expose(GtkWidget *widget, GdkEventExpose *event) { ags_ruler_draw(AGS_RULER(widget)); return(FALSE); } /** * ags_ruler_draw: * @ruler an #AgsRuler * * draws the widget */ void ags_ruler_draw(AgsRuler *ruler) { GtkWidget *widget; PangoLayout *layout; PangoFontDescription *desc; cairo_t *cr; gchar *str; gdouble tact_factor, zoom_factor; gdouble tact; gdouble step; gdouble offset; guint i, j, j_set; guint z; gboolean omit_scales; widget = GTK_WIDGET(ruler); cr = gdk_cairo_create(widget->window); cairo_surface_flush(cairo_get_target(cr)); cairo_push_group(cr); // cairo_select_font_face(cr, "Georgia\0", // CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD); // cairo_set_font_size(cr, (gdouble) ruler->font_size); /* draw ruler and scale */ zoom_factor = 0.25; tact_factor = ruler->factor; tact = ruler->precision; step = ruler->step * zoom_factor * tact_factor * tact; /* draw bg */ cairo_set_source_rgba(cr, 0.0, 0.0, 0.125, 1.0); cairo_rectangle(cr, 0, 0, widget->allocation.width, widget->allocation.height); cairo_fill(cr); cairo_set_source_rgba(cr, 1.0, 1.0, 1.0, 1.0); cairo_set_line_width(cr, 1.25); offset = ruler->adjustment->value; i = ((guint) floor((double) offset * step)) % (guint) floor(step); if(i != 0){ i = step - i; } z = 0; if(i < widget->allocation.width && tact > 1.0){ j_set = (guint) ceil(offset) % (guint) (tact); if(j_set != 0){ j = j_set; goto ags_ruler_draw_scale0; } } for(; i < widget->allocation.width; ){ /* draw large step */ cairo_move_to(cr, (double) (i), (double) (widget->allocation.height)); cairo_set_line_width(cr, 1.75); cairo_line_to(cr, (double) (i), (double) (widget->allocation.height - AGS_RULER_LARGE_STEP)); cairo_stroke(cr); /* draw scale */ cairo_move_to(cr, (double) (i), (double) (widget->allocation.height - AGS_RULER_LARGE_STEP - 14)); if(ruler->scale_precision < 1.0){ guint val; str = g_strdup_printf("%.0f\0", floor(offset + z) * ruler->scale_precision + (((val = i % (guint) step) > 0 && val < 2) ? 1: 0)); }else{ str = g_strdup_printf("%.0f\0", floor(offset + z) * ruler->scale_precision + ((i % (guint) step != 0) ? 1 * ruler->scale_precision: 0)); } layout = pango_cairo_create_layout(cr); pango_layout_set_text(layout, str, -1); desc = pango_font_description_copy_static(NULL); //pango_font_description_from_string("Georgia Bold 11"); pango_layout_set_font_description(layout, desc); pango_font_description_free(desc); pango_cairo_update_layout(cr, layout); pango_cairo_show_layout(cr, layout); // cairo_show_text(cr, // str); pango_fc_font_map_cache_clear(pango_cairo_font_map_get_default()); g_object_unref(layout); g_free(str); i += step; z++; /* reset line width */ for(j = 1; i < widget->allocation.width && j < tact; j++){ ags_ruler_draw_scale0: /* draw large step */ cairo_move_to(cr, (double) (i), (double) (widget->allocation.height)); cairo_set_line_width(cr, 1.25); cairo_line_to(cr, (double) (i), (double) (widget->allocation.height - AGS_RULER_SMALL_STEP)); cairo_stroke(cr); i += step; z++; } } cairo_pop_group_to_source(cr); cairo_paint(cr); cairo_surface_mark_dirty(cairo_get_target(cr)); cairo_destroy(cr); } /** * ags_ruler_new: * * Creates an #AgsRuler * * Returns: a new #AgsRuler * * Since: 0.4 */ AgsRuler* ags_ruler_new() { AgsRuler *ruler; GtkAdjustment *adjustment; adjustment = (GtkAdjustment *) gtk_adjustment_new(0.0, 0.0, 1.0, 0.1, 0.1, 0.0); ruler = (AgsRuler *) g_object_new(AGS_TYPE_RULER, "adjustment\0", adjustment, NULL); return(ruler); } gsequencer-0.6.37/src/ags/widget/ags_led.c0000644000175000017500000001351512621463700015265 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include "ags_led.h" #include #include void ags_led_class_init(AgsLedClass *led); void ags_led_init(AgsLed *led); void ags_led_show(GtkWidget *widget); void ags_led_realize(GtkWidget *widget); gint ags_led_expose(GtkWidget *widget, GdkEventExpose *event); void ags_led_size_request(GtkWidget *widget, GtkRequisition *requisition); void ags_led_size_allocate(GtkWidget *widget, GtkAllocation *allocation); gboolean ags_led_expose(GtkWidget *widget, GdkEventExpose *event); void ags_led_draw(AgsLed *led); /** * SECTION:ags_led * @short_description: A led widget * @title: AgsLed * @section_id: * @include: ags/widget/ags_led.h * * #AgsLed is a widget visualizing a #gboolean value. */ static gpointer ags_led_parent_class = NULL; GtkStyle *led_style; GType ags_led_get_type(void) { static GType ags_type_led = 0; if(!ags_type_led){ static const GTypeInfo ags_led_info = { sizeof(AgsLedClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_led_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(AgsLed), 0, /* n_preallocs */ (GInstanceInitFunc) ags_led_init, }; ags_type_led = g_type_register_static(GTK_TYPE_BIN, "AgsLed\0", &ags_led_info, 0); } return(ags_type_led); } void ags_led_class_init(AgsLedClass *led) { GtkWidgetClass *widget; ags_led_parent_class = g_type_class_peek_parent(led); widget = (GtkWidgetClass *) led; widget->realize = ags_led_realize; widget->expose_event = ags_led_expose; widget->show = ags_led_show; } void ags_led_init(AgsLed *led) { g_object_set(G_OBJECT(led), "app-paintable\0", TRUE, NULL); gtk_widget_set_style((GtkWidget *) led, led_style); led->flags = 0; } void ags_led_realize(GtkWidget *widget) { AgsLed *led; GdkWindowAttr attributes; gint attributes_mask; g_return_if_fail (widget != NULL); g_return_if_fail (AGS_IS_LED (widget)); GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED); led = AGS_LED (widget); /* */ //TODO:JK: apply borders of container widgets attributes.x = widget->allocation.x; attributes.y = widget->allocation.y; attributes.width = widget->allocation.width; attributes.height = widget->allocation.height; attributes.wclass = GDK_INPUT_OUTPUT; attributes.window_type = GDK_WINDOW_CHILD; attributes.event_mask = gtk_widget_get_events (widget) | GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK; attributes.visual = gtk_widget_get_visual (widget); attributes.colormap = gtk_widget_get_colormap (widget); attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP; widget->window = gdk_window_new(gtk_widget_get_parent_window(widget), &attributes, attributes_mask); widget->style = gtk_style_attach(widget->style, widget->window); gdk_window_set_user_data(widget->window, widget); gtk_style_set_background(widget->style, widget->window, GTK_STATE_ACTIVE); GTK_WIDGET_CLASS(ags_led_parent_class)->realize(widget); } void ags_led_show(GtkWidget *widget) { GTK_WIDGET_CLASS(ags_led_parent_class)->show(widget); } gboolean ags_led_expose(GtkWidget *widget, GdkEventExpose *event) { GTK_WIDGET_CLASS(ags_led_parent_class)->expose_event(widget, event); ags_led_draw(AGS_LED(widget)); return(FALSE); } void ags_led_draw(AgsLed *led) { GtkWidget *widget; GdkWindow *window; GtkStyle *led_style; cairo_t *cr; static const gdouble white_gc = 65535.0; widget = GTK_WIDGET(led); led_style = gtk_widget_get_style(widget); cr = gdk_cairo_create(widget->window); /* */ if((AGS_LED_ACTIVE & (led->flags)) != 0){ /* active */ cairo_set_source_rgb(cr, led_style->light[0].red / white_gc, led_style->light[0].green / white_gc, led_style->light[0].blue / white_gc); }else{ /* normal */ cairo_set_source_rgb(cr, led_style->dark[0].red / white_gc, led_style->dark[0].green / white_gc, led_style->dark[0].blue / white_gc); } cairo_rectangle(cr, widget->allocation.x, widget->allocation.y, widget->allocation.width, widget->allocation.height); cairo_fill(cr); /* outline */ cairo_set_source_rgb(cr, led_style->fg[0].red / white_gc, led_style->fg[0].green / white_gc, led_style->fg[0].blue / white_gc); cairo_set_line_width(cr, 1.0); cairo_rectangle(cr, widget->allocation.x, widget->allocation.y, widget->allocation.width, widget->allocation.height); cairo_stroke(cr); /* */ cairo_destroy(cr); } void ags_led_set_active(AgsLed *led) { led->flags |= AGS_LED_ACTIVE; gtk_widget_queue_draw((GtkWidget *) led); // ags_led_draw(led); } void ags_led_unset_active(AgsLed *led) { led->flags &= (~AGS_LED_ACTIVE); gtk_widget_queue_draw((GtkWidget *) led); // ags_led_draw(led); } /** * ags_led_new: * * Creates an #AgsLed. * * Returns: a new #AgsLed * * Since: 0.4 */ AgsLed* ags_led_new() { AgsLed *led; led = (AgsLed *) g_object_new(AGS_TYPE_LED, NULL); return(led); } gsequencer-0.6.37/src/ags/widget/ags_htimebar.c0000644000175000017500000000144712621463700016315 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include gsequencer-0.6.37/src/ags/widget/ags_cartesian.c0000644000175000017500000000406612621463700016473 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include "ags_cartesian.h" void ags_cartesian_class_init(AgsCartesianClass *cartesian); void ags_cartesian_init(AgsCartesian *cartesian); void ags_cartesian_show(GtkWidget *widget); static gpointer ags_cartesian_parent_class = NULL; GType ags_cartesian_get_type(void) { static GType ags_type_cartesian = 0; if(!ags_type_cartesian){ static const GTypeInfo ags_cartesian_info = { sizeof(AgsCartesianClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_cartesian_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof(AgsCartesian), 0, /* n_preallocs */ (GInstanceInitFunc) ags_cartesian_init, }; ags_type_cartesian = g_type_register_static(GTK_TYPE_WIDGET, "AgsCartesian\0", &ags_cartesian_info, 0); } return(ags_type_cartesian); } void ags_cartesian_class_init(AgsCartesianClass *cartesian) { GtkWidgetClass *widget; ags_cartesian_parent_class = g_type_class_peek_parent(cartesian); } void ags_cartesian_init(AgsCartesian *cartesian) { g_object_set(G_OBJECT(cartesian), "app-paintable\0", TRUE, NULL); } AgsCartesian* ags_cartesian_new() { AgsCartesian *cartesian; cartesian = (AgsCartesian *) g_object_new(AGS_TYPE_CARTESIAN, NULL); return(cartesian); } gsequencer-0.6.37/src/ags/file/0000755000175000017500000000000012633241336013234 500000000000000gsequencer-0.6.37/src/ags/file/ags_file_lookup.c0000644000175000017500000001457612626447543016511 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include void ags_file_lookup_class_init(AgsFileLookupClass *file_lookup); void ags_file_lookup_init (AgsFileLookup *file_lookup); void ags_file_lookup_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_file_lookup_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_file_lookup_finalize(GObject *gobject); /** * SECTION:ags_file_lookup * @short_description: resolve objects read of file. * @title: AgsFileLookup * @section_id: * @include: ags/file/ags_file_lookup.h * * The #AgsFileLookup resolve objects of file. */ enum{ RESOLVE, LAST_SIGNAL, }; enum{ PROP_0, PROP_FILE, PROP_NODE, PROP_REFERENCE, }; static gpointer ags_file_lookup_parent_class = NULL; static guint file_lookup_signals[LAST_SIGNAL]; GType ags_file_lookup_get_type (void) { static GType ags_type_file_lookup = 0; if(!ags_type_file_lookup){ static const GTypeInfo ags_file_lookup_info = { sizeof (AgsFileLookupClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_file_lookup_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsFileLookup), 0, /* n_preallocs */ (GInstanceInitFunc) ags_file_lookup_init, }; ags_type_file_lookup = g_type_register_static(G_TYPE_OBJECT, "AgsFileLookup\0", &ags_file_lookup_info, 0); } return (ags_type_file_lookup); } void ags_file_lookup_class_init(AgsFileLookupClass *file_lookup) { GObjectClass *gobject; GParamSpec *param_spec; ags_file_lookup_parent_class = g_type_class_peek_parent(file_lookup); /* GObjectClass */ gobject = (GObjectClass *) file_lookup; gobject->get_property = ags_file_lookup_get_property; gobject->set_property = ags_file_lookup_set_property; gobject->finalize = ags_file_lookup_finalize; /* properties */ param_spec = g_param_spec_object("file\0", "assigned file\0", "The file it is assigned with\0", AGS_TYPE_FILE, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_FILE, param_spec); param_spec = g_param_spec_pointer("node\0", "assigned node\0", "The node it is assigned with\0", G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_NODE, param_spec); param_spec = g_param_spec_pointer("reference\0", "assigned reference\0", "The reference it is assigned with\0", G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_REFERENCE, param_spec); /* AgsFileLookupClass */ file_lookup->resolve = NULL; file_lookup_signals[RESOLVE] = g_signal_new("resolve\0", G_TYPE_FROM_CLASS(file_lookup), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsFileLookupClass, resolve), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); } void ags_file_lookup_init(AgsFileLookup *file_lookup) { file_lookup->file = NULL; file_lookup->node = NULL; file_lookup->ref = NULL; } void ags_file_lookup_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsFileLookup *file_lookup; file_lookup = AGS_FILE_LOOKUP(gobject); switch(prop_id){ case PROP_FILE: { AgsFile *file; file = (AgsFile *) g_value_get_object(value); if(file_lookup->file == file){ return; } if(file_lookup->file != NULL){ g_object_unref(G_OBJECT(file_lookup->file)); } if(file != NULL){ g_object_ref(file); } file_lookup->file = file; } break; case PROP_NODE: { xmlNode *node; node = (xmlNode *) g_value_get_pointer(value); file_lookup->node = node; } break; case PROP_REFERENCE: { gpointer ref; ref = (gpointer) g_value_get_pointer(value); file_lookup->ref = ref; } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_file_lookup_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsFileLookup *file_lookup; file_lookup = AGS_FILE_LOOKUP(gobject); switch(prop_id){ case PROP_FILE: g_value_set_object(value, file_lookup->file); break; case PROP_NODE: g_value_set_pointer(value, file_lookup->node); break; case PROP_REFERENCE: g_value_set_pointer(value, file_lookup->ref); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_file_lookup_finalize(GObject *gobject) { AgsFileLookup *file_lookup; file_lookup = AGS_FILE_LOOKUP(gobject); if(file_lookup->file != NULL){ g_object_unref(G_OBJECT(file_lookup->file)); } } void ags_file_lookup_resolve(AgsFileLookup *file_lookup) { g_return_if_fail(AGS_IS_FILE_LOOKUP(file_lookup)); g_object_ref((GObject *) file_lookup); g_signal_emit(G_OBJECT(file_lookup), file_lookup_signals[RESOLVE], 0); g_object_unref((GObject *) file_lookup); } GList* ags_file_lookup_find_by_node(GList *file_lookup, xmlNode *node) { while(file_lookup != NULL && AGS_FILE_LOOKUP(file_lookup->data)->node != node){ file_lookup = file_lookup->next; } return(file_lookup); } /** * ags_file_lookup_new: * * Creates an #AgsFileLookup * * Returns: a new #AgsFileLookup * * Since: 0.4 */ AgsFileLookup* ags_file_lookup_new() { AgsFileLookup *file_lookup; file_lookup = (AgsFileLookup *) g_object_new(AGS_TYPE_FILE_LOOKUP, NULL); return(file_lookup); } gsequencer-0.6.37/src/ags/file/ags_file.c0000644000175000017500000010010112632715265015070 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef AGS_USE_LINUX_THREADS #include #else #include #endif #include #include #include #include #include #include #include #include #include #include #include void ags_file_class_init(AgsFileClass *file); void ags_file_init(AgsFile *file); void ags_file_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_file_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_file_finalize(GObject *gobject); void ags_file_real_open(AgsFile *file); void ags_file_real_open_from_data(AgsFile *file, gchar *data, guint length); void ags_file_real_rw_open(AgsFile *file, gboolean create); void ags_file_real_write(AgsFile *file); void ags_file_real_write_concurrent(AgsFile *file); void ags_file_real_write_resolve(AgsFile *file); void ags_file_real_read(AgsFile *file); void ags_file_real_read_resolve(AgsFile *file); void ags_file_real_read_start(AgsFile *file); /** * SECTION:ags_file * @short_description: read/write XML file * @title: AgsFile * @section_id: * @include: ags/file/ags_file.h * * The #AgsFile is an object to read or write files using XML. It * is the persisting layer of Advanced Gtk+ Sequencer. */ enum{ PROP_0, PROP_FILENAME, PROP_ENCODING, PROP_AUDIO_FORMAT, PROP_AUDIO_ENCODING, PROP_MAIN, }; enum{ OPEN, OPEN_FROM_DATA, RW_OPEN, WRITE, WRITE_CONCURRENT, WRITE_RESOLVE, READ, READ_RESOLVE, READ_START, LAST_SIGNAL, }; static gpointer ags_file_parent_class = NULL; static guint file_signals[LAST_SIGNAL] = { 0 }; extern AgsConfig *config; GType ags_file_get_type (void) { static GType ags_type_file = 0; if(!ags_type_file){ static const GTypeInfo ags_file_info = { sizeof (AgsFileClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_file_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsFile), 0, /* n_preallocs */ (GInstanceInitFunc) ags_file_init, }; ags_type_file = g_type_register_static(G_TYPE_OBJECT, "AgsFile\0", &ags_file_info, 0); } return (ags_type_file); } void ags_file_class_init(AgsFileClass *file) { GObjectClass *gobject; GParamSpec *param_spec; ags_file_parent_class = g_type_class_peek_parent(file); /* GObjectClass */ gobject = (GObjectClass *) file; gobject->get_property = ags_file_get_property; gobject->set_property = ags_file_set_property; gobject->finalize = ags_file_finalize; /* properties */ param_spec = g_param_spec_string("filename\0", "filename to read or write\0", "The filename to read or write to.\0", NULL, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_FILENAME, param_spec); param_spec = g_param_spec_string("encoding\0", "encoding to use\0", "The encoding of the XML document.\0", NULL, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_ENCODING, param_spec); param_spec = g_param_spec_string("audio format\0", "audio format to use\0", "The audio format used to embedded audio.\0", AGS_FILE_DEFAULT_AUDIO_FORMAT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_AUDIO_FORMAT, param_spec); param_spec = g_param_spec_string("audio encoding\0", "audio encoding to use\0", "The audio encoding used to embedded audio.\0", AGS_FILE_DEFAULT_AUDIO_ENCODING, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_AUDIO_ENCODING, param_spec); param_spec = g_param_spec_object("main\0", "main object of file\0", "The main object to write to file.\0", AGS_TYPE_MAIN, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_MAIN, param_spec); /* AgsFileClass */ file->open = ags_file_real_open; file->rw_open = ags_file_real_rw_open; file->open_from_data = ags_file_real_open_from_data; file->write = ags_file_real_write; file->write_concurrent = ags_file_real_write_concurrent; file->write_resolve = ags_file_real_write_resolve; file->read = ags_file_real_read; file->read_resolve = ags_file_real_read_resolve; file->read_start = ags_file_real_read_start; file_signals[OPEN] = g_signal_new("open\0", G_TYPE_FROM_CLASS(file), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsFileClass, open), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); file_signals[OPEN_FROM_DATA] = g_signal_new("open-from-data\0", G_TYPE_FROM_CLASS(file), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsFileClass, open_from_data), NULL, NULL, g_cclosure_user_marshal_VOID__STRING_UINT, G_TYPE_NONE, 0); file_signals[RW_OPEN] = g_signal_new("rw-open\0", G_TYPE_FROM_CLASS(file), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsFileClass, rw_open), NULL, NULL, g_cclosure_marshal_VOID__BOOLEAN, G_TYPE_NONE, 0); file_signals[WRITE] = g_signal_new("write\0", G_TYPE_FROM_CLASS(file), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsFileClass, write), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); file_signals[WRITE_CONCURRENT] = g_signal_new("write_concurrent\0", G_TYPE_FROM_CLASS(file), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsFileClass, write_concurrent), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); file_signals[WRITE_RESOLVE] = g_signal_new("write_resolve\0", G_TYPE_FROM_CLASS(file), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsFileClass, write_resolve), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); file_signals[READ] = g_signal_new("read\0", G_TYPE_FROM_CLASS(file), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsFileClass, read), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); file_signals[READ_RESOLVE] = g_signal_new("read_resolve\0", G_TYPE_FROM_CLASS(file), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsFileClass, read_resolve), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); file_signals[READ_START] = g_signal_new("read_start\0", G_TYPE_FROM_CLASS(file), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsFileClass, read_start), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); } void ags_file_init(AgsFile *file) { file->flags = 0; file->out = NULL; file->buffer = NULL; file->filename = NULL; file->encoding = AGS_FILE_DEFAULT_ENCODING; file->dtd = AGS_FILE_DEFAULT_DTD; file->audio_format = AGS_FILE_DEFAULT_AUDIO_FORMAT; file->audio_encoding = AGS_FILE_DEFAULT_AUDIO_ENCODING; file->doc = NULL; file->id_refs = NULL; file->lookup = NULL; file->launch = NULL; file->ags_main = NULL; file->clipboard = NULL; file->property = NULL; file->script = NULL; file->cluster = NULL; file->client = NULL; file->server = NULL; file->history = NULL; file->embedded_audio = NULL; file->file_link = NULL; } void ags_file_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsFile *file; file = AGS_FILE(gobject); switch(prop_id){ case PROP_FILENAME: { gchar *filename; filename = g_value_get_string(value); if(file->filename == filename){ return; } file->filename = g_strdup(filename); } break; case PROP_ENCODING: { gchar *encoding; encoding = g_value_get_string(value); file->encoding = encoding; } break; case PROP_AUDIO_FORMAT: { gchar *audio_format; audio_format = g_value_get_string(value); file->audio_format = audio_format; } break; case PROP_AUDIO_ENCODING: { gchar *audio_encoding; audio_encoding = g_value_get_string(value); file->audio_encoding = audio_encoding; } break; case PROP_MAIN: { GObject *ags_main; ags_main = g_value_get_object(value); if(file->ags_main == ags_main){ return; } if(file->ags_main != NULL){ g_object_unref(file->ags_main); } if(ags_main != NULL){ g_object_ref(ags_main); } file->ags_main = ags_main; } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_file_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsFile *file; file = AGS_FILE(gobject); switch(prop_id){ case PROP_FILENAME: { g_value_set_string(value, file->filename); } break; case PROP_ENCODING: { g_value_set_string(value, file->encoding); } break; case PROP_AUDIO_FORMAT: { g_value_set_string(value, file->audio_format); } break; case PROP_AUDIO_ENCODING: { g_value_set_string(value, file->audio_encoding); } break; case PROP_MAIN: { g_value_set_object(value, file->ags_main); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_file_finalize(GObject *gobject) { AgsFile *file; void ags_file_destroy_node(xmlNodePtr node){ xmlNodePtr child; child = node->children; while(child != NULL){ ags_file_destroy_node(child); child = child->next; } } file = (AgsFile *) gobject; if((AGS_FILE_READ & (file->flags)) != 0){ }else if((AGS_FILE_WRITE & (file->flags)) != 0){ }else{ return; } xmlFreeDoc(file->doc); // xmlCleanupParser(); // xmlMemoryDump(); G_OBJECT_CLASS(ags_file_parent_class)->finalize(gobject); } gchar* ags_file_str2md5(gchar *content, guint strlen) { GChecksum *checksum; gchar *str; str = g_compute_checksum_for_string(G_CHECKSUM_MD5, content, strlen); return(str); } void ags_file_add_id_ref(AgsFile *file, GObject *id_ref) { if(id_ref == NULL) return; g_object_ref(id_ref); file->id_refs = g_list_prepend(file->id_refs, id_ref); } GObject* ags_file_find_id_ref_by_node(AgsFile *file, xmlNode *node) { AgsFileIdRef *file_id_ref; GList *list; list = file->id_refs; while(list != NULL){ file_id_ref = AGS_FILE_ID_REF(list->data); if(file_id_ref->node == node){ return((GObject *) file_id_ref); } list = list->next; } return(NULL); } GObject* ags_file_find_id_ref_by_xpath(AgsFile *file, gchar *xpath) { AgsFileIdRef *file_id_ref; xmlXPathContext *xpath_context; xmlXPathObject *xpath_object; xmlNode **node; guint i; if(file == NULL || xpath == NULL || !g_str_has_prefix(xpath, "xpath=\0")){ g_message("invalid xpath: %s", xpath); return(NULL); } xpath = &(xpath[6]); /* Create xpath evaluation context */ xpath_context = xmlXPathNewContext(file->doc); if(xpath_context == NULL) { fprintf(stderr,"Error: unable to create new XPath context\n\0"); return(NULL); } /* Evaluate xpath expression */ xpath_object = xmlXPathEval(xpath, xpath_context); if(xpath_object == NULL) { g_message("Error: unable to evaluate xpath expression \"%s\"\0", xpath); xmlXPathFreeContext(xpath_context); return(NULL); } node = xpath_object->nodesetval->nodeTab; for(i = 0; i < xpath_object->nodesetval->nodeNr; i++){ if(node[i]->type == XML_ELEMENT_NODE){ return(ags_file_find_id_ref_by_node(file, node[i])); } } g_message("no xpath match: %s\0", xpath); return(NULL); } GObject* ags_file_find_id_ref_by_reference(AgsFile *file, gpointer ref) { AgsFileIdRef *file_id_ref; GList *list; list = file->id_refs; while(list != NULL){ file_id_ref = AGS_FILE_ID_REF(list->data); if(file_id_ref->ref == ref){ return((GObject *) file_id_ref); } list = list->next; } return(NULL); } void ags_file_add_lookup(AgsFile *file, GObject *file_lookup) { if(file == NULL || file_lookup == NULL){ return; } g_object_ref(G_OBJECT(file_lookup)); file->lookup = g_list_prepend(file->lookup, file_lookup); } void ags_file_add_launch(AgsFile *file, GObject *file_launch) { if(file == NULL || file_launch == NULL){ return; } g_object_ref(G_OBJECT(file_launch)); file->launch = g_list_prepend(file->launch, file_launch); } void ags_file_real_open(AgsFile *file) { if(file == NULL){ return; } /* parse the file and get the DOM */ file->doc = xmlReadFile(file->filename, NULL, 0); if(file->doc == NULL){ GtkDialog *dialog; g_warning("could not parse file %s\n", file->filename); dialog = gtk_message_dialog_new(NULL, 0, GTK_MESSAGE_WARNING, GTK_BUTTONS_OK, "Failed to open '%s'\0", file->filename); gtk_widget_show_all(dialog); g_signal_connect(dialog, "response\0", G_CALLBACK(gtk_main_quit), NULL); gtk_main(); exit(-1); } /*Get the root element node */ file->root_node = xmlDocGetRootElement(file->doc); } void ags_file_open(AgsFile *file) { g_return_if_fail(AGS_IS_FILE(file)); g_object_ref(G_OBJECT(file)); g_signal_emit(G_OBJECT(file), file_signals[OPEN], 0); g_object_unref(G_OBJECT(file)); } void ags_file_real_open_from_data(AgsFile *file, gchar *data, guint length) { if(file == NULL){ return; } file->doc = xmlReadMemory(data, length, file->filename, NULL, 0); if(file->doc == NULL) { GtkDialog *dialog; g_warning("could not parse file %s\n", file->filename); dialog = gtk_message_dialog_new(NULL, 0, GTK_MESSAGE_WARNING, GTK_BUTTONS_OK, "Failed to open '%s'\0", file->filename); gtk_widget_show_all(dialog); g_signal_connect(dialog, "response\0", G_CALLBACK(gtk_main_quit), NULL); gtk_main(); exit(-1); } /*Get the root element node */ file->root_node = xmlDocGetRootElement(file->doc); } void ags_file_open_from_data(AgsFile *file, gchar *data, guint length) { g_return_if_fail(AGS_IS_FILE(file)); g_object_ref(G_OBJECT(file)); g_signal_emit(G_OBJECT(file), file_signals[OPEN_FROM_DATA], 0, data, length); g_object_unref(G_OBJECT(file)); } void ags_file_real_rw_open(AgsFile *file, gboolean create) { if(file == NULL){ return; } file->out = fopen(file->filename, "w+\0"); file->doc = xmlNewDoc("1.0\0"); file->root_node = xmlNewNode(NULL, "ags\0"); xmlDocSetRootElement(file->doc, file->root_node); } void ags_file_rw_open(AgsFile *file, gboolean create) { g_return_if_fail(AGS_IS_FILE(file)); g_object_ref(G_OBJECT(file)); g_signal_emit(G_OBJECT(file), file_signals[RW_OPEN], 0, create); g_object_unref(G_OBJECT(file)); } void ags_file_open_filename(AgsFile *file, gchar *filename) { if(file == NULL){ return; } if(file->filename != NULL){ ags_file_close(file); } g_object_set(file, "filename\0", filename, NULL); ags_file_open(file); } void ags_file_close(AgsFile *file) { if(file == NULL){ return; } if(file->out != NULL){ fclose(file->out); } /*free the document */ xmlFreeDoc(file->doc); /* *Free the global variables that may *have been allocated by the parser. */ xmlCleanupParser(); /* * this is to debug memory for regression tests */ xmlMemoryDump(); file->filename = NULL; } void ags_file_real_write(AgsFile *file) { AgsMain *ags_main; GList *list; int size; // ags_file_rw_open(file, // TRUE); /* write clip board */ //TODO:JK: implement me /* write scripts */ //TODO:JK: implement me /* write cluster */ //TODO:JK: implement me /* write client */ //TODO:JK: implement me /* write server */ //TODO:JK: implement me /* write main */ ags_file_write_main(file, file->root_node, file->ags_main); /* write embedded audio */ //TODO:JK: implement me /* write file link */ //TODO:JK: implement me /* write history */ //TODO:JK: implement me /* resolve */ ags_file_write_resolve(file); /* * Dumping document to file */ // xmlSaveFormatFileEnc(file->filename, file->doc, "UTF-8\0", 1); xmlDocDumpFormatMemoryEnc(file->doc, &(file->buffer), &size, file->encoding, TRUE); fwrite(file->buffer, size, sizeof(xmlChar), file->out); fflush(file->out); } void ags_file_write(AgsFile *file) { g_return_if_fail(AGS_IS_FILE(file)); g_object_ref(G_OBJECT(file)); g_signal_emit(G_OBJECT(file), file_signals[WRITE], 0); g_object_unref(G_OBJECT(file)); } void ags_file_real_write_concurrent(AgsFile *file) { AgsMain *ags_main; AgsThread *main_loop, *gui_thread, *task_thread; xmlNode *root_node; FILE *file_out; GList *list; xmlChar *buffer; int size; xmlNode *parent, *node, *child; gchar *id; /* main_loop = AGS_MAIN(file->ags_main)->main_loop; gui_thread = AGS_AUDIO_LOOP(main_loop)->gui_thread; task_thread = AGS_AUDIO_LOOP(main_loop)->task_thread; */ ags_main = (AgsMain *) file->ags_main; file->doc = xmlNewDoc("1.0\0"); root_node = xmlNewNode(NULL, "ags\0"); xmlDocSetRootElement(file->doc, root_node); parent = root_node; /* write clip board */ //TODO:JK: implement me /* write scripts */ //TODO:JK: implement me /* write cluster */ //TODO:JK: implement me /* write client */ //TODO:JK: implement me /* write server */ //TODO:JK: implement me /* the main code - write main */ ags_thread_lock(main_loop); id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-main\0"); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", ags_main, NULL)); xmlNewProp(node, AGS_FILE_ID_PROP, id); xmlNewProp(node, AGS_FILE_FLAGS_PROP, g_strdup_printf("%x\0", ((~AGS_MAIN_CONNECTED) & (AGS_MAIN(ags_main)->flags)))); xmlNewProp(node, AGS_FILE_VERSION_PROP, AGS_MAIN(ags_main)->version); xmlNewProp(node, AGS_FILE_BUILD_ID_PROP, AGS_MAIN(ags_main)->build_id); /* add to parent */ xmlAddChild(parent, node); ags_thread_unlock(main_loop); /* child elements */ /* thread */ ags_thread_lock(main_loop); ags_file_write_thread(file, node, AGS_THREAD(AGS_MAIN(ags_main)->main_loop)); ags_thread_unlock(main_loop); /* thread pool */ ags_thread_lock(main_loop); ags_file_write_thread_pool(file, node, AGS_THREAD_POOL(AGS_MAIN(ags_main)->thread_pool)); ags_thread_unlock(main_loop); /* write audio */ ags_thread_lock(task_thread); ags_file_write_devout_list(file, node, AGS_MAIN(ags_main)->devout); ags_thread_unlock(task_thread); ags_thread_lock(gui_thread); ags_file_write_window(file, node, AGS_MAIN(ags_main)->window); ags_thread_unlock(gui_thread); /* write embedded audio */ //TODO:JK: implement me /* write file link */ //TODO:JK: implement me /* write history */ //TODO:JK: implement me /* resolve */ ags_file_write_resolve(file); /* * Dumping document to file */ // xmlSaveFormatFileEnc(file->filename, file->doc, "UTF-8\0", 1); xmlDocDumpFormatMemoryEnc(file->doc, &buffer, &size, file->encoding, TRUE); file_out = fopen(file->filename, "w+\0"); fwrite(buffer, size, sizeof(xmlChar), file_out); fflush(file_out); fclose(file_out); /*free the document */ xmlFreeDoc(file->doc); /* *Free the global variables that may *have been allocated by the parser. */ xmlCleanupParser(); /* * this is to debug memory for regression tests */ xmlMemoryDump(); } void ags_file_write_concurrent(AgsFile *file) { g_return_if_fail(AGS_IS_FILE(file)); g_object_ref(G_OBJECT(file)); g_signal_emit(G_OBJECT(file), file_signals[WRITE_CONCURRENT], 0); g_object_unref(G_OBJECT(file)); } void ags_file_real_write_resolve(AgsFile *file) { GList *list; file->lookup = g_list_prepend(file->lookup, NULL); list = file->lookup; while(list != NULL){ ags_file_lookup_resolve(AGS_FILE_LOOKUP(list->data)); list = list->next; } } void ags_file_write_resolve(AgsFile *file) { g_return_if_fail(AGS_IS_FILE(file)); g_object_ref(G_OBJECT(file)); g_signal_emit(G_OBJECT(file), file_signals[WRITE_RESOLVE], 0); g_object_unref(G_OBJECT(file)); } void ags_file_real_read(AgsFile *file) { AgsMain *ags_main; AgsThread *thread, *async_queue; xmlNode *root_node, *child; pid_t pid_num; root_node = file->root_node; /* child elements */ child = root_node->children; while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrncmp("ags-clip-board\0", child->name, 15)){ //TODO:JK: implement me }else if(!xmlStrncmp("ags-script-list\0", child->name, 16)){ //TODO:JK: implement me }else if(!xmlStrncmp("ags-cluster\0", child->name, 12)){ //TODO:JK: implement me }else if(!xmlStrncmp("ags-client\0", child->name, 11)){ //TODO:JK: implement me }else if(!xmlStrncmp("ags-server\0", child->name, 11)){ //TODO:JK: implement me }else if(!xmlStrncmp("ags-main\0", child->name, 9)){ ags_main = NULL; ags_file_read_main(file, child, (GObject **) &ags_main); }else if(!xmlStrncmp("ags-embedded-audio-list\0", child->name, 24)){ //TODO:JK: implement me }else if(!xmlStrncmp("ags-file-link-list\0", child->name, 19)){ //TODO:JK: implement me }else if(!xmlStrncmp("ags-history\0", child->name, 12)){ //TODO:JK: implement me } } child = child->next; } /* resolve */ ags_file_read_resolve(file); gtk_window_set_title((GtkWindow *) ags_main->window, g_strconcat("GSequencer - \0", ags_main->window->name, NULL)); gtk_widget_show_all(GTK_WIDGET(ags_main->window)); g_message("XML file resolved\0"); ags_connectable_connect(AGS_CONNECTABLE(ags_main)); g_message("XML file connected\0"); thread = ags_main->main_loop; g_atomic_int_and(&(thread->flags), (~AGS_THREAD_RUNNING)); ags_thread_start(thread); /* wait thread */ pthread_mutex_lock(AGS_THREAD(ags_main->main_loop)->start_mutex); g_atomic_int_set(&(AGS_THREAD(ags_main->main_loop)->start_wait), TRUE); if(g_atomic_int_get(&(AGS_THREAD(ags_main->main_loop)->start_wait)) == TRUE && g_atomic_int_get(&(AGS_THREAD(ags_main->main_loop)->start_done)) == FALSE){ while(g_atomic_int_get(&(AGS_THREAD(ags_main->main_loop)->start_wait)) == TRUE && g_atomic_int_get(&(AGS_THREAD(ags_main->main_loop)->start_done)) == FALSE){ pthread_cond_wait(AGS_THREAD(ags_main->main_loop)->start_cond, AGS_THREAD(ags_main->main_loop)->start_mutex); } } pthread_mutex_unlock(AGS_THREAD(ags_main->main_loop)->start_mutex); /* complete thread pool */ ags_main->thread_pool->parent = AGS_THREAD(ags_main->main_loop); ags_thread_pool_start(ags_main->thread_pool); /* start */ async_queue = ags_thread_find_type(ags_main->main_loop, AGS_TYPE_TASK_THREAD); g_object_ref(file); ags_task_thread_append_task((AgsTaskThread *) async_queue, ags_start_read_file_new(file)); // ags_file_read_start(file); } void ags_file_read(AgsFile *file) { g_return_if_fail(AGS_IS_FILE(file)); g_object_ref(G_OBJECT(file)); g_signal_emit(G_OBJECT(file), file_signals[READ], 0); g_object_unref(G_OBJECT(file)); } void ags_file_real_read_resolve(AgsFile *file) { GList *list; file->lookup = g_list_prepend(file->lookup, NULL); list = g_list_reverse(file->lookup); while(list != NULL){ ags_file_lookup_resolve(AGS_FILE_LOOKUP(list->data)); list = list->next; } } void ags_file_read_resolve(AgsFile *file) { g_return_if_fail(AGS_IS_FILE(file)); g_object_ref(G_OBJECT(file)); g_signal_emit(G_OBJECT(file), file_signals[READ_RESOLVE], 0); g_object_unref(G_OBJECT(file)); } void ags_file_real_read_start(AgsFile *file) { GList *list; list = g_list_reverse(file->launch); while(list != NULL){ ags_file_launch_start(AGS_FILE_LAUNCH(list->data)); list = list->next; } } void ags_file_read_start(AgsFile *file) { g_return_if_fail(AGS_IS_FILE(file)); g_object_ref(G_OBJECT(file)); g_signal_emit(G_OBJECT(file), file_signals[READ_START], 0); g_object_unref(G_OBJECT(file)); } void ags_file_read_server(AgsFile *file, xmlNode *node, GObject **server) { //TODO:JK: implement me } void ags_file_write_server(AgsFile *file, xmlNode *parent, GObject *server) { //TODO:JK: implement me } void ags_file_read_main(AgsFile *file, xmlNode *node, GObject **ags_main) { AgsMain *gobject; AgsThread *main_loop; AgsTaskThread *async_queue; GList *list; xmlNode *child; int argc; gboolean read_thread, read_thread_pool; static const gchar *argv[] = { "ags\0", }; if(*ags_main == NULL){ gobject = g_object_new(AGS_TYPE_MAIN, NULL); *ags_main = (GObject *) gobject; }else{ gobject = (AgsMain *) *ags_main; } file->ags_main = (GObject *) gobject; argc = 1; g_object_set(G_OBJECT(file), "main\0", gobject, NULL); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", gobject, NULL)); /* properties */ gobject->flags = (guint) g_ascii_strtoull(xmlGetProp(node, AGS_FILE_FLAGS_PROP), NULL, 16); gobject->version = xmlGetProp(node, AGS_FILE_VERSION_PROP); gobject->build_id = xmlGetProp(node, AGS_FILE_BUILD_ID_PROP); //TODO:JK: check version compatibelity /* child elements */ child = node->children; read_thread = FALSE; read_thread_pool = FALSE; while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrncmp("ags-config\0", child->name, 10)){ ags_file_read_config(file, child, NULL); }else if(!xmlStrncmp("ags-thread\0", child->name, 11)){ read_thread = TRUE; ags_file_read_thread(file, child, (AgsThread **) &(gobject->main_loop)); AGS_AUDIO_LOOP(gobject->main_loop)->ags_main = (GObject *) gobject; }else if(!xmlStrncmp("ags-thread-pool\0", child->name, 16)){ read_thread_pool = TRUE; ags_file_read_thread_pool(file, child, (AgsThreadPool **) &(gobject->thread_pool)); }else if(!xmlStrncmp("ags-devout-list\0", child->name, 16)){ ags_file_read_devout_list(file, child, &(gobject->devout)); }else if(!xmlStrncmp("ags-window\0", child->name, 11)){ ags_file_read_window(file, child, &(gobject->window)); } } child = child->next; } if(!read_thread){ /* AgsMainLoop */ gobject->main_loop = AGS_MAIN_LOOP(ags_audio_loop_new((GObject *) gobject->devout->data, (GObject *) gobject)); g_object_ref(G_OBJECT(gobject->main_loop)); ags_connectable_connect(AGS_CONNECTABLE(gobject->main_loop)); } //TODO:JK: should be resolved main_loop = gobject->main_loop; async_queue = ags_thread_find_type(main_loop, AGS_TYPE_TASK_THREAD); async_queue->thread_pool = gobject->thread_pool; AGS_THREAD_POOL(gobject->thread_pool)->parent = (AgsThread *) async_queue; if(read_thread){ list = g_atomic_pointer_get(&(AGS_THREAD_POOL(gobject->thread_pool)->returnable_thread)); while(list != NULL){ ags_thread_add_child_extended((AgsThread *) async_queue, AGS_THREAD(list->data), TRUE, TRUE); list = list->next; } } } void ags_file_write_main(AgsFile *file, xmlNode *parent, GObject *ags_main) { xmlNode *node, *child; gchar *id; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-main\0"); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", ags_main, NULL)); xmlNewProp(node, AGS_FILE_ID_PROP, id); xmlNewProp(node, AGS_FILE_FLAGS_PROP, g_strdup_printf("%x\0", ((~AGS_MAIN_CONNECTED) & (AGS_MAIN(ags_main)->flags)))); xmlNewProp(node, AGS_FILE_VERSION_PROP, AGS_MAIN(ags_main)->version); xmlNewProp(node, AGS_FILE_BUILD_ID_PROP, AGS_MAIN(ags_main)->build_id); /* add to parent */ xmlAddChild(parent, node); /* child elements */ ags_file_write_config(file, node, config); /* child elements */ ags_file_write_thread(file, node, AGS_THREAD(AGS_MAIN(ags_main)->main_loop)); ags_file_write_thread_pool(file, node, AGS_THREAD_POOL(AGS_MAIN(ags_main)->thread_pool)); ags_file_write_devout_list(file, node, AGS_MAIN(ags_main)->devout); ags_file_write_window(file, node, AGS_MAIN(ags_main)->window); } void ags_file_read_config(AgsFile *file, xmlNode *node, GObject **ags_config) { AgsConfig *gobject; gchar *id; char *buffer; gsize buffer_length; gobject = config; gobject->version = xmlGetProp(node, AGS_FILE_VERSION_PROP); gobject->build_id = xmlGetProp(node, AGS_FILE_BUILD_ID_PROP); buffer = xmlNodeGetContent(node); buffer_length = xmlStrlen(buffer); g_message("%s\0", buffer); ags_config_load_from_data(gobject, buffer, buffer_length); } void ags_file_write_config(AgsFile *file, xmlNode *parent, GObject *ags_config) { xmlNode *node; xmlNode *cdata; gchar *id; char *buffer; gsize buffer_length; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-config\0"); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", ags_config, NULL)); xmlNewProp(node, AGS_FILE_ID_PROP, id); xmlNewProp(node, AGS_FILE_VERSION_PROP, AGS_CONFIG(ags_config)->version); xmlNewProp(node, AGS_FILE_BUILD_ID_PROP, AGS_CONFIG(ags_config)->build_id); xmlAddChild(parent, node); /* cdata */ ags_config_to_data(ags_config, &buffer, &buffer_length); cdata = xmlNewCDataBlock(file->doc, buffer, buffer_length); xmlAddChild(node, cdata); } /** * ags_file_new: * * Creates an #AgsFile * * Returns: a new #AgsFile * * Since: 0.3 */ AgsFile* ags_file_new() { AgsFile *file; file = (AgsFile *) g_object_new(AGS_TYPE_FILE, NULL); return(file); } gsequencer-0.6.37/src/ags/file/ags_file_gui.c0000644000175000017500000023440612632645662015757 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define AGS_FILE_READ_EDITOR_PARAMETER_NAME "ags-file-read-editor-parameter-name\0" void ags_file_read_window_resolve_devout(AgsFileLookup *file_lookup, AgsWindow *window); void ags_file_write_window_resolve_devout(AgsFileLookup *file_lookup, AgsWindow *window); void ags_file_read_machine_resolve_machine_editor(AgsFileLookup *file_lookup, AgsMachine *machine); void ags_file_write_machine_resolve_machine_editor(AgsFileLookup *file_lookup, AgsMachine *machine); void ags_file_write_machine_resolve_audio(AgsFileLookup *file_lookup, AgsMachine *machine); void ags_file_read_machine_resolve_rename_dialog(AgsFileLookup *file_lookup, AgsMachine *machine); void ags_file_write_machine_resolve_rename_dialog(AgsFileLookup *file_lookup, AgsMachine *machine); void ags_file_read_pad_resolve_channel(AgsFileLookup *file_lookup, AgsPad *pad); void ags_file_read_line_resolve_channel(AgsFileLookup *file_lookup, AgsLine *line); void ags_file_read_line_member_resolve_port(AgsFileLookup *file_lookup, AgsLineMember *line_member); void ags_file_write_line_member_resolve_port(AgsFileLookup *file_lookup, AgsLineMember *line_member); void ags_file_read_editor_resolve_parameter(AgsFileLookup *file_lookup, AgsEditor *editor); void ags_file_read_editor_launch(AgsFileLaunch *file_launch, AgsEditor *editor); void ags_file_read_toolbar_launch(AgsFileLaunch *file_launch, AgsToolbar *toolbar); void ags_file_read_machine_selector_resolve_parameter(AgsFileLookup *file_lookup, AgsMachineSelector *machine_selector); void ags_file_read_navigation_resolve_devout(AgsFileLookup *file_lookup, AgsNavigation *navigation); void ags_file_read_widget(AgsFile *file, xmlNode *node, GtkWidget *widget) { //TODO:JK: implement me } xmlNode* ags_file_write_widget(AgsFile *file, xmlNode *parent, GtkWidget *widget) { //TODO:JK: implement me } void ags_file_read_window(AgsFile *file, xmlNode *node, AgsWindow **window) { AgsWindow *gobject; AgsFileLookup *file_lookup; xmlNode *child; xmlChar *prop, *content; xmlChar *str; if(*window == NULL){ gobject = g_object_new(AGS_TYPE_WINDOW, NULL); *window = gobject; }else{ gobject = *window; } g_object_set(G_OBJECT(gobject), "ags-main\0", file->ags_main, NULL); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", gobject, NULL)); gobject->flags = (guint) g_ascii_strtoull(xmlGetProp(node, AGS_FILE_FLAGS_PROP), NULL, 16); str = xmlGetProp(node, "name\0"); if(str != NULL){ gobject->name = (gchar *) g_strdup(str); }else{ gobject->name = (gchar *) g_strdup(file->filename); } /* devout */ file_lookup = (AgsFileLookup *) g_object_new(AGS_TYPE_FILE_LOOKUP, "file\0", file, "node\0", node, "reference\0", gobject, NULL); ags_file_add_lookup(file, (GObject *) file_lookup); g_signal_connect(G_OBJECT(file_lookup), "resolve\0", G_CALLBACK(ags_file_read_window_resolve_devout), gobject); /* child elements */ child = node->children; while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(child->name, "ags-menu-bar\0", 11)){ ags_file_read_menu_bar(file, child, &(gobject->menu_bar)); }else if(!xmlStrncmp(child->name, "ags-machine-counter-list\0", 24)){ ags_file_read_machine_counter_list(file, child, &(gobject->machine_counter)); }else if(!xmlStrncmp(child->name, "ags-machine-list\0", 16)){ GList *list; list = NULL; ags_file_read_machine_list(file, child, &list); while(list != NULL){ gtk_box_pack_start((GtkBox *) gobject->machines, GTK_WIDGET(list->data), FALSE, FALSE, 0); list = list->next; } }else if(!xmlStrncmp(child->name, "ags-editor\0", 10)){ ags_file_read_editor(file, child, &(gobject->editor)); }else if(!xmlStrncmp(child->name, "ags-navigation\0", 14)){ ags_file_read_navigation(file, child, &(gobject->navigation)); } } child = child->next; } } void ags_file_read_window_resolve_devout(AgsFileLookup *file_lookup, AgsWindow *window) { AgsFileIdRef *id_ref; gchar *xpath; xpath = (gchar *) xmlGetProp(file_lookup->node, "devout\0"); id_ref = (AgsFileIdRef *) ags_file_find_id_ref_by_xpath(file_lookup->file, xpath); if(id_ref != NULL){ g_object_set(G_OBJECT(window), "devout\0", (AgsWindow *) id_ref->ref, NULL); } } xmlNode* ags_file_write_window(AgsFile *file, xmlNode *parent, AgsWindow *window) { AgsFileLookup *file_lookup; xmlNode *node, *child; gchar *id; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-window\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", window, NULL)); xmlNewProp(node, AGS_FILE_FLAGS_PROP, g_strdup_printf("%x\0", window->flags)); xmlNewProp(node, "name\0", g_strdup(window->name)); /* devout */ file_lookup = (AgsFileLookup *) g_object_new(AGS_TYPE_FILE_LOOKUP, "file\0", file, "node\0", node, "reference\0", window, NULL); ags_file_add_lookup(file, (GObject *) file_lookup); g_signal_connect(G_OBJECT(file_lookup), "resolve\0", G_CALLBACK(ags_file_write_window_resolve_devout), window); xmlAddChild(parent, node); /* child elements */ ags_file_write_menu_bar(file, node, window->menu_bar); ags_file_write_machine_list(file, node, gtk_container_get_children(GTK_CONTAINER(window->machines))); ags_file_write_editor(file, node, window->editor); ags_file_write_navigation(file, node, window->navigation); } void ags_file_write_window_resolve_devout(AgsFileLookup *file_lookup, AgsWindow *window) { AgsFileIdRef *id_ref; gchar *id; id_ref = (AgsFileIdRef *) ags_file_find_id_ref_by_reference(file_lookup->file, window->devout); id = xmlGetProp(id_ref->node, AGS_FILE_ID_PROP); xmlNewProp(file_lookup->node, "devout\0", g_strdup_printf("xpath=//ags-devout[@id='%s']\0", id)); } void ags_file_read_menu_bar(AgsFile *file, xmlNode *node, AgsMenuBar **menu_bar) { AgsMenuBar *gobject; xmlNode *child; xmlChar *prop, *content; if(*menu_bar == NULL){ gobject = g_object_new(AGS_TYPE_MENU_BAR, NULL); *menu_bar = gobject; }else{ gobject = *menu_bar; } ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", gobject, NULL)); } xmlNode* ags_file_write_menu_bar(AgsFile *file, xmlNode *parent, AgsMenuBar *menu_bar) { xmlNode *node, *child; gchar *id; guint i; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-menu-bar\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", menu_bar, NULL)); xmlAddChild(parent, node); } void ags_file_read_machine_counter(AgsFile *file, xmlNode *node, AgsMachineCounter **machine_counter) { AgsMachineCounter *ptr; xmlNode *child; xmlChar *prop, *content; if(*machine_counter == NULL){ ptr = ags_machine_counter_alloc(NULL, NULL, G_TYPE_NONE, 0); *machine_counter = ptr; }else{ ptr = *machine_counter; } ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", ptr, NULL)); ptr->version = xmlGetProp(node, AGS_FILE_VERSION_PROP); ptr->build_id = xmlGetProp(node, AGS_FILE_BUILD_ID_PROP); ptr->machine_type = g_type_from_name(xmlGetProp(node, AGS_FILE_TYPE_PROP)); ptr->counter = g_ascii_strtoull(xmlGetProp(node, "counter\0"), NULL, 10); } xmlNode* ags_file_write_machine_counter(AgsFile *file, xmlNode *parent, AgsMachineCounter *machine_counter) { xmlNode *node, *child; gchar *id; guint i; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-machine-counter\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", machine_counter, NULL)); xmlNewProp(node, AGS_FILE_VERSION_PROP, machine_counter->version); xmlNewProp(node, AGS_FILE_BUILD_ID_PROP, machine_counter->build_id); xmlNewProp(node, AGS_FILE_TYPE_PROP, g_type_name(machine_counter->machine_type)); xmlNewProp(node, "counter\0", g_strdup_printf("%d\0", machine_counter->counter)); xmlAddChild(parent, node); } void ags_file_read_machine_counter_list(AgsFile *file, xmlNode *node, GList **machine_counter) { AgsMachineCounter *current; GList *list; xmlNode *child; xmlChar *id; id = xmlGetProp(node, AGS_FILE_ID_PROP); child = node->children; list = NULL; while(child != NULL){ current = NULL; ags_file_read_machine_counter(file, child, ¤t); list = g_list_prepend(list, current); child = child->next; } list = g_list_reverse(list); *machine_counter = list; ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", list, NULL)); } xmlNode* ags_file_write_machine_counter_list(AgsFile *file, xmlNode *parent, GList *machine_counter) { AgsMachineCounter *current; xmlNode *node; GList *list; gchar *id; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-machine-counter-list\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", list, NULL)); xmlAddChild(parent, node); list = machine_counter; while(list != NULL){ ags_file_write_machine_counter(file, node, AGS_MACHINE_COUNTER(list->data)); list = list->next; } return(node); } void ags_file_read_machine(AgsFile *file, xmlNode *node, AgsMachine **machine) { AgsWindow *window; AgsMachine *gobject; AgsFileLookup *file_lookup; GType machine_type; xmlNode *child; static gboolean machine_type_is_registered = FALSE; if(*machine == NULL){ if(!machine_type_is_registered){ ags_main_register_machine_type(); machine_type_is_registered = TRUE; } machine_type = g_type_from_name(xmlGetProp(node, AGS_FILE_TYPE_PROP)); gobject = (AgsMachine *) g_object_new(machine_type, NULL); *machine = gobject; }else{ gobject = *machine; } ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", gobject, NULL)); gobject->version = g_strdup(xmlGetProp(node, AGS_FILE_VERSION_PROP)); gobject->build_id = g_strdup(xmlGetProp(node, AGS_FILE_BUILD_ID_PROP)); gobject->flags = (guint) g_ascii_strtoull(xmlGetProp(node, AGS_FILE_FLAGS_PROP), NULL, 16); gobject->flags |= AGS_MACHINE_PREMAPPED_RECALL; gobject->flags &= (~AGS_MACHINE_CONNECTED); gobject->file_input_flags = (guint) g_ascii_strtoull(xmlGetProp(node, "file-input-flags\0"), NULL, 16); /* audio */ file_lookup = (AgsFileLookup *) g_object_new(AGS_TYPE_FILE_LOOKUP, "file\0", file, "node\0", node, "reference\0", gobject, NULL); ags_file_add_lookup(file, (GObject *) file_lookup); g_signal_connect(G_OBJECT(file_lookup), "resolve\0", G_CALLBACK(ags_file_read_machine_resolve_audio), gobject); /* machine-editor */ //TODO:JK: uncomment me // file_lookup = (AgsFileLookup *) g_object_new(AGS_TYPE_FILE_LOOKUP, // "file\0", file, // "node\0", node, // "reference\0", gobject, // NULL); // ags_file_add_lookup(file, (GObject *) file_lookup); // g_signal_connect(G_OBJECT(file_lookup), "resolve\0", // G_CALLBACK(ags_file_read_machine_resolve_machine_editor), gobject); /* rename-dialog */ file_lookup = (AgsFileLookup *) g_object_new(AGS_TYPE_FILE_LOOKUP, "file\0", file, "node\0", node, "reference\0", gobject, NULL); ags_file_add_lookup(file, (GObject *) file_lookup); g_signal_connect(G_OBJECT(file_lookup), "resolve\0", G_CALLBACK(ags_file_read_machine_resolve_rename_dialog), gobject); /* child elements */ child = node->children; while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrcmp(child->name, ags_plugin_get_xml_type(AGS_PLUGIN(gobject)))){ ags_plugin_read(file, child, AGS_PLUGIN(gobject)); }else if(!xmlStrncmp(child->name, "ags-pad-list\0", 12)){ GList *pad, *list; pad = NULL; ags_file_read_pad_list(file, child, &pad); if(!xmlStrncmp(xmlGetProp(child, AGS_FILE_SCOPE_PROP), "output\0", 6)){ if(!GTK_IS_BOX(gobject->output)){ ags_container_add_all(gobject->output, pad); }else{ list = pad; while(list != NULL){ gtk_box_pack_start(GTK_BOX(gobject->output), GTK_WIDGET(list->data), FALSE, FALSE, 0); list = list->next; } } }else{ if(!GTK_IS_BOX(gobject->input)){ ags_container_add_all(gobject->input, pad); }else{ list = pad; while(list != NULL){ gtk_box_pack_start(GTK_BOX(gobject->input), GTK_WIDGET(list->data), FALSE, FALSE, 0); list = list->next; } } } g_list_free(pad); } } child = child->next; } } void ags_file_read_machine_resolve_audio(AgsFileLookup *file_lookup, AgsMachine *machine) { AgsFileIdRef *id_ref; gchar *xpath; xmlXPathContext *xpath_context; xmlXPathObject *xpath_object; gchar *str; xpath = (gchar *) xmlGetProp(file_lookup->node, "audio\0"); g_message("xpath = %s\0", xpath); id_ref = (AgsFileIdRef *) ags_file_find_id_ref_by_xpath(file_lookup->file, xpath); g_object_set(G_OBJECT(machine), "audio\0", (AgsAudio *) id_ref->ref, NULL); AGS_AUDIO(id_ref->ref)->machine = (GtkWidget *) machine; g_signal_connect_after(G_OBJECT(machine->audio), "set_audio_channels\0", G_CALLBACK(ags_machine_set_audio_channels), machine); g_signal_connect_after(G_OBJECT(machine->audio), "set_pads\0", G_CALLBACK(ags_machine_set_pads), machine); str = xmlGetProp(file_lookup->node, AGS_FILE_NAME_PROP); if(str != NULL){ machine->name = g_strdup(str); } } void ags_file_read_machine_resolve_machine_editor(AgsFileLookup *file_lookup, AgsMachine *machine) { AgsFileIdRef *id_ref; gchar *xpath; xpath = (gchar *) xmlGetProp(file_lookup->node, "machine-editor\0"); if(xpath == NULL){ return; } id_ref = (AgsFileIdRef *) ags_file_find_id_ref_by_xpath(file_lookup->file, xpath); //TODO:JK: use g_object_set machine->properties = (GtkDialog *) id_ref->ref; } void ags_file_read_machine_resolve_rename_dialog(AgsFileLookup *file_lookup, AgsMachine *machine) { AgsFileIdRef *id_ref; gchar *xpath; xpath = (gchar *) xmlGetProp(file_lookup->node, "rename-dialog\0"); if(xpath == NULL){ return; } id_ref = (AgsFileIdRef *) ags_file_find_id_ref_by_xpath(file_lookup->file, xpath); //TODO:JK: use g_object_set machine->rename = (GtkDialog *) id_ref->ref; } xmlNode* ags_file_write_machine(AgsFile *file, xmlNode *parent, AgsMachine *machine) { AgsFileLookup *file_lookup; xmlNode *node, *child; gchar *id; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-machine\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", machine, NULL)); xmlNewProp(node, AGS_FILE_TYPE_PROP, G_OBJECT_TYPE_NAME(machine)); xmlNewProp(node, AGS_FILE_VERSION_PROP, machine->version); xmlNewProp(node, AGS_FILE_BUILD_ID_PROP, machine->build_id); xmlNewProp(node, AGS_FILE_FLAGS_PROP, g_strdup_printf("%x\0", ((~(AGS_MACHINE_BLOCK_PLAY | AGS_MACHINE_BLOCK_STOP)) & (machine->flags)))); xmlNewProp(node, "file-input-flags\0", g_strdup_printf("%x\0", machine->file_input_flags)); xmlNewProp(node, AGS_FILE_NAME_PROP, machine->name); xmlAddChild(parent, node); /* audio */ file_lookup = (AgsFileLookup *) g_object_new(AGS_TYPE_FILE_LOOKUP, "file\0", file, "node\0", node, "reference\0", machine, NULL); ags_file_add_lookup(file, (GObject *) file_lookup); g_signal_connect(G_OBJECT(file_lookup), "resolve\0", G_CALLBACK(ags_file_write_machine_resolve_audio), machine); /* machine-editor */ //TODO:JK: uncomment me // file_lookup = (AgsFileLookup *) g_object_new(AGS_TYPE_FILE_LOOKUP, // "file\0", file, // "node\0", node, // "reference\0", machine, // NULL); // ags_file_add_lookup(file, (GObject *) file_lookup); // g_signal_connect(G_OBJECT(file_lookup), "resolve\0", // G_CALLBACK(ags_file_write_machine_resolve_machine_editor), machine); /* rename-dialog */ //TODO:JK: uncomment me // file_lookup = (AgsFileLookup *) g_object_new(AGS_TYPE_FILE_LOOKUP, // "file\0", file, // "node\0", node, // "reference\0", machine, // NULL); // ags_file_add_lookup(file, (GObject *) file_lookup); // g_signal_connect(G_OBJECT(file_lookup), "resolve\0", // G_CALLBACK(ags_file_write_machine_resolve_rename_dialog), machine); /* child elements */ ags_plugin_write(file, node, AGS_PLUGIN(machine)); if(machine->output != NULL){ child = ags_file_write_pad_list(file, node, gtk_container_get_children(machine->output)); xmlNewProp(child, AGS_FILE_SCOPE_PROP, "output\0"); } if(machine->input != NULL){ child = ags_file_write_pad_list(file, node, gtk_container_get_children(machine->input)); xmlNewProp(child, AGS_FILE_SCOPE_PROP, "input\0"); } } void ags_file_write_machine_resolve_machine_editor(AgsFileLookup *file_lookup, AgsMachine *machine) { AgsFileIdRef *id_ref; gchar *id; id_ref = (AgsFileIdRef *) ags_file_find_id_ref_by_reference(file_lookup->file, machine->properties); id = xmlGetProp(id_ref->node, AGS_FILE_ID_PROP); xmlNewProp(file_lookup->node, "machine-editor\0", g_strdup_printf("xpath=//ags-machine-editor[@id='%s']\0", id)); } void ags_file_write_machine_resolve_rename_dialog(AgsFileLookup *file_lookup, AgsMachine *machine) { AgsFileIdRef *id_ref; gchar *id; id_ref = (AgsFileIdRef *) ags_file_find_id_ref_by_reference(file_lookup->file, machine->rename); id = xmlGetProp(id_ref->node, AGS_FILE_ID_PROP); xmlNewProp(file_lookup->node, "rename-dialog\0", g_strdup_printf("xpath=//ags-dialog[@id='%s']\0", id)); } void ags_file_write_machine_resolve_audio(AgsFileLookup *file_lookup, AgsMachine *machine) { AgsFileIdRef *id_ref; gchar *id; id_ref = (AgsFileIdRef *) ags_file_find_id_ref_by_reference(file_lookup->file, AGS_AUDIO(machine->audio)); id = xmlGetProp(id_ref->node, AGS_FILE_ID_PROP); xmlNewProp(file_lookup->node, "audio\0", g_strdup_printf("xpath=//ags-audio[@id='%s']\0", id)); } void ags_file_read_machine_list(AgsFile *file, xmlNode *node, GList **machine) { AgsMachine *current; GList *list; xmlNode *child; xmlChar *id; id = xmlGetProp(node, AGS_FILE_ID_PROP); child = node->children; list = NULL; while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(child->name, "ags-machine\0", 12)){ current = NULL; ags_file_read_machine(file, child, ¤t); list = g_list_prepend(list, current); } } child = child->next; } list = g_list_reverse(list); *machine = list; ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", list, NULL)); } xmlNode* ags_file_write_machine_list(AgsFile *file, xmlNode *parent, GList *machine) { AgsMachine *current; xmlNode *node; GList *list; gchar *id; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-machine-list\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", list, NULL)); xmlAddChild(parent, node); list = machine; while(list != NULL){ ags_file_write_machine(file, node, AGS_MACHINE(list->data)); list = list->next; } return(node); } void ags_file_read_pad(AgsFile *file, xmlNode *node, AgsPad **pad) { AgsPad *gobject; AgsFileLookup *file_lookup; GType pad_type; xmlNode *child; if(*pad == NULL){ pad_type = g_type_from_name(xmlGetProp(node, AGS_FILE_TYPE_PROP)); gobject = (AgsPad *) g_object_new(pad_type, NULL); *pad = gobject; }else{ gobject = *pad; } if(gobject == NULL) return; ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", gobject, NULL)); gobject->version = g_strdup(xmlGetProp(node, AGS_FILE_VERSION_PROP)); gobject->build_id = g_strdup(xmlGetProp(node, AGS_FILE_BUILD_ID_PROP)); gobject->flags = (guint) g_ascii_strtoull(xmlGetProp(node, AGS_FILE_FLAGS_PROP), NULL, 16); gobject->flags &= (~AGS_PAD_CONNECTED); /* channel */ file_lookup = (AgsFileLookup *) g_object_new(AGS_TYPE_FILE_LOOKUP, "file\0", file, "node\0", node, "reference\0", gobject, NULL); ags_file_add_lookup(file, (GObject *) file_lookup); g_signal_connect(G_OBJECT(file_lookup), "resolve\0", G_CALLBACK(ags_file_read_pad_resolve_channel), gobject); /* child elements */ child = node->children; while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrcmp(child->name, ags_plugin_get_xml_type(AGS_PLUGIN(gobject)))){ ags_plugin_read(file, child, AGS_PLUGIN(gobject)); }else if(!xmlStrncmp(child->name, "ags-line-list\0", 13)){ xmlNode *line_node; GList *start, *list; list = NULL; ags_file_read_line_list(file, child, &list); start = list; /* add line to pad */ line_node = child->children; while(line_node != NULL){ if(line_node->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(line_node->name, "ags-line\0", 8)){ guint x, y; guint width, height; g_object_set(G_OBJECT(list->data), "pad\0", gobject, NULL); x = g_ascii_strtoull(xmlGetProp(line_node, "left-attach\0"), NULL, 10); y = g_ascii_strtoull(xmlGetProp(line_node, "top-attach\0"), NULL, 10); width = g_ascii_strtoull(xmlGetProp(line_node, "right-attach\0"), NULL, 10) - x; height = g_ascii_strtoull(xmlGetProp(line_node, "bottom-attach\0"), NULL, 10) - y; ags_expander_set_add(gobject->expander_set, GTK_WIDGET(list->data), x, y, width, height); list = list->next; } } line_node = line_node->next; } g_list_free(start); } } child = child->next; } } void ags_file_read_pad_resolve_channel(AgsFileLookup *file_lookup, AgsPad *pad) { AgsFile *file; AgsMachine *machine; AgsFileIdRef *id_ref; xmlNode *node, *audio_node, *channel_node; xmlXPathContext *xpath_context; xmlXPathObject *xpath_object; GList *list; xmlChar *xpath; guint position; guint nth, audio_channel; guint i, j; gboolean is_output; file = file_lookup->file; machine = (AgsMachine *) gtk_widget_get_ancestor(GTK_WIDGET(pad), AGS_TYPE_MACHINE); if(machine->output != NULL){ list = gtk_container_get_children(machine->output); if(list != NULL && g_list_find(list, pad) != NULL){ is_output = TRUE; }else{ is_output = FALSE; } }else{ is_output = FALSE; } node = file_lookup->node; /* retrieve position */ xpath_context = xmlXPathNewContext(file->doc); // xmlXPathSetContextNode(node->parent, // xpath_context); xpath_context->node = node->parent; xpath_object = xmlXPathEval("./ags-pad\0", xpath_context); for(i = 0, j = 0; xpath_object->nodesetval->nodeTab[i] != node && i < xpath_object->nodesetval->nodeMax; i++){ if(xpath_object->nodesetval->nodeTab[i]->type == XML_ELEMENT_NODE){ j++; } } nth = j; /* */ position = nth * machine->audio->audio_channels; /* */ id_ref = (AgsFileIdRef *) ags_file_find_id_ref_by_reference(file_lookup->file, machine->audio); audio_node = NULL; if(id_ref != NULL){ audio_node = id_ref->node; } /* */ xpath = g_strdup_printf("(./ags-channel-list/ags-channel)/%s\0", (is_output ? "ags-output\0": "ags-input\0")); xpath_context = xmlXPathNewContext(file->doc); xpath_context->node = audio_node; xpath_object = xmlXPathEval(xpath, xpath_context); /* */ if(xpath_object != NULL && xpath_object->nodesetval != NULL){ AgsFileIdRef *file_id_ref; xmlNode *channel_node; for(i = 0, j = 0; j < position && i < xpath_object->nodesetval->nodeMax; i++){ if(xpath_object->nodesetval->nodeTab[i] != NULL && xpath_object->nodesetval->nodeTab[i]->type == XML_ELEMENT_NODE){ j++; } } channel_node = xpath_object->nodesetval->nodeTab[i]; file_id_ref = (AgsFileIdRef *) ags_file_find_id_ref_by_node(file, channel_node); g_object_set(G_OBJECT(pad), "channel\0", AGS_CHANNEL(file_id_ref->ref), NULL); }else{ g_message("no xpath match: %s\0", xpath); } } xmlNode* ags_file_write_pad(AgsFile *file, xmlNode *parent, AgsPad *pad) { AgsFileLookup *file_lookup; AgsExpanderSetChild *expander_set_child; xmlNode *node, *child; xmlNode *line_node; GList *line; gchar *id; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-pad\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", pad, NULL)); xmlNewProp(node, AGS_FILE_TYPE_PROP, G_OBJECT_TYPE_NAME(pad)); xmlNewProp(node, AGS_FILE_VERSION_PROP, pad->version); xmlNewProp(node, AGS_FILE_BUILD_ID_PROP, pad->build_id); xmlNewProp(node, AGS_FILE_FLAGS_PROP, g_strdup_printf("%x\0", ((~AGS_PAD_CONNECTED) & (pad->flags)))); xmlAddChild(parent, node); /* child elements */ ags_plugin_write(file, node, AGS_PLUGIN(pad)); line = gtk_container_get_children(GTK_CONTAINER(pad->expander_set)); child = ags_file_write_line_list(file, node, line); line_node = child->children; while(line != NULL){ expander_set_child = ags_expander_set_child_find(pad->expander_set, line->data); xmlNewProp(line_node, "left-attach\0", g_strdup_printf("%d\0", expander_set_child->x)); xmlNewProp(line_node, "top-attach\0", g_strdup_printf("%d\0", expander_set_child->y)); xmlNewProp(line_node, "right-attach\0", g_strdup_printf("%d\0", expander_set_child->x + expander_set_child->width)); xmlNewProp(line_node, "bottom-attach\0", g_strdup_printf("%d\0", expander_set_child->y + expander_set_child->height)); line = line->next; line_node = line_node->next; } } void ags_file_read_pad_list(AgsFile *file, xmlNode *node, GList **pad) { AgsPad *current; GList *list; xmlNode *child; xmlChar *id; id = xmlGetProp(node, AGS_FILE_ID_PROP); child = node->children; list = NULL; while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(child->name, "ags-pad\0", 8)){ current = NULL; ags_file_read_pad(file, child, ¤t); list = g_list_prepend(list, current); } } child = child->next; } list = g_list_reverse(list); *pad = list; ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", list, NULL)); } xmlNode* ags_file_write_pad_list(AgsFile *file, xmlNode *parent, GList *pad) { AgsPad *current; xmlNode *node; GList *list; gchar *id; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-pad-list\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", list, NULL)); xmlAddChild(parent, node); list = pad; while(list != NULL){ ags_file_write_pad(file, node, AGS_PAD(list->data)); list = list->next; } return(node); } void ags_file_read_line(AgsFile *file, xmlNode *node, AgsLine **line) { AgsLine *gobject; AgsFileLookup *file_lookup; GType line_type; xmlNode *child; if(*line == NULL){ line_type = g_type_from_name(xmlGetProp(node, AGS_FILE_TYPE_PROP)); gobject = (AgsLine *) g_object_new(line_type, NULL); *line = gobject; }else{ gobject = *line; } ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", gobject, NULL)); gobject->version = g_strdup(xmlGetProp(node, AGS_FILE_VERSION_PROP)); gobject->build_id = g_strdup(xmlGetProp(node, AGS_FILE_BUILD_ID_PROP)); gobject->flags = (guint) g_ascii_strtoull(xmlGetProp(node, AGS_FILE_FLAGS_PROP), NULL, 16); gobject->flags |= AGS_LINE_PREMAPPED_RECALL; gobject->flags &= (~AGS_LINE_CONNECTED); /* channel */ file_lookup = (AgsFileLookup *) g_object_new(AGS_TYPE_FILE_LOOKUP, "file\0", file, "node\0", node, "reference\0", gobject, NULL); ags_file_add_lookup(file, (GObject *) file_lookup); g_signal_connect(G_OBJECT(file_lookup), "resolve\0", G_CALLBACK(ags_file_read_line_resolve_channel), gobject); /* child elements */ child = node->children; while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrcmp(child->name, ags_plugin_get_xml_type(AGS_PLUGIN(gobject)))){ ags_plugin_read(file, child, AGS_PLUGIN(gobject)); }else if(!xmlStrncmp(child->name, "ags-line-member-list\0", 20)){ xmlNode *line_member_node; GList *start, *list; list = NULL; ags_file_read_line_member_list(file, child, &list); start = list; /* remove default line members */ gtk_widget_destroy(GTK_WIDGET(gobject->expander)); gobject->expander = ags_expander_new(1, 1); gtk_table_set_row_spacings(gobject->expander->table, 2); gtk_table_set_col_spacings(gobject->expander->table, 2); gtk_box_pack_start(GTK_BOX(gobject), GTK_WIDGET(gobject->expander), TRUE, TRUE, 0); /* add line member to line */ line_member_node = child->children; while(line_member_node != NULL){ if(line_member_node->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(child->name, "ags-line-member\0", 15)){ guint x, y; guint width, height; guint control_width, control_height; /* pack */ x = g_ascii_strtoull(xmlGetProp(line_member_node, "left-attach\0"), NULL, 10); y = g_ascii_strtoull(xmlGetProp(line_member_node, "top-attach\0"), NULL, 10); width = g_ascii_strtoull(xmlGetProp(line_member_node, "right-attach\0"), NULL, 10) - x; height = g_ascii_strtoull(xmlGetProp(line_member_node, "bottom-attach\0"), NULL, 10) - y; ags_expander_add(gobject->expander, GTK_WIDGET(list->data), x, y, width, height); /* set size request */ control_width = g_ascii_strtoull(xmlGetProp(line_member_node, "width\0"), NULL, 10); control_height = g_ascii_strtoull(xmlGetProp(line_member_node, "height\0"), NULL, 10); // gtk_widget_set_size_request(GTK_WIDGET(list->data), // control_width, control_height); /* iterate */ list = list->next; } } line_member_node = line_member_node->next; } g_list_free(start); } } child = child->next; } } void ags_file_read_line_resolve_channel(AgsFileLookup *file_lookup, AgsLine *line) { AgsFile *file; AgsMachine *machine; AgsFileIdRef *id_ref; xmlNode *pad_node, *node, *audio_node, *channel_node; xmlXPathContext *xpath_context; xmlXPathObject *xpath_object; GList *list; xmlChar *xpath; guint position; guint pad, audio_channel; guint i, j; gboolean is_output; file = file_lookup->file; machine = (AgsMachine *) gtk_widget_get_ancestor(GTK_WIDGET(line), AGS_TYPE_MACHINE); if(machine->output != NULL){ AgsPad *pad; pad = (AgsPad *) gtk_widget_get_ancestor((GtkWidget *) line, AGS_TYPE_PAD); list = gtk_container_get_children(machine->output); if(list != NULL && g_list_find(list, pad) != NULL){ is_output = TRUE; }else{ is_output = FALSE; } }else{ is_output = FALSE; } node = file_lookup->node; pad_node = node->parent->parent; /* retrieve position - pad */ xpath_context = xmlXPathNewContext(file->doc); // xmlXPathSetContextNode(node->parent->parent->parent, // xpath_context); xpath_context->node = pad_node->parent; xpath_object = xmlXPathEval("./ags-pad\0", xpath_context); for(i = 0, j = 0; xpath_object->nodesetval->nodeTab[i] != pad_node && i < xpath_object->nodesetval->nodeMax; i++){ if(xpath_object->nodesetval->nodeTab[i]->type == XML_ELEMENT_NODE){ j++; } } pad = j; /* retrieve position - line */ xpath_context = xmlXPathNewContext(file->doc); // xmlXPathSetContextNode(node->parent, // xpath_context); xpath_context->node = node->parent; xpath_object = xmlXPathEval("./ags-line\0", xpath_context); for(i = 0, j = 0; xpath_object->nodesetval->nodeTab[i] != node && i < xpath_object->nodesetval->nodeMax; i++){ if(xpath_object->nodesetval->nodeTab[i]->type == XML_ELEMENT_NODE){ j++; } } audio_channel = j; /* */ position = pad * machine->audio->audio_channels + (machine->audio->audio_channels - audio_channel - 1); /* */ id_ref = (AgsFileIdRef *) ags_file_find_id_ref_by_reference(file_lookup->file, machine->audio); audio_node = NULL; if(id_ref != NULL){ audio_node = id_ref->node; } /* */ xpath = g_strdup_printf("(./ags-channel-list/ags-channel)/%s\0", ((is_output) ? "ags-output\0": "ags-input\0")); xpath_context = xmlXPathNewContext(file->doc); xpath_context->node = audio_node; xpath_object = xmlXPathEval(xpath, xpath_context); /* */ if(xpath_object != NULL && xpath_object->nodesetval != NULL){ AgsFileIdRef *file_id_ref; xmlNode *channel_node; for(i = 0, j = 0; j < position && i < xpath_object->nodesetval->nodeMax; i++){ if(xpath_object->nodesetval->nodeTab[i] != NULL && xpath_object->nodesetval->nodeTab[i]->type == XML_ELEMENT_NODE){ j++; } } channel_node = xpath_object->nodesetval->nodeTab[i]; file_id_ref = (AgsFileIdRef *) ags_file_find_id_ref_by_node(file, channel_node); g_object_set(G_OBJECT(line), "channel\0", AGS_CHANNEL(file_id_ref->ref), NULL); }else{ g_message("no xpath match: %s\0", xpath); } } xmlNode* ags_file_write_line(AgsFile *file, xmlNode *parent, AgsLine *line) { AgsFileLookup *file_lookup; AgsExpanderChild *expander_child; xmlNode *node, *child; xmlNode *line_member_node; GList *line_member; gchar *id; guint control_width, control_height; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-line\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", line, NULL)); xmlNewProp(node, AGS_FILE_TYPE_PROP, G_OBJECT_TYPE_NAME(line)); xmlNewProp(node, AGS_FILE_VERSION_PROP, line->version); xmlNewProp(node, AGS_FILE_BUILD_ID_PROP, line->build_id); xmlNewProp(node, AGS_FILE_FLAGS_PROP, g_strdup_printf("%x\0", ((~AGS_LINE_CONNECTED)&(line->flags)))); xmlAddChild(parent, node); /* child elements */ ags_plugin_write(file, node, AGS_PLUGIN(line)); line_member = gtk_container_get_children(GTK_CONTAINER(line->expander->table)); child = ags_file_write_line_member_list(file, node, line_member); line_member_node = child->children; while(line_member != NULL){ if(AGS_IS_LINE_MEMBER(line_member->data)){ expander_child = ags_expander_child_find(line->expander, line_member->data); xmlNewProp(line_member_node, "left-attach\0", g_strdup_printf("%d\0", expander_child->x)); xmlNewProp(line_member_node, "top-attach\0", g_strdup_printf("%d\0", expander_child->y)); xmlNewProp(line_member_node, "right-attach\0", g_strdup_printf("%d\0", expander_child->x + expander_child->width)); xmlNewProp(line_member_node, "bottom-attach\0", g_strdup_printf("%d\0", expander_child->y + expander_child->height)); gtk_widget_get_size_request(GTK_BIN(expander_child->child)->child, &control_width, &control_height); xmlNewProp(line_member_node, "width\0", g_strdup_printf("%d\0", control_width)); xmlNewProp(line_member_node, "height\0", g_strdup_printf("%d\0", control_height)); line_member_node = line_member_node->next; } line_member = line_member->next; } } void ags_file_read_line_list(AgsFile *file, xmlNode *node, GList **line) { AgsLine *current; GList *list; xmlNode *child; xmlChar *id; id = xmlGetProp(node, AGS_FILE_ID_PROP); child = node->children; list = NULL; while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(child->name, "ags-line\0", 9)){ current = NULL; ags_file_read_line(file, child, ¤t); list = g_list_prepend(list, current); } } child = child->next; } list = g_list_reverse(list); *line = list; ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", list, NULL)); } xmlNode* ags_file_write_line_list(AgsFile *file, xmlNode *parent, GList *line) { xmlNode *node; GList *list; gchar *id; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-line-list\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", list, NULL)); xmlAddChild(parent, node); list = line; while(list != NULL){ ags_file_write_line(file, node, AGS_LINE(list->data)); list = list->next; } return(node); } void ags_file_read_line_member(AgsFile *file, xmlNode *node, AgsLineMember **line_member) { AgsFileLookup *file_lookup; AgsLineMember *gobject; GtkAdjustment *adjustment; GtkWidget *child_widget; xmlNode *child; xmlChar *prop, *content; gchar *widget_type; gchar *label; gchar *task_type; guint width, height; static gboolean widget_type_is_registered = FALSE; if(*line_member == NULL){ gobject = g_object_new(AGS_TYPE_LINE_MEMBER, NULL); *line_member = gobject; }else{ gobject = *line_member; if(!AGS_IS_LINE_MEMBER(gobject)){ return; } } ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", gobject, NULL)); if(!widget_type_is_registered){ ags_main_register_widget_type(); widget_type_is_registered = TRUE; } widget_type = (gchar *) xmlGetProp(node, "widget-type\0"); g_object_set(gobject, "widget-type\0", g_type_from_name(widget_type), NULL); child_widget = (GtkWidget *) gtk_bin_get_child(GTK_BIN(gobject)); /* label */ label = (gchar *) xmlGetProp(node, "label\0"); if(label != NULL){ g_object_set(G_OBJECT(gobject), "widget-label\0", label, NULL); } /* size */ width = (guint) g_ascii_strtoull(xmlGetProp(node, "width\0"), NULL, 10); height = (guint) g_ascii_strtoull(xmlGetProp(node, "height\0"), NULL, 10); gtk_widget_set_size_request(child_widget, width, height); /* check misc */ if(GTK_IS_MISC(child_widget)){ guint xalign, yalign; guint xpad, ypad; xalign = (guint) g_ascii_strtoull(xmlGetProp(node, "xalign\0"), NULL, 10); yalign = (guint) g_ascii_strtoull(xmlGetProp(node, "yalign\0"), NULL, 10); xpad = (guint) g_ascii_strtoull(xmlGetProp(node, "xpad\0"), NULL, 10); ypad = (guint) g_ascii_strtoull(xmlGetProp(node, "ypad\0"), NULL, 10); } /* check adjustment and toggle types */ adjustment = NULL; if(GTK_IS_TOGGLE_BUTTON(child_widget)){ if(!xmlStrncmp(AGS_FILE_TRUE, xmlGetProp(node, "value\0"), 5)){ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(child_widget), TRUE); } }else if(AGS_IS_DIAL(child_widget)){ AgsDial *dial; dial = (AgsDial *) child_widget; adjustment = (GtkAdjustment *) gtk_adjustment_new(0.0, 0.0, 1.0, 0.1, 0.1, 0.0); g_object_set(child_widget, "adjustment\0", adjustment, NULL); gtk_widget_set_size_request((GtkWidget *) dial, 2 * dial->radius + 2 * (dial->outline_strength + dial->button_width + 4), 2 * dial->radius + 2 * (dial->outline_strength + 1)); }else if(GTK_IS_SPIN_BUTTON(child_widget)){ gtk_spin_button_set_digits(GTK_SPIN_BUTTON(child_widget), 3); adjustment = GTK_SPIN_BUTTON(child_widget)->adjustment; }else if(GTK_IS_RANGE(child_widget)){ gtk_range_set_round_digits(GTK_RANGE(child_widget), 3); adjustment = GTK_RANGE(child_widget)->adjustment; if(!xmlStrncmp(AGS_FILE_TRUE, xmlGetProp(node, "inverted\0"), 9)){ gtk_range_set_inverted(GTK_RANGE(child_widget), TRUE); } }else if(AGS_IS_VINDICATOR(child_widget)){ adjustment = (GtkAdjustment *) gtk_adjustment_new(0.0, 0.0, 10.0, 1.0, 1.0, 10.0); g_object_set(child_widget, "adjustment\0", adjustment, NULL); gtk_widget_queue_draw(child_widget); } //TODO:JK: implement more types if(adjustment != NULL){ gdouble upper, lower; gdouble step, page; gdouble value; step = (gdouble) g_ascii_strtod(xmlGetProp(node, "step\0"), NULL); gtk_adjustment_set_step_increment(adjustment, step); lower = (gdouble) g_ascii_strtod(xmlGetProp(node, "lower\0"), NULL); gtk_adjustment_set_lower(adjustment, lower); upper = (gdouble) g_ascii_strtod(xmlGetProp(node, "upper\0"), NULL); gtk_adjustment_set_upper(adjustment, upper); // page = (gdouble) g_ascii_strtod(xmlGetProp(node, "page\0"), // NULL); // gtk_adjustment_set_page_size(adjustment, // page); value = (gdouble) g_ascii_strtod(xmlGetProp(node, "value\0"), NULL); gtk_adjustment_set_value(adjustment, value); } /* flags */ gobject->flags = (guint) g_ascii_strtoull(xmlGetProp(node, AGS_FILE_FLAGS_PROP), NULL, 16); if((task_type = xmlGetProp(node, "task-type\0")) != NULL){ gobject->task_type = g_type_from_name(task_type); } /* port */ file_lookup = (AgsFileLookup *) g_object_new(AGS_TYPE_FILE_LOOKUP, "file\0", file, "node\0", node, "reference\0", gobject, NULL); ags_file_add_lookup(file, (GObject *) file_lookup); g_signal_connect_after(G_OBJECT(file_lookup), "resolve\0", G_CALLBACK(ags_file_read_line_member_resolve_port), gobject); } void ags_file_read_line_member_resolve_port(AgsFileLookup *file_lookup, AgsLineMember *line_member) { GtkWidget *child_widget; AgsFileIdRef *id_ref; gchar *xpath; /* play port */ xpath = (gchar *) xmlGetProp(file_lookup->node, "port\0"); id_ref = (AgsFileIdRef *) ags_file_find_id_ref_by_xpath(file_lookup->file, xpath); if(id_ref == NULL){ g_warning("couldn't find port\0"); }else{ g_object_set(G_OBJECT(line_member), "port\0", (AgsPort *) id_ref->ref, NULL); } /* recall port */ xpath = (gchar *) xmlGetProp(file_lookup->node, "recall-port\0"); if(xpath != NULL){ id_ref = (AgsFileIdRef *) ags_file_find_id_ref_by_xpath(file_lookup->file, xpath); if(id_ref == NULL){ g_warning("couldn't find port\0"); }else{ g_object_set(G_OBJECT(line_member), "recall-port\0", (AgsPort *) id_ref->ref, NULL); } } child_widget = (GtkWidget *) gtk_bin_get_child(GTK_BIN(line_member)); if(AGS_IS_VINDICATOR(child_widget)){ AgsLine *line; AgsChannel *source; AgsPeakChannelRun *recall_peak_channel_run, *play_peak_channel_run; AgsRecallHandler *recall_handler; GList *list; line = gtk_widget_get_ancestor(line_member, AGS_TYPE_LINE); source = line->channel; /* play - connect run_post */ list = ags_recall_template_find_type(source->play, AGS_TYPE_PEAK_CHANNEL_RUN); if(list != NULL){ play_peak_channel_run = AGS_PEAK_CHANNEL_RUN(list->data); recall_handler = (AgsRecallHandler *) malloc(sizeof(AgsRecallHandler)); recall_handler->signal_name = "run-post\0"; recall_handler->callback = G_CALLBACK(ags_line_peak_run_post_callback); recall_handler->data = (gpointer) line; ags_recall_add_handler(AGS_RECALL(play_peak_channel_run), recall_handler); } /* recall - connect run_post */ list = ags_recall_template_find_type(source->recall, AGS_TYPE_PEAK_CHANNEL_RUN); if(list != NULL){ recall_peak_channel_run = AGS_PEAK_CHANNEL_RUN(list->data); recall_handler = (AgsRecallHandler *) malloc(sizeof(AgsRecallHandler)); recall_handler->signal_name = "run-post\0"; recall_handler->callback = G_CALLBACK(ags_line_peak_run_post_callback); recall_handler->data = (gpointer) line; ags_recall_add_handler(AGS_RECALL(recall_peak_channel_run), recall_handler); } } } xmlNode* ags_file_write_line_member(AgsFile *file, xmlNode *parent, AgsLineMember *line_member) { AgsFileLookup *file_lookup; GtkWidget *child_widget; GtkAdjustment *adjustment; xmlNode *node; gchar *id; gchar *label; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-line-member\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", line_member, NULL)); xmlNewProp(node, AGS_FILE_FLAGS_PROP, g_strdup_printf("%x\0", line_member->flags)); xmlNewProp(node, "widget-type\0", g_strdup_printf("%s\0", g_type_name(line_member->widget_type))); child_widget = gtk_bin_get_child(GTK_BIN(line_member)); //TODO:JK: do magic recovery because read of frame didn't exist label = NULL; if(g_type_is_a(G_OBJECT_TYPE(child_widget), GTK_TYPE_BUTTON)){ g_object_get(G_OBJECT(child_widget), "label\0", &label, NULL); }else{ g_object_get(G_OBJECT(line_member), "label\0", &label, NULL); } if(label != NULL){ xmlNewProp(node, "label\0", g_strdup_printf("%s\0", label)); } if(line_member->task_type != G_TYPE_NONE){ xmlNewProp(node, AGS_FILE_FLAGS_PROP, g_strdup_printf("%s\0", g_type_name(line_member->task_type))); } /* */ if(GTK_IS_MISC(child_widget)){ gfloat xalign, yalign; gint xpad, ypad; gtk_misc_get_alignment(GTK_MISC(child_widget), &xalign, &yalign); xmlNewProp(node, "xalign\0", g_strdup_printf("%d\0", xalign)); xmlNewProp(node, "yalign\0", g_strdup_printf("%d\0", yalign)); gtk_misc_get_padding(GTK_MISC(child_widget), &xpad, &ypad); xmlNewProp(node, "xpad\0", g_strdup_printf("%d\0", xpad)); xmlNewProp(node, "ypad\0", g_strdup_printf("%d\0", ypad)); } /* */ adjustment = NULL; /* */ if(GTK_IS_TOGGLE_BUTTON(child_widget)){ xmlNewProp(node, "value\0", g_strdup_printf("%s\0", ((gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(child_widget))) ? AGS_FILE_TRUE: AGS_FILE_FALSE))); }else if(AGS_IS_DIAL(child_widget)){ AgsDial *dial; dial = AGS_DIAL(child_widget); adjustment = dial->adjustment; //TODO:JK: improve dial widget work-around }else if(GTK_IS_SPIN_BUTTON(child_widget)){ adjustment = GTK_SPIN_BUTTON(child_widget)->adjustment; }else if(GTK_IS_RANGE(child_widget)){ adjustment = GTK_RANGE(child_widget)->adjustment; xmlNewProp(node, "inverted\0", g_strdup_printf("%s\0", (gtk_range_get_inverted(GTK_RANGE(child_widget)) ? AGS_FILE_TRUE : AGS_FILE_FALSE))); }else if(AGS_IS_INDICATOR(child_widget)){ adjustment = AGS_INDICATOR(child_widget)->adjustment; } if(adjustment != NULL){ gdouble upper, lower; gdouble page, step; gdouble value; xmlNewProp(node, "upper\0", g_strdup_printf("%.8f\0", adjustment->upper)); xmlNewProp(node, "lower\0", g_strdup_printf("%.8f\0", adjustment->lower)); xmlNewProp(node, "page\0", g_strdup_printf("%.8f\0", adjustment->page_size)); xmlNewProp(node, "step\0", g_strdup_printf("%.8f\0", adjustment->step_increment)); xmlNewProp(node, "value\0", g_strdup_printf("%.8f\0", adjustment->value)); } /* port */ file_lookup = (AgsFileLookup *) g_object_new(AGS_TYPE_FILE_LOOKUP, "file\0", file, "node\0", node, "reference\0", line_member, NULL); ags_file_add_lookup(file, (GObject *) file_lookup); g_signal_connect_after(G_OBJECT(file_lookup), "resolve\0", G_CALLBACK(ags_file_write_line_member_resolve_port), line_member); xmlAddChild(parent, node); } void ags_file_write_line_member_resolve_port(AgsFileLookup *file_lookup, AgsLineMember *line_member) { AgsFileIdRef *id_ref; gchar *id; /* play port */ if(line_member->port != NULL){ id_ref = (AgsFileIdRef *) ags_file_find_id_ref_by_reference(file_lookup->file, line_member->port); if(id_ref != NULL){ id = xmlGetProp(id_ref->node, AGS_FILE_ID_PROP); xmlNewProp(file_lookup->node, "port\0", g_strdup_printf("xpath=//*[@id='%s']\0", id)); } } /* recall port */ if(line_member->recall_port != NULL){ id_ref = (AgsFileIdRef *) ags_file_find_id_ref_by_reference(file_lookup->file, line_member->recall_port); if(id_ref != NULL){ id = xmlGetProp(id_ref->node, AGS_FILE_ID_PROP); xmlNewProp(file_lookup->node, "recall-port\0", g_strdup_printf("xpath=//*[@id='%s']\0", id)); } } } void ags_file_read_line_member_list(AgsFile *file, xmlNode *node, GList **line_member) { AgsLineMember *current; GList *list; xmlNode *child; xmlChar *id; id = xmlGetProp(node, AGS_FILE_ID_PROP); child = node->children; list = NULL; while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(child->name, "ags-line-member\0", 16)){ current = NULL; ags_file_read_line_member(file, child, ¤t); list = g_list_prepend(list, current); } } child = child->next; } list = g_list_reverse(list); *line_member = list; ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", list, NULL)); } xmlNode* ags_file_write_line_member_list(AgsFile *file, xmlNode *parent, GList *line_member) { xmlNode *node; GList *list; gchar *id; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-line-member-list\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", list, NULL)); xmlAddChild(parent, node); list = line_member; while(list != NULL){ if(AGS_IS_LINE_MEMBER(list->data)){ ags_file_write_line_member(file, node, AGS_LINE_MEMBER(list->data)); } list = list->next; } return(node); } void ags_file_read_dialog(AgsFile *file, xmlNode *node, GtkDialog **dialog) { //TODO:JK: implement me } xmlNode* ags_file_write_dialog(AgsFile *file, xmlNode *parent, GtkDialog *dialog) { //TODO:JK: implement me } void ags_file_read_dialog_list(AgsFile *file, xmlNode *node, GList **dialog) { //TODO:JK: implement me } xmlNode* ags_file_write_dialog_list(AgsFile *file, xmlNode *parent, GList *dialog) { //TODO:JK: implement me } void ags_file_read_machine_editor(AgsFile *file, xmlNode *node, AgsMachineEditor **machine_editor) { //TODO:JK: implement me } xmlNode* ags_file_write_machine_editor(AgsFile *file, xmlNode *parent, AgsMachineEditor *machine_editor) { xmlNode *node; gchar *id; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-machine-editor\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", machine_editor, NULL)); //TODO:JK: implement me xmlAddChild(parent, node); } void ags_file_read_machine_editor_list(AgsFile *file, xmlNode *node, GList **machine_editor) { //TODO:JK: implement me } xmlNode* ags_file_write_machine_editor_list(AgsFile *file, xmlNode *parent, GList *machine_editor) { //TODO:JK: implement me } void ags_file_read_pad_editor(AgsFile *file, xmlNode *node, AgsPadEditor **pad_editor) { //TODO:JK: implement me } xmlNode* ags_file_write_pad_editor(AgsFile *file, xmlNode *parent, AgsPadEditor *pad_editor) { //TODO:JK: implement me } void ags_file_read_line_editor(AgsFile *file, xmlNode *node, AgsLineEditor **line_editor) { //TODO:JK: implement me } xmlNode* ags_file_write_line_editor(AgsFile *file, xmlNode *parent, AgsLineEditor *line_editor) { //TODO:JK: implement me } void ags_file_read_link_editor(AgsFile *file, xmlNode *node, AgsLinkEditor **link_editor) { //TODO:JK: implement me } xmlNode* ags_file_write_link_editor(AgsFile *file, xmlNode *parent, AgsLinkEditor *link_editor) { //TODO:JK: implement me } void ags_file_read_line_member_editor(AgsFile *file, xmlNode *node, AgsLineMemberEditor **line_member_editor) { //TODO:JK: implement me } xmlNode* ags_file_write_line_member_editor(AgsFile *file, xmlNode *parent, AgsLineMemberEditor *line_member_editor) { //TODO:JK: implement me } void ags_file_read_link_collection_editor(AgsFile *file, xmlNode *node, AgsLinkCollectionEditor **link_collection_editor) { //TODO:JK: implement me } xmlNode* ags_file_write_link_collection_editor(AgsFile *file, xmlNode *parent, AgsLinkCollectionEditor *link_collection_editor) { //TODO:JK: implement me } void ags_file_read_resize_editor(AgsFile *file, xmlNode *node, AgsResizeEditor **resize_editor) { //TODO:JK: implement me } xmlNode* ags_file_write_resize_editor(AgsFile *file, xmlNode *parent, AgsResizeEditor *resize_editor) { //TODO:JK: implement me } void ags_file_read_editor(AgsFile *file, xmlNode *node, AgsEditor **editor) { AgsEditor *gobject; AgsFileLaunch *file_launch; xmlNode *child; if(*editor == NULL){ gobject = (AgsEditor *) g_object_new(AGS_TYPE_EDITOR, NULL); *editor = gobject; }else{ gobject = *editor; } ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", gobject, NULL)); gobject->version = g_strdup(xmlGetProp(node, AGS_FILE_VERSION_PROP)); gobject->build_id = g_strdup(xmlGetProp(node, AGS_FILE_BUILD_ID_PROP)); gobject->flags = (guint) g_ascii_strtoull(xmlGetProp(node, AGS_FILE_FLAGS_PROP), NULL, 16); /* child elements */ child = node->children; while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(child->name, "ags-toolbar\0", 12)){ ags_file_read_toolbar(file, child, &(gobject->toolbar)); }else if(!xmlStrncmp(child->name, "ags-machine-selector\0", 11)){ ags_file_read_machine_selector(file, child, &(gobject->machine_selector)); }else if(!xmlStrncmp(child->name, "ags-notebook\0", 13)){ ags_file_read_notebook(file, child, &(gobject->current_notebook)); } } child = child->next; } file_launch = (AgsFileLaunch *) g_object_new(AGS_TYPE_FILE_LAUNCH, NULL); g_signal_connect(G_OBJECT(file_launch), "start\0", G_CALLBACK(ags_file_read_editor_launch), gobject); ags_file_add_launch(file, (GObject *) file_launch); } void ags_file_read_editor_resolve_parameter(AgsFileLookup *file_lookup, AgsEditor *editor) { gchar *name; GValue *value; name = g_object_get_data(G_OBJECT(file_lookup), AGS_FILE_READ_EDITOR_PARAMETER_NAME); value = file_lookup->ref; g_object_set_property(G_OBJECT(editor), name, value); } void ags_file_read_editor_launch(AgsFileLaunch *file_launch, AgsEditor *editor) { AgsMachine *machine; GList *list; double tact_factor, zoom_factor; double tact; guint history; guint tabs, pads; guint i; machine = editor->selected_machine; if(machine == NULL){ return; } /* set tabs */ tabs = machine->audio->audio_channels; for(i = 0; i < tabs; i++){ ags_notebook_add_tab(editor->current_notebook); } list = editor->current_notebook->tabs; while(list != NULL){ gtk_toggle_button_set_active(AGS_NOTEBOOK_TAB(list->data)->toggle, TRUE); list = list->next; } /* set zoom */ zoom_factor = 0.25; tact_factor = exp2(8.0 - (double) gtk_combo_box_get_active((GtkComboBox *) editor->toolbar->zoom)); tact = exp2((double) gtk_combo_box_get_active((GtkComboBox *) editor->toolbar->zoom) - 4.0); if(AGS_IS_NOTE_EDIT(editor->current_edit_widget)){ /* reset note edit */ history = gtk_combo_box_get_active((GtkComboBox *) editor->toolbar->zoom); editor->toolbar->zoom_history = history; AGS_NOTE_EDIT(editor->current_edit_widget)->flags |= AGS_NOTE_EDIT_RESETING_HORIZONTALLY; ags_note_edit_reset_horizontally(AGS_NOTE_EDIT(editor->current_edit_widget), AGS_NOTE_EDIT_RESET_HSCROLLBAR | AGS_NOTE_EDIT_RESET_WIDTH); AGS_NOTE_EDIT(editor->current_edit_widget)->flags &= (~AGS_NOTE_EDIT_RESETING_HORIZONTALLY); /* reset ruler */ AGS_NOTE_EDIT(editor->current_edit_widget)->ruler->factor = tact_factor; AGS_NOTE_EDIT(editor->current_edit_widget)->ruler->precision = tact; AGS_NOTE_EDIT(editor->current_edit_widget)->ruler->scale_precision = 1.0 / tact; gtk_widget_queue_draw((GtkWidget *) AGS_NOTE_EDIT(editor->current_edit_widget)->ruler); gtk_widget_queue_draw((GtkWidget *) AGS_NOTE_EDIT(editor->current_edit_widget)); }else if(AGS_IS_PATTERN_EDIT(editor->current_edit_widget)){ /* reset pattern edit */ history = gtk_combo_box_get_active((GtkComboBox *) editor->toolbar->zoom); editor->toolbar->zoom_history = history; AGS_PATTERN_EDIT(editor->current_edit_widget)->flags |= AGS_PATTERN_EDIT_RESETING_HORIZONTALLY; ags_pattern_edit_reset_horizontally(AGS_PATTERN_EDIT(editor->current_edit_widget), AGS_PATTERN_EDIT_RESET_HSCROLLBAR | AGS_PATTERN_EDIT_RESET_WIDTH); AGS_PATTERN_EDIT(editor->current_edit_widget)->flags &= (~AGS_PATTERN_EDIT_RESETING_HORIZONTALLY); /* reset ruler */ AGS_PATTERN_EDIT(editor->current_edit_widget)->ruler->factor = tact_factor; AGS_PATTERN_EDIT(editor->current_edit_widget)->ruler->precision = tact; AGS_PATTERN_EDIT(editor->current_edit_widget)->ruler->scale_precision = 1.0 / tact; gtk_widget_queue_draw((GtkWidget *) AGS_PATTERN_EDIT(editor->current_edit_widget)->ruler); gtk_widget_queue_draw((GtkWidget *) AGS_PATTERN_EDIT(editor->current_edit_widget)); } } xmlNode* ags_file_write_editor(AgsFile *file, xmlNode *parent, AgsEditor *editor) { AgsFileIdRef *id_ref; xmlNode *node; gchar *id; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-editor\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", editor, NULL)); xmlNewProp(node, AGS_FILE_VERSION_PROP, editor->version); xmlNewProp(node, AGS_FILE_BUILD_ID_PROP, editor->build_id); xmlNewProp(node, AGS_FILE_FLAGS_PROP, g_strdup_printf("%x\0", editor->flags)); xmlAddChild(parent, node); /* child elements */ ags_file_write_machine_selector(file, node, editor->machine_selector); ags_file_write_toolbar(file, node, editor->toolbar); ags_file_write_notebook(file, node, editor->current_notebook); } void ags_file_read_toolbar(AgsFile *file, xmlNode *node, AgsToolbar **toolbar) { AgsToolbar *gobject; GtkTreeIter iter; GtkTreeModel *model; AgsFileLaunch *file_launch; xmlNode *child; gchar *value; gchar *str; if(*toolbar == NULL){ gobject = (AgsToolbar *) g_object_new(AGS_TYPE_TOOLBAR, NULL); *toolbar = gobject; }else{ gobject = *toolbar; } ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", gobject, NULL)); /* zoom */ str = xmlGetProp(node, "zoom\0"); model = gtk_combo_box_get_model((GtkComboBox *) gobject->zoom); if(gtk_tree_model_get_iter_first(model, &iter)){ do{ gtk_tree_model_get(model, &iter, 0, &value, -1); if(!g_strcmp0(str, value)){ break; } }while(gtk_tree_model_iter_next(model, &iter)); gtk_combo_box_set_active_iter((GtkComboBox *) gobject->zoom, &iter); gobject->zoom_history = gtk_combo_box_get_active((GtkComboBox *) gobject->zoom); } /* mode */ str = xmlGetProp(node, "mode\0"); model = gtk_combo_box_get_model((GtkComboBox *) gobject->mode); if(gtk_tree_model_get_iter_first(model, &iter)){ do{ gtk_tree_model_get(model, &iter, 0, &value, -1); if(!g_strcmp0(str, value)){ break; } }while(gtk_tree_model_iter_next(GTK_TREE_MODEL(model), &iter)); gtk_combo_box_set_active_iter((GtkComboBox *) gobject->mode, &iter); } /* */ file_launch = (AgsFileLaunch *) g_object_new(AGS_TYPE_FILE_LAUNCH, "node\0", node, NULL); g_signal_connect(G_OBJECT(file_launch), "start\0", G_CALLBACK(ags_file_read_toolbar_launch), gobject); ags_file_add_launch(file, (GObject *) file_launch); } void ags_file_read_toolbar_launch(AgsFileLaunch *file_launch, AgsToolbar *toolbar) { gchar *str; str = xmlGetProp(file_launch->node, "edit-mode\0"); if(!g_strcmp0("position\0", str)){ gtk_button_clicked((GtkButton *) toolbar->position); }else if(!g_strcmp0("edit\0", str)){ gtk_button_clicked((GtkButton *) toolbar->edit); }else if(!g_strcmp0("clear\0", str)){ gtk_button_clicked((GtkButton *) toolbar->clear); }else if(!g_strcmp0("select\0", str)){ gtk_button_clicked((GtkButton *) toolbar->select); } } xmlNode* ags_file_write_toolbar(AgsFile *file, xmlNode *parent, AgsToolbar *toolbar) { AgsFileIdRef *id_ref; xmlNode *node; GList *list; guint n_properties, n_params; gchar *id; gint i; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-toolbar\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", toolbar, NULL)); if(toolbar->selected_edit_mode == toolbar->position){ xmlNewProp(node, "edit-mode\0", g_strdup("position\0")); }else if(toolbar->selected_edit_mode == toolbar->edit){ xmlNewProp(node, "edit-mode\0", g_strdup("edit\0")); }else if(toolbar->selected_edit_mode == toolbar->clear){ xmlNewProp(node, "edit-mode\0", g_strdup("clear\0")); }else if(toolbar->selected_edit_mode == toolbar->select){ xmlNewProp(node, "edit-mode\0", g_strdup("select\0")); } xmlNewProp(node, "zoom\0", g_strdup_printf("%s\0", gtk_combo_box_text_get_active_text(toolbar->zoom))); xmlNewProp(node, "mode\0", g_strdup_printf("%s\0", gtk_combo_box_text_get_active_text(toolbar->mode))); xmlAddChild(parent, node); } void ags_file_read_machine_selector(AgsFile *file, xmlNode *node, AgsMachineSelector **machine_selector) { AgsMachineSelector *gobject; GParameter *parameter; xmlNode *child; guint n_params; if(*machine_selector == NULL){ gobject = g_object_new(AGS_TYPE_MACHINE_SELECTOR, NULL); *machine_selector = gobject; }else{ gobject = *machine_selector; } /* child elements */ child = node->children; parameter = NULL; while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(child->name, "ags-parameter\0", 14)){ AgsFileLookup *file_lookup; xmlNode *value_node; GList *list; ags_file_util_read_parameter(file, child, NULL, ¶meter, &n_params, NULL); value_node = child->children; while(value_node != NULL){ if(value_node->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(value_node->name, "ags-value\0", 10)){ list = ags_file_lookup_find_by_node(file->lookup, value_node); if(list != NULL){ file_lookup = AGS_FILE_LOOKUP(list->data); g_signal_connect_after(G_OBJECT(file_lookup), "resolve\0", G_CALLBACK(ags_file_read_machine_selector_resolve_parameter), gobject); } } } value_node = value_node->next; } } } child = child->next; } } void ags_file_read_machine_selector_resolve_parameter(AgsFileLookup *file_lookup, AgsMachineSelector *machine_selector) { AgsEditor *editor; GObject *gobject; GValue *value; value = file_lookup->ref; if(G_VALUE_HOLDS(value, G_TYPE_OBJECT)){ AgsMachineRadioButton *machine_radio_button; GList *list; gobject = g_value_get_object(value); if(gobject == NULL){ return; } editor = (AgsEditor *) gtk_widget_get_ancestor((GtkWidget *) machine_selector, AGS_TYPE_EDITOR); list = gtk_container_get_children(machine_selector); machine_radio_button = g_object_new(AGS_TYPE_MACHINE_RADIO_BUTTON, NULL); gtk_box_pack_start(GTK_BOX(machine_selector), (GtkWidget *) machine_radio_button, FALSE, FALSE, 0); if(list->next != NULL){ g_object_set(machine_radio_button, "group\0", list->next->data, "machine\0", gobject, NULL); }else{ g_object_set(machine_radio_button, "machine\0", gobject, NULL); } g_list_free(list); } } xmlNode* ags_file_write_machine_selector(AgsFile *file, xmlNode *parent, AgsMachineSelector *machine_selector) { xmlNode *node; GParameter *parameter; GList *list; gchar *id; gint n_params; auto GParameter* ags_file_write_machine_selector_parameter(GList *list, GParameter *parameter, gchar *prop, gint *n_params); GParameter* ags_file_write_machine_selector_parameter(GList *list, GParameter *parameter, gchar *prop, gint *n_params){ gint i; if(n_params == NULL){ i = 0; }else{ i = *n_params; } while(list != NULL){ if(!AGS_IS_MACHINE_RADIO_BUTTON(list->data)){ list = list->next; continue; } if(parameter == NULL){ parameter = (GParameter *) malloc(sizeof(GParameter)); }else{ parameter = (GParameter *) realloc(parameter, (i + 1) * sizeof(GParameter)); } parameter[i].name = prop; memset(&(parameter[i].value), 0, sizeof(GValue)); g_value_init(&(parameter[i].value), G_TYPE_OBJECT); g_value_set_object(&(parameter[i].value), G_OBJECT(AGS_MACHINE_RADIO_BUTTON(list->data)->machine)); list = list->next; i++; } if(n_params != NULL){ *n_params = i; } return(parameter); } id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-machine-selector\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", machine_selector, NULL)); xmlAddChild(parent, node); /* child elements */ parameter = NULL; n_params = 0; list = gtk_container_get_children(GTK_CONTAINER(machine_selector)); list = list->next; parameter = ags_file_write_machine_selector_parameter(list, parameter, "machine\0", &n_params); ags_file_util_write_parameter(file, node, ags_id_generator_create_uuid(), parameter, n_params); return(node); } void ags_file_read_notebook(AgsFile *file, xmlNode *node, AgsNotebook **notebook) { //TODO:JK: implement me } xmlNode* ags_file_write_notebook(AgsFile *file, xmlNode *parent, AgsNotebook *notebook) { //TODO:JK: implement me } void ags_file_read_notebook_tab_list(AgsFile *file, xmlNode *node, GList **notebook_tab_list) { //TODO:JK: implement me } xmlNode* ags_file_write_notebook_tab_list(AgsFile *file, xmlNode *parent, GList *notebook_tab_list) { //TODO:JK: implement me } void ags_file_read_notebook_tab(AgsFile *file, xmlNode *node, AgsNotebookTab **notebook_tab) { //TODO:JK: implement me } xmlNode* ags_file_write_notebook_tab(AgsFile *file, xmlNode *parent, AgsNotebookTab *notebook_tab) { //TODO:JK: implement me } void ags_file_read_navigation(AgsFile *file, xmlNode *node, AgsNavigation **navigation) { AgsNavigation *gobject; AgsFileLookup *file_lookup; xmlNode *child; xmlChar *str; if(*navigation == NULL){ gobject = g_object_new(AGS_TYPE_NAVIGATION, NULL); *navigation = gobject; }else{ gobject = *navigation; } str = xmlGetProp(node, "expanded\0"); if(!xmlStrncmp(str, AGS_FILE_TRUE, 5)){ gtk_toggle_button_set_active((GtkToggleButton *) gobject->expander, TRUE); } str = xmlGetProp(node, "bpm\0"); gtk_spin_button_set_value(gobject->bpm, g_strtod(str, NULL)); str = xmlGetProp(node, "loop\0"); if(!xmlStrncmp(str, AGS_FILE_TRUE, 5)){ gtk_toggle_button_set_active((GtkToggleButton *) gobject->loop, TRUE); } str = xmlGetProp(node, "position\0"); gtk_spin_button_set_value(gobject->position_tact, g_strtod(str, NULL)); str = xmlGetProp(node, "loop-left\0"); gtk_spin_button_set_value(gobject->loop_left_tact, g_strtod(str, NULL)); str = xmlGetProp(node, "loop-right\0"); gtk_spin_button_set_value(gobject->loop_right_tact, g_strtod(str, NULL)); /* devout */ file_lookup = (AgsFileLookup *) g_object_new(AGS_TYPE_FILE_LOOKUP, "file\0", file, "node\0", node, "reference\0", gobject, NULL); ags_file_add_lookup(file, (GObject *) file_lookup); g_signal_connect(G_OBJECT(file_lookup), "resolve\0", G_CALLBACK(ags_file_read_navigation_resolve_devout), gobject); } void ags_file_read_navigation_resolve_devout(AgsFileLookup *file_lookup, AgsNavigation *navigation) { AgsFileIdRef *id_ref; gchar *xpath; xpath = "xpath=//ags-devout"; id_ref = (AgsFileIdRef *) ags_file_find_id_ref_by_xpath(file_lookup->file, xpath); if(id_ref != NULL){ g_object_set(G_OBJECT(navigation), "devout\0", id_ref->ref, NULL); gtk_spin_button_set_value(navigation->bpm, AGS_DEVOUT(id_ref->ref)->bpm); } } xmlNode* ags_file_write_navigation(AgsFile *file, xmlNode *parent, AgsNavigation *navigation) { xmlNode *node; gchar *id; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-navigation\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", navigation, NULL)); xmlNewProp(node, "expanded\0", g_strdup_printf("%s\0", ((gtk_toggle_button_get_active((GtkToggleButton *) navigation->expander)) ? AGS_FILE_TRUE: AGS_FILE_FALSE))); xmlNewProp(node, "bpm\0", g_strdup_printf("%.f\0", gtk_spin_button_get_value(navigation->bpm))); xmlNewProp(node, "loop\0", g_strdup_printf("%s\0", ((gtk_toggle_button_get_active((GtkToggleButton *) navigation->loop)) ? AGS_FILE_TRUE: AGS_FILE_FALSE))); xmlNewProp(node, "position\0", g_strdup_printf("%.3f\0", gtk_spin_button_get_value(navigation->position_tact))); xmlNewProp(node, "loop-left\0", g_strdup_printf("%.3f\0", gtk_spin_button_get_value(navigation->loop_left_tact))); xmlNewProp(node, "loop-right\0", g_strdup_printf("%.3f\0", gtk_spin_button_get_value(navigation->loop_right_tact))); xmlAddChild(parent, node); } gsequencer-0.6.37/src/ags/file/ags_file_sound.h0000644000175000017500000002154712626447543016331 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_FILE_SOUND_H__ #define __AGS_FILE_SOUND_H__ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include /* AgsDevout */ void ags_file_read_devout(AgsFile *file, xmlNode *node, AgsDevout **devout); xmlNode* ags_file_write_devout(AgsFile *file, xmlNode *parent, AgsDevout *devout); void ags_file_read_devout_list(AgsFile *file, xmlNode *node, GList **devout); xmlNode* ags_file_write_devout_list(AgsFile *file, xmlNode *parent, GList *devout); void ags_file_read_devout_play(AgsFile *file, xmlNode *node, AgsDevoutPlay **play); xmlNode* ags_file_write_devout_play(AgsFile *file, xmlNode *parent, AgsDevoutPlay *play); void ags_file_read_devout_play_list(AgsFile *file, xmlNode *node, GList **play); xmlNode* ags_file_write_devout_play_list(AgsFile *file, xmlNode *parent, GList *play); /* AgsAudio */ void ags_file_read_audio(AgsFile *file, xmlNode *node, AgsAudio **audio); xmlNode* ags_file_write_audio(AgsFile *file, xmlNode *parent, AgsAudio *audio); void ags_file_read_audio_list(AgsFile *file, xmlNode *node, GList **audio); xmlNode* ags_file_write_audio_list(AgsFile *file, xmlNode *parent, GList *audio); /* AgsChannel */ void ags_file_read_channel(AgsFile *file, xmlNode *node, AgsChannel **channel); xmlNode* ags_file_write_channel(AgsFile *file, xmlNode *parent, AgsChannel *channel); void ags_file_read_channel_list(AgsFile *file, xmlNode *node, GList **channel); xmlNode* ags_file_write_channel_list(AgsFile *file, xmlNode *parent, GList *channel); void ags_file_read_input(AgsFile *file, xmlNode *node, AgsChannel *input); xmlNode* ags_file_write_input(AgsFile *file, xmlNode *parent, AgsChannel *input); void ags_file_read_output(AgsFile *file, xmlNode *node, AgsChannel *output); xmlNode* ags_file_write_output(AgsFile *file, xmlNode *parent, AgsChannel *output); /* AgsFileLink */ void ags_file_read_file_link(AgsFile *file, xmlNode *node, AgsFileLink *file_link); xmlNode* ags_file_write_file_link(AgsFile *file, xmlNode *parent, AgsFileLink *file_link); /* AgsRecall */ void ags_file_read_recall(AgsFile *file, xmlNode *node, AgsRecall **recall); xmlNode* ags_file_write_recall(AgsFile *file, xmlNode *parent, AgsRecall *recall); void ags_file_read_recall_list(AgsFile *file, xmlNode *node, GList **recall); xmlNode* ags_file_write_recall_list(AgsFile *file, xmlNode *parent, GList *recall); void ags_file_read_recall_container(AgsFile *file, xmlNode *node, AgsRecallContainer **recall_container); xmlNode* ags_file_write_recall_container(AgsFile *file, xmlNode *parent, AgsRecallContainer *recall_container); void ags_file_read_recall_container_list(AgsFile *file, xmlNode *node, GList **recall_container); xmlNode* ags_file_write_recall_container_list(AgsFile *file, xmlNode *parent, GList *recall_container); void ags_file_read_recall_audio(AgsFile *file, xmlNode *node, AgsRecall *recall); xmlNode* ags_file_write_recall_audio(AgsFile *file, xmlNode *parent, AgsRecall *recall); void ags_file_read_recall_audio_run(AgsFile *file, xmlNode *node, AgsRecall *recall); xmlNode* ags_file_write_recall_audio_run(AgsFile *file, xmlNode *parent, AgsRecall *recall); void ags_file_read_recall_channel(AgsFile *file, xmlNode *node, AgsRecall *recall); xmlNode* ags_file_write_recall_channel(AgsFile *file, xmlNode *parent, AgsRecall *recall); void ags_file_read_recall_channel_run(AgsFile *file, xmlNode *node, AgsRecall *recall); xmlNode* ags_file_write_recall_channel_run(AgsFile *file, xmlNode *parent, AgsRecall *recall); void ags_file_read_recall_recycling(AgsFile *file, xmlNode *node, AgsRecall *recall); xmlNode* ags_file_write_recall_recycling(AgsFile *file, xmlNode *parent, AgsRecall *recall); void ags_file_read_recall_audio_signal(AgsFile *file, xmlNode *node, AgsRecall *recall); xmlNode* ags_file_write_recall_audio_signal(AgsFile *file, xmlNode *parent, AgsRecall *recall); /* AgsPort */ void ags_file_read_port(AgsFile *file, xmlNode *node, AgsPort **port); xmlNode* ags_file_write_port(AgsFile *file, xmlNode *parent, AgsPort *port); void ags_file_read_port_list(AgsFile *file, xmlNode *node, GList **port); xmlNode* ags_file_write_port_list(AgsFile *file, xmlNode *parent, GList *port); /* AgsRecycling */ void ags_file_read_recycling(AgsFile *file, xmlNode *node, AgsRecycling **recycling); xmlNode* ags_file_write_recycling(AgsFile *file, xmlNode *parent, AgsRecycling *recycling); void ags_file_read_recycling_list(AgsFile *file, xmlNode *node, GList **recycling); xmlNode* ags_file_write_recycling_list(AgsFile *file, xmlNode *parent, GList *recycling); /* AgsAudioSignal */ void ags_file_read_audio_signal(AgsFile *file, xmlNode *node, AgsAudioSignal **audio_signal); xmlNode* ags_file_write_audio_signal(AgsFile *file, xmlNode *parent, AgsAudioSignal *audio_signal); void ags_file_read_audio_signal_list(AgsFile *file, xmlNode *node, GList **audio_signal); xmlNode* ags_file_write_audio_signal_list(AgsFile *file, xmlNode *parent, GList *audio_signal); /* AgsStream */ void ags_file_read_stream(AgsFile *file, xmlNode *node, GList **stream, guint *index, guint buffer_size); xmlNode* ags_file_write_stream(AgsFile *file, xmlNode *parent, GList *stream, guint index, guint buffer_size); void ags_file_read_stream_list(AgsFile *file, xmlNode *node, GList **stream, guint buffer_size); xmlNode* ags_file_write_stream_list(AgsFile *file, xmlNode *parent, GList *stream, guint buffer_size); /* AgsPattern */ void ags_file_read_pattern(AgsFile *file, xmlNode *node, AgsPattern **pattern); xmlNode* ags_file_write_pattern(AgsFile *file, xmlNode *parent, AgsPattern *pattern); void ags_file_read_pattern_list(AgsFile *file, xmlNode *node, GList **pattern); xmlNode* ags_file_write_pattern_list(AgsFile *file, xmlNode *parent, GList *pattern); void ags_file_read_pattern_data(AgsFile *file, xmlNode *node, AgsPattern *pattern, guint *i, guint *j, guint length); xmlNode* ags_file_write_pattern_data(AgsFile *file, xmlNode *parent, AgsPattern *pattern, guint i, guint j, guint length); void ags_file_read_pattern_data_list(AgsFile *file, xmlNode *node, AgsPattern *pattern, guint length); xmlNode* ags_file_write_pattern_data_list(AgsFile *file, xmlNode *parent, AgsPattern *pattern, guint length); /* AgsNotation */ void ags_file_read_notation(AgsFile *file, xmlNode *node, AgsNotation **notation); xmlNode* ags_file_write_notation(AgsFile *file, xmlNode *parent, AgsNotation *notation); void ags_file_read_notation_list(AgsFile *file, xmlNode *node, GList **notation); xmlNode* ags_file_write_notation_list(AgsFile *file, xmlNode *parent, GList *notation); void ags_file_read_note(AgsFile *file, xmlNode *node, AgsNote **note); xmlNode* ags_file_write_note(AgsFile *file, xmlNode *parent, AgsNote *note); void ags_file_read_note_list(AgsFile *file, xmlNode *node, GList **note); xmlNode* ags_file_write_note_list(AgsFile *file, xmlNode *parent, GList *note); /* AgsTask */ void ags_file_read_task(AgsFile *file, xmlNode *node, AgsTask **task); xmlNode* ags_file_write_task(AgsFile *file, xmlNode *parent, AgsTask *task); void ags_file_read_task_list(AgsFile *file, xmlNode *node, GList **task); xmlNode* ags_file_write_task_list(AgsFile *file, xmlNode *parent, GList *task); /* AgsTimestamp */ void ags_file_read_timestamp(AgsFile *file, xmlNode *node, AgsTimestamp **timestamp); xmlNode* ags_file_write_timestamp(AgsFile *file, xmlNode *parent, AgsTimestamp *timestamp); void ags_file_read_timestamp_list(AgsFile *file, xmlNode *node, GList **timestamp); xmlNode* ags_file_write_timestamp_list(AgsFile *file, xmlNode *parent, GList *timestamp); #endif /*__AGS_FILE_SOUND_H__*/ gsequencer-0.6.37/src/ags/file/ags_file_gui.h0000644000175000017500000002006612626447543015760 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_FILE_GUI_H__ #define __AGS_FILE_GUI_H__ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include /* GtkWidget */ void ags_file_read_widget(AgsFile *file, xmlNode *node, GtkWidget *widget); xmlNode* ags_file_write_widget(AgsFile *file, xmlNode *parent, GtkWidget *widget); /* AgsWindow */ void ags_file_read_window(AgsFile *file, xmlNode *node, AgsWindow **window); xmlNode* ags_file_write_window(AgsFile *file, xmlNode *parent, AgsWindow *window); /* AgsMenuBar */ void ags_file_read_menu_bar(AgsFile *file, xmlNode *node, AgsMenuBar **menu_bar); xmlNode* ags_file_write_menu_bar(AgsFile *file, xmlNode *parent, AgsMenuBar *menu_bar); /* AgsMachineCounter */ void ags_file_read_machine_counter(AgsFile *file, xmlNode *node, AgsMachineCounter **machine_counter); xmlNode* ags_file_write_machine_counter(AgsFile *file, xmlNode *parent, AgsMachineCounter *machine_counter); void ags_file_read_machine_counter_list(AgsFile *file, xmlNode *node, GList **machine_counter); xmlNode* ags_file_write_machine_counter_list(AgsFile *file, xmlNode *parent, GList *machine_counter); /* AgsMachine */ void ags_file_read_machine(AgsFile *file, xmlNode *node, AgsMachine **machine); xmlNode* ags_file_write_machine(AgsFile *file, xmlNode *parent, AgsMachine *machine); void ags_file_read_machine_list(AgsFile *file, xmlNode *node, GList **machine); xmlNode* ags_file_write_machine_list(AgsFile *file, xmlNode *parent, GList *machine); void ags_file_read_machine_resolve_audio(AgsFileLookup *file_lookup, AgsMachine *machine); /* AgsPad */ void ags_file_read_pad(AgsFile *file, xmlNode *node, AgsPad **pad); xmlNode* ags_file_write_pad(AgsFile *file, xmlNode *parent, AgsPad *pad); void ags_file_read_pad_list(AgsFile *file, xmlNode *node, GList **pad); xmlNode* ags_file_write_pad_list(AgsFile *file, xmlNode *parent, GList *pad); void ags_file_read_mixer_input_pad(AgsFile *file, xmlNode *node, AgsPad *mixer_input_pad); xmlNode* ags_file_write_mixer_input_pad(AgsFile *file, xmlNode *parent, AgsPad *mixer_input_pad); void ags_file_read_mixer_output_pad(AgsFile *file, xmlNode *node, AgsPad *mixer_output_pad); xmlNode* ags_file_write_mixer_output_pad(AgsFile *file, xmlNode *parent, AgsPad *mixer_output_pad); /* AgsLine */ void ags_file_read_line(AgsFile *file, xmlNode *node, AgsLine **line); xmlNode* ags_file_write_line(AgsFile *file, xmlNode *parent, AgsLine *line); void ags_file_read_line_list(AgsFile *file, xmlNode *node, GList **line); xmlNode* ags_file_write_line_list(AgsFile *file, xmlNode *parent, GList *line); /* AgsLineMember */ void ags_file_read_line_member(AgsFile *file, xmlNode *node, AgsLineMember **line_member); xmlNode* ags_file_write_line_member(AgsFile *file, xmlNode *parent, AgsLineMember *line_member); void ags_file_read_line_member_list(AgsFile *file, xmlNode *node, GList **line_member); xmlNode* ags_file_write_line_member_list(AgsFile *file, xmlNode *parent, GList *line_member); /* GtkDialog */ void ags_file_read_dialog(AgsFile *file, xmlNode *node, GtkDialog **dialog); xmlNode* ags_file_write_dialog(AgsFile *file, xmlNode *parent, GtkDialog *dialog); void ags_file_read_dialog_list(AgsFile *file, xmlNode *node, GList **dialog); xmlNode* ags_file_write_dialog_list(AgsFile *file, xmlNode *parent, GList *dialog); /* AgsMachineEditor */ void ags_file_read_machine_editor(AgsFile *file, xmlNode *node, AgsMachineEditor **machine_editor); xmlNode* ags_file_write_machine_editor(AgsFile *file, xmlNode *parent, AgsMachineEditor *machine_editor); void ags_file_read_machine_editor_list(AgsFile *file, xmlNode *node, GList **machine_editor); xmlNode* ags_file_write_machine_editor_list(AgsFile *file, xmlNode *parent, GList *machine_editor); void ags_file_read_pad_editor(AgsFile *file, xmlNode *node, AgsPadEditor **pad_editor); xmlNode* ags_file_write_pad_editor(AgsFile *file, xmlNode *parent, AgsPadEditor *pad_editor); void ags_file_read_line_editor(AgsFile *file, xmlNode *node, AgsLineEditor **line_editor); xmlNode* ags_file_write_line_editor(AgsFile *file, xmlNode *parent, AgsLineEditor *line_editor); void ags_file_read_link_editor(AgsFile *file, xmlNode *node, AgsLinkEditor **link_editor); xmlNode* ags_file_write_link_editor(AgsFile *file, xmlNode *parent, AgsLinkEditor *link_editor); void ags_file_read_line_member_editor(AgsFile *file, xmlNode *node, AgsLineMemberEditor **line_member_editor); xmlNode* ags_file_write_line_member_editor(AgsFile *file, xmlNode *parent, AgsLineMemberEditor *line_member_editor); void ags_file_read_link_collection_editor(AgsFile *file, xmlNode *node, AgsLinkCollectionEditor **link_collection_editor); xmlNode* ags_file_write_link_collection_editor(AgsFile *file, xmlNode *parent, AgsLinkCollectionEditor *link_collection_editor); void ags_file_read_resize_editor(AgsFile *file, xmlNode *node, AgsResizeEditor **resize_editor); xmlNode* ags_file_write_resize_editor(AgsFile *file, xmlNode *parent, AgsResizeEditor *resize_editor); /* AgsEditor */ void ags_file_read_editor(AgsFile *file, xmlNode *node, AgsEditor **editor); xmlNode* ags_file_write_editor(AgsFile *file, xmlNode *parent, AgsEditor *editor); /* AgsToolbar */ void ags_file_read_toolbar(AgsFile *file, xmlNode *node, AgsToolbar **toolbar); xmlNode* ags_file_write_toolbar(AgsFile *file, xmlNode *parent, AgsToolbar *toolbar); /* AgsMachineSelector */ void ags_file_read_machine_selector(AgsFile *file, xmlNode *parent, AgsMachineSelector **machine_selector); xmlNode* ags_file_write_machine_selector(AgsFile *file, xmlNode *node, AgsMachineSelector *machine_selector); /* AgsNotebook */ void ags_file_read_notebook(AgsFile *file, xmlNode *node, AgsNotebook **notebook); xmlNode* ags_file_write_notebook(AgsFile *file, xmlNode *parent, AgsNotebook *notebook); void ags_file_read_notebook_tab_list(AgsFile *file, xmlNode *node, GList **notebook_tab_list); xmlNode* ags_file_write_notebook_tab_list(AgsFile *file, xmlNode *parent, GList *notebook_tab_list); void ags_file_read_notebook_tab(AgsFile *file, xmlNode *node, AgsNotebookTab **notebook_tab); xmlNode* ags_file_write_notebook_tab(AgsFile *file, xmlNode *parent, AgsNotebookTab *notebook_tab); /* AgsNavigation */ void ags_file_read_navigation(AgsFile *file, xmlNode *node, AgsNavigation **navigation); xmlNode* ags_file_write_navigation(AgsFile *file, xmlNode *parent, AgsNavigation *navigation); #endif /*__AGS_FILE_GUI_H__*/ gsequencer-0.6.37/src/ags/file/ags_file_link.h0000644000175000017500000000353612626447543016134 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_FILE_LINK_H__ #define __AGS_FILE_LINK_H__ #include #include #include #define AGS_TYPE_FILE_LINK (ags_file_link_get_type()) #define AGS_FILE_LINK(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_FILE_LINK, AgsFileLink)) #define AGS_FILE_LINK_CLASS(class) (G_TYPE_CHECK_CLASS_CAST(class, AGS_TYPE_FILE_LINK, AgsFileLink)) #define AGS_IS_FILE_LINK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_FILE_LINK)) #define AGS_IS_FILE_LINK_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_FILE_LINK)) #define AGS_FILE_LINK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS(obj, AGS_TYPE_FILE_LINK, AgsFileLinkClass)) typedef struct _AgsFileLink AgsFileLink; typedef struct _AgsFileLinkClass AgsFileLinkClass; struct _AgsFileLink { GObject object; gchar *filename; guint audio_channel; gchar *data; AgsTimestamp *timestamp; }; struct _AgsFileLinkClass { GObjectClass object; }; GType ags_file_link_get_type(); AgsFileLink* ags_file_link_new(); #endif /*__AGS_FILE_LINK_H__*/ gsequencer-0.6.37/src/ags/file/ags_file_id_ref.h0000644000175000017500000000433712626447543016427 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_FILE_ID_REF_H__ #define __AGS_FILE_ID_REF_H__ #include #include #include #define AGS_TYPE_FILE_ID_REF (ags_file_id_ref_get_type()) #define AGS_FILE_ID_REF(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_FILE_ID_REF, AgsFileIdRef)) #define AGS_FILE_ID_REF_CLASS(class) (G_TYPE_CHECK_CLASS_CAST(class, AGS_TYPE_FILE_ID_REF, AgsFileIdRef)) #define AGS_IS_FILE_ID_REF(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_FILE_ID_REF)) #define AGS_IS_FILE_ID_REF_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_FILE_ID_REF)) #define AGS_FILE_ID_REF_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS(obj, AGS_TYPE_FILE_ID_REF, AgsFileIdRefClass)) #define AGS_FILE_RESOLVE(f) ((AgsFileResolve)(f)) #define AGS_FILE_ID_REF_SERIALIZE_DATA "ags-file-id-ref-serizalize-data\0" #define AGS_FILE_ID_REF_RESOLVE_DATA "ags-file-id-ref-resolve-data\0" typedef struct _AgsFileIdRef AgsFileIdRef; typedef struct _AgsFileIdRefClass AgsFileIdRefClass; typedef void (*AgsFileResolve)(void); struct _AgsFileIdRef { GObject object; GObject *ags_main; GObject *file; xmlNode *node; gchar *xpath; gpointer ref; }; struct _AgsFileIdRefClass { GObjectClass object; void (*resolved)(AgsFileIdRef *file_id_ref); }; GType ags_file_id_ref_get_type(); void ags_file_id_ref_resolved(AgsFileIdRef *file_id_ref); AgsFileIdRef* ags_file_id_ref_new(); #endif /*__AGS_FILE_ID_REF_H__*/ gsequencer-0.6.37/src/ags/file/ags_file_util.h0000644000175000017500000000604612626447543016153 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_FILE_UTIL_H__ #define __AGS_FILE_UTIL_H__ #include #include #include #include #include #include /* gvalue */ void ags_file_util_read_value(AgsFile *file, xmlNode *node, gchar **id, GValue *value, xmlChar **xpath); xmlNode* ags_file_util_write_value(AgsFile *file, xmlNode *parent, gchar *id, GValue *value, GType pointer_type, guint arr_length); /* parameter */ void ags_file_util_read_parameter(AgsFile *file, xmlNode *node, gchar **id, GParameter **parameter, gint *n_params, xmlChar ***xpath); xmlNode* ags_file_util_write_parameter(AgsFile *file, xmlNode *parent, gchar *id, GParameter *parameter, gint n_params); /* dependency */ void ags_file_util_read_dependency(AgsFile *file, xmlNode *node, gchar **id, gchar **name, xmlChar **xpath); xmlNode* ags_file_util_write_dependency(AgsFile *file, xmlNode *parent, gchar *id, gchar *name, xmlChar *xpath); /* object */ void ags_file_util_read_object(AgsFile *file, xmlNode *node, GObject **gobject); xmlNode* ags_file_util_write_object(AgsFile *file, xmlNode *parent, GObject *gobject); /* history */ void ags_file_util_read_history(AgsFile *file, xmlNode *node, AgsHistory **history); xmlNode* ags_file_util_write_history(AgsFile *file, xmlNode *parent, AgsHistory *history); /* embedded audio */ void ags_file_read_embedded_audio(AgsFile *file, xmlNode *node, gchar **embedded_audio); xmlNode* ags_file_write_embedded_audio(AgsFile *file, xmlNode *parent, gchar *embedded_audio); void ags_file_read_embedded_audio_list(AgsFile *file, xmlNode *node, GList **embedded_audio); xmlNode* ags_file_write_embedded_audio_list(AgsFile *file, xmlNode *parent, GList *embedded_audio); /* file link */ void ags_file_read_file_link(AgsFile *file, xmlNode *node, AgsFileLink **file_link); xmlNode* ags_file_write_file_link(AgsFile *file, xmlNode *parent, AgsFileLink *file_link); void ags_file_read_file_link_list(AgsFile *file, xmlNode *node, GList **file_link); xmlNode* ags_file_write_file_link_list(AgsFile *file, xmlNode *parent, GList *file_link); #endif /*__AGS_FILE_UTIL_H__*/ gsequencer-0.6.37/src/ags/file/ags_file.h0000644000175000017500000001071512626447543015114 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_FILE_H__ #define __AGS_FILE_H__ #include #include #include #define AGS_TYPE_FILE (ags_file_get_type()) #define AGS_FILE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_FILE, AgsFile)) #define AGS_FILE_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_FILE, AgsFileClass)) #define AGS_IS_FILE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_FILE)) #define AGS_IS_FILE_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_FILE)) #define AGS_FILE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_FILE, AgsFileClass)) #define AGS_FILE_DEFAULT_ENCODING "UTF-8\0" #define AGS_FILE_DEFAULT_DTD "ags_file.dtd\0" #define AGS_FILE_CHECKSUM_LENGTH (g_checksum_type_get_length(G_CHECKSUM_MD5)) #define AGS_FILE_DEFAULT_AUDIO_FORMAT "raw\0" #define AGS_FILE_DEFAULT_AUDIO_ENCODING "base64\0" typedef struct _AgsFile AgsFile; typedef struct _AgsFileClass AgsFileClass; typedef enum{ AGS_FILE_READ = 1, AGS_FILE_READ_AUDIO_SIGNAL = 1 << 1, AGS_FILE_READ_EMBEDDED_AUDIO = 1 << 2, AGS_FILE_WRITE = 1 << 3, AGS_FILE_WRITE_AUDIO_SIGNAL = 1 << 4, AGS_FILE_WRITE_EMBEDDED_AUDIO = 1 << 5, }AgsFileFlags; struct _AgsFile { GObject object; guint flags; FILE *out; xmlChar *buffer; gchar *filename; gchar *encoding; gchar *dtd; gchar *audio_format; gchar *audio_encoding; xmlDoc *doc; xmlNode *root_node; GList *id_refs; GList *lookup; GList *launch; GObject *ags_main; GObject *clipboard; GList *property; GList *script; GObject *cluster; GObject *client; GObject *server; GObject *history; GList *embedded_audio; GList *file_link; }; struct _AgsFileClass { GObjectClass object; void (*open)(AgsFile *file); void (*open_from_data)(AgsFile *file, gchar *data, guint length); void (*rw_open)(AgsFile *file, gboolean create); void (*write)(AgsFile *file); void (*write_concurrent)(AgsFile *file); void (*write_resolve)(AgsFile *file); void (*read)(AgsFile *file); void (*read_resolve)(AgsFile *file); void (*read_start)(AgsFile *file); }; GType ags_file_get_type(void); gchar* ags_file_str2md5(gchar *content, guint strlen); void ags_file_add_id_ref(AgsFile *file, GObject *id_ref); GObject* ags_file_find_id_ref_by_node(AgsFile *file, xmlNode *node); GObject* ags_file_find_id_ref_by_xpath(AgsFile *file, gchar *xpath); GObject* ags_file_find_id_ref_by_reference(AgsFile *file, gpointer ref); void ags_file_add_lookup(AgsFile *file, GObject *file_lookup); void ags_file_add_launch(AgsFile *file, GObject *file_launch); /* */ void ags_file_open(AgsFile *file); void ags_file_open_from_data(AgsFile *file, gchar *data, guint length); void ags_file_rw_open(AgsFile *file, gboolean create); void ags_file_open_filename(AgsFile *file, gchar *filename); void ags_file_close(AgsFile *file); /* */ void ags_file_write(AgsFile *file); void ags_file_write_concurrent(AgsFile *file); void ags_file_write_resolve(AgsFile *file); void ags_file_read(AgsFile *file); void ags_file_read_resolve(AgsFile *file); void ags_file_read_start(AgsFile *file); /* */ void ags_file_read_server(AgsFile *file, xmlNode *node, GObject **server); void ags_file_write_server(AgsFile *file, xmlNode *parent, GObject *server); /* */ void ags_file_read_main(AgsFile *file, xmlNode *node, GObject **ags_main); void ags_file_write_main(AgsFile *file, xmlNode *parent, GObject *ags_main); void ags_file_read_config(AgsFile *file, xmlNode *node, GObject **ags_config); void ags_file_write_config(AgsFile *file, xmlNode *parent, GObject *ags_config); /* */ AgsFile* ags_file_new(); #endif /*__AGS_FILE_H__*/ gsequencer-0.6.37/src/ags/file/ags_file_thread.h0000644000175000017500000000351712626447543016445 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_FILE_THREAD_H__ #define __AGS_FILE_THREAD_H__ #include #include #include #include #include #ifdef AGS_USE_LINUX_THREADS #include #else #include #endif #include void ags_file_read_thread(AgsFile *file, xmlNode *node, AgsThread **thread); xmlNode* ags_file_write_thread(AgsFile *file, xmlNode *parent, AgsThread *thread); void ags_file_read_thread_list(AgsFile *file, xmlNode *node, GList **thread); xmlNode* ags_file_write_thread_list(AgsFile *file, xmlNode *parent, GList *thread); void ags_file_read_thread_pool(AgsFile *file, xmlNode *node, AgsThreadPool **thread_pool); xmlNode* ags_file_write_thread_pool(AgsFile *file, xmlNode *parent, AgsThreadPool *thread_pool); void ags_file_read_audio_loop(AgsFile *file, xmlNode *node, AgsAudioLoop *audio_loop); xmlNode* ags_file_write_audio_loop(AgsFile *file, xmlNode *parent, AgsAudioLoop *audio_loop); #endif /*__AGS_FILE_THREAD_H__*/ gsequencer-0.6.37/src/ags/file/ags_file_sound.c0000644000175000017500000035644712632650023016320 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ //TODO:JK: add file to AgsFileIdRef #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define AGS_FILE_READ_PORT_LIST_PORT_RESOLVED_COUNTER "ags-file-read-port-list-port-resolved-counter\0" void ags_file_read_audio_resolve_devout(AgsFileLookup *file_lookup, AgsAudio *audio); void ags_file_write_audio_resolve_devout(AgsFileLookup *file_lookup, AgsAudio *audio); void ags_file_read_channel_resolve_link(AgsFileLookup *file_lookup, AgsChannel *channel); void ags_file_write_channel_resolve_link(AgsFileLookup *file_lookup, AgsChannel *channel); void ags_file_read_recall_container_resolve_value(AgsFileLookup *file_lookup, AgsRecallContainer *recall_container); void ags_file_read_recall_resolve_audio(AgsFileLookup *file_lookup, AgsRecall *recall); void ags_file_read_recall_resolve_channel(AgsFileLookup *file_lookup, AgsRecall *recall); void ags_file_read_recall_resolve_port(AgsFileLookup *file_lookup, AgsRecall *recall); void ags_file_read_recall_resolve_parameter(AgsFileLookup *file_lookup, AgsRecall *recall); void ags_file_read_recall_resolve_devout(AgsFileLookup *file_lookup, AgsRecall *recall); void ags_file_write_recall_resolve_devout(AgsFileLookup *file_lookup, AgsRecall *recall); void ags_file_read_pattern_resolve_port(AgsFileLookup *file_lookup, AgsPattern *pattern); void ags_file_write_pattern_resolve_port(AgsFileLookup *file_lookup, AgsPattern *pattern); void ags_file_read_notation_resolve_port(AgsFileLookup *file_lookup, AgsNotation *notation); void ags_file_write_notation_resolve_port(AgsFileLookup *file_lookup, AgsNotation *notation); void ags_file_read_port_resolve_port_value(AgsFileLookup *file_lookup, AgsPort *port); void ags_file_read_task_resolve_parameter(AgsFileLookup *file_lookup, AgsTask *task); void ags_file_read_devout(AgsFile *file, xmlNode *node, AgsDevout **devout) { AgsDevout *gobject; xmlNode *child; xmlChar *prop, *content; xmlChar *str; if(*devout == NULL){ gobject = g_object_new(AGS_TYPE_DEVOUT, NULL); *devout = gobject; }else{ gobject = *devout; } g_object_set(G_OBJECT(gobject), "main\0", file->ags_main, NULL); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", gobject, NULL)); gobject->flags = (guint) g_ascii_strtoull(xmlGetProp(node, AGS_FILE_FLAGS_PROP), NULL, 16); gobject->flags &= (~(AGS_DEVOUT_BUFFER0 | AGS_DEVOUT_BUFFER1 | AGS_DEVOUT_BUFFER2 | AGS_DEVOUT_BUFFER3 | AGS_DEVOUT_INITIALIZED | AGS_DEVOUT_PLAY)); str = xmlGetProp(node, "dsp-channels\0"); if(str != NULL){ gobject->dsp_channels = (guint) g_ascii_strtoull(str, NULL, 10); }else{ gobject->dsp_channels = 2; } str = xmlGetProp(node, "pcm-channels\0"); if(str != NULL){ gobject->pcm_channels = (guint) g_ascii_strtoull(str, NULL, 10); }else{ gobject->pcm_channels = 2; } str = xmlGetProp(node, "bits\0"); if(str != NULL){ gobject->bits = (guint) g_ascii_strtoull(str, NULL, 10); }else{ gobject->bits = 16; } str = xmlGetProp(node, "buffer-size\0"); if(str != NULL){ gobject->buffer_size = (guint) g_ascii_strtoull(str, NULL, 10); }else{ gobject->buffer_size = 940; } str = xmlGetProp(node, "frequency\0"); if(str != NULL){ gobject->frequency = (guint) g_ascii_strtoull(str, NULL, 10); }else{ gobject->frequency = 44100; } str = xmlGetProp(node, "bpm\0"); if(str != NULL){ gchar *endptr; g_object_set(gobject, "bpm\0", (gdouble) g_ascii_strtod(str, &endptr), NULL); }else{ g_object_set(gobject, "bpm\0", 120.0, NULL); } /* child elements */ child = node->children; while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(child->name, "ags-audio-list\0", 15)){ GList *list; list = NULL; ags_file_read_audio_list(file, child, &list); while(list != NULL){ g_object_set(G_OBJECT(list->data), "devout\0", gobject, NULL); ags_devout_add_audio(gobject, G_OBJECT(list->data)); list = list->next; } }else if(!xmlStrncmp(child->name, "ags-attack-data\0", 15)){ xmlChar *checksum; checksum = xmlGetProp(child, "checksum\0"); content = xmlNodeGetContent(child); if(content != NULL && checksum != NULL && !xmlStrncmp(ags_file_str2md5(content, strlen(content)), checksum, AGS_FILE_CHECKSUM_LENGTH)){ xmlChar *str, *endptr; guint i; str = content; for(i = 0; i < (int) ceil(2.0 * AGS_DEVOUT_DEFAULT_PERIOD); i++){ gobject->attack[i] = (guint) g_ascii_strtoull((gchar *) str, (gchar **) &endptr, 10); str = endptr; } } }else if(!xmlStrncmp(child->name, "ags-delay-data\0", 14)){ xmlChar *checksum; guint i; checksum = xmlGetProp(child, "checksum\0"); content = xmlNodeGetContent(child); if(content != NULL && checksum != NULL && !xmlStrncmp(ags_file_str2md5(content, strlen(content)), checksum, AGS_FILE_CHECKSUM_LENGTH)){ xmlChar *str, *endptr; str = content; for(i = 0; i < (int) ceil(2.0 * AGS_DEVOUT_DEFAULT_PERIOD); i++){ gobject->delay[i] = (gdouble) g_ascii_strtod((gchar *) str, (gchar **) &endptr); str = endptr; } } } } child = child->next; } str = xmlGetProp(node, "delay-counter\0"); if(str != NULL){ gobject->delay_counter = (guint) g_ascii_strtoull(str, NULL, 10); }else{ gobject->delay_counter = 0; } str = xmlGetProp(node, "device\0"); if((AGS_DEVOUT_LIBAO & (gobject->flags)) != 0){ //TODO:JK: implement me }else if((AGS_DEVOUT_OSS & (gobject->flags)) != 0){ if(str != NULL){ gobject->out.oss.device = g_strdup(str); }else{ gobject->out.oss.device = g_strdup("/dev/dsp\0"); } }else if((AGS_DEVOUT_ALSA & (gobject->flags)) != 0){ if(str != NULL){ gobject->out.alsa.device = g_strdup(str); }else{ gobject->out.alsa.device = g_strdup("default\0"); } } } xmlNode* ags_file_write_devout(AgsFile *file, xmlNode *parent, AgsDevout *devout) { xmlNode *node, *child; gchar *id; xmlChar *checksum; xmlChar *content; xmlChar *str; guint value; guint i; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-devout\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", devout, NULL)); xmlNewProp(node, AGS_FILE_FLAGS_PROP, g_strdup_printf("%x\0", devout->flags)); xmlNewProp(node, "dsp-channels\0", g_strdup_printf("%d\0", devout->dsp_channels)); xmlNewProp(node, "pcm-channels\0", g_strdup_printf("%d\0", devout->pcm_channels)); xmlNewProp(node, "bits\0", g_strdup_printf("%d\0", devout->bits)); xmlNewProp(node, "buffer-size\0", g_strdup_printf("%d\0", devout->buffer_size)); xmlNewProp(node, "frequency\0", g_strdup_printf("%d\0", devout->frequency)); xmlNewProp(node, "bpm\0", g_strdup_printf("%f\0", devout->bpm)); /* ags-audio-list */ ags_file_write_audio_list(file, node, devout->audio); /* ags-delay-data */ child = xmlNewNode(NULL, "ags-delay-data\0"); content = NULL; for(i = 0; i < (int) ceil(2 * AGS_DEVOUT_DEFAULT_PERIOD); i++){ str = content; if(str != NULL){ content = g_strdup_printf("%s%f\n\0", content, devout->delay[i]); g_free(str); }else{ content = g_strdup_printf("%f\n\0", devout->delay[i]); } } xmlNodeSetContent(child, content); checksum = ags_file_str2md5(content, strlen(content)); xmlNewProp(child, "checksum\0", checksum); xmlAddChild(node, child); /* ags-attack-data */ child = xmlNewNode(NULL, "ags-attack-data\0"); content = NULL; for(i = 0; i < (int) ceil(2 * AGS_DEVOUT_DEFAULT_PERIOD); i++){ str = content; if(str != NULL){ content = g_strdup_printf("%s%d\n\0", content, devout->attack[i]); g_free(str); }else{ content = g_strdup_printf("%d\n\0", devout->attack[i]); } } xmlNodeSetContent(child, content); checksum = ags_file_str2md5(content, strlen(content)); xmlNewProp(child, "checksum\0", checksum); xmlAddChild(node, child); /* */ xmlNewProp(node, "delay-counter\0", g_strdup_printf("%u\0", devout->delay_counter)); xmlNewProp(node, "device\0", g_strdup(devout->out.alsa.device)); xmlAddChild(parent, node); return(node); } void ags_file_read_devout_list(AgsFile *file, xmlNode *node, GList **devout) { AgsDevout *current; GList *list; xmlNode *child; xmlChar *id; id = xmlGetProp(node, AGS_FILE_ID_PROP); child = node->children; list = NULL; while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(child->name, "ags-devout\0", 11)){ current = NULL; ags_file_read_devout(file, child, ¤t); list = g_list_prepend(list, current); } } child = child->next; } list = g_list_reverse(list); *devout = list; ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", list, NULL)); } xmlNode* ags_file_write_devout_list(AgsFile *file, xmlNode *parent, GList *devout) { AgsDevout *current; xmlNode *node; GList *list; gchar *id; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-devout-list\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", list, NULL)); xmlAddChild(parent, node); list = devout; while(list != NULL){ ags_file_write_devout(file, node, AGS_DEVOUT(list->data)); list = list->next; } return(node); } void ags_file_read_devout_play(AgsFile *file, xmlNode *node, AgsDevoutPlay **play) { AgsDevoutPlay *pointer; gchar *id; if(*play == NULL){ pointer = ags_devout_play_alloc(); *play = pointer; }else{ pointer = *play; } id = xmlGetProp(node, AGS_FILE_ID_PROP); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", pointer, NULL)); pointer->flags = (guint) g_ascii_strtoull(xmlGetProp(node, AGS_FILE_FLAGS_PROP), NULL, 16); pointer->audio_channel = (guint) g_ascii_strtoull(xmlGetProp(node, "audio-channel\0"), NULL, 10); // read by parent call: play->source } xmlNode* ags_file_write_devout_play(AgsFile *file, xmlNode *parent, AgsDevoutPlay *play) { xmlNode *node; gchar *id; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-devout-play\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", play, NULL)); xmlNewProp(node, AGS_FILE_FLAGS_PROP, g_strdup_printf("%x\0", play->flags)); xmlNewProp(node, "audio-channel\0", g_strdup_printf("%d\0", play->audio_channel)); // write by parent call: play->source return(node); } void ags_file_read_devout_play_list(AgsFile *file, xmlNode *node, GList **play) { GList *list; AgsDevoutPlay *current; xmlNode *child; gchar *id; id = xmlGetProp(node, AGS_FILE_ID_PROP); child = node->children; list = NULL; while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(child->name, "ags-devout-play\0", 16)){ current = NULL; ags_file_read_devout_play(file, child, ¤t); list = g_list_prepend(list, current); } } child = child->next; } list = g_list_reverse(list); *play = list; ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", list, NULL)); } xmlNode* ags_file_write_devout_play_list(AgsFile *file, xmlNode *parent, GList *play) { AgsDevout *current; xmlNode *node; GList *list; gchar *id; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-devout-play-list\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", play, NULL)); xmlAddChild(parent, node); list = play; while(list != NULL){ ags_file_write_devout_play(file, node, AGS_DEVOUT_PLAY(list->data)); list = list->next; } return(node); } void ags_file_read_audio(AgsFile *file, xmlNode *node, AgsAudio **audio) { AgsAudio *gobject; AgsFileLookup *file_lookup; xmlNode *child; guint pads; if(audio[0] == NULL){ gobject = (AgsAudio *) g_object_new(AGS_TYPE_AUDIO, NULL); *audio = gobject; }else{ gobject = *audio; } ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", gobject, NULL)); gobject->flags = (guint) g_ascii_strtoull(xmlGetProp(node, AGS_FILE_FLAGS_PROP), NULL, 16); gobject->sequence_length = (guint) g_ascii_strtoull(xmlGetProp(node, "sequence-length\0"), NULL, 10); gobject->audio_channels = (guint) g_ascii_strtoull(xmlGetProp(node, "audio-channels\0"), NULL, 10); pads= (guint) g_ascii_strtoull(xmlGetProp(node, "output-pads\0"), NULL, 10); ags_audio_set_pads(gobject, AGS_TYPE_OUTPUT, pads); pads = (guint) g_ascii_strtoull(xmlGetProp(node, "input-pads\0"), NULL, 10); ags_audio_set_pads(gobject, AGS_TYPE_INPUT, pads); /* devout */ file_lookup = (AgsFileLookup *) g_object_new(AGS_TYPE_FILE_LOOKUP, "file\0", file, "node\0", node, "reference\0", gobject, NULL); ags_file_add_lookup(file, (GObject *) file_lookup); g_signal_connect(G_OBJECT(file_lookup), "resolve\0", G_CALLBACK(ags_file_read_audio_resolve_devout), gobject); /* read child elements */ child = node->children; while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(child->name, "ags-channel-list\0", 17)){ xmlXPathContext *xpath_context; xmlXPathObject *xpath_object; xpath_context = xmlXPathNewContext(file->doc); // xmlXPathSetContextNode(child, // xpath_context); xpath_context->node = child; xpath_object = xmlXPathEval("./ags-channel/ags-output\0", xpath_context); if(xmlXPathCastToBoolean(xpath_object)){ xmlNode *channel_node; channel_node = child->children; while(channel_node != NULL){ if(channel_node->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(channel_node->name, "ags-channel\0", 12)){ AgsChannel *channel; guint pad, audio_channel; pad = (guint) g_ascii_strtoull(xmlGetProp(channel_node, "pad\0"), NULL, 10); audio_channel = (guint) g_ascii_strtoull(xmlGetProp(channel_node, "audio-channel\0"), NULL, 10); channel = ags_channel_nth(gobject->output, pad * gobject->audio_channels + audio_channel); /* ags-channel output */ ags_file_read_channel(file, channel_node, &channel); g_object_set(channel, "audio\0", gobject, NULL); } } channel_node = channel_node->next; } }else{ xmlNode *channel_node; channel_node = child->children; while(channel_node != NULL){ if(channel_node->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(channel_node->name, "ags-channel\0", 12)){ AgsChannel *channel; guint pad, audio_channel; pad = (guint) g_ascii_strtoull(xmlGetProp(channel_node, "pad\0"), NULL, 10); audio_channel = (guint) g_ascii_strtoull(xmlGetProp(channel_node, "audio-channel\0"), NULL, 10); channel = ags_channel_nth(gobject->input, pad * gobject->audio_channels + audio_channel); /* ags-channel input */ ags_file_read_channel(file, channel_node, &channel); g_object_set(channel, "audio\0", gobject, NULL); } } channel_node = channel_node->next; } } }else if(!xmlStrncmp(child->name, "ags-recall-container-list\0", 26)){ ags_file_read_recall_container_list(file, child, &(gobject->container)); }else if(!xmlStrncmp(child->name, "ags-recall-list\0", 15)){ GList *list; if(!xmlStrncmp(xmlGetProp(child, "is-play\0"), "TRUE\0", 4)){ /* ags-recall-list play */ ags_file_read_recall_list(file, child, &list); gobject->play = list; }else{ /* ags-recall-list recall */ ags_file_read_recall_list(file, child, &list); gobject->recall = list; } while(list != NULL){ g_object_ref(list->data); list = list->next; } }else if(!xmlStrncmp(child->name, "ags-notation-list\0", 17)){ /* ags-notation-list */ ags_file_read_notation_list(file, child, &(gobject->notation)); } } child = child->next; } } void ags_file_read_audio_resolve_devout(AgsFileLookup *file_lookup, AgsAudio *audio) { AgsFileIdRef *id_ref; gchar *xpath; xpath = (gchar *) xmlGetProp(file_lookup->node, "devout\0"); id_ref = (AgsFileIdRef *) ags_file_find_id_ref_by_xpath(file_lookup->file, xpath); if(id_ref != NULL){ AgsDevout *devout; AgsChannel *channel; AgsAudioSignal *audio_signal; devout = (AgsDevout *) id_ref->ref; g_object_set(G_OBJECT(audio), "devout\0", devout, NULL); /* create output audio signal template */ if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (audio->flags)) != 0){ channel = audio->output; while(channel != NULL){ audio_signal = ags_audio_signal_new((GObject *) devout, (GObject *) channel->first_recycling, NULL); audio_signal->flags |= AGS_AUDIO_SIGNAL_TEMPLATE; ags_recycling_add_audio_signal(channel->first_recycling, audio_signal); channel = channel->next; } } /* create input audio signal template */ if((AGS_AUDIO_INPUT_HAS_RECYCLING & (audio->flags)) != 0){ channel = audio->input; while(channel != NULL){ audio_signal = ags_audio_signal_new((GObject *) devout, (GObject *) channel->first_recycling, NULL); audio_signal->flags |= AGS_AUDIO_SIGNAL_TEMPLATE; ags_recycling_add_audio_signal(channel->first_recycling, audio_signal); channel = channel->next; } } } } xmlNode* ags_file_write_audio(AgsFile *file, xmlNode *parent, AgsAudio *audio) { AgsFileLookup *file_lookup; AgsChannel *channel; xmlNode *node, *child; gchar *id; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-audio\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", audio, NULL)); xmlNewProp(node, AGS_FILE_FLAGS_PROP, g_strdup_printf("%x\0", audio->flags)); xmlNewProp(node, "sequence-length\0", g_strdup_printf("%d\0", audio->sequence_length)); xmlNewProp(node, "audio-channels\0", g_strdup_printf("%d\0", audio->audio_channels)); xmlNewProp(node, "output-pads\0", g_strdup_printf("%d\0", audio->output_pads)); xmlNewProp(node, "input-pads\0", g_strdup_printf("%d\0", audio->input_pads)); /* devout */ file_lookup = (AgsFileLookup *) g_object_new(AGS_TYPE_FILE_LOOKUP, "file\0", file, "node\0", node, "reference\0", audio, NULL); ags_file_add_lookup(file, (GObject *) file_lookup); g_signal_connect(G_OBJECT(file_lookup), "resolve\0", G_CALLBACK(ags_file_write_audio_resolve_devout), audio); /* */ xmlAddChild(parent, node); /* child elements */ /* ags-channel-list output */ channel = audio->output; child = xmlNewNode(NULL, "ags-channel-list\0"); xmlAddChild(node, child); //TODO:JK: generate id and add id ref while(channel != NULL){ ags_file_write_channel(file, child, channel); channel = channel->next; } /* ags-channel-list input */ channel = audio->input; child = xmlNewNode(NULL, "ags-channel-list\0"); xmlAddChild(node, child); //TODO:JK: generate id and add id ref while(channel != NULL){ ags_file_write_channel(file, child, channel); channel = channel->next; } /* ags-recall-container */ ags_file_write_recall_container_list(file, node, audio->container); /* ags-recall-list play */ child = ags_file_write_recall_list(file, node, audio->play); xmlNewProp(child, "is-play\0", AGS_FILE_TRUE); /* ags-recall-list recall */ child = ags_file_write_recall_list(file, node, audio->recall); xmlNewProp(child, "is-play\0", AGS_FILE_FALSE); /* ags-notation-list */ ags_file_write_notation_list(file, node, audio->notation); return(node); } void ags_file_write_audio_resolve_devout(AgsFileLookup *file_lookup, AgsAudio *audio) { AgsFileIdRef *id_ref; gchar *id; id_ref = (AgsFileIdRef *) ags_file_find_id_ref_by_reference(file_lookup->file, audio->devout); id = xmlGetProp(id_ref->node, AGS_FILE_ID_PROP); xmlNewProp(file_lookup->node, "devout\0", g_strdup_printf("xpath=//ags-devout[@id='%s']\0", id)); } void ags_file_read_audio_list(AgsFile *file, xmlNode *node, GList **audio) { AgsAudio *current; GList *list; xmlNode *child; list = NULL; child = node->children; ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", list, NULL)); while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(child->name, "ags-audio\0", 10)){ current = NULL; ags_file_read_audio(file, child, ¤t); list = g_list_prepend(list, current); } } child = child->next; } list = g_list_reverse(list); *audio = list; } xmlNode* ags_file_write_audio_list(AgsFile *file, xmlNode *parent, GList *audio) { AgsAudio *current; GList *list; xmlNode *node; gchar *id; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-audio-list\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", list, NULL)); xmlAddChild(parent, node); list = audio; while(list != NULL){ ags_file_write_audio(file, node, AGS_AUDIO(list->data)); list = list->next; } return(node); } void ags_file_read_channel(AgsFile *file, xmlNode *node, AgsChannel **channel) { AgsChannel *gobject; AgsFileLookup *file_lookup; xmlNode *child; gboolean preset; guint pad, audio_channel; gboolean is_output; if(*channel == NULL){ xmlXPathContext *xpath_context; xmlXPathObject *xpath_object; xpath_context = xmlXPathNewContext(file->doc); // xmlXPathSetContextNode(node, // xpath_context); xpath_context->node = node; xpath_object = xmlXPathEval("./ags-output\0", xpath_context); if(xmlXPathCastToBoolean(xpath_object)){ gobject = (AgsChannel *) g_object_new(AGS_TYPE_OUTPUT, NULL); is_output = TRUE; }else{ gobject = (AgsChannel *) g_object_new(AGS_TYPE_INPUT, NULL); is_output = FALSE; } *channel = gobject; preset = FALSE; }else{ gobject = *channel; if(AGS_IS_OUTPUT(gobject)){ is_output = TRUE; }else{ is_output = FALSE; } preset = TRUE; } ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", gobject, NULL)); gobject->flags = (guint) g_ascii_strtoull(xmlGetProp(node, AGS_FILE_FLAGS_PROP), NULL, 16); /* well known properties */ pad = (guint) g_ascii_strtoull(xmlGetProp(node, "pad\0"), NULL, 10); audio_channel = (guint) g_ascii_strtoull(xmlGetProp(node, "audio-channel\0"), NULL, 10); if(!preset){ gobject->pad = pad; gobject->audio_channel = audio_channel; } /* link */ file_lookup = (AgsFileLookup *) g_object_new(AGS_TYPE_FILE_LOOKUP, "file\0", file, "node\0", node, "reference\0", AGS_CHANNEL(gobject), NULL); ags_file_add_lookup(file, (GObject *) file_lookup); g_signal_connect(G_OBJECT(file_lookup), "resolve\0", G_CALLBACK(ags_file_read_channel_resolve_link), AGS_CHANNEL(gobject)); /* */ child = node->children; while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(child->name, "ags-recycling\0", 13)){ /* ags-recycling */ ags_file_read_recycling(file, child, &(gobject->first_recycling)); }else if(!xmlStrncmp(child->name, "ags-recall-container-list\0", 26)){ ags_file_read_recall_container_list(file, child, &(gobject->container)); }else if(!xmlStrncmp(child->name, "ags-recall-list\0", 15)){ GList *list; if(!xmlStrncmp(xmlGetProp(child, "is-play\0"), "TRUE\0", 4)){ /* ags-recall-list play */ ags_file_read_recall_list(file, child, &list); gobject->play = list; }else{ /* ags-recall-list recall */ ags_file_read_recall_list(file, child, &list); gobject->recall = list; } while(list != NULL){ g_object_ref(list->data); list = list->next; } }else if(!xmlStrncmp(child->name, "ags-pattern-list\0", 17)){ g_list_free_full(gobject->pattern, g_object_unref); gobject->pattern = NULL; /* ags-pattern-list */ ags_file_read_pattern_list(file, child, &(gobject->pattern)); }else if(!xmlStrncmp(child->name, "ags-output\0", 10)){ /* ags-output */ ags_file_read_output(file, child, gobject); }else if(!xmlStrncmp(child->name, "ags-input\0", 9)){ /* ags-input */ ags_file_read_input(file, child, gobject); }else if(!xmlStrncmp(child->name, "ags-devout-play\0", 15)){ /* ags-devout-play */ ags_file_read_devout_play(file, child, (AgsDevoutPlay **) &gobject->devout_play); AGS_DEVOUT_PLAY(gobject->devout_play)->source = (GObject *) gobject; } } child = child->next; } } void ags_file_read_channel_resolve_link(AgsFileLookup *file_lookup, AgsChannel *channel) { AgsFileIdRef *id_ref; gchar *xpath; xpath = (gchar *) xmlGetProp(file_lookup->node, "link\0"); if(xpath == NULL){ return; } id_ref = (AgsFileIdRef *) ags_file_find_id_ref_by_xpath(file_lookup->file, xpath); if(id_ref != NULL){ GError *error; error = NULL; if(channel->link == NULL){ ags_channel_set_link(channel, (AgsChannel *) id_ref->ref, &error); } } } xmlNode* ags_file_write_channel(AgsFile *file, xmlNode *parent, AgsChannel *channel) { AgsFileLookup *file_lookup; xmlNode *node, *child; gchar *id, *link_id; gboolean is_output; id = ags_id_generator_create_uuid(); if(AGS_IS_OUTPUT(channel)){ is_output = TRUE; }else{ is_output = FALSE; } node = xmlNewNode(NULL, "ags-channel\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", AGS_CHANNEL(channel), NULL)); /* well known properties */ xmlNewProp(node, AGS_FILE_FLAGS_PROP, g_strdup_printf("%x\0", channel->flags)); xmlNewProp(node, "pad\0", g_strdup_printf("%d\0", channel->pad)); xmlNewProp(node, "audio-channel\0", g_strdup_printf("%d\0", channel->audio_channel)); /* link */ if(channel->link != NULL){ file_lookup = (AgsFileLookup *) g_object_new(AGS_TYPE_FILE_LOOKUP, "file\0", file, "node\0", node, "reference\0", AGS_CHANNEL(channel), NULL); ags_file_add_lookup(file, (GObject *) file_lookup); g_signal_connect(G_OBJECT(file_lookup), "resolve\0", G_CALLBACK(ags_file_write_channel_resolve_link), AGS_CHANNEL(channel)); } xmlAddChild(parent, node); /* ags-recycling */ if(is_output){ if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (AGS_AUDIO(channel->audio)->flags)) != 0){ ags_file_write_recycling(file, node, channel->first_recycling); } }else{ if((AGS_AUDIO_INPUT_HAS_RECYCLING & (AGS_AUDIO(channel->audio)->flags)) != 0){ ags_file_write_recycling(file, node, channel->first_recycling); } } /* ags-recall-container */ if(g_list_find(AGS_AUDIO(channel->audio)->container, channel->container) != NULL){ ags_file_write_recall_container_list(file, node, channel->container); } /* ags-recall-list play */ child = ags_file_write_recall_list(file, node, channel->play); xmlNewProp(child, "is-play\0", AGS_FILE_TRUE); /* ags-recall-list recall */ child = ags_file_write_recall_list(file, node, channel->recall); xmlNewProp(child, "is-play\0", AGS_FILE_FALSE); /* ags-pattern-list */ if(channel->pattern != NULL){ ags_file_write_pattern_list(file, node, channel->pattern); } /* ags-input or ags-output */ if(AGS_IS_OUTPUT(channel)){ ags_file_write_output(file, node, channel); }else{ ags_file_write_input(file, node, channel); } /* ags-devout-play */ child = ags_file_write_devout_play(file, node, channel->devout_play); return(node); } void ags_file_write_channel_resolve_link(AgsFileLookup *file_lookup, AgsChannel *channel) { AgsFileIdRef *id_ref; gchar *id; id_ref = (AgsFileIdRef *) ags_file_find_id_ref_by_reference(file_lookup->file, AGS_CHANNEL(channel->link)); id = xmlGetProp(id_ref->node, AGS_FILE_ID_PROP); xmlNewProp(file_lookup->node, "link\0", g_strdup_printf("xpath=//*[@id='%s']\0", id)); } void ags_file_read_channel_list(AgsFile *file, xmlNode *node, GList **channel) { AgsChannel *current; xmlNode *child; GList *list; list = NULL; child = node->children; while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(child->name, "ags-channel\0", 12)){ current = NULL; ags_file_read_channel(file, child, ¤t); list = g_list_prepend(list, current); } } child = child->next; } list = g_list_reverse(list); *channel = list; ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", list, NULL)); } xmlNode* ags_file_write_channel_list(AgsFile *file, xmlNode *parent, GList *channel) { xmlNode *node; GList *list; gchar *id; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-channel-list\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", channel, NULL)); xmlAddChild(parent, node); list = channel; while(list != NULL){ ags_file_write_channel(file, node, AGS_CHANNEL(list->data)); list = list->next; } return(node); } void ags_file_read_input(AgsFile *file, xmlNode *node, AgsChannel *channel) { AgsInput *input; xmlNode *child; input = AGS_INPUT(channel); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", input, NULL)); child = node->children; while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(child->name, "ags-file-link\0", 13)){ ags_file_read_file_link(file, child, (AgsFileLink *) &(input->file_link)); } } child = child->next; } } xmlNode* ags_file_write_input(AgsFile *file, xmlNode *parent, AgsChannel *channel) { AgsInput *input; xmlNode *node; gchar *id; input = AGS_INPUT(channel); id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-input\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", input, NULL)); xmlAddChild(parent, node); if(input->file_link != NULL){ ags_file_write_file_link(file, node, (AgsFileLink *) input->file_link); } return(node); } void ags_file_read_output(AgsFile *file, xmlNode *node, AgsChannel *channel) { AgsOutput *output; output = AGS_OUTPUT(channel); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", output, NULL)); } xmlNode* ags_file_write_output(AgsFile *file, xmlNode *parent, AgsChannel *channel) { AgsOutput *output; xmlNode *node; gchar *id; output = AGS_OUTPUT(channel); id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-output\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", output, NULL)); xmlAddChild(parent, node); return(node); } void ags_file_read_recall(AgsFile *file, xmlNode *node, AgsRecall **recall) { AgsFileLookup *file_lookup; AgsRecall *gobject; xmlNode *child; xmlChar *type_name; static gboolean recall_type_is_registered = FALSE; if(!recall_type_is_registered){ ags_main_register_recall_type(); ags_ladspa_manager_load_default_directory(); recall_type_is_registered = TRUE; } if(*recall == NULL){ GType type; type_name = xmlGetProp(node, AGS_FILE_TYPE_PROP); type = g_type_from_name(type_name); gobject = g_object_new(type, NULL); *recall = gobject; }else{ gobject = *recall; } ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", gobject, NULL)); gobject->version = (gchar *) xmlGetProp(node, AGS_FILE_VERSION_PROP); gobject->build_id = (gchar *) xmlGetProp(node, AGS_FILE_BUILD_ID_PROP); gobject->flags = (guint) g_ascii_strtoull(xmlGetProp(node, AGS_FILE_FLAGS_PROP), NULL, 16); gobject->flags |= AGS_RECALL_TEMPLATE; gobject->flags &= (~(AGS_RECALL_CONNECTED | AGS_RECALL_DYNAMIC_CONNECTED)); /* devout */ file_lookup = (AgsFileLookup *) g_object_new(AGS_TYPE_FILE_LOOKUP, "file\0", file, "node\0", node, "reference\0", gobject, NULL); ags_file_add_lookup(file, (GObject *) file_lookup); g_signal_connect(G_OBJECT(file_lookup), "resolve\0", G_CALLBACK(ags_file_read_recall_resolve_devout), gobject); /* audio */ if(AGS_IS_RECALL_AUDIO(gobject)){ file_lookup = (AgsFileLookup *) g_object_new(AGS_TYPE_FILE_LOOKUP, "file\0", file, "node\0", node, "reference\0", gobject, NULL); ags_file_add_lookup(file, (GObject *) file_lookup); g_signal_connect(G_OBJECT(file_lookup), "resolve\0", G_CALLBACK(ags_file_read_recall_resolve_audio), gobject); } /* source and destination */ if(AGS_IS_RECALL_CHANNEL(gobject) || AGS_IS_RECALL_CHANNEL_RUN(gobject)){ file_lookup = (AgsFileLookup *) g_object_new(AGS_TYPE_FILE_LOOKUP, "file\0", file, "node\0", node, "reference\0", gobject, NULL); ags_file_add_lookup(file, (GObject *) file_lookup); g_signal_connect(G_OBJECT(file_lookup), "resolve\0", G_CALLBACK(ags_file_read_recall_resolve_channel), gobject); } /* */ gobject->effect = (gchar *) xmlGetProp(node, "effect\0"); gobject->name = (gchar *) xmlGetProp(node, "name\0"); /* child elements */ child = node->children; while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(child->name, "ags-recall-audio\0", 17)){ ags_file_read_recall_audio(file, child, gobject); }else if(!xmlStrncmp(child->name, "ags-recall-audio-run\0", 21)){ ags_file_read_recall_audio_run(file, child, gobject); }else if(!xmlStrncmp(child->name, "ags-recall-channel\0", 19)){ ags_file_read_recall_channel(file, child, gobject); }else if(!xmlStrncmp(child->name, "ags-recall-channel-run\0", 23)){ ags_file_read_recall_channel_run(file, child, gobject); }else if(!xmlStrncmp(child->name, "ags-recall-recycling\0", 21)){ ags_file_read_recall_recycling(file, child, gobject); }else if(!xmlStrncmp(child->name, "ags-recall-audio-signal\0", 24)){ ags_file_read_recall_audio_signal(file, child, gobject); }else if(!xmlStrncmp(child->name, "ags-recall-list\0", 16)){ GList *list, *start; ags_file_read_recall_list(file, child, &start); list = start; while(list != NULL){ g_object_set(G_OBJECT(gobject), "child\0", AGS_RECALL(list->data), NULL); list = list->next; } g_list_free(start); }else if(!xmlStrncmp(child->name, "ags-port-list\0", 14)){ AgsFileLookup *file_lookup; GList *list; list = NULL; ags_file_read_port_list(file, child, &list); ags_plugin_set_ports(AGS_PLUGIN(gobject), list); gobject->port = list; //TODO:JK: ugly, implement ags_recall_set_port }else if(!xmlStrncmp(child->name, "ags-parameter\0", 13)){ ags_file_util_read_parameter(file, child, NULL, &(gobject->child_parameters), NULL, NULL); } } child = child->next; } } void ags_file_read_recall_resolve_audio(AgsFileLookup *file_lookup, AgsRecall *recall) { AgsAudio *audio; AgsFileIdRef *file_id_ref; xmlNode *node; audio = NULL; node = file_lookup->node->parent->parent; file_id_ref = (AgsFileIdRef *) ags_file_find_id_ref_by_node(file_lookup->file, node); if(file_id_ref != NULL){ audio = (AgsAudio *) file_id_ref->ref; } g_object_set(G_OBJECT(recall), "audio\0", AGS_AUDIO(audio), NULL); } void ags_file_read_recall_resolve_channel(AgsFileLookup *file_lookup, AgsRecall *recall) { AgsChannel *source, *destination; AgsFileIdRef *file_id_ref; xmlNode *node; source = NULL; destination = NULL; node = file_lookup->node->parent->parent; file_id_ref = (AgsFileIdRef *) ags_file_find_id_ref_by_node(file_lookup->file, node); if(file_id_ref != NULL){ source = AGS_CHANNEL(file_id_ref->ref); g_object_set(G_OBJECT(recall), "source\0", source, NULL); destination = NULL; if(AGS_IS_INPUT(source)){ if((AGS_AUDIO_ASYNC & (AGS_AUDIO(source->audio)->flags)) != 0){ if(AGS_IS_BUFFER_CHANNEL(recall)){ xmlXPathContext *xpath_context; xmlXPathObject *xpath_object; xmlChar *xpath; guint position; guint i; /* Create xpath evaluation context */ xpath_context = xmlXPathNewContext(file_lookup->file->doc); if(xpath_context == NULL) { fprintf(stderr,"Error: unable to create new XPath context\n\0"); return; } xpath_context->node = file_lookup->node->parent; /* Evaluate xpath expression */ xpath = "./ags-recall[@type='AgsBufferChannel']\0"; xpath_object = xmlXPathEval(xpath, xpath_context); if(xpath_object == NULL) { g_message("Error: unable to evaluate xpath expression \"%s\"\0", xpath); xmlXPathFreeContext(xpath_context); return; } position = 0; for(i = 0; i < xpath_object->nodesetval->nodeNr; i++){ if(xpath_object->nodesetval->nodeTab[i] == file_lookup->node){ break; } if(xpath_object->nodesetval->nodeTab[i]->type == XML_ELEMENT_NODE){ position++; } } destination = ags_channel_nth(AGS_AUDIO(source->audio)->output, position * AGS_AUDIO(source->audio)->audio_channels + source->audio_channel); g_object_set(G_OBJECT(recall), "destination\0", AGS_CHANNEL(destination), NULL); // g_message("dest[%d]\0", destination->line); }else if(AGS_IS_BUFFER_CHANNEL_RUN(recall)){ xmlXPathContext *xpath_context; xmlXPathObject *xpath_object; xmlChar *xpath; guint position; guint i; /* Create xpath evaluation context */ xpath_context = xmlXPathNewContext(file_lookup->file->doc); if(xpath_context == NULL) { fprintf(stderr,"Error: unable to create new XPath context\n\0"); return; } xpath_context->node = file_lookup->node->parent; /* Evaluate xpath expression */ xpath = "./ags-recall[@type='AgsBufferChannelRun']\0"; xpath_object = xmlXPathEval(xpath, xpath_context); if(xpath_object == NULL) { g_message("Error: unable to evaluate xpath expression \"%s\"\0", xpath); xmlXPathFreeContext(xpath_context); return; } position = 0; for(i = 0; i < xpath_object->nodesetval->nodeNr; i++){ if(xpath_object->nodesetval->nodeTab[i] == file_lookup->node){ break; } if(xpath_object->nodesetval->nodeTab[i]->type == XML_ELEMENT_NODE){ position++; } } destination = ags_channel_nth(AGS_AUDIO(source->audio)->output, position * AGS_AUDIO(source->audio)->audio_channels + source->audio_channel); g_object_set(G_OBJECT(recall), "destination\0", AGS_CHANNEL(destination), NULL); // g_message("dest[%d]\0", destination->line); } } } } } void ags_file_read_recall_resolve_port(AgsFileLookup *file_lookup, AgsRecall *recall) { //TODO:JK: implement me } void ags_file_read_recall_resolve_parameter(AgsFileLookup *file_lookup, AgsRecall *recall) { //TODO:JK: implement me } void ags_file_read_recall_resolve_devout(AgsFileLookup *file_lookup, AgsRecall *recall) { AgsFileIdRef *id_ref; gchar *xpath; xpath = (gchar *) xmlGetProp(file_lookup->node, "devout\0"); id_ref = (AgsFileIdRef *) ags_file_find_id_ref_by_xpath(file_lookup->file, xpath); if(id_ref != NULL){ recall->devout = (GObject *) id_ref->ref; } } xmlNode* ags_file_write_recall(AgsFile *file, xmlNode *parent, AgsRecall *recall) { AgsFileLookup *file_lookup; xmlNode *node; GList *list; gchar *id; guint i; if((AGS_RECALL_TEMPLATE & (recall->flags)) == 0){ return(NULL); } id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-recall\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", recall, NULL)); xmlNewProp(node, AGS_FILE_TYPE_PROP, G_OBJECT_TYPE_NAME(recall)); xmlNewProp(node, AGS_FILE_VERSION_PROP, recall->version); xmlNewProp(node, AGS_FILE_BUILD_ID_PROP, recall->build_id); xmlNewProp(node, AGS_FILE_FLAGS_PROP, g_strdup_printf("%x\0", recall->flags)); /* devout */ file_lookup = (AgsFileLookup *) g_object_new(AGS_TYPE_FILE_LOOKUP, "file\0", file, "node\0", node, "reference\0", recall, NULL); ags_file_add_lookup(file, (GObject *) file_lookup); g_signal_connect(G_OBJECT(file_lookup), "resolve\0", G_CALLBACK(ags_file_write_recall_resolve_devout), recall); /* */ xmlNewProp(node, "effect\0", recall->effect); xmlNewProp(node, AGS_FILE_NAME_PROP, recall->name); xmlAddChild(parent, node); /* child elements */ if(AGS_IS_RECALL_AUDIO(recall)){ ags_file_write_recall_audio(file, node, recall); }else if(AGS_IS_RECALL_AUDIO_RUN(recall)){ ags_file_write_recall_audio_run(file, node, recall); }else if(AGS_IS_RECALL_CHANNEL(recall)){ ags_file_write_recall_channel(file, node, recall); }else if(AGS_IS_RECALL_CHANNEL_RUN(recall)){ ags_file_write_recall_channel_run(file, node, recall); }else if(AGS_IS_RECALL_RECYCLING(recall)){ ags_file_write_recall_recycling(file, node, recall); }else if(AGS_IS_RECALL_AUDIO_SIGNAL(recall)){ ags_file_write_recall_audio_signal(file, node, recall); } if(recall->children != NULL){ ags_file_write_recall_list(file, node, recall->children); } if(recall->port != NULL){ ags_file_write_port_list(file, node, recall->port); } /* child parameters */ ags_file_util_write_parameter(file, node, ags_id_generator_create_uuid(), recall->child_parameters, recall->n_params); return(node); } void ags_file_write_recall_resolve_devout(AgsFileLookup *file_lookup, AgsRecall *recall) { AgsFileIdRef *id_ref; gchar *id; id_ref = (AgsFileIdRef *) ags_file_find_id_ref_by_reference(file_lookup->file, recall->devout); id = xmlGetProp(id_ref->node, AGS_FILE_ID_PROP); xmlNewProp(file_lookup->node, "devout\0", g_strdup_printf("xpath=//ags-devout[@id='%s']\0", id)); } void ags_file_read_recall_list(AgsFile *file, xmlNode *node, GList **recall) { AgsRecall *current; xmlNode *child; GList *list; list = NULL; child = node->children; while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(child->name, "ags-recall\0", 11)){ current = NULL; ags_file_read_recall(file, child, ¤t); g_object_ref(current); list = g_list_prepend(list, current); } } child = child->next; } list = g_list_reverse(list); *recall = list; ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", list, NULL)); } xmlNode* ags_file_write_recall_list(AgsFile *file, xmlNode *parent, GList *recall) { xmlNode *node; GList *list; gchar *id; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-recall-list\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", recall, NULL)); xmlAddChild(parent, node); list = recall; while(list != NULL){ ags_file_write_recall(file, node, AGS_RECALL(list->data)); list = list->next; } return(node); } void ags_file_read_recall_container(AgsFile *file, xmlNode *node, AgsRecallContainer **recall_container) { AgsFileLookup *file_lookup; AgsRecallContainer *gobject; xmlNode *child; xmlChar *type_name; if(*recall_container == NULL){ gobject = g_object_new(AGS_TYPE_RECALL_CONTAINER, NULL); *recall_container = gobject; }else{ gobject = *recall_container; } ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", gobject, NULL)); /* child elements */ child = node->children; while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(child->name, "ags-parameter\0", 14)){ AgsFileLookup *file_lookup; xmlNode *value_node; GList *list; ags_file_util_read_parameter(file, child, NULL, NULL, NULL, NULL); value_node = child->children; while(value_node != NULL){ if(value_node->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(value_node->name, "ags-value\0", 10)){ list = ags_file_lookup_find_by_node(file->lookup, value_node); if(list != NULL){ file_lookup = AGS_FILE_LOOKUP(list->data); g_signal_connect_after(G_OBJECT(file_lookup), "resolve\0", G_CALLBACK(ags_file_read_recall_container_resolve_value), gobject); } } } value_node = value_node->next; } } } child = child->next; } } void ags_file_read_recall_container_resolve_value(AgsFileLookup *file_lookup, AgsRecallContainer *recall_container) { GObject *gobject; GValue *value; value = file_lookup->ref; if(G_VALUE_HOLDS(value, G_TYPE_OBJECT)){ gobject = g_value_get_object(value); if(gobject == NULL){ return; } g_object_set(gobject, "recall-container\0", recall_container, NULL); } } xmlNode* ags_file_write_recall_container(AgsFile *file, xmlNode *parent, AgsRecallContainer *recall_container) { AgsFileLookup *file_lookup; xmlNode *node; GParameter *parameter; GList *list; gchar *id; gint n_params; auto GParameter* ags_file_write_recall_container_parameter(GList *list, GParameter *parameter, gchar *prop, gint *n_params); GParameter* ags_file_write_recall_container_parameter(GList *list, GParameter *parameter, gchar *prop, gint *n_params){ gint i; if(n_params == NULL){ i = 0; }else{ i = *n_params; } while(list != NULL){ if((AGS_RECALL_TEMPLATE & (AGS_RECALL(list->data)->flags)) == 0){ list = list->next; continue; } if(parameter == NULL){ parameter = (GParameter *) malloc(sizeof(GParameter)); }else{ parameter = (GParameter *) realloc(parameter, (i + 1) * sizeof(GParameter)); } parameter[i].name = prop; memset(&(parameter[i].value), 0, sizeof(GValue)); g_value_init(&(parameter[i].value), G_TYPE_OBJECT); g_value_set_object(&(parameter[i].value), G_OBJECT(list->data)); list = list->next; i++; } if(n_params != NULL){ *n_params = i; } return(parameter); } id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-recall-container\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", recall_container, NULL)); xmlAddChild(parent, node); /* child elements */ parameter = NULL; n_params = 0; if(recall_container->recall_audio != NULL){ parameter = (GParameter *) malloc(sizeof(GParameter)); parameter[0].name = "recall-audio\0"; memset(&(parameter[0].value), 0, sizeof(GValue)); g_value_init(&(parameter[0].value), G_TYPE_OBJECT); g_value_set_object(&(parameter[0].value), recall_container->recall_audio); n_params++; } list = ags_recall_container_get_recall_audio_run(recall_container); parameter = ags_file_write_recall_container_parameter(list, parameter, "recall-audio-run\0", &n_params); list = ags_recall_container_get_recall_channel(recall_container); parameter = ags_file_write_recall_container_parameter(list, parameter, "recall-channel\0", &n_params); list = ags_recall_container_get_recall_channel_run(recall_container); parameter = ags_file_write_recall_container_parameter(list, parameter, "recall-channel-run\0", &n_params); ags_file_util_write_parameter(file, node, ags_id_generator_create_uuid(), parameter, n_params); return(node); } void ags_file_read_recall_container_list(AgsFile *file, xmlNode *node, GList **recall_container) { AgsRecallContainer *current; GList *list; xmlNode *child; list = NULL; child = node->children; ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", list, NULL)); while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(child->name, "ags-recall-container\0", 21)){ current = NULL; ags_file_read_recall_container(file, child, ¤t); list = g_list_prepend(list, current); } } child = child->next; } list = g_list_reverse(list); *recall_container = list; } xmlNode* ags_file_write_recall_container_list(AgsFile *file, xmlNode *parent, GList *recall_container) { AgsRecallContainer *current; GList *list; xmlNode *node; gchar *id; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-recall-container-list\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", list, NULL)); xmlAddChild(parent, node); list = recall_container; while(list != NULL){ ags_file_write_recall_container(file, node, AGS_RECALL_CONTAINER(list->data)); list = list->next; } return(node); } void ags_file_read_recall_audio(AgsFile *file, xmlNode *node, AgsRecall *recall) { AgsRecallAudio *recall_audio; xmlNode *child; recall_audio = AGS_RECALL_AUDIO(recall); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", recall_audio, NULL)); /* child elements */ child = node->children; while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrcmp(child->name, ags_plugin_get_xml_type(AGS_PLUGIN(recall)))){ ags_plugin_read(file, child, AGS_PLUGIN(recall)); } } child = child->next; } } xmlNode* ags_file_write_recall_audio(AgsFile *file, xmlNode *parent, AgsRecall *recall) { AgsRecallAudio *recall_audio; xmlNode *node; gchar *id; recall_audio = AGS_RECALL_AUDIO(recall); id = ags_id_generator_create_uuid(); xmlNewProp(node, AGS_FILE_ID_PROP, id); node = xmlNewNode(NULL, "ags-recall-audio\0"); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", recall_audio, NULL)); xmlAddChild(parent, node); /* child elements */ ags_plugin_write(file, node, AGS_PLUGIN(recall)); return(node); } void ags_file_read_recall_audio_run(AgsFile *file, xmlNode *node, AgsRecall *recall) { AgsRecallAudioRun *recall_audio_run; xmlNode *child; recall_audio_run = AGS_RECALL_AUDIO_RUN(recall); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", recall_audio_run, NULL)); /* child elements */ child = node->children; while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrcmp(child->name, ags_plugin_get_xml_type(AGS_PLUGIN(recall)))){ ags_plugin_read(file, child, AGS_PLUGIN(recall)); } } child = child->next; } } xmlNode* ags_file_write_recall_audio_run(AgsFile *file, xmlNode *parent, AgsRecall *recall) { AgsRecallAudioRun *recall_audio_run; xmlNode *node; gchar *id; recall_audio_run = AGS_RECALL_AUDIO_RUN(recall); id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-recall-audio-run\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", recall_audio_run, NULL)); xmlAddChild(parent, node); /* child elements */ ags_plugin_write(file, node, AGS_PLUGIN(recall)); return(node); } void ags_file_read_recall_channel(AgsFile *file, xmlNode *node, AgsRecall *recall) { AgsRecallChannel *recall_channel; xmlNode *child; recall_channel = AGS_RECALL_CHANNEL(recall); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", recall_channel, NULL)); /* child elements */ child = node->children; while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrcmp(child->name, ags_plugin_get_xml_type(AGS_PLUGIN(recall)))){ ags_plugin_read(file, child, AGS_PLUGIN(recall)); } } child = child->next; } } xmlNode* ags_file_write_recall_channel(AgsFile *file, xmlNode *parent, AgsRecall *recall) { AgsRecallChannel *recall_channel; xmlNode *node; gchar *id; recall_channel = AGS_RECALL_CHANNEL(recall); id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-recall-channel\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", recall_channel, NULL)); xmlAddChild(parent, node); /* child elements */ ags_plugin_write(file, node, AGS_PLUGIN(recall)); return(node); } void ags_file_read_recall_channel_run(AgsFile *file, xmlNode *node, AgsRecall *recall) { AgsRecallChannelRun *recall_channel_run; xmlNode *child; recall_channel_run = AGS_RECALL_CHANNEL_RUN(recall); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", recall_channel_run, NULL)); /* child elements */ child = node->children; while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrcmp(child->name, ags_plugin_get_xml_type(AGS_PLUGIN(recall)))){ ags_plugin_read(file, child, AGS_PLUGIN(recall)); } } child = child->next; } } xmlNode* ags_file_write_recall_channel_run(AgsFile *file, xmlNode *parent, AgsRecall *recall) { AgsRecallChannelRun *recall_channel_run; xmlNode *node; gchar *id; recall_channel_run = AGS_RECALL_CHANNEL_RUN(recall); id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-recall-channel-run\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", recall_channel_run, NULL)); xmlAddChild(parent, node); /* child elements */ ags_plugin_write(file, node, AGS_PLUGIN(recall)); return(node); } void ags_file_read_recall_recycling(AgsFile *file, xmlNode *node, AgsRecall *recall) { AgsRecallRecycling *recall_recycling; xmlNode *child; recall_recycling = AGS_RECALL_RECYCLING(recall); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", recall_recycling, NULL)); /* child elements */ child = node->children; while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrcmp(child->name, ags_plugin_get_xml_type(AGS_PLUGIN(recall)))){ ags_plugin_read(file, child, AGS_PLUGIN(recall)); } } child = child->next; } } xmlNode* ags_file_write_recall_recycling(AgsFile *file, xmlNode *parent, AgsRecall *recall) { AgsRecallRecycling *recall_recycling; xmlNode *node; gchar *id; recall_recycling = AGS_RECALL_RECYCLING(recall); id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-recall-recycling\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", recall_recycling, NULL)); xmlAddChild(parent, node); /* child elements */ ags_plugin_write(file, node, AGS_PLUGIN(recall)); return(node); } void ags_file_read_recall_audio_signal(AgsFile *file, xmlNode *node, AgsRecall *recall) { AgsRecallAudioSignal *recall_audio_signal; xmlNode *child; recall_audio_signal = AGS_RECALL_AUDIO_SIGNAL(recall); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", recall_audio_signal, NULL)); /* child elements */ child = node->children; while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrcmp(child->name, ags_plugin_get_xml_type(AGS_PLUGIN(recall)))){ ags_plugin_read(file, child, AGS_PLUGIN(recall)); } } child = child->next; } } xmlNode* ags_file_write_recall_audio_signal(AgsFile *file, xmlNode *parent, AgsRecall *recall) { AgsRecallAudioSignal *recall_audio_signal; xmlNode *node; gchar *id; recall_audio_signal = AGS_RECALL_AUDIO_SIGNAL(recall); id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-recall-audio-signal\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", recall_audio_signal, NULL)); xmlAddChild(parent, node); /* child elements */ ags_plugin_write(file, node, AGS_PLUGIN(recall)); return(node); } void ags_file_read_port(AgsFile *file, xmlNode *node, AgsPort **port) { AgsPort *gobject; AgsFileLookup *file_lookup; xmlNode *child; GList *list; if(*port == NULL){ gobject = g_object_new(AGS_TYPE_PORT, NULL); *port = gobject; }else{ gobject = *port; } ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", gobject, NULL)); gobject->plugin_name = g_strdup(xmlGetProp(node, "plugin-name\0")); gobject->specifier = g_strdup(xmlGetProp(node, "specifier\0")); gobject->control_port = g_strdup(xmlGetProp(node, "control-port\0")); gobject->port_value_is_pointer = g_ascii_strtoull(xmlGetProp(node, "port-data-is-pointer\0"), NULL, 10); gobject->port_value_type = g_type_from_name(xmlGetProp(node, "port-data-type\0")); gobject->port_value_size = g_ascii_strtoull(xmlGetProp(node, "port-data-size\0"), NULL, 10); gobject->port_value_length = g_ascii_strtoull(xmlGetProp(node, "port-data-length\0"), NULL, 10); /* child elements */ child = node->children; while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(child->name, "ags-value\0", 10)){ GValue *value; //FIXME:JK: memory leak value = (GValue *) g_new0(GValue, 1); memset(value, 0, sizeof(GValue)); g_value_init(value, gobject->port_value_type); ags_file_util_read_value(file, child, NULL, value, NULL); if(gobject->port_value_type == G_TYPE_POINTER || gobject->port_value_type == G_TYPE_OBJECT){ list = ags_file_lookup_find_by_node(file->lookup, child); if(list != NULL){ file_lookup = AGS_FILE_LOOKUP(list->data); g_signal_connect_after(G_OBJECT(file_lookup), "resolve\0", G_CALLBACK(ags_file_read_port_resolve_port_value), gobject); } }else{ ags_port_safe_write(gobject, value); } } } child = child->next; } } void ags_file_read_port_resolve_port_value(AgsFileLookup *file_lookup, AgsPort *port) { AgsFileIdRef *file_id_ref; gchar *xpath; ags_port_safe_write(port, (GValue *) file_lookup->ref); file_id_ref = (AgsFileIdRef *) ags_file_find_id_ref_by_reference(file_lookup->file, port); ags_file_id_ref_resolved(file_id_ref); } xmlNode* ags_file_write_port(AgsFile *file, xmlNode *parent, AgsPort *port) { AgsFileLookup *file_lookup; xmlNode *node; gchar *id; GValue *a; if(!AGS_IS_PORT(port)){ return; } id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-port\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", port, NULL)); xmlNewProp(node, BAD_CAST "plugin-name\0", BAD_CAST (port->plugin_name)); xmlNewProp(node, BAD_CAST "specifier\0", port->specifier); xmlNewProp(node, BAD_CAST "control-port\0", port->control_port); xmlNewProp(node, BAD_CAST "port-data-is-pointer\0", BAD_CAST (g_strdup_printf("%d\0", port->port_value_is_pointer))); xmlNewProp(node, BAD_CAST "port-data-type\0", BAD_CAST (g_strdup(g_type_name(port->port_value_type)))); xmlNewProp(node, BAD_CAST "port-data-size\0", g_strdup_printf("%d\0", port->port_value_size)); xmlNewProp(node, BAD_CAST "port-data-length\0", BAD_CAST (g_strdup_printf("%d\0", port->port_value_length))); xmlAddChild(parent, node); /* child elements */ a = g_new0(GValue, 1); if(port->port_value_is_pointer){ if(port->port_value_type == G_TYPE_BOOLEAN){ gboolean *ptr; ptr = (gboolean *) port->port_value.ags_port_boolean_ptr; g_value_init(a, G_TYPE_POINTER); g_value_set_pointer(a, ptr); }else if(port->port_value_type == G_TYPE_UINT64){ guint64 *ptr; ptr = (guint64 *) port->port_value.ags_port_uint_ptr; g_value_init(a, G_TYPE_POINTER); g_value_set_pointer(a, ptr); }else if(port->port_value_type == G_TYPE_INT64){ gint64 *ptr; ptr = (gint64 *) port->port_value.ags_port_int_ptr; g_value_init(a, G_TYPE_POINTER); g_value_set_pointer(a, ptr); }else if(port->port_value_type == G_TYPE_FLOAT){ gfloat *ptr; ptr = (gfloat *) port->port_value.ags_port_float_ptr; g_value_init(a, G_TYPE_POINTER); g_value_set_pointer(a, ptr); }else if(port->port_value_type == G_TYPE_DOUBLE){ gdouble *ptr; ptr = (gdouble *) port->port_value.ags_port_double_ptr; g_value_init(a, G_TYPE_POINTER); g_value_set_pointer(a, ptr); }else if(port->port_value_type == G_TYPE_POINTER){ g_value_init(a, G_TYPE_POINTER); g_value_set_pointer(a, port->port_value.ags_port_pointer); } }else{ if(port->port_value_type == G_TYPE_BOOLEAN){ g_value_init(a, G_TYPE_BOOLEAN); g_value_set_boolean(a, port->port_value.ags_port_boolean); }else if(port->port_value_type == G_TYPE_UINT64){ g_value_init(a, G_TYPE_UINT64); g_value_set_uint64(a, port->port_value.ags_port_uint); }else if(port->port_value_type == G_TYPE_INT64){ g_value_init(a, G_TYPE_INT64); g_value_set_int64(a, port->port_value.ags_port_int); }else if(port->port_value_type == G_TYPE_FLOAT){ g_value_init(a, G_TYPE_FLOAT); g_value_set_float(a, port->port_value.ags_port_float); }else if(port->port_value_type == G_TYPE_DOUBLE){ g_value_init(a, G_TYPE_DOUBLE); g_value_set_double(a, port->port_value.ags_port_double); }else if(port->port_value_type == G_TYPE_OBJECT){ g_value_init(a, G_TYPE_OBJECT); g_value_set_object(a, port->port_value.ags_port_object); } } /* */ ags_file_util_write_value(file, node, ags_id_generator_create_uuid(), a, port->port_value_type, port->port_value_size); return(node); } void ags_file_read_port_list(AgsFile *file, xmlNode *node, GList **port) { AgsPort *current; AgsFileIdRef *port_id_ref; xmlNode *child; GList *list, *iter; if(*port != NULL){ list = *port; }else{ list = NULL; } child = node->children; while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(child->name, "ags-port\0", 9)){ if(*port != NULL){ GList *list; list = ags_port_find_specifier(*port, xmlGetProp(child, "specifier\0")); if(list == NULL){ child = child->next; continue; }else{ current = list->data; g_message("found: %s\0", xmlGetProp(child, "specifier\0")); } }else{ current = NULL; } ags_file_read_port(file, child, ¤t); if(*port == NULL){ list = g_list_prepend(list, current); } } } child = child->next; } if(*port == NULL){ list = g_list_reverse(list); /* set return value */ *port = list; } /* add id ref */ ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", *port, NULL)); } xmlNode* ags_file_write_port_list(AgsFile *file, xmlNode *parent, GList *port) { xmlNode *node; GList *list; gchar *id; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-port-list\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", port, NULL)); xmlAddChild(parent, node); /* child elements */ list = port; while(list != NULL){ ags_file_write_port(file, node, AGS_PORT(list->data)); list = list->next; } return(node); } void ags_file_read_recycling(AgsFile *file, xmlNode *node, AgsRecycling **recycling) { AgsRecycling *gobject; xmlNode *child; if(*recycling == NULL){ gobject = (AgsRecycling *) g_object_new(AGS_TYPE_RECYCLING, NULL); *recycling = gobject; }else{ gobject = *recycling; } ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", gobject, NULL)); gobject->flags = (guint) g_ascii_strtoull(xmlGetProp(node, AGS_FILE_FLAGS_PROP), NULL, 16); /* child elements */ child = node->children; while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(child->name, "ags-audio-signal-list\0", 21)){ if((AGS_FILE_READ_AUDIO_SIGNAL & (file->flags)) != 0){ ags_file_read_audio_signal_list(file, child, &gobject->audio_signal); } } } child = child->next; } } xmlNode* ags_file_write_recycling(AgsFile *file, xmlNode *parent, AgsRecycling *recycling) { xmlNode *node; gchar *id; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-recycling\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", recycling, NULL)); xmlNewProp(node, AGS_FILE_FLAGS_PROP, g_strdup_printf("%x\0", recycling->flags)); xmlAddChild(parent, node); /* child elements */ if((AGS_FILE_WRITE_AUDIO_SIGNAL & (file->flags)) != 0){ ags_file_write_audio_signal_list(file, node, recycling->audio_signal); } return(node); } void ags_file_read_recycling_list(AgsFile *file, xmlNode *node, GList **recycling) { AgsRecycling *current; xmlNode *child; GList *list; list = NULL; child = node->children; while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(child->name, "ags-recycling\0", 14)){ current = NULL; ags_file_read_recycling(file, child, ¤t); list = g_list_prepend(list, current); } } child = child->next; } list = g_list_reverse(list); *recycling = list; ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", list, NULL)); } xmlNode* ags_file_write_recycling_list(AgsFile *file, xmlNode *parent, GList *recycling) { xmlNode *node; GList *list; gchar *id; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-recycling-list\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", recycling, NULL)); xmlAddChild(parent, node); list = recycling; while(list != NULL){ ags_file_write_recycling(file, node, AGS_RECYCLING(list->data)); list = list->next; } return(node); } void ags_file_read_audio_signal(AgsFile *file, xmlNode *node, AgsAudioSignal **audio_signal) { AgsAudioSignal *gobject; xmlNode *child; if(*audio_signal == NULL){ gobject = (AgsAudioSignal *) g_object_new(AGS_TYPE_AUDIO_SIGNAL, NULL); *audio_signal = gobject; }else{ gobject = *audio_signal; } ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", gobject, NULL)); gobject->flags = (guint) g_ascii_strtoull(xmlGetProp(node, AGS_FILE_FLAGS_PROP), NULL, 16); gobject->samplerate = (guint) g_ascii_strtoull(xmlGetProp(node, "samplerate\0"), NULL, 10); gobject->buffer_size = (guint) g_ascii_strtoull(xmlGetProp(node, "buffer-size\0"), NULL, 10); gobject->resolution = (guint) g_ascii_strtoull(xmlGetProp(node, "resolution\0"), NULL, 10); gobject->length = (guint) g_ascii_strtoull(xmlGetProp(node, "length\0"), NULL, 10); gobject->last_frame = (guint) g_ascii_strtoull(xmlGetProp(node, "last-frame\0"), NULL, 10); gobject->loop_start = (guint) g_ascii_strtoull(xmlGetProp(node, "loop-start\0"), NULL, 10); gobject->loop_end = (guint) g_ascii_strtoull(xmlGetProp(node, "loop-end\0"), NULL, 10); gobject->delay = (guint) g_ascii_strtoull(xmlGetProp(node, "delay\0"), NULL, 10); gobject->attack = (guint) g_ascii_strtoull(xmlGetProp(node, "attack\0"), NULL, 10); /* child elements */ child = node->children; while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(child->name, "ags-stream-list\0", 21)){ ags_file_read_stream_list(file, child, &gobject->stream_beginning, gobject->buffer_size); } } child = child->next; } } xmlNode* ags_file_write_audio_signal(AgsFile *file, xmlNode *parent, AgsAudioSignal *audio_signal) { xmlNode *node; gchar *id; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-audio-signal\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", audio_signal, NULL)); xmlNewProp(node, AGS_FILE_FLAGS_PROP, g_strdup_printf("%x\0", audio_signal->flags)); xmlNewProp(node, "samplerate\0", g_strdup_printf("%d\0", audio_signal->samplerate)); xmlNewProp(node, "buffer-size\0", g_strdup_printf("%d\0", audio_signal->buffer_size)); xmlNewProp(node, "resolution\0", g_strdup_printf("%d\0", audio_signal->resolution)); xmlNewProp(node, "length\0", g_strdup_printf("%d\0", audio_signal->length)); xmlNewProp(node, "last-frame\0", g_strdup_printf("%d\0", audio_signal->last_frame)); xmlNewProp(node, "loop-start\0", g_strdup_printf("%d\0", audio_signal->loop_start)); xmlNewProp(node, "loop-end\0", g_strdup_printf("%d\0", audio_signal->loop_end)); xmlNewProp(node, "delay\0", g_strdup_printf("%d\0", audio_signal->delay)); xmlNewProp(node, "attack\0", g_strdup_printf("%d\0", audio_signal->attack)); xmlAddChild(parent, node); /* child elements */ ags_file_write_stream_list(file, node, audio_signal->stream_beginning, audio_signal->buffer_size); return(node); } void ags_file_read_audio_signal_list(AgsFile *file, xmlNode *node, GList **audio_signal) { AgsAudioSignal *current; xmlNode *child; GList *list; list = NULL; child = node->children; while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(child->name, "ags-audio-signal\0", 17)){ current = NULL; ags_file_read_audio_signal(file, child, ¤t); list = g_list_prepend(list, current); } } child = child->next; } list = g_list_reverse(list); *audio_signal = list; ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", list, NULL)); } xmlNode* ags_file_write_audio_signal_list(AgsFile *file, xmlNode *parent, GList *audio_signal) { xmlNode *node; GList *list; gchar *id; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-audio-signal-list\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", audio_signal, NULL)); xmlAddChild(parent, node); list = audio_signal; while(list != NULL){ ags_file_write_audio_signal(file, node, AGS_AUDIO_SIGNAL(list->data)); list = list->next; } return(node); } void ags_file_read_stream(AgsFile *file, xmlNode *node, GList **stream, guint *index, guint buffer_size) { GList *list; xmlChar *encoding; xmlChar *demuxer; xmlChar *content; if(*stream == NULL){ list = g_list_alloc(); *stream = list; }else{ list = *stream; } ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", list, NULL)); if(index != NULL){ *index = (guint) g_ascii_strtoull(xmlGetProp(node, "index\0"), NULL, 10); } encoding = xmlGetProp(node, "encoding\0"); if(!xmlStrncmp(encoding, "base64\0", 7)){ demuxer = xmlGetProp(node, "demuxer\0"); if(!xmlStrncmp(demuxer, "raw\0", 4)){ content = node->content; //TODO:JK: verify list->data = g_base64_decode(content, NULL); }else{ g_warning("ags_file_read_stream: unsupported demuxer %s\0", demuxer); } }else{ g_warning("ags_file_read_stream: unsupported encoding %s\0", encoding); } } xmlNode* ags_file_write_stream(AgsFile *file, xmlNode *parent, GList *stream, guint index, guint buffer_size) { xmlNode *node; xmlChar *content; gchar *id; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-stream\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", stream, NULL)); xmlNewProp(node, "index\0", g_strdup_printf("%d\0", index)); xmlNewProp(node, "encoding\0", file->audio_encoding); xmlNewProp(node, "demuxer\0", file->audio_format); content = g_base64_encode(stream->data, buffer_size); node->content = content; } void ags_file_read_stream_list(AgsFile *file, xmlNode *node, GList **stream, guint buffer_size) { GList *current; xmlNode *child; GList *list; guint *index; guint i; auto void ags_file_read_stream_list_sort(GList **stream, guint *index); void ags_file_read_stream_list_sort(GList **stream, guint *index){ GList *start, *list; GList *sorted; guint stream_length; guint i, i_stop; guint j, k; start = list = *stream; stream_length = i_stop = g_list_length(list); sorted = NULL; while(list != NULL){ j = index[stream_length - i_stop]; for(i = 0; i < stream_length - i_stop; i++){ if(j < index[i]){ break; } } sorted = g_list_insert(sorted, list->data, i); i_stop--; list = list->next; } *stream = sorted; g_list_free(start); } child = node->children; list = NULL; index = NULL; for(i = 0; child != NULL; i++){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(child->name, "ags-stream\0", 11)){ current = NULL; if(index == NULL){ index = (guint *) malloc(sizeof(guint)); }else{ index = (guint *) realloc(index, (i + 1) * sizeof(guint)); } ags_file_read_stream(file, child, ¤t, &(index[i]), buffer_size); list = g_list_prepend(list, current); } } child = child->next; } list = g_list_reverse(list); ags_file_read_stream_list_sort(&list, index); *stream = list; ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", list, NULL)); } xmlNode* ags_file_write_stream_list(AgsFile *file, xmlNode *parent, GList *stream, guint buffer_size) { xmlNode *node; GList *list; gchar *id; guint i; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-stream-list\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", stream, NULL)); xmlAddChild(parent, node); /* child elements */ list = stream; for(i = 0; list != NULL; i++){ ags_file_write_stream(file, node, list, i, buffer_size); list = list->next; } return(node); } void ags_file_read_pattern(AgsFile *file, xmlNode *node, AgsPattern **pattern) { AgsPattern *gobject; AgsFileLookup *file_lookup; xmlNode *child; guint dim[3]; if(*pattern == NULL){ gobject = (AgsPattern *) g_object_new(AGS_TYPE_PATTERN, NULL); *pattern = gobject; }else{ gobject = *pattern; } ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", gobject, NULL)); dim[0] = g_ascii_strtoull(xmlGetProp(node, "dim-1st-level\0"), NULL, 10); dim[1] = g_ascii_strtoull(xmlGetProp(node, "dim-2nd-level\0"), NULL, 10); dim[2] = g_ascii_strtoull(xmlGetProp(node, "length\0"), NULL, 10); ags_pattern_set_dim((AgsPattern *) gobject, dim[0], dim[1], dim[2]); /* port */ file_lookup = (AgsFileLookup *) g_object_new(AGS_TYPE_FILE_LOOKUP, "file\0", file, "node\0", node, "reference\0", gobject, NULL); ags_file_add_lookup(file, (GObject *) file_lookup); g_signal_connect(G_OBJECT(file_lookup), "resolve\0", G_CALLBACK(ags_file_read_pattern_resolve_port), gobject); /* child elements */ child = node->children; while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(child->name, "ags-timestamp\0", 13)){ ags_file_read_timestamp(file, child, (AgsTimestamp **) &gobject->timestamp); }else if(!xmlStrncmp(child->name, "ags-pattern-data-list\0", 21)){ ags_file_read_pattern_data_list(file, child, gobject, gobject->dim[2]); } } child = child->next; } } void ags_file_read_pattern_resolve_port(AgsFileLookup *file_lookup, AgsPattern *pattern) { AgsFileIdRef *id_ref; gchar *xpath; xpath = (gchar *) xmlGetProp(file_lookup->node, "port\0"); id_ref = (AgsFileIdRef *) ags_file_find_id_ref_by_xpath(file_lookup->file, xpath); if(id_ref != NULL){ AgsPort *port; GValue value = {0,}; port = (AgsPort *) id_ref->ref; g_object_set(G_OBJECT(pattern), "port\0", (AgsPort *) port, NULL); g_value_init(&value, G_TYPE_OBJECT); g_value_set_object(&value, pattern); ags_port_safe_write(port, &value); } } xmlNode* ags_file_write_pattern(AgsFile *file, xmlNode *parent, AgsPattern *pattern) { AgsFileLookup *file_lookup; xmlNode *node, *child; xmlChar *content; gchar *id; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-pattern\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", pattern, NULL)); xmlNewProp(node, "dim-1st-level\0", g_strdup_printf("%d\0", pattern->dim[0])); xmlNewProp(node, "dim-2nd-level\0", g_strdup_printf("%d\0", pattern->dim[1])); xmlNewProp(node, "length\0", g_strdup_printf("%d\0", pattern->dim[2])); /* port */ file_lookup = (AgsFileLookup *) g_object_new(AGS_TYPE_FILE_LOOKUP, "file\0", file, "node\0", node, "reference\0", pattern, NULL); ags_file_add_lookup(file, (GObject *) file_lookup); g_signal_connect(G_OBJECT(file_lookup), "resolve\0", G_CALLBACK(ags_file_write_pattern_resolve_port), pattern); /* */ xmlAddChild(parent, node); /* child elements */ if(pattern->timestamp != NULL){ ags_file_write_timestamp(file, node, (AgsTimestamp *) pattern->timestamp); } ags_file_write_pattern_data_list(file, node, pattern, pattern->dim[2]); } void ags_file_write_pattern_resolve_port(AgsFileLookup *file_lookup, AgsPattern *pattern) { AgsFileIdRef *id_ref; gchar *id; if(pattern->port == NULL){ return; } id_ref = (AgsFileIdRef *) ags_file_find_id_ref_by_reference(file_lookup->file, pattern->port); id = xmlGetProp(id_ref->node, AGS_FILE_ID_PROP); xmlNewProp(file_lookup->node, "port\0", g_strdup_printf("xpath=//*[@id='%s']\0", id)); } void ags_file_read_pattern_list(AgsFile *file, xmlNode *node, GList **pattern) { AgsPattern *current; xmlNode *child; GList *list; child = node->children; if(*pattern == NULL){ list = NULL; }else{ list = *pattern; } while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(child->name, "ags-pattern\0", 12)){ if(*pattern == NULL){ current = NULL; }else{ current = list->data; } ags_file_read_pattern(file, child, ¤t); if(*pattern == NULL){ list = g_list_prepend(list, current); }else{ list = list->next; } } } child = child->next; } if(*pattern == NULL){ list = g_list_reverse(list); *pattern = list; } ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", list, NULL)); } xmlNode* ags_file_write_pattern_list(AgsFile *file, xmlNode *parent, GList *pattern) { xmlNode *node; GList *list; gchar *id; guint i; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-pattern-list\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", pattern, NULL)); xmlAddChild(parent, node); list = pattern; for(i = 0; list != NULL; i++){ ags_file_write_pattern(file, node, AGS_PATTERN(list->data)); list = list->next; } return(node); } void ags_file_read_pattern_data(AgsFile *file, xmlNode *node, AgsPattern *pattern, guint *i, guint *j, guint length) { xmlChar *content; xmlChar *coding; guint k; if(i != NULL){ *i = (guint) g_ascii_strtoull(xmlGetProp(node, "index-1st-level\0"), NULL, 10); } if(j != NULL){ *j = (guint) g_ascii_strtoull(xmlGetProp(node, "index-2nd-level\0"), NULL, 10); } ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", pattern->pattern[*i][*j], NULL)); content = xmlNodeGetContent(node); coding = xmlGetProp(node, "coding\0"); if(!xmlStrncmp(coding, "human readable\0", 14)){ for(k = 0; k < length; k++){ if(!g_strncasecmp(&(content[k]), "1\0", 1)){ ags_pattern_toggle_bit(pattern, *i, *j, k); } } }else{ g_warning("ags_file_read_pattern_data - unsupported coding: %s\0", coding); } } xmlNode* ags_file_write_pattern_data(AgsFile *file, xmlNode *parent, AgsPattern *pattern, guint i, guint j, guint length) { xmlNode *node; GString *content; gchar *id; guint k; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-pattern-data\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", pattern->pattern[i][j], NULL)); xmlNewProp(node, AGS_FILE_FLAGS_PROP, "0\0"); xmlNewProp(node, "index-1st-level\0", g_strdup_printf("%d\0", i)); xmlNewProp(node, "index-2nd-level\0", g_strdup_printf("%d\0", j)); xmlNewProp(node, "coding\0", "human readable\0"); content = g_string_sized_new(length + 1); for(k = 0; k < length; k++){ g_string_insert_c(content, k, (gchar) (ags_pattern_get_bit(pattern, i, j, k) ? '1': '0')); } g_string_insert_c(content, k, (gchar) '\0'); xmlNodeAddContent(node, BAD_CAST (content->str)); xmlAddChild(parent, node); return(node); } void ags_file_read_pattern_data_list(AgsFile *file, xmlNode *node, AgsPattern *pattern, guint length) { xmlNode *child; guint i, j; child = node->children; while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(child->name, "ags-pattern-data\0", 17)){ ags_file_read_pattern_data(file, child, pattern, &i, &j, length); } } child = child->next; } ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", pattern->pattern, NULL)); } xmlNode* ags_file_write_pattern_data_list(AgsFile *file, xmlNode *parent, AgsPattern *pattern, guint length) { xmlNode *node; GList *list; gchar *id; guint i, j; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-pattern-data-list\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", pattern->pattern, NULL)); xmlAddChild(parent, node); for(i = 0; i < pattern->dim[0]; i++){ for(j = 0; j < pattern->dim[1]; j++){ ags_file_write_pattern_data(file, node, pattern, i, j, length); } } return(node); } void ags_file_read_notation(AgsFile *file, xmlNode *node, AgsNotation **notation) { AgsNotation *gobject; AgsFileLookup *file_lookup; xmlNode *child; xmlChar *prop; xmlChar *str; if(*notation == NULL){ gobject = (AgsNotation *) g_object_new(AGS_TYPE_NOTATION, NULL); *notation = gobject; }else{ gobject = *notation; } ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", gobject, NULL)); gobject->flags = (guint) g_ascii_strtoull(xmlGetProp(node, AGS_FILE_FLAGS_PROP), NULL, 16); gobject->audio_channel = (guint) g_ascii_strtoull(xmlGetProp(node, "audio-channel\0"), NULL, 10); str = xmlGetProp(node, "key\0"); if(str == NULL){ str = "violine\0"; } g_free(gobject->key); gobject->key = g_strdup(str); str = xmlGetProp(node, "base-note\0"); if(str == NULL){ str = "A"; } g_free(gobject->base_note); gobject->base_note = g_strdup(str); str = xmlGetProp(node, "base-frequency\0"); if(str != NULL){ gchar *endptr; gobject->base_frequency = (gdouble) g_ascii_strtod(str, &endptr); } str = xmlGetProp(node, "tact\0"); if(str != NULL){ gobject->tact = (gdouble) g_ascii_strtod(str, NULL); }else{ gobject->tact = (1.0 / 16.0); } str = xmlGetProp(node, "bpm\0"); if(str != NULL){ gchar *endptr; gobject->bpm = (gdouble) g_ascii_strtod(str, &endptr); } str = xmlGetProp(node, "max-note-length\0"); if(str != NULL){ gchar *endptr; gobject->maximum_note_length = (gdouble) g_ascii_strtod(str, &endptr); }else{ gobject->maximum_note_length = 16.0; } prop = xmlGetProp(node, "loop-start\0"); if(prop != NULL){ gchar *endptr; gobject->start_loop = (gdouble) g_ascii_strtod(prop, &endptr); gobject->end_loop = (gdouble) g_ascii_strtod(xmlGetProp(node, "loop-end\0"), &endptr); } /* port */ file_lookup = (AgsFileLookup *) g_object_new(AGS_TYPE_FILE_LOOKUP, "file\0", file, "node\0", node, "reference\0", gobject, NULL); ags_file_add_lookup(file, (GObject *) file_lookup); g_signal_connect(G_OBJECT(file_lookup), "resolve\0", G_CALLBACK(ags_file_read_notation_resolve_port), gobject); /* child elements */ child = node->children; while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(child->name, "ags-timestamp\0", 13)){ ags_file_read_timestamp(file, child, (AgsTimestamp **) &gobject->timestamp); }else if(!xmlStrncmp(child->name, "ags-note-list\0", 13)){ ags_file_read_note_list(file, child, &gobject->notes); } } child = child->next; } } void ags_file_read_notation_resolve_port(AgsFileLookup *file_lookup, AgsNotation *notation) { AgsFileIdRef *id_ref; gchar *xpath; xpath = (gchar *) xmlGetProp(file_lookup->node, "port\0"); id_ref = (AgsFileIdRef *) ags_file_find_id_ref_by_xpath(file_lookup->file, xpath); if(id_ref != NULL){ AgsPort *port; GValue value = {0,}; port = (AgsPort *) id_ref->ref; g_object_set(G_OBJECT(notation), "port\0", port, NULL); g_value_init(&value, G_TYPE_OBJECT); g_value_set_object(&value, notation); ags_port_safe_write(port, &value); } } xmlNode* ags_file_write_notation(AgsFile *file, xmlNode *parent, AgsNotation *notation) { AgsFileLookup *file_lookup; xmlNode *node; gchar *id; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-notation\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", notation, NULL)); xmlNewProp(node, AGS_FILE_FLAGS_PROP, g_strdup_printf("%x\0", notation->flags)); xmlNewProp(node, "key\0", notation->key); xmlNewProp(node, "base-note\0", notation->base_note); xmlNewProp(node, "audio-channel\0", g_strdup_printf("%d\0", notation->audio_channel)); xmlNewProp(node, "base-frequency\0", g_strdup_printf("%f\0", notation->base_frequency)); xmlNewProp(node, "tact\0", g_strdup_printf("%f\0", notation->tact)); xmlNewProp(node, "bpm\0", g_strdup_printf("%f\0", notation->bpm)); xmlNewProp(node, "max-note-length\0", g_strdup_printf("%f\0", notation->maximum_note_length)); xmlNewProp(node, "loop-start\0", g_strdup_printf("%f\0", notation->start_loop)); xmlNewProp(node, "loop-end\0", g_strdup_printf("%f\0", notation->end_loop)); /* port */ file_lookup = (AgsFileLookup *) g_object_new(AGS_TYPE_FILE_LOOKUP, "file\0", file, "node\0", node, "reference\0", notation, NULL); ags_file_add_lookup(file, (GObject *) file_lookup); g_signal_connect(G_OBJECT(file_lookup), "resolve\0", G_CALLBACK(ags_file_write_notation_resolve_port), notation); /* */ xmlAddChild(parent, node); /* child elements */ ags_file_write_timestamp(file, node, (AgsTimestamp *) notation->timestamp); ags_file_write_note_list(file, node, notation->notes); } void ags_file_write_notation_resolve_port(AgsFileLookup *file_lookup, AgsNotation *notation) { AgsFileIdRef *id_ref; gchar *id; if(notation->port == NULL){ return; } id_ref = (AgsFileIdRef *) ags_file_find_id_ref_by_reference(file_lookup->file, notation->port); id = xmlGetProp(id_ref->node, AGS_FILE_ID_PROP); xmlNewProp(file_lookup->node, "port\0", g_strdup_printf("xpath=//*[@id='%s']\0", id)); } void ags_file_read_notation_list(AgsFile *file, xmlNode *node, GList **notation) { AgsNotation *current; xmlNode *child; GList *list; child = node->children; list = NULL; while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(child->name, "ags-notation\0", 13)){ current = NULL; ags_file_read_notation(file, child, ¤t); list = g_list_prepend(list, current); } } child = child->next; } list = g_list_reverse(list); *notation = list; ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", list, NULL)); } xmlNode* ags_file_write_notation_list(AgsFile *file, xmlNode *parent, GList *notation) { xmlNode *node; GList *list; gchar *id; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-notation-list\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", notation, NULL)); xmlAddChild(parent, node); list = notation; while(list != NULL){ ags_file_write_notation(file, node, AGS_NOTATION(list->data)); list = list->next; } return(node); } void ags_file_read_note(AgsFile *file, xmlNode *node, AgsNote **note) { AgsNote *gobject; xmlNode *child; xmlChar *str; if(*note == NULL){ gobject = (AgsNote *) g_object_new(AGS_TYPE_NOTE, NULL); *note = gobject; }else{ gobject = *note; } ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", gobject, NULL)); gobject->flags = (guint) g_ascii_strtoull(xmlGetProp(node, AGS_FILE_FLAGS_PROP), NULL, 16); gobject->x[0] = (guint) g_ascii_strtoull(xmlGetProp(node, "x0\0"), NULL, 10); gobject->x[1] = (guint) g_ascii_strtoull(xmlGetProp(node, "x1\0"), NULL, 10); gobject->y = (guint) g_ascii_strtoull(xmlGetProp(node, "y\0"), NULL, 10); gobject->name = g_strdup(xmlGetProp(node, "name\0")); str = xmlGetProp(node, "frequency\0"); if(str != NULL){ gchar *endptr; gobject->frequency = (gdouble) g_ascii_strtod(str, &endptr); } } xmlNode* ags_file_write_note(AgsFile *file, xmlNode *parent, AgsNote *note) { xmlNode *node; gchar *id; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-note\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", note, NULL)); xmlNewProp(node, AGS_FILE_FLAGS_PROP, g_strdup_printf("%x\0", note->flags)); xmlNewProp(node, "x0\0", g_strdup_printf("%d\0", note->x[0])); xmlNewProp(node, "x1\0", g_strdup_printf("%d\0", note->x[1])); xmlNewProp(node, "y\0", g_strdup_printf("%d\0", note->y)); xmlNewProp(node, "name\0", note->name); xmlNewProp(node, "frequency\0", g_strdup_printf("%f\0", note->frequency)); xmlAddChild(parent, node); return(node); } void ags_file_read_note_list(AgsFile *file, xmlNode *node, GList **note) { AgsNote *current; xmlNode *child; GList *list; child = node->children; list = NULL; while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(child->name, "ags-note\0", 9)){ current = NULL; ags_file_read_note(file, child, ¤t); list = g_list_prepend(list, current); } } child = child->next; } list = g_list_reverse(list); *note = list; ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", list, NULL)); } xmlNode* ags_file_write_note_list(AgsFile *file, xmlNode *parent, GList *note) { xmlNode *node; GList *list; gchar *id; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-note-list\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", note, NULL)); xmlAddChild(parent, node); list = note; while(list != NULL){ ags_file_write_note(file, node, AGS_NOTE(list->data)); list = list->next; } return(node); } void ags_file_read_task(AgsFile *file, xmlNode *node, AgsTask **task) { AgsTask *gobject; GParameter *parameter; xmlNode *child; xmlChar *type_name; guint n_params; static gboolean task_type_is_registered = FALSE; if(*task == NULL){ GType type; type_name = xmlGetProp(node, AGS_FILE_TYPE_PROP); if(!task_type_is_registered){ ags_main_register_task_type(); task_type_is_registered = TRUE; } type = g_type_from_name(type_name); gobject = g_object_new(type, NULL); *task = gobject; }else{ gobject = *task; } ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", gobject, NULL)); /* */ gobject->flags = (guint) g_ascii_strtoull(xmlGetProp(node, AGS_FILE_FLAGS_PROP), NULL, 16); gobject->name = (gchar *) xmlGetProp(node, "name\0"); gobject->delay = g_ascii_strtoull((gchar *) xmlGetProp(node, "delay\0"), NULL, 10); //TODO:JK: implement error message /* child elements */ child = node->children; while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(child->name, "ags-parameter\0", 13)){ AgsFileLookup *file_lookup; ags_file_util_read_parameter(file, child, NULL, ¶meter, &n_params, NULL); file_lookup = (AgsFileLookup *) g_object_new(AGS_TYPE_FILE_LOOKUP, "file\0", file, "node\0", node, "reference\0", parameter, NULL); ags_file_add_lookup(file, (GObject *) file_lookup); g_signal_connect_after(G_OBJECT(file_lookup), "resolve\0", G_CALLBACK(ags_file_read_task_resolve_parameter), gobject); } } child = child->next; } } void ags_file_read_task_resolve_parameter(AgsFileLookup *file_lookup, AgsTask *task) { GParameter *parameter; GParamSpec **param_spec; guint n_properties; guint i, j; parameter = (GParameter *) file_lookup->ref; param_spec = g_object_class_list_properties(G_OBJECT_GET_CLASS(task), &n_properties); for(i = 0, j = 0; i < n_properties; i++){ if(g_type_is_a(param_spec[i]->owner_type, AGS_TYPE_TASK)){ g_object_set_property(G_OBJECT(task), parameter[j].name, ¶meter[j].value); j++; } } } xmlNode* ags_file_write_task(AgsFile *file, xmlNode *parent, AgsTask *task) { AgsFileIdRef *id_ref; GParameter *parameter; GParamSpec **param_spec; xmlNode *node; gchar *id; guint n_properties, n_params; guint i, j; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-task\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", task, NULL)); xmlNewProp(node, AGS_FILE_TYPE_PROP, G_OBJECT_TYPE_NAME(task)); xmlNewProp(node, AGS_FILE_FLAGS_PROP, g_strdup_printf("%x\0", task->flags)); /* */ xmlNewProp(node, AGS_FILE_NAME_PROP, task->name); xmlNewProp(node, "delay\0", g_strdup_printf("%d\0", task->delay)); //TODO:JK: implement error message xmlAddChild(parent, node); /* child parameters */ param_spec = g_object_class_list_properties(G_OBJECT_GET_CLASS(task), &n_properties); parameter = NULL; for(i = 0, j = 0; i < n_properties; i++){ if(g_type_is_a(param_spec[i]->owner_type, AGS_TYPE_TASK)){ if(parameter == NULL){ parameter = (GParameter *) g_new(GParameter, 1); }else{ parameter = (GParameter *) g_renew(GParameter, parameter, (j + 1)); } parameter[j].name = param_spec[i]->name; g_object_get_property(G_OBJECT(task), param_spec[i]->name, &(parameter[j].value)); j++; } } n_params = j; ags_file_util_write_parameter(file, node, ags_id_generator_create_uuid(), parameter, n_params); return(node); } void ags_file_read_task_list(AgsFile *file, xmlNode *node, GList **task) { AgsTask *current; xmlNode *child; GList *list; child = node->children; list = NULL; while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(child->name, "ags-task\0", 9)){ current = NULL; ags_file_read_task(file, child, ¤t); list = g_list_prepend(list, current); } } child = child->next; } list = g_list_reverse(list); *task = list; ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", list, NULL)); } xmlNode* ags_file_write_task_list(AgsFile *file, xmlNode *parent, GList *task) { xmlNode *node; GList *list; gchar *id; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-task-list\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", task, NULL)); xmlAddChild(parent, node); list = task; while(list != NULL){ ags_file_write_task(file, node, AGS_TASK(list->data)); list = list->next; } return(node); } void ags_file_read_timestamp(AgsFile *file, xmlNode *node, AgsTimestamp **timestamp) { AgsTimestamp *gobject; xmlNode *child; if(*timestamp == NULL){ gobject = (AgsTimestamp *) g_object_new(AGS_TYPE_TIMESTAMP, NULL); *timestamp = gobject; }else{ gobject = *timestamp; } ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", gobject, NULL)); gobject->flags = (guint) g_ascii_strtoull(xmlGetProp(node, AGS_FILE_FLAGS_PROP), NULL, 16); gobject->delay = (guint) g_ascii_strtoull(xmlGetProp(node, "delay\0"), NULL, 10); gobject->attack = (guint) g_ascii_strtoull(xmlGetProp(node, "attack\0"), NULL, 10); gobject->timer.unix_time.time_val = (guint) g_ascii_strtoull(node->content, NULL, 10); } xmlNode* ags_file_write_timestamp(AgsFile *file, xmlNode *parent, AgsTimestamp *timestamp) { xmlNode *node; gchar *id; if(timestamp == NULL){ return; } id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-timestamp\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", timestamp, NULL)); xmlNewProp(node, AGS_FILE_FLAGS_PROP, g_strdup_printf("%x\0", timestamp->flags)); xmlNewProp(node, "delay\0", g_strdup_printf("%d\0", timestamp->delay)); xmlNewProp(node, "attack\0", g_strdup_printf("%d\0", timestamp->attack)); xmlAddChild(parent, node); xmlNodeAddContent(node, g_strdup_printf("%d\0", timestamp->timer.unix_time.time_val)); } void ags_file_read_timestamp_list(AgsFile *file, xmlNode *node, GList **timestamp) { AgsTimestamp *current; xmlNode *child; GList *list; child = node->children; list = NULL; while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(child->name, "ags-timestamp\0", 14)){ current = NULL; ags_file_read_timestamp(file, child, ¤t); list = g_list_prepend(list, current); } } child = child->next; } list = g_list_reverse(list); *timestamp = list; ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", list, NULL)); } xmlNode* ags_file_write_timestamp_list(AgsFile *file, xmlNode *parent, GList *timestamp) { xmlNode *node; GList *list; gchar *id; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-timestamp-list\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", timestamp, NULL)); xmlAddChild(parent, node); list = timestamp; while(list != NULL){ ags_file_write_timestamp(file, node, AGS_TIMESTAMP(list->data)); list = list->next; } return(node); } gsequencer-0.6.37/src/ags/file/ags_file_launch.c0000644000175000017500000001461012626447543016437 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include void ags_file_launch_class_init(AgsFileLaunchClass *file_launch); void ags_file_launch_init (AgsFileLaunch *file_launch); void ags_file_launch_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_file_launch_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_file_launch_finalize(GObject *gobject); /** * SECTION:ags_file_launch * @short_description: launch objects read of file. * @title: AgsFileLaunch * @section_id: * @include: ags/file/ags_file_launch.h * * The #AgsFileLaunch launches read objects of file. */ enum{ START, LAST_SIGNAL, }; enum{ PROP_0, PROP_NODE, PROP_FILE, PROP_MAIN, }; static gpointer ags_file_launch_parent_class = NULL; static guint file_launch_signals[LAST_SIGNAL]; GType ags_file_launch_get_type (void) { static GType ags_type_file_launch = 0; if(!ags_type_file_launch){ static const GTypeInfo ags_file_launch_info = { sizeof (AgsFileLaunchClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_file_launch_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsFileLaunch), 0, /* n_preallocs */ (GInstanceInitFunc) ags_file_launch_init, }; ags_type_file_launch = g_type_register_static(G_TYPE_OBJECT, "AgsFileLaunch\0", &ags_file_launch_info, 0); } return (ags_type_file_launch); } void ags_file_launch_class_init(AgsFileLaunchClass *file_launch) { GObjectClass *gobject; GParamSpec *param_spec; ags_file_launch_parent_class = g_type_class_peek_parent(file_launch); /* GObjectClass */ gobject = (GObjectClass *) file_launch; gobject->set_property = ags_file_launch_set_property; gobject->get_property = ags_file_launch_get_property; gobject->finalize = ags_file_launch_finalize; /* properties */ param_spec = g_param_spec_pointer("node\0", "the node\0", "The node to find the element\0", G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_NODE, param_spec); param_spec = g_param_spec_object("file\0", "file assigned to\0", "The entire file assigned to\0", G_TYPE_OBJECT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_FILE, param_spec); param_spec = g_param_spec_object("main\0", "main access\0", "The main object to access the tree\0", G_TYPE_OBJECT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_MAIN, param_spec); /* AgsFileLaunchClass */ file_launch->start = NULL; file_launch_signals[START] = g_signal_new("start\0", G_TYPE_FROM_CLASS(file_launch), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsFileLaunchClass, start), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); } void ags_file_launch_init(AgsFileLaunch *file_launch) { file_launch->ags_main = NULL; file_launch->node = NULL; file_launch->file = NULL; } void ags_file_launch_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsFileLaunch *file_launch; file_launch = AGS_FILE_LAUNCH(gobject); switch(prop_id){ case PROP_NODE: { xmlNode *node; node = (xmlNode *) g_value_get_pointer(value); file_launch->node = node; } break; case PROP_FILE: { GObject *file; file = (GObject *) g_value_get_object(value); if(file_launch->file != NULL) g_object_unref(file_launch->file); if(file != NULL) g_object_ref(file); file_launch->file = file; } break; case PROP_MAIN: { GObject *ags_main; ags_main = (GObject *) g_value_get_object(value); if(file_launch->ags_main != NULL) g_object_unref(file_launch->ags_main); if(ags_main != NULL) g_object_ref(ags_main); file_launch->ags_main = ags_main; } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_file_launch_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsFileLaunch *file_launch; file_launch = AGS_FILE_LAUNCH(gobject); switch(prop_id){ case PROP_NODE: { g_value_set_pointer(value, file_launch->node); } break; case PROP_FILE: { g_value_set_object(value, file_launch->file); } break; case PROP_MAIN: { g_value_set_object(value, file_launch->ags_main); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_file_launch_start(AgsFileLaunch *file_launch) { g_return_if_fail(AGS_IS_FILE_LAUNCH(file_launch)); g_object_ref((GObject *) file_launch); g_signal_emit(G_OBJECT(file_launch), file_launch_signals[START], 0); g_object_unref((GObject *) file_launch); } void ags_file_launch_finalize(GObject *gobject) { AgsFileLaunch *file_launch; file_launch = AGS_FILE_LAUNCH(gobject); if(file_launch->file != NULL){ g_object_unref(file_launch->file); } if(file_launch->ags_main != NULL){ g_object_unref(file_launch->ags_main); } G_OBJECT_CLASS(ags_file_launch_parent_class)->finalize(gobject); } /** * ags_file_launch_new: * * Creates an #AgsFileLaunch * * Returns: a new #AgsFileLaunch * * Since: 0.4 */ AgsFileLaunch* ags_file_launch_new() { AgsFileLaunch *file_launch; file_launch = (AgsFileLaunch *) g_object_new(AGS_TYPE_FILE_LAUNCH, NULL); return(file_launch); } gsequencer-0.6.37/src/ags/file/ags_file_util.c0000644000175000017500000007410112626447543016143 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include void ags_file_util_read_value_resolve(AgsFileLookup *file_lookup, GValue *value); void ags_file_util_write_value_resolve(AgsFileLookup *file_lookup, GValue *value); void ags_file_util_read_file_link_launch(AgsFileLaunch *file_launch, AgsFileLink *file_link); void ags_file_util_read_value(AgsFile *file, xmlNode *node, gchar **id, GValue *value, xmlChar **xpath) { AgsFileLookup *file_lookup; xmlChar *type_str; xmlChar *value_str; xmlChar *content; if(id != NULL) *id = xmlGetProp(node, AGS_FILE_ID_PROP); type_str = xmlGetProp(node, "type\0"); content = xmlNodeGetContent(node); if(value == NULL){ value = (GValue *) g_new0(GValue, 1); memset(value, 0, sizeof(GValue)); } if(!xmlStrncmp(type_str, AGS_FILE_BOOLEAN_PROP, 7)){ g_value_init(value, G_TYPE_BOOLEAN); g_value_set_boolean(value, ((!xmlStrncmp(content, AGS_FILE_TRUE, 5)) ? TRUE: FALSE)); if(xpath != NULL) *xpath = NULL; }else if(!xmlStrncmp(type_str, AGS_FILE_CHAR_PROP, 5)){ g_value_init(value, G_TYPE_CHAR); g_value_set_schar(value, content[0]); if(xpath != NULL) *xpath = NULL; }else if(!xmlStrncmp(type_str, AGS_FILE_INT64_PROP, 7)){ g_value_init(value, G_TYPE_INT64); g_value_set_int64(value, g_ascii_strtoll(content, NULL, 10)); if(xpath != NULL) *xpath = NULL; }else if(!xmlStrncmp(type_str, AGS_FILE_UINT64_PROP, 8)){ g_value_init(value, G_TYPE_UINT64); g_value_set_uint64(value, g_ascii_strtoull(content, NULL, 10)); if(xpath != NULL) *xpath = NULL; }else if(!xmlStrncmp(type_str, AGS_FILE_FLOAT_PROP, 6)){ g_value_init(value, G_TYPE_FLOAT); g_value_set_float(value, g_ascii_strtod(content, NULL)); if(xpath != NULL) *xpath = NULL; }else if(!xmlStrncmp(type_str, AGS_FILE_DOUBLE_PROP, 7)){ g_value_init(value, G_TYPE_DOUBLE); g_value_set_double(value, g_ascii_strtod(content, NULL)); if(xpath != NULL) *xpath = NULL; }else if(!xmlStrncmp(type_str, AGS_FILE_CHAR_POINTER_PROP, 13)){ g_value_init(value, G_TYPE_STRING); g_value_set_static_string(value, content); if(xpath != NULL) *xpath = NULL; }else if(!xmlStrncmp(type_str, AGS_FILE_BOOLEAN_POINTER_PROP, 14)){ gchar **str_arr, **str_iter; gboolean *arr; guint i; str_arr = g_strsplit(content, " \0", -1); g_value_init(value, G_TYPE_POINTER); arr = NULL; str_iter = str_arr; i = 0; while(*str_iter != NULL){ if(arr == NULL){ arr = (gboolean *) malloc(sizeof(gboolean)); }else{ arr = (gboolean *) realloc(arr, (i + 1) * sizeof(gboolean)); } if(!xmlStrcmp(*str_iter, AGS_FILE_TRUE)){ arr[i] = TRUE; }else{ arr[i] = FALSE; } str_iter++; i++; } g_value_set_pointer(value, (gpointer) arr); g_free(str_arr); if(xpath != NULL) *xpath = NULL; }else if(!xmlStrncmp(type_str, AGS_FILE_INT64_POINTER_PROP, 11)){ gchar **str_arr, **str_iter; gint64 *arr; guint i; str_arr = g_strsplit(content, " \0", -1); g_value_init(value, G_TYPE_POINTER); arr = NULL; str_iter = str_arr; i = 0; while(*str_iter != NULL){ if(arr == NULL){ arr = (gint64 *) malloc(sizeof(gint64)); }else{ arr = (gint64 *) realloc(arr, (i + 1) * sizeof(gint64)); } arr[i] = g_ascii_strtoll(*str_iter, NULL, 10); str_iter++; i++; } g_value_set_pointer(value, (gpointer) arr); g_free(str_arr); if(xpath != NULL) *xpath = NULL; }else if(!xmlStrncmp(type_str, AGS_FILE_UINT64_POINTER_PROP, 12)){ gchar **str_arr, **str_iter; guint64 *arr; guint i; str_arr = g_strsplit(content, " \0", -1); g_value_init(value, G_TYPE_POINTER); arr = NULL; str_iter = str_arr; i = 0; while(*str_iter != NULL){ if(arr == NULL){ arr = (guint64 *) malloc(sizeof(guint64)); }else{ arr = (guint64 *) realloc(arr, (i + 1) * sizeof(guint64)); } arr[i] = g_ascii_strtoll(*str_iter, NULL, 10); str_iter++; i++; } g_value_set_pointer(value, (gpointer) arr); g_free(str_arr); if(xpath != NULL) *xpath = NULL; }else if(!xmlStrncmp(type_str, AGS_FILE_FLOAT_POINTER_PROP, 14)){ gchar **str_arr, **str_iter; gfloat *arr; guint i; str_arr = g_strsplit(content, " \0", -1); g_value_init(value, G_TYPE_POINTER); arr = NULL; str_iter = str_arr; i = 0; while(*str_iter != NULL){ if(arr == NULL){ arr = (gfloat *) malloc(sizeof(gfloat)); }else{ arr = (gfloat *) realloc(arr, (i + 1) * sizeof(gfloat)); } arr[i] = g_ascii_strtod(*str_iter, NULL); str_iter++; i++; } g_value_set_pointer(value, (gpointer) arr); g_free(str_arr); if(xpath != NULL) *xpath = NULL; }else if(!xmlStrncmp(type_str, AGS_FILE_DOUBLE_POINTER_PROP, 15)){ gchar **str_arr, **str_iter; gdouble *arr; guint i; str_arr = g_strsplit(content, " \0", -1); g_value_init(value, G_TYPE_POINTER); arr = NULL; str_iter = str_arr; i = 0; while(*str_iter != NULL){ if(arr == NULL){ arr = (gdouble *) malloc(sizeof(gdouble)); }else{ arr = (gdouble *) realloc(arr, (i + 1) * sizeof(gdouble)); } arr[i] = g_ascii_strtod(*str_iter, NULL); str_iter++; i++; } g_value_set_pointer(value, (gpointer) arr); g_free(str_arr); if(xpath != NULL) *xpath = NULL; }else if(!xmlStrncmp(type_str, AGS_FILE_POINTER_PROP, 9)){ g_value_init(value, G_TYPE_POINTER); /* gpointer */ file_lookup = (AgsFileLookup *) g_object_new(AGS_TYPE_FILE_LOOKUP, "file\0", file, "node\0", node, "reference\0", value, NULL); ags_file_add_lookup(file, (GObject *) file_lookup); g_signal_connect(G_OBJECT(file_lookup), "resolve\0", G_CALLBACK(ags_file_util_read_value_resolve), value); /* xpath */ if(xpath != NULL) *xpath = xmlGetProp(node, "link\0"); }else if(!xmlStrncmp(type_str, AGS_FILE_OBJECT_PROP, 8)){ g_value_init(value, G_TYPE_OBJECT); /* GObject */ file_lookup = (AgsFileLookup *) g_object_new(AGS_TYPE_FILE_LOOKUP, "file\0", file, "node\0", node, "reference\0", value, NULL); ags_file_add_lookup(file, (GObject *) file_lookup); g_signal_connect(G_OBJECT(file_lookup), "resolve\0", G_CALLBACK(ags_file_util_read_value_resolve), value); /* xpath */ if(xpath != NULL) *xpath = xmlGetProp(node, "link\0"); }else{ g_warning("ags_file_util_read_value: unsupported type: %s\0", type_str); return; } } void ags_file_util_read_value_resolve(AgsFileLookup *file_lookup, GValue *value) { AgsFileIdRef *id_ref; gchar *xpath; xpath = (gchar *) xmlGetProp(file_lookup->node, "link\0"); if(xpath == NULL || value == NULL){ return; } id_ref = (AgsFileIdRef *) ags_file_find_id_ref_by_xpath(file_lookup->file, xpath); if(id_ref == NULL){ g_warning("can't resolve xpath: %s\0", xpath); return; } if(G_VALUE_HOLDS(value, G_TYPE_POINTER)){ g_value_set_pointer(value, (gpointer) id_ref->ref); }else if(G_VALUE_HOLDS(value, G_TYPE_OBJECT)){ g_value_set_object(value, (GObject *) id_ref->ref); }else if(G_VALUE_HOLDS(value, G_TYPE_STRING)){ g_value_set_string(value, (gchar *) id_ref->ref); }else{ g_warning("ags_file_util_read_value_resolve: unknown type of GValue %s\0", G_VALUE_TYPE_NAME(value)); } } xmlNode* ags_file_util_write_value(AgsFile *file, xmlNode *parent, gchar *id, GValue *value, GType pointer_type, guint array_length) { AgsFileLookup *file_lookup; xmlNode *node; xmlChar *type_str; xmlChar *content; if(value == NULL){ return; } node = xmlNewNode(NULL, "ags-value\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); content = NULL; switch(G_VALUE_TYPE(value)){ case G_TYPE_CHAR: { content = BAD_CAST g_strdup_printf("%c\0", g_value_get_schar(value)); type_str = AGS_FILE_CHAR_PROP; } break; case G_TYPE_BOOLEAN: { content = BAD_CAST g_strdup_printf("%s\0", ((g_value_get_boolean(value)) ? AGS_FILE_TRUE: AGS_FILE_FALSE)); type_str = AGS_FILE_BOOLEAN_PROP; } break; case G_TYPE_INT64: { content = BAD_CAST g_strdup_printf("%lld\0", g_value_get_int64(value)); type_str = AGS_FILE_INT64_PROP; } break; case G_TYPE_UINT64: { content = BAD_CAST g_strdup_printf("%lld\0", g_value_get_uint64(value)); type_str = AGS_FILE_UINT64_PROP; } break; case G_TYPE_FLOAT: { content = BAD_CAST g_strdup_printf("%f\0", g_value_get_float(value)); type_str = AGS_FILE_FLOAT_PROP; } break; case G_TYPE_DOUBLE: { content = BAD_CAST g_strdup_printf("%f\0", g_value_get_double(value)); type_str = AGS_FILE_DOUBLE_PROP; } break; case G_TYPE_STRING: { content = BAD_CAST g_strdup_printf("%s\0", g_value_get_string(value)); type_str = AGS_FILE_CHAR_POINTER_PROP; } break; case G_TYPE_POINTER: { gchar *str; guint i; if(pointer_type == G_TYPE_CHAR){ content = BAD_CAST g_strdup_printf("%s\0", g_value_get_string(value)); type_str = AGS_FILE_CHAR_POINTER_PROP; }else if(pointer_type == G_TYPE_INT64){ gint64 *arr; arr = (gint64 *) g_value_get_pointer(value); for(i = 0; i < array_length; i++){ if(i == 0){ content = g_strdup_printf("%d\0", arr[i]); }else{ str = content; content = g_strdup_printf("%s %d\0", str, arr[i]); g_free(str); } } type_str = AGS_FILE_INT64_POINTER_PROP; }else if(pointer_type == G_TYPE_UINT64){ guint64 *arr; arr = (guint64 *) g_value_get_pointer(value); for(i = 0; i < array_length; i++){ if(i == 0){ content = g_strdup_printf("%d\0", arr[i]); }else{ str = content; content = g_strdup_printf("%s %d\0", str, arr[i]); g_free(str); } } type_str = AGS_FILE_UINT64_POINTER_PROP; }else if(pointer_type == G_TYPE_FLOAT){ gfloat *arr; arr = (gfloat *) g_value_get_pointer(value); for(i = 0; i < array_length; i++){ if(i == 0){ content = g_strdup_printf("%f\0", arr[i]); }else{ str = content; content = g_strdup_printf("%s %f\0", str, arr[i]); g_free(str); } } type_str = AGS_FILE_DOUBLE_POINTER_PROP; }else if(pointer_type == G_TYPE_DOUBLE){ gdouble *arr; arr = (gdouble *) g_value_get_pointer(value); for(i = 0; i < array_length; i++){ if(i == 0){ content = g_strdup_printf("%f\0", arr[i]); }else{ str = content; content = g_strdup_printf("%s %f\0", str, arr[i]); g_free(str); } } type_str = AGS_FILE_DOUBLE_POINTER_PROP; }else{ file_lookup = (AgsFileLookup *) g_object_new(AGS_TYPE_FILE_LOOKUP, "file\0", file, "node\0", node, "reference\0", value, NULL); ags_file_add_lookup(file, (GObject *) file_lookup); g_signal_connect_after(G_OBJECT(file_lookup), "resolve\0", G_CALLBACK(ags_file_util_write_value_resolve), value); } type_str = AGS_FILE_POINTER_PROP; } break; case G_TYPE_OBJECT: { file_lookup = (AgsFileLookup *) g_object_new(AGS_TYPE_FILE_LOOKUP, "file\0", file, "node\0", node, "reference\0", value, NULL); ags_file_add_lookup(file, (GObject *) file_lookup); g_signal_connect_after(G_OBJECT(file_lookup), "resolve\0", G_CALLBACK(ags_file_util_write_value_resolve), value); type_str = AGS_FILE_OBJECT_PROP; } break; default: g_warning("ags_file_util_write_value %s\0", G_VALUE_TYPE_NAME(value)); } xmlNewProp(node, AGS_FILE_TYPE_PROP, type_str); xmlNodeSetContent(node, content); xmlAddChild(parent, node); return(node); } void ags_file_util_write_value_resolve(AgsFileLookup *file_lookup, GValue *value) { AgsFileIdRef *id_ref; gchar *id; id_ref = NULL; if(G_VALUE_HOLDS(value, G_TYPE_OBJECT)){ id_ref = (AgsFileIdRef *) ags_file_find_id_ref_by_reference(file_lookup->file, g_value_get_object(value)); }else if(G_VALUE_HOLDS(value, G_TYPE_POINTER)){ id_ref = (AgsFileIdRef *) ags_file_find_id_ref_by_reference(file_lookup->file, g_value_get_pointer(value)); } if(id_ref == NULL){ return; } id = xmlGetProp(id_ref->node, AGS_FILE_ID_PROP); xmlNewProp(file_lookup->node, "link\0", g_strdup_printf("xpath=//*[@id='%s']\0", id)); // g_value_unset(value); // g_free(value); } void ags_file_util_read_parameter(AgsFile *file, xmlNode *node, gchar **id, GParameter **parameter, gint *n_params, xmlChar ***xpath) { xmlNode *child; GParameter *parameter_arr; gchar **name_arr, **name_iter; xmlChar **xpath_arr, **xpath_iter; guint i; name_arr = g_strsplit(xmlGetProp(node, AGS_FILE_NAME_PROP), " \0", -1); parameter_arr = NULL; xpath_arr = NULL; /* */ name_iter = name_arr; child = node->children; i = 0; while(*name_iter != NULL && child != NULL){ if(child->type == XML_ELEMENT_NODE && !xmlStrncmp(child->name, "ags-value\0", 11)){ if(parameter_arr == NULL){ parameter_arr = (GParameter *) g_new(GParameter, 1); xpath_arr = (xmlChar **) malloc(sizeof(xmlChar *)); }else{ parameter_arr = (GParameter *) g_renew(GParameter, parameter_arr, i + 1); xpath_arr = (xmlChar **) realloc(xpath_arr, (i + 1) * sizeof(xmlChar *)); } name_iter++; i++; } child = child->next; } /* */ name_iter = name_arr; child = node->children; i = 0; while(*name_iter != NULL && child != NULL){ if(child->type == XML_ELEMENT_NODE && !xmlStrncmp(child->name, "ags-value\0", 11)){ xpath_iter = xpath_arr + i; parameter_arr[i].name = name_arr[i]; memset(&(parameter_arr[i].value), 0, sizeof(GValue)); ags_file_util_read_value(file, child, NULL, &(parameter_arr[i].value), (xmlChar **) &xpath_iter); name_iter++; i++; } child = child->next; } g_free(name_arr); if(id != NULL) *id = (gchar *) xmlGetProp(node, AGS_FILE_ID_PROP); if(parameter != NULL) *parameter = parameter_arr; else g_free(parameter); if(n_params != NULL) *n_params = i; if(xpath != NULL) *xpath = xpath_arr; else free(xpath_arr); } xmlNode* ags_file_util_write_parameter(AgsFile *file, xmlNode *parent, gchar *id, GParameter *parameter, gint n_params) { xmlNode *node; xmlChar *name, *old_name; gchar *child_id; guint i; if(parameter == NULL){ return; } node = xmlNewNode(NULL, "ags-parameter\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); name = NULL; for(i = 0; i < n_params; i++){ if(name == NULL){ name = g_strdup(parameter[i].name); }else{ old_name = name; name = (xmlChar *) g_strdup_printf("%s %s\0", name, parameter[i].name); free(old_name); } child_id = ags_id_generator_create_uuid(); ags_file_util_write_value(file, node, child_id, &(parameter[i].value), G_TYPE_NONE, 0); } xmlNewProp(node, AGS_FILE_NAME_PROP, name); xmlAddChild(parent, node); return(node); } void ags_file_util_read_dependency(AgsFile *file, xmlNode *node, gchar **id, gchar **name, xmlChar **xpath) { *id = xmlGetProp(node, AGS_FILE_ID_PROP); *name = xmlGetProp(node, AGS_FILE_NAME_PROP); *xpath = xmlGetProp(node, AGS_FILE_XPATH_PROP); } xmlNode* ags_file_util_write_dependency(AgsFile *file, xmlNode *parent, gchar *id, gchar *name, xmlChar *xpath) { xmlNode *node; node = xmlNewNode(NULL, "ags-dependency\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); xmlNewProp(node, AGS_FILE_NAME_PROP, name); xmlNewProp(node, AGS_FILE_XPATH_PROP, xpath); xmlAddChild(parent, node); return(node); } void ags_file_util_read_object(AgsFile *file, xmlNode *node, GObject **ptr) { GObject *gobject; xmlNode *child; if(ptr == NULL){ return; }else{ gobject = *ptr; } ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "node\0", node, "xpath\0", g_strdup_printf("xpath=//[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", gobject, NULL)); /* child elements */ child = node->children; while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(child->name, "ags-parameter\0", 14)){ GParameter *parameter; guint n_params; guint i; parameter = NULL; ags_file_util_read_parameter(file, child, NULL, ¶meter, &n_params, NULL); for(i = 0; i < n_params; i++){ g_object_set_property(gobject, parameter[i].name, &(parameter[i].value)); } }else if(!xmlStrncmp(child->name, "ags-widget\0", 11)){ ags_file_read_widget(file, child, gobject); } } child = child->next; } } xmlNode* ags_file_util_write_object(AgsFile *file, xmlNode *parent, GObject *gobject) { xmlNode *node; GParamSpec **param_spec; GParameter *parameter; gchar *id; guint n_properties; guint i; if(gobject == NULL){ return; } id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-object\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "node\0", node, "xpath\0", g_strdup_printf("xpath=//[@id='%s']\0", id), "reference\0", gobject, NULL)); xmlAddChild(parent, node); /* child elements */ param_spec = g_object_class_list_properties(G_OBJECT_GET_CLASS(gobject), &n_properties); parameter = NULL; for(i = 0; i < n_properties; i++){ if(parameter == NULL){ parameter = (GParameter *) g_new(GParameter, 1); }else{ parameter = (GParameter *) g_renew(GParameter, parameter, (i + 1)); } memset(¶meter[i].value, 0, sizeof(GValue)); g_value_init(¶meter[i].value, param_spec[i]->value_type); parameter[i].name = param_spec[i]->name; g_object_get_property(G_OBJECT(gobject), param_spec[i]->name, &(parameter[i].value)); } n_properties = i; ags_file_util_write_parameter(file, node, ags_id_generator_create_uuid(), parameter, n_properties); if(GTK_IS_WIDGET(gobject)){ ags_file_write_widget(file, node, GTK_WIDGET(gobject)); } return(node); } void ags_file_read_history(AgsFile *file, xmlNode *node, AgsHistory **history) { //TODO:JK: implement me } xmlNode* ags_file_write_history(AgsFile *file, xmlNode *parent, AgsHistory *history) { //TODO:JK: implement me } void ags_file_read_embedded_audio(AgsFile *file, xmlNode *node, gchar **embedded_audio) { gchar *data; xmlChar *content; if(*embedded_audio == NULL){ return; }else{ data = *embedded_audio; } ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", data, NULL)); content = node->content; *embedded_audio = content; } xmlNode* ags_file_write_embedded_audio(AgsFile *file, xmlNode *parent, gchar *embedded_audio) { xmlNode *node; gchar *id; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-embedded-audio\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", embedded_audio, NULL)); xmlNewProp(node, "encoding\0", g_strdup("base64\0")); xmlNewProp(node, "demuxer\0", g_strdup("raw\0")); xmlNodeSetContent(node, embedded_audio); xmlAddChild(parent, node); } void ags_file_read_embedded_audio_list(AgsFile *file, xmlNode *node, GList **embedded_audio) { gchar *current; GList *list; xmlNode *child; xmlChar *id; id = xmlGetProp(node, AGS_FILE_ID_PROP); child = node->children; list = NULL; while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(child->name, "ags-embedded-audio\0", 11)){ current = NULL; ags_file_read_embedded_audio(file, child, ¤t); list = g_list_prepend(list, current); } } child = child->next; } list = g_list_reverse(list); *embedded_audio = list; ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", list, NULL)); } xmlNode* ags_file_write_embedded_audio_list(AgsFile *file, xmlNode *parent, GList *embedded_audio) { gchar *current; xmlNode *node; GList *list; gchar *id; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-embedded-audio-list\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", list, NULL)); xmlAddChild(parent, node); list = embedded_audio; while(list != NULL){ ags_file_write_embedded_audio(file, node, (gchar *) list->data); list = list->next; } return(node); } void ags_file_read_file_link(AgsFile *file, xmlNode *node, AgsFileLink **file_link) { AgsFileLink *gobject; AgsFileLaunch *file_launch; xmlNode *child; if(*file_link == NULL){ gobject = g_object_new(AGS_TYPE_FILE_LINK, NULL); *file_link = gobject; }else{ gobject = *file_link; } ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", gobject, NULL)); file_launch = (AgsFileLaunch *) g_object_new(AGS_TYPE_FILE_LAUNCH, "file\0", file, "node\0", node, NULL); g_signal_connect(G_OBJECT(file_launch), "start\0", G_CALLBACK(ags_file_util_read_file_link_launch), gobject); ags_file_add_launch(file, (GObject *) file_launch); } void ags_file_util_read_file_link_launch(AgsFileLaunch *file_launch, AgsFileLink *file_link) { AgsFileIdRef *id_ref; AgsDevout *devout; AgsChannel *input; AgsAudioFile *audio_file; GList *audio_signal; xmlNode *node, *child; xmlChar *type; xmlChar *xpath; xmlChar *filename; xmlChar *encoding, *demuxer; xmlChar *str; guint audio_channel; node = file_launch->node; /* */ xpath = xmlGetProp(node, "devout\0"); str = xmlGetProp(node, "audio-channel\0"); if(str != NULL){ audio_channel = g_ascii_strtoull(str, NULL, 10); }else{ audio_channel = 0; } /* */ input = NULL; id_ref = (AgsFileIdRef *) ags_file_find_id_ref_by_node((AgsFile *) file_launch->file, node->parent->parent); if(id_ref != NULL){ input = (AgsChannel *) id_ref->ref; } devout = (AgsDevout *) AGS_AUDIO(input->audio)->devout; type = xmlGetProp(node, "type\0"); if(!xmlStrncmp(type, "url\0", 4)){ filename = xmlGetProp(node, "filename\0"); audio_file = ags_audio_file_new((gchar *) filename, devout, 0, AGS_AUDIO(input->audio)->audio_channels); ags_audio_file_open(audio_file); ags_audio_file_read_audio_signal(audio_file); audio_signal = g_list_nth(audio_file->audio_signal, audio_channel); if(audio_signal == NULL){ return; } AGS_AUDIO_SIGNAL(audio_signal->data)->flags |= AGS_AUDIO_SIGNAL_TEMPLATE; if(input->link != NULL){ GError *error; error = NULL; ags_channel_set_link(input, NULL, &error); g_object_set(G_OBJECT(input), "file-link", g_object_new(AGS_TYPE_FILE_LINK, "filename\0", filename, NULL), NULL); if(error != NULL){ g_warning("%s\0", error->message); } }else{ g_object_set(G_OBJECT(input), "file-link", g_object_new(AGS_TYPE_FILE_LINK, "filename\0", filename, NULL), NULL); } ags_recycling_add_audio_signal(input->first_recycling, AGS_AUDIO_SIGNAL(audio_signal->data)); }else if(!xmlStrncmp(type, "embedded\0", 9)){ xmlXPathContext *xpath_context; xmlXPathObject *xpath_object; /* */ xpath_context = xmlXPathNewContext(AGS_FILE(file_launch->file)->doc); // xmlXPathSetContextNode(node, // xpath_context); xpath_context->node = node; xpath_object = xmlXPathEval("./ags-embedded-audio\0", xpath_context); child = NULL; if(xpath_object->nodesetval != NULL && xpath_object->nodesetval->nodeTab != NULL){ guint i; for(i = 0; i < xpath_object->nodesetval->nodeNr; i++){ if(xpath_object->nodesetval->nodeTab[i]->type == XML_ELEMENT_NODE){ break; } } child = xpath_object->nodesetval->nodeTab[i]; } /**/ encoding = xmlGetProp(child, "encoding\0"); demuxer = xmlGetProp(child, "demuxer\0"); if(!xmlStrncmp(encoding, "base64\0", 7)){ if(!xmlStrncmp(demuxer, "raw\0", 4)){ gchar *data; audio_file = ags_audio_file_new(NULL, devout, 0, AGS_AUDIO(input->audio)->audio_channels); data = child->content; ags_audio_file_open_from_data(audio_file, data); ags_audio_file_read_audio_signal(audio_file); audio_signal = audio_file->audio_signal; if(audio_signal == NULL){ return; } ags_recycling_add_audio_signal(input->first_recycling, AGS_AUDIO_SIGNAL(audio_signal->data)); } } } } xmlNode* ags_file_write_file_link(AgsFile *file, xmlNode *parent, AgsFileLink *file_link) { xmlNode *node; gchar *id; gchar *filename; if(file_link == NULL){ return; } id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-file-link\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", file_link, NULL)); xmlNewProp(node, "type\0", g_strdup("url\0")); if(file_link->filename != NULL){ g_message("XML outputting: %s\0", file_link->filename); xmlNewProp(node, "filename\0", g_strdup(file_link->filename)); xmlNewProp(node, "audio-channel\0", g_strdup_printf("%d\0", file_link->audio_channel)); }else{ xmlNewProp(node, "filename\0", g_strdup("(null)\0")); } xmlNewProp(node, "delay\0", g_strdup_printf("%d\0", 0)); if((AGS_FILE_WRITE_EMBEDDED_AUDIO & (file->flags)) != 0){ //TODO:JK: implement me } xmlAddChild(parent, node); } void ags_file_read_file_link_list(AgsFile *file, xmlNode *node, GList **file_link) { AgsFileLink *current; GList *list; xmlNode *child; xmlChar *id; id = xmlGetProp(node, AGS_FILE_ID_PROP); child = node->children; list = NULL; while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(child->name, "ags-file-link\0", 11)){ current = NULL; ags_file_read_file_link(file, child, ¤t); list = g_list_prepend(list, current); } } child = child->next; } list = g_list_reverse(list); *file_link = list; ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", list, NULL)); } xmlNode* ags_file_write_file_link_list(AgsFile *file, xmlNode *parent, GList *file_link) { AgsFileLink *current; xmlNode *node; GList *list; gchar *id; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-file-link-list\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", list, NULL)); xmlAddChild(parent, node); list = file_link; while(list != NULL){ ags_file_write_file_link(file, node, AGS_FILE_LINK(list->data)); list = list->next; } return(node); } gsequencer-0.6.37/src/ags/file/ags_file_stock.h0000644000175000017500000000626612626447543016325 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_FILE_STOCK_H__ #define __AGS_FILE_STOCK_H__ #include #include #include #include #include #include #include #include #include #define AGS_FILE_DEFAULT_VERSION "0.4.2\0" #define AGS_FILE_EFFECTS_DEFAULT_VERSION "0.4.2\0" #define AGS_CLIPBOARD_DEFAULT_VERSION "0.4.2\0" #define AGS_FILE_FALSE "FALSE\0" #define AGS_FILE_TRUE "TRUE\0" #define AGS_FILE_BOOLEAN_PROP "gboolean\0" #define AGS_FILE_CHAR_PROP "gchar\0" #define AGS_FILE_INT64_PROP "gint64\0" #define AGS_FILE_UINT64_PROP "guint64\0" #define AGS_FILE_FLOAT_PROP "gfloat\0" #define AGS_FILE_DOUBLE_PROP "gdouble\0" #define AGS_FILE_POINTER_PROP "gpointer\0" #define AGS_FILE_OBJECT_PROP "GObject\0" #define AGS_FILE_BOOLEAN_POINTER_PROP "gboolean-pointer\0" #define AGS_FILE_CHAR_POINTER_PROP "gchar-pointer\0" #define AGS_FILE_INT64_POINTER_PROP "gint64-pointer\0" #define AGS_FILE_UINT64_POINTER_PROP "guint64-pointer\0" #define AGS_FILE_FLOAT_POINTER_PROP "gfloat-pointer\0" #define AGS_FILE_DOUBLE_POINTER_PROP "gdouble-pointer\0" #define AGS_FILE_ID_PROP "id\0" #define AGS_FILE_NAME_PROP "name\0" #define AGS_FILE_TYPE_PROP "type\0" #define AGS_FILE_SCOPE_PROP "scope\0" #define AGS_FILE_VERSION_PROP "version\0" #define AGS_FILE_BUILD_ID_PROP "build-id\0" #define AGS_FILE_XPATH_PROP "xpath\0" #define AGS_FILE_FLAGS_PROP "flags\0" #define AGS_FILE_DYNAMIC_WIDGET_LED (g_type_name(AgsTypeLed)) #define AGS_FILE_DYNAMIC_WIDGET_VINDICATOR (g_type_name(AgsTypeVIndicator)) #define AGS_FILE_DYNAMIC_WIDGET_HINDICATOR (g_type_name(AgsTypeHIndicator)) #define AGS_FILE_DYNAMIC_WIDGET_LABEL (g_type_name(GtkTypeLabel)) #define AGS_FILE_DYNAMIC_WIDGET_WAVEFORM (g_type_name(AgsTypeWaveform)) #define AGS_FILE_DYNAMIC_WIDGET_BUTTON (g_type_name(GtkTypeButton)) #define AGS_FILE_DYNAMIC_WIDGET_TOGGLE_BUTTON (g_type_name(GtkTypeToggleButton)) #define AGS_FILE_DYNAMIC_WIDGET_CHECK_BUTTON (g_type_name(GtkTypeCheckButton)) #define AGS_FILE_DYNAMIC_WIDGET_SPIN_BUTTON (g_type_name(GtkTypeSpinButton)) #define AGS_FILE_DYNAMIC_WIDGET_VSCALE (g_type_name(GtkTypeVScale)) #define AGS_FILE_DYNAMIC_WIDGET_HSCALE (g_type_name(GtkTypeHScale)) #define AGS_FILE_DYNAMIC_WIDGET_DIAL (g_type_name(AgsTypeDial)) #define AGS_FILE_DYNAMIC_WIDGET_CARTESIAN (g_type_name(GtkTypeCartesian)) #endif /*__AGS_FILE_STOCK_H__*/ gsequencer-0.6.37/src/ags/file/ags_file_write.h0000644000175000017500000000346712626447543016334 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_FILE_WRITE_H__ #define __AGS_FILE_WRITE_H__ #include #include #include #include #define AGS_TYPE_FILE_WRITE (ags_file_write_get_type()) #define AGS_FILE_WRITE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_FILE_WRITE, AgsFileWrite)) #define AGS_FILE_WRITE_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_FILE_WRITE, AgsFileWriteClass)) #define AGS_IS_FILE_WRITE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_FILE_WRITE)) #define AGS_IS_FILE_WRITE_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_FILE_WRITE)) #define AGS_FILE_WRITE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_FILE_WRITE, AgsFileWriteClass)) typedef struct _AgsFileWrite AgsFileWrite; typedef struct _AgsFileWriteClass AgsFileWriteClass; struct _AgsFileWrite { GObject object; }; struct _AgsFileWriteClass { GObjectClass object; }; GType ags_file_write_get_type(void); AgsFileWrite* ags_file_write_new(); #endif /*__AGS_FILE_WRITE_H__*/ gsequencer-0.6.37/src/ags/file/ags_file_read.h0000644000175000017500000000343412626447543016107 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_FILE_READ_H__ #define __AGS_FILE_READ_H__ #include #include #include #include #define AGS_TYPE_FILE_READ (ags_file_read_get_type()) #define AGS_FILE_READ(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_FILE_READ, AgsFileRead)) #define AGS_FILE_READ_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_FILE_READ, AgsFileReadClass)) #define AGS_IS_FILE_READ(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_FILE_READ)) #define AGS_IS_FILE_READ_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_FILE_READ)) #define AGS_FILE_READ_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_FILE_READ, AgsFileReadClass)) typedef struct _AgsFileRead AgsFileRead; typedef struct _AgsFileReadClass AgsFileReadClass; struct _AgsFileRead { GObject object; }; struct _AgsFileReadClass { GObjectClass object; }; GType ags_file_read_get_type(void); AgsFileRead* ags_file_read_new(); #endif /*__AGS_FILE_READ_H__*/ gsequencer-0.6.37/src/ags/file/ags_file_thread.c0000644000175000017500000003473112626611612016430 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include void ags_file_read_thread_start(AgsFileLaunch *file_launch, AgsThread *thread); void ags_file_read_thread_resolve_devout(AgsFileLookup *file_lookup, AgsThread *thread); void ags_file_write_thread_resolve_devout(AgsFileLookup *file_lookup, AgsThread *thread); void ags_file_read_thread_pool_start(AgsFileLaunch *file_launch, AgsThreadPool *thread_pool); void ags_file_read_thread(AgsFile *file, xmlNode *node, AgsThread **thread) { AgsFileLookup *file_lookup; AgsFileLaunch *file_launch; AgsThread *gobject; xmlNode *child; xmlChar *type_name; static gboolean thread_type_is_registered = FALSE; if(*thread != NULL && AGS_IS_RETURNABLE_THREAD(*thread)){ return; } if(*thread == NULL){ GType type; if(!thread_type_is_registered){ ags_main_register_thread_type(); thread_type_is_registered = TRUE; } type_name = xmlGetProp(node, AGS_FILE_TYPE_PROP); type = g_type_from_name(type_name); if(g_type_is_a(type, AGS_TYPE_RETURNABLE_THREAD) || g_type_is_a(type, AGS_TYPE_AUDIO_THREAD) || g_type_is_a(type, AGS_TYPE_CHANNEL_THREAD)){ return; } gobject = g_object_new(type, NULL); *thread = gobject; }else{ gobject = *thread; } ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", gobject, NULL)); g_atomic_int_set(&(gobject->flags), ((~(AGS_THREAD_WAIT_0 | AGS_THREAD_WAIT_1 | AGS_THREAD_WAIT_2 | AGS_THREAD_RUNNING)) & (guint) g_ascii_strtoull(xmlGetProp(node, AGS_FILE_FLAGS_PROP), NULL, 16))); /* start */ if((AGS_THREAD_RUNNING & (g_atomic_int_get(&(gobject->flags)))) != 0){ //FIXME:JK: workaround file setting AGS_THREAD_RUNNING is just ignored if(AGS_IS_AUDIO_LOOP(gobject)){ // file_launch = (AgsFileLaunch *) g_object_new(AGS_TYPE_FILE_LAUNCH, // NULL); // ags_file_add_launch(file, (GObject *) file_launch); // g_signal_connect(G_OBJECT(file_launch), "start\0", // G_CALLBACK(ags_file_read_thread_start), gobject); } } /* devout */ file_lookup = (AgsFileLookup *) g_object_new(AGS_TYPE_FILE_LOOKUP, "file\0", file, "node\0", node, "reference\0", gobject, NULL); ags_file_add_lookup(file, (GObject *) file_lookup); g_signal_connect(G_OBJECT(file_lookup), "resolve\0", G_CALLBACK(ags_file_read_thread_resolve_devout), gobject); /* read children */ child = node->children; while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(child->name, "ags-thread-list\0", 16)){ if(AGS_IS_AUDIO_LOOP(gobject)){ AgsThread *async_queue; AgsThread *devout_thread; AgsThread *gui_thread; AgsThread *timestamp_thread; AgsThread *export_thread; xmlXPathContext *xpath_context; xmlXPathObject *xpath_object; /* task thread */ async_queue = NULL; xpath_context = xmlXPathNewContext(file->doc); xpath_context->node = child; // xmlXPathSetContextNode(child, // xpath_context); xpath_object = xmlXPathCompiledEval(xmlXPathCompile("./ags-thread[@type='AgsTaskThread']\0"), xpath_context); // xmlXPathNodeEval(child, // "./ags-thread[@type='AgsTaskThread']\0", // xpath_context); ags_file_read_thread(file, xpath_object->nodesetval->nodeTab[0], &(async_queue)); AGS_AUDIO_LOOP(gobject)->async_queue = async_queue; ags_thread_add_child_extended(gobject, async_queue, TRUE, TRUE); /* devout thread */ devout_thread = NULL; xpath_context = xmlXPathNewContext(file->doc); xpath_context->node = child; xpath_object = xmlXPathCompiledEval(xmlXPathCompile("./ags-thread[@type='AgsDevoutThread']\0"), xpath_context); ags_file_read_thread(file, xpath_object->nodesetval->nodeTab[0], &(devout_thread)); ags_thread_add_child_extended(gobject, devout_thread, TRUE, TRUE); /* timestamp thread */ timestamp_thread = NULL; xpath_context = xmlXPathNewContext(file->doc); xpath_context->node = child; xpath_object = xmlXPathCompiledEval(xmlXPathCompile("./ags-thread[@type='AgsDevoutThread']/ags-thread-list/ags-thread[@type='AgsTimestampThread']\0"), xpath_context); ags_file_read_thread(file, xpath_object->nodesetval->nodeTab[0], &(timestamp_thread)); ags_thread_add_child_extended(devout_thread, timestamp_thread, TRUE, TRUE); /* gui thread */ gui_thread = NULL; xpath_context = xmlXPathNewContext(file->doc); xpath_context->node = child; xpath_object = xmlXPathCompiledEval(xmlXPathCompile("./ags-thread[@type='AgsGuiThread']\0"), xpath_context); ags_file_read_thread(file, xpath_object->nodesetval->nodeTab[0], &(gui_thread)); ags_thread_add_child_extended(gobject, gui_thread, TRUE, TRUE); /* export thread */ export_thread = NULL; xpath_context = xmlXPathNewContext(file->doc); xpath_context->node = child; xpath_object = xmlXPathCompiledEval(xmlXPathCompile("./ags-thread[@type='AgsExportThread']\0"), xpath_context); ags_file_read_thread(file, xpath_object->nodesetval->nodeTab[0], &(export_thread)); ags_thread_add_child_extended(gobject, export_thread, TRUE, TRUE); }else{ GList *list; list = NULL; //FIXME:JK: buggy // ags_file_read_thread_list(file, // child, // &list); // while(list != NULL){ // ags_thread_add_child(gobject, // list->data); // list = list->next; // } } }else if(!xmlStrncmp(child->name, "ags-audio-loop\0", 15)){ ags_file_read_audio_loop(file, child, AGS_AUDIO_LOOP(gobject)); } } child = child->next; } } void ags_file_read_thread_resolve_devout(AgsFileLookup *file_lookup, AgsThread *thread) { AgsFileIdRef *id_ref; gchar *xpath; xpath = (gchar *) xmlGetProp(file_lookup->node, "devout\0"); id_ref = (AgsFileIdRef *) ags_file_find_id_ref_by_xpath(file_lookup->file, xpath); if(id_ref != NULL){ g_object_set(G_OBJECT(thread), "devout\0", id_ref->ref, NULL); } } void ags_file_read_thread_start(AgsFileLaunch *file_launch, AgsThread *thread) { ags_thread_start(thread); /* wait thread */ pthread_mutex_lock(thread->start_mutex); g_atomic_int_set(&(thread->start_wait), TRUE); if(g_atomic_int_get(&(thread->start_wait)) == TRUE && g_atomic_int_get(&(thread->start_done)) == FALSE){ while(g_atomic_int_get(&(thread->start_wait)) == TRUE && g_atomic_int_get(&(thread->start_done)) == FALSE){ pthread_cond_wait(thread->start_cond, thread->start_mutex); } } pthread_mutex_unlock(thread->start_mutex); } xmlNode* ags_file_write_thread(AgsFile *file, xmlNode *parent, AgsThread *thread) { AgsFileLookup *file_lookup; AgsThread *current; xmlNode *node, *child; gchar *id; if(AGS_IS_RETURNABLE_THREAD(thread)){ return; } id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-thread\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", thread, NULL)); xmlNewProp(node, AGS_FILE_TYPE_PROP, G_OBJECT_TYPE_NAME(thread)); xmlNewProp(node, AGS_FILE_FLAGS_PROP, g_strdup_printf("%x\0", thread->flags)); /* devout */ file_lookup = (AgsFileLookup *) g_object_new(AGS_TYPE_FILE_LOOKUP, "file\0", file, "node\0", node, "reference\0", thread, NULL); ags_file_add_lookup(file, (GObject *) file_lookup); g_signal_connect(G_OBJECT(file_lookup), "resolve\0", G_CALLBACK(ags_file_write_thread_resolve_devout), thread); xmlAddChild(parent, node); /* child elements */ if(AGS_IS_AUDIO_LOOP(thread)){ ags_file_write_audio_loop(file, node, AGS_AUDIO_LOOP(thread)); } current = thread->children; child = xmlNewNode(NULL, "ags-thread-list\0"); xmlAddChild(node, child); while(current != NULL){ ags_file_write_thread(file, child, current); current = current->next; } } void ags_file_write_thread_resolve_devout(AgsFileLookup *file_lookup, AgsThread *thread) { AgsFileIdRef *id_ref; gchar *id; id_ref = (AgsFileIdRef *) ags_file_find_id_ref_by_reference(file_lookup->file, thread->devout); id = xmlGetProp(id_ref->node, AGS_FILE_ID_PROP); xmlNewProp(file_lookup->node, "devout\0", g_strdup_printf("xpath=//ags-devout[@id='%s']\0", id)); } void ags_file_read_thread_list(AgsFile *file, xmlNode *node, GList **thread) { AgsThread *current; GList *list; xmlNode *child; xmlChar *id; id = xmlGetProp(node, AGS_FILE_ID_PROP); child = node->children; list = NULL; while(child != NULL){ if(child->type == XML_ELEMENT_NODE){ if(!xmlStrncmp(child->name, "ags-thread\0", 11)){ current = NULL; ags_file_read_thread(file, child, ¤t); list = g_list_prepend(list, current); } } child = child->next; } // list = g_list_reverse(list); *thread = list; ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", list, NULL)); } xmlNode* ags_file_write_thread_list(AgsFile *file, xmlNode *parent, GList *thread) { AgsThread *current; xmlNode *node; GList *list; gchar *id; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-thread-list\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", list, NULL)); xmlAddChild(parent, node); //TODO:JK: generate id and add id ref list = thread; while(list != NULL){ ags_file_write_thread(file, node, AGS_THREAD(list->data)); list = list->next; } return(node); } void ags_file_read_thread_pool(AgsFile *file, xmlNode *node, AgsThreadPool **thread_pool) { AgsThreadPool *gobject; AgsFileLookup *file_lookup; xmlNode *child; xmlChar *prop, *content; if(*thread_pool == NULL){ gobject = g_object_new(AGS_TYPE_THREAD_POOL, NULL); *thread_pool = gobject; }else{ gobject = *thread_pool; } //TODO:JK: implement me // g_object_set(G_OBJECT(gobject), // "ags-main\0", file->ags_main, // NULL); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", gobject, NULL)); gobject->flags = (guint) g_ascii_strtoull(xmlGetProp(node, AGS_FILE_FLAGS_PROP), NULL, 16); } xmlNode* ags_file_write_thread_pool(AgsFile *file, xmlNode *parent, AgsThreadPool *thread_pool) { AgsFileLookup *file_lookup; xmlNode *node, *child; gchar *id; guint i; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-thread_pool\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", thread_pool, NULL)); xmlNewProp(node, AGS_FILE_FLAGS_PROP, g_strdup_printf("%x\0", thread_pool->flags)); } void ags_file_read_thread_pool_start(AgsFileLaunch *file_launch, AgsThreadPool *thread_pool) { ags_thread_pool_start(thread_pool); } void ags_file_read_audio_loop(AgsFile *file, xmlNode *node, AgsAudioLoop *audio_loop) { xmlNode *child; audio_loop = AGS_AUDIO_LOOP(audio_loop); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", xmlGetProp(node, AGS_FILE_ID_PROP)), "reference\0", audio_loop, NULL)); } xmlNode* ags_file_write_audio_loop(AgsFile *file, xmlNode *parent, AgsAudioLoop *audio_loop) { xmlNode *node; gchar *id; id = ags_id_generator_create_uuid(); node = xmlNewNode(NULL, "ags-audio-loop\0"); xmlNewProp(node, AGS_FILE_ID_PROP, id); ags_file_add_id_ref(file, g_object_new(AGS_TYPE_FILE_ID_REF, "main\0", file->ags_main, "file\0", file, "node\0", node, "xpath\0", g_strdup_printf("xpath=//*[@id='%s']\0", id), "reference\0", audio_loop, NULL)); xmlAddChild(parent, node); } gsequencer-0.6.37/src/ags/file/ags_file_link.c0000644000175000017500000001417412626447543016127 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include void ags_file_link_class_init(AgsFileLinkClass *file_link); void ags_file_link_init(AgsFileLink *file_link); void ags_file_link_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_file_link_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_file_link_finalize(GObject *gobject); /** * SECTION:ags_file_link * @short_description: link objects read of file. * @title: AgsFileLink * @section_id: * @include: ags/file/ags_file_link.h * * The #AgsFileLink links read objects of file. */ enum{ PROP_0, PROP_FILENAME, PROP_AUDIO_CHANNEL, PROP_DATA, PROP_TIMESTAMP, }; static gpointer ags_file_link_parent_class = NULL; GType ags_file_link_get_type() { static GType ags_type_file_link = 0; if(!ags_type_file_link){ static const GTypeInfo ags_file_link_info = { sizeof (AgsFileLinkClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_file_link_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsFileLink), 0, /* n_preallocs */ (GInstanceInitFunc) ags_file_link_init, }; ags_type_file_link = g_type_register_static(G_TYPE_OBJECT, "AgsFileLink\0", &ags_file_link_info, 0); } return (ags_type_file_link); } void ags_file_link_class_init(AgsFileLinkClass *file_link) { GObjectClass *gobject; GParamSpec *param_spec; ags_file_link_parent_class = g_type_class_peek_parent(file_link); /* GObjectClass */ gobject = (GObjectClass *) file_link; gobject->set_property = ags_file_link_set_property; gobject->get_property = ags_file_link_get_property; gobject->finalize = ags_file_link_finalize; /* properties */ param_spec = g_param_spec_string("filename\0", "the filename\0", "The filename to locate the file\0", NULL, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_FILENAME, param_spec); param_spec = g_param_spec_uint("audio-channel\0", "audio channel to read\0", "The selected audio channel to read\0", 0, 256, 0, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_AUDIO_CHANNEL, param_spec); param_spec = g_param_spec_string("data\0", "the data\0", "The embedded data\0", NULL, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_DATA, param_spec); param_spec = g_param_spec_object("timestamp\0", "timestamp\0", "The timestamp\0", G_TYPE_OBJECT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_TIMESTAMP, param_spec); } void ags_file_link_init(AgsFileLink *file_link) { file_link->filename = NULL; file_link->audio_channel = 0; file_link->data = NULL; file_link->timestamp = NULL; } void ags_file_link_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsFileLink *file_link; file_link = AGS_FILE_LINK(gobject); switch(prop_id){ case PROP_FILENAME: { char *filename; filename = (char *) g_value_get_string(value); if(filename == file_link->filename){ return; } file_link->filename = g_strdup(filename); } break; case PROP_AUDIO_CHANNEL: { file_link->audio_channel = g_value_get_uint(value); } break; case PROP_DATA: { char *data; data = (char *) g_value_get_string(value); if(data == file_link->data){ return; } file_link->data = data; } break; case PROP_TIMESTAMP: { GObject *timestamp; timestamp = (GObject *) g_value_get_object(value); if((AgsTimestamp *) timestamp == file_link->timestamp){ return; } if(file_link->timestamp != NULL){ g_object_unref(file_link->timestamp); } if(timestamp != NULL){ g_object_ref(timestamp); } file_link->timestamp = (AgsTimestamp *) timestamp; } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_file_link_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsFileLink *file_link; file_link = AGS_FILE_LINK(gobject); switch(prop_id){ case PROP_FILENAME: { g_value_set_string(value, file_link->filename); } break; case PROP_AUDIO_CHANNEL: { g_value_set_uint(value, file_link->audio_channel); } break; case PROP_DATA: { g_value_set_string(value, file_link->data); } break; case PROP_TIMESTAMP: { g_value_set_object(value, file_link->timestamp); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_file_link_finalize(GObject *gobject) { AgsFileLink *file_link; file_link = AGS_FILE_LINK(gobject); if(file_link->timestamp != NULL){ g_object_unref(file_link->timestamp); } } /** * ags_file_link_new: * * Creates an #AgsFileLink * * Returns: a new #AgsFileLink * * Since: 0.4 */ AgsFileLink* ags_file_link_new() { AgsFileLink *file_link; file_link = (AgsFileLink *) g_object_new(AGS_TYPE_FILE_LINK, NULL); return(file_link); } gsequencer-0.6.37/src/ags/file/ags_file_launch.h0000644000175000017500000000374412626447543016452 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_FILE_LAUNCH_H__ #define __AGS_FILE_LAUNCH_H__ #include #include #include #define AGS_TYPE_FILE_LAUNCH (ags_file_launch_get_type()) #define AGS_FILE_LAUNCH(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_FILE_LAUNCH, AgsFileLaunch)) #define AGS_FILE_LAUNCH_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_FILE_LAUNCH, AgsFileLaunchClass)) #define AGS_IS_FILE_LAUNCH(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_FILE_LAUNCH)) #define AGS_IS_FILE_LAUNCH_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_FILE_LAUNCH)) #define AGS_FILE_LAUNCH_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_FILE_LAUNCH, AgsFileLaunchClass)) typedef struct _AgsFileLaunch AgsFileLaunch; typedef struct _AgsFileLaunchClass AgsFileLaunchClass; struct _AgsFileLaunch { GObject object; GObject *ags_main; xmlNode *node; GObject *file; }; struct _AgsFileLaunchClass { GObjectClass object; void (*start)(AgsFileLaunch *file_launch); }; GType ags_file_launch_get_type(void); void ags_file_launch_start(AgsFileLaunch *file_launch); /* */ AgsFileLaunch* ags_file_launch_new(); #endif /*__AGS_FILE_LAUNCH_H__*/ gsequencer-0.6.37/src/ags/file/ags_file_lookup.h0000644000175000017500000000411212626447543016477 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_FILE_LOOKUP_H__ #define __AGS_FILE_LOOKUP_H__ #include #include #include #include #define AGS_TYPE_FILE_LOOKUP (ags_file_lookup_get_type()) #define AGS_FILE_LOOKUP(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_FILE_LOOKUP, AgsFileLookup)) #define AGS_FILE_LOOKUP_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_FILE_LOOKUP, AgsFileLookupClass)) #define AGS_IS_FILE_LOOKUP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_FILE_LOOKUP)) #define AGS_IS_FILE_LOOKUP_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_FILE_LOOKUP)) #define AGS_FILE_LOOKUP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_FILE_LOOKUP, AgsFileLookupClass)) typedef struct _AgsFileLookup AgsFileLookup; typedef struct _AgsFileLookupClass AgsFileLookupClass; struct _AgsFileLookup { GObject object; AgsFile *file; xmlNode *node; gpointer ref; }; struct _AgsFileLookupClass { GObjectClass object; void (*resolve)(AgsFileLookup *lookup); }; GType ags_file_lookup_get_type(void); GList* ags_file_lookup_find_by_node(GList *file_lookup, xmlNode *node); void ags_file_lookup_resolve(AgsFileLookup *lookup); /* */ AgsFileLookup* ags_file_lookup_new(); #endif /*__AGS_FILE_LOOKUP_H__*/ gsequencer-0.6.37/src/ags/file/ags_file.dtd0000644000175000017500000006750712626447543015453 00000000000000 bpm NMTOKEN 120.0 delay-counter NMTOKEN 0 device CDATA "default" > delay NMTOKEN #REQUIRED attack NMTOKEN #REQUIRED > > gsequencer-0.6.37/src/ags/file/ags_file_id_ref.c0000644000175000017500000001723312626447543016421 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include void ags_file_id_ref_class_init(AgsFileIdRefClass *file_id_ref); void ags_file_id_ref_init(AgsFileIdRef *file_id_ref); void ags_file_id_ref_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_file_id_ref_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_file_id_ref_finalize(GObject *gobject); /** * SECTION:ags_file_id_ref * @short_description: file id reference * @title: AgsFileIdRef * @section_id: * @include: ags/file/ags_file_id_ref.h * * The #AgsFileIdRef referes a XML node by its ID. It's used * to perform XPath lookup. */ enum{ RESOLVED, LAST_SIGNAL, }; enum{ PROP_0, PROP_NODE, PROP_XPATH, PROP_REFERENCE, PROP_FILE, PROP_MAIN, }; static gpointer ags_file_id_ref_parent_class = NULL; static guint file_id_ref_signals[LAST_SIGNAL]; GType ags_file_id_ref_get_type() { static GType ags_type_file_id_ref = 0; if(!ags_type_file_id_ref){ static const GTypeInfo ags_file_id_ref_info = { sizeof (AgsFileIdRefClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_file_id_ref_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsFileIdRef), 0, /* n_preallocs */ (GInstanceInitFunc) ags_file_id_ref_init, }; ags_type_file_id_ref = g_type_register_static(G_TYPE_OBJECT, "AgsFileIdRef\0", &ags_file_id_ref_info, 0); } return (ags_type_file_id_ref); } void ags_file_id_ref_class_init(AgsFileIdRefClass *file_id_ref) { GObjectClass *gobject; GParamSpec *param_spec; ags_file_id_ref_parent_class = g_type_class_peek_parent(file_id_ref); /* GObjectClass */ gobject = (GObjectClass *) file_id_ref; gobject->set_property = ags_file_id_ref_set_property; gobject->get_property = ags_file_id_ref_get_property; gobject->finalize = ags_file_id_ref_finalize; /* properties */ param_spec = g_param_spec_pointer("node\0", "the node\0", "The node to find the element\0", G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_NODE, param_spec); param_spec = g_param_spec_string("xpath\0", "the xpath\0", "The xpath to find the element\0", NULL, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_XPATH, param_spec); param_spec = g_param_spec_pointer("reference\0", "reference of the locator\0", "The reference resulted by the xpath locator\0", G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_REFERENCE, param_spec); param_spec = g_param_spec_object("file\0", "file assigned to\0", "The entire file assigned to\0", G_TYPE_OBJECT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_FILE, param_spec); param_spec = g_param_spec_object("main\0", "main access\0", "The main object to access the tree\0", G_TYPE_OBJECT, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_MAIN, param_spec); /* signals */ file_id_ref_signals[RESOLVED] = g_signal_new("resolved\0", G_TYPE_FROM_CLASS(file_id_ref), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsFileIdRefClass, resolved), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); } void ags_file_id_ref_init(AgsFileIdRef *file_id_ref) { file_id_ref->ags_main = NULL; file_id_ref->file = NULL; file_id_ref->node = NULL; file_id_ref->xpath = NULL; file_id_ref->ref = NULL; } void ags_file_id_ref_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsFileIdRef *file_id_ref; file_id_ref = AGS_FILE_ID_REF(gobject); switch(prop_id){ case PROP_NODE: { xmlNode *node; node = (xmlNode *) g_value_get_pointer(value); file_id_ref->node = node; } break; case PROP_XPATH: { char *xpath; xpath = (char *) g_value_get_string(value); if(file_id_ref->xpath != NULL) g_free(file_id_ref->xpath); file_id_ref->xpath = xpath; } break; case PROP_REFERENCE: { gpointer ref; ref = (gpointer) g_value_get_pointer(value); file_id_ref->ref = ref; } break; case PROP_FILE: { GObject *file; file = (GObject *) g_value_get_object(value); if(file_id_ref->file != NULL) g_object_unref(file_id_ref->file); if(file != NULL) g_object_ref(file); file_id_ref->file = file; } break; case PROP_MAIN: { GObject *ags_main; ags_main = (GObject *) g_value_get_object(value); if(file_id_ref->ags_main != NULL) g_object_unref(file_id_ref->ags_main); if(ags_main != NULL) g_object_ref(ags_main); file_id_ref->ags_main = ags_main; } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_file_id_ref_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsFileIdRef *file_id_ref; file_id_ref = AGS_FILE_ID_REF(gobject); switch(prop_id){ case PROP_NODE: { g_value_set_pointer(value, file_id_ref->node); } break; case PROP_XPATH: { g_value_set_string(value, file_id_ref->xpath); } break; case PROP_REFERENCE: { g_value_set_pointer(value, file_id_ref->ref); } break; case PROP_FILE: { g_value_set_object(value, file_id_ref->file); } break; case PROP_MAIN: { g_value_set_object(value, file_id_ref->ags_main); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_file_id_ref_finalize(GObject *gobject) { AgsFileIdRef *file_id_ref; file_id_ref = AGS_FILE_ID_REF(gobject); if(file_id_ref->xpath != NULL){ g_free(file_id_ref->xpath); } if(file_id_ref->ref != NULL){ g_object_unref(file_id_ref->ref); } if(file_id_ref->file != NULL){ g_object_unref(file_id_ref->file); } if(file_id_ref->ags_main != NULL){ g_object_unref(file_id_ref->ags_main); } G_OBJECT_CLASS(ags_file_id_ref_parent_class)->finalize(gobject); } void ags_file_id_ref_resolved(AgsFileIdRef *file_id_ref) { g_return_if_fail(AGS_IS_FILE_ID_REF(file_id_ref)); g_object_ref((GObject *) file_id_ref); g_signal_emit(G_OBJECT(file_id_ref), file_id_ref_signals[RESOLVED], 0); g_object_unref((GObject *) file_id_ref); } /** * ags_file_id_ref_new: * * Creates an #AgsFileIdRef * * Returns: a new #AgsFileIdRef * * Since: 0.4 */ AgsFileIdRef* ags_file_id_ref_new() { AgsFileIdRef *file_id_ref; file_id_ref = (AgsFileIdRef *) g_object_new(AGS_TYPE_FILE_ID_REF, NULL); return(file_id_ref); } gsequencer-0.6.37/src/ags/main.c0000644000175000017500000005643612633014132013333 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "config.h" void ags_main_class_init(AgsMainClass *ags_main); void ags_main_connectable_interface_init(AgsConnectableInterface *connectable); void ags_main_init(AgsMain *ags_main); void ags_main_connect(AgsConnectable *connectable); void ags_main_disconnect(AgsConnectable *connectable); void ags_main_finalize(GObject *gobject); void ags_colors_alloc(); static void ags_signal_cleanup(); void ags_signal_handler(int signr); void ags_signal_handler_timer(int sig, siginfo_t *si, void *uc); static gpointer ags_main_parent_class = NULL; static sigset_t ags_wait_mask; static sigset_t ags_timer_mask; pthread_mutex_t ags_application_mutex; AgsMain *ags_main; static const gchar *ags_config_thread = AGS_CONFIG_THREAD; static const gchar *ags_config_devout = AGS_CONFIG_DEVOUT; extern void ags_thread_resume_handler(int sig); extern void ags_thread_suspend_handler(int sig); extern AgsConfig *config; extern GtkStyle *cell_pattern_style; extern GtkStyle *ffplayer_style; extern GtkStyle *meter_style; extern GtkStyle *pattern_edit_style; extern GtkStyle *note_edit_style; extern GtkStyle *meter_style; extern GtkStyle *dial_style; extern GtkStyle *indicator_style; extern GtkStyle *led_style; extern AgsLadspaManager *ags_ladspa_manager; struct sigaction ags_sigact; struct sigaction ags_sigact_timer; struct sigevent ags_sev_timer; struct itimerspec its; GType ags_main_get_type() { static GType ags_type_main = 0; if(!ags_type_main){ static const GTypeInfo ags_main_info = { sizeof (AgsMainClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_main_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsMain), 0, /* n_preallocs */ (GInstanceInitFunc) ags_main_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_main_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_main = g_type_register_static(G_TYPE_OBJECT, "AgsMain\0", &ags_main_info, 0); g_type_add_interface_static(ags_type_main, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_main); } void ags_main_class_init(AgsMainClass *ags_main) { GObjectClass *gobject; ags_main_parent_class = g_type_class_peek_parent(ags_main); /* GObjectClass */ gobject = (GObjectClass *) ags_main; gobject->finalize = ags_main_finalize; } void ags_main_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->connect = ags_main_connect; connectable->disconnect = ags_main_disconnect; } void ags_main_init(AgsMain *ags_main) { GFile *file; FILE *log_file; struct sigaction sa; struct passwd *pw; uid_t uid; gchar *wdir, *filename; uid = getuid(); pw = getpwuid(uid); wdir = g_strdup_printf("%s/%s\0", pw->pw_dir, AGS_DEFAULT_DIRECTORY); file = g_file_new_for_path(wdir); g_file_make_directory(file, NULL, NULL); ags_main->flags = 0; ags_main->version = AGS_VERSION; ags_main->build_id = AGS_BUILD_ID; log_file = fopen("/dev/stdout\0", "a\0"); ags_main->log = (AgsLog *) g_object_new(AGS_TYPE_LOG, "file\0", log_file, NULL); ags_colors_alloc(); ags_main->main_loop = NULL; /* AgsAutosaveThread */ ags_main->autosave_thread = NULL; ags_main->autosave_thread = (AgsThread *) ags_autosave_thread_new(NULL, ags_main); g_object_ref(G_OBJECT(ags_main->autosave_thread)); ags_connectable_connect(AGS_CONNECTABLE(ags_main->autosave_thread)); ags_main->thread_pool = ags_thread_pool_new(NULL); ags_main->server = NULL; ags_main->devout = NULL; ags_main->window = NULL; // ags_log_message(ags_default_log, "starting Advanced Gtk+ Sequencer\n\0"); sigfillset(&(ags_wait_mask)); sigdelset(&(ags_wait_mask), AGS_THREAD_SUSPEND_SIG); sigdelset(&(ags_wait_mask), AGS_THREAD_RESUME_SIG); sigfillset(&(sa.sa_mask)); sa.sa_flags = 0; sa.sa_handler = ags_thread_resume_handler; sigaction(AGS_THREAD_RESUME_SIG, &sa, NULL); sa.sa_handler = ags_thread_suspend_handler; sigaction(AGS_THREAD_SUSPEND_SIG, &sa, NULL); filename = g_strdup_printf("%s/%s\0", wdir, AGS_DEFAULT_CONFIG); ags_main->config = config; //TODO:JK: ugly config->ags_main = ags_main; g_free(filename); g_free(wdir); } void ags_main_connect(AgsConnectable *connectable) { AgsMain *ags_main; GList *list; ags_main = AGS_MAIN(connectable); if((AGS_MAIN_CONNECTED & (ags_main->flags)) != 0) return; ags_main->flags |= AGS_MAIN_CONNECTED; ags_connectable_connect(AGS_CONNECTABLE(G_OBJECT(ags_main->main_loop))); ags_connectable_connect(AGS_CONNECTABLE(ags_main->thread_pool)); g_message("connected threads\0"); list = ags_main->devout; while(list != NULL){ ags_connectable_connect(AGS_CONNECTABLE(list->data)); list = list->next; } g_message("connected audio\0"); ags_connectable_connect(AGS_CONNECTABLE(ags_main->window)); g_message("connected gui\0"); } void ags_main_disconnect(AgsConnectable *connectable) { /* empty */ } void ags_main_finalize(GObject *gobject) { AgsMain *ags_main; ags_main = AGS_MAIN(gobject); G_OBJECT_CLASS(ags_main_parent_class)->finalize(gobject); } void ags_colors_alloc() { static gboolean allocated = FALSE; } void ags_main_load_config(AgsMain *ags_main) { AgsConfig *config; GList *list; auto void ags_main_load_config_thread(AgsThread *thread); auto void ags_main_load_config_devout(AgsDevout *devout); void ags_main_load_config_thread(AgsThread *thread){ gchar *model; model = ags_config_get(config, ags_config_devout, "model\0"); if(model != NULL){ if(!strncmp(model, "single-threaded\0", 16)){ //TODO:JK: implement me }else if(!strncmp(model, "multi-threaded", 15)){ //TODO:JK: implement me }else if(!strncmp(model, "super-threaded", 15)){ //TODO:JK: implement me } } } void ags_main_load_config_devout(AgsDevout *devout){ gchar *alsa_handle; guint samplerate; guint buffer_size; guint pcm_channels, dsp_channels; alsa_handle = ags_config_get(config, ags_config_devout, "alsa-handle\0"); dsp_channels = strtoul(ags_config_get(config, ags_config_devout, "dsp-channels\0"), NULL, 10); pcm_channels = strtoul(ags_config_get(config, ags_config_devout, "pcm-channels\0"), NULL, 10); samplerate = strtoul(ags_config_get(config, ags_config_devout, "samplerate\0"), NULL, 10); buffer_size = strtoul(ags_config_get(config, ags_config_devout, "buffer-size\0"), NULL, 10); g_object_set(G_OBJECT(devout), "device\0", alsa_handle, "dsp-channels\0", dsp_channels, "pcm-channels\0", pcm_channels, "frequency\0", samplerate, "buffer-size\0", buffer_size, NULL); } if(ags_main == NULL){ return; } config = ags_main->config; if(config == NULL){ return; } /* thread */ ags_main_load_config_thread(ags_main->main_loop); /* devout */ list = ags_main->devout; while(list != NULL){ ags_main_load_config_devout(AGS_DEVOUT(list->data)); list = list->next; } } void ags_main_add_devout(AgsMain *ags_main, AgsDevout *devout) { if(ags_main == NULL || devout == NULL){ return; } g_object_ref(G_OBJECT(devout)); ags_main->devout = g_list_prepend(ags_main->devout, devout); } void ags_main_register_recall_type() { ags_play_audio_get_type(); ags_play_channel_get_type(); ags_play_channel_run_get_type(); ags_play_channel_run_master_get_type(); ags_stream_channel_get_type(); ags_stream_channel_run_get_type(); ags_loop_channel_get_type(); ags_loop_channel_run_get_type(); ags_copy_channel_get_type(); ags_copy_channel_run_get_type(); ags_mute_audio_get_type(); ags_mute_audio_run_get_type(); ags_mute_channel_get_type(); ags_mute_channel_run_get_type(); ags_volume_channel_get_type(); ags_volume_channel_run_get_type(); ags_peak_channel_get_type(); ags_peak_channel_run_get_type(); ags_recall_ladspa_get_type(); ags_recall_channel_run_dummy_get_type(); ags_recall_ladspa_run_get_type(); ags_delay_audio_get_type(); ags_delay_audio_run_get_type(); ags_count_beats_audio_get_type(); ags_count_beats_audio_run_get_type(); ags_copy_pattern_audio_get_type(); ags_copy_pattern_audio_run_get_type(); ags_copy_pattern_channel_get_type(); ags_copy_pattern_channel_run_get_type(); ags_buffer_channel_get_type(); ags_buffer_channel_run_get_type(); ags_play_notation_audio_get_type(); ags_play_notation_audio_run_get_type(); } void ags_main_register_task_type() { //TODO:JK: implement me } void ags_main_register_widget_type() { ags_dial_get_type(); gtk_button_get_type(); } void ags_main_register_machine_type() { ags_panel_get_type(); ags_panel_input_pad_get_type(); ags_panel_input_line_get_type(); ags_mixer_get_type(); ags_mixer_input_pad_get_type(); ags_mixer_input_line_get_type(); ags_drum_get_type(); ags_drum_output_pad_get_type(); ags_drum_output_line_get_type(); ags_drum_input_pad_get_type(); ags_drum_input_line_get_type(); ags_matrix_get_type(); ags_synth_get_type(); ags_synth_input_pad_get_type(); ags_synth_input_line_get_type(); ags_ffplayer_get_type(); } void ags_main_register_thread_type() { ags_thread_get_type(); ags_audio_loop_get_type(); ags_task_thread_get_type(); ags_devout_thread_get_type(); ags_export_thread_get_type(); ags_audio_thread_get_type(); ags_channel_thread_get_type(); ags_iterator_thread_get_type(); ags_recycling_thread_get_type(); ags_timestamp_thread_get_type(); ags_gui_thread_get_type(); ags_thread_pool_get_type(); ags_returnable_thread_get_type(); } void ags_main_quit(AgsMain *ags_main) { AgsThread *gui_thread; gui_thread = ags_thread_find_type(ags_main->main_loop, AGS_TYPE_GUI_THREAD); ags_thread_stop(gui_thread); } AgsMain* ags_main_new() { AgsMain *ags_main; ags_main = (AgsMain *) g_object_new(AGS_TYPE_MAIN, NULL); return(ags_main); } void ags_signal_handler(int signr) { if(signr == SIGINT){ //TODO:JK: do backup exit(-1); }else{ sigemptyset(&(ags_sigact.sa_mask)); // if(signr == AGS_ASYNC_QUEUE_SIGNAL_HIGH){ // pthread_yield(); // } } } void ags_signal_handler_timer(int sig, siginfo_t *si, void *uc) { pthread_mutex_lock(ags_main->main_loop->timer_mutex); g_atomic_int_set(&(ags_main->main_loop->timer_expired), TRUE); if(ags_main->main_loop->timer_wait){ pthread_cond_signal(ags_main->main_loop->timer_cond); } pthread_mutex_unlock(ags_main->main_loop->timer_mutex); // g_message("sig\0"); // signal(sig, SIG_IGN); } static void ags_signal_cleanup() { sigemptyset(&(ags_sigact.sa_mask)); } int main(int argc, char **argv) { AgsDevout *devout; AgsWindow *window; AgsThread *gui_thread; AgsThread *async_queue; AgsThread *devout_thread; AgsThread *export_thread; GFile *autosave_file; struct sched_param param; struct rlimit rl; timer_t timerid; gchar *filename, *autosave_filename; struct passwd *pw; uid_t uid; gchar *wdir, *config_file; int result; gboolean single_thread = FALSE; guint i; const char *error; const rlim_t kStackSize = 256L * 1024L * 1024L; // min stack size = 128 Mb pthread_mutexattr_t attr; // mtrace(); atexit(ags_signal_cleanup); result = getrlimit(RLIMIT_STACK, &rl); /* set stack size 64M */ if(result == 0){ if(rl.rlim_cur < kStackSize){ rl.rlim_cur = kStackSize; result = setrlimit(RLIMIT_STACK, &rl); if(result != 0){ //TODO:JK } } } /* Ignore interactive and job-control signals. */ signal(SIGINT, SIG_IGN); signal(SIGQUIT, SIG_IGN); signal(SIGTSTP, SIG_IGN); signal(SIGTTIN, SIG_IGN); signal(SIGTTOU, SIG_IGN); signal(SIGCHLD, SIG_IGN); ags_sigact.sa_handler = ags_signal_handler; sigemptyset(&ags_sigact.sa_mask); ags_sigact.sa_flags = 0; sigaction(SIGINT, &ags_sigact, (struct sigaction *) NULL); sigaction(SA_RESTART, &ags_sigact, (struct sigaction *) NULL); /**/ pthread_mutexattr_init(&attr); pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); pthread_mutex_init(&ags_application_mutex, &attr); #ifdef AGS_USE_TIMER /* create timer */ ags_sigact_timer.sa_flags = SA_SIGINFO; ags_sigact_timer.sa_sigaction = ags_signal_handler_timer; sigemptyset(&ags_sigact_timer.sa_mask); if(sigaction(SIGRTMIN, &ags_sigact_timer, NULL) == -1){ perror("sigaction\0"); exit(EXIT_FAILURE); } /* Block timer signal temporarily */ sigemptyset(&ags_timer_mask); sigaddset(&ags_timer_mask, SIGRTMIN); if(sigprocmask(SIG_SETMASK, &ags_timer_mask, NULL) == -1){ perror("sigprocmask\0"); exit(EXIT_FAILURE); } /* Create the timer */ ags_sev_timer.sigev_notify = SIGEV_SIGNAL; ags_sev_timer.sigev_signo = SIGRTMIN; ags_sev_timer.sigev_value.sival_ptr = &timerid; if(timer_create(CLOCK_MONOTONIC, &ags_sev_timer, &timerid) == -1){ perror("timer_create\0"); exit(EXIT_FAILURE); } #endif /* parse gtkrc */ uid = getuid(); pw = getpwuid(uid); gtk_rc_parse(g_strdup_printf("%s/%s/ags.rc", pw->pw_dir, AGS_DEFAULT_DIRECTORY)); /**/ LIBXML_TEST_VERSION; g_thread_init(NULL); gdk_threads_init(); gtk_init(&argc, &argv); ipatch_init(); ao_initialize(); filename = NULL; for(i = 0; i < argc; i++){ if(!strncmp(argv[i], "--help\0", 7)){ printf("GSequencer is an audio sequencer and notation editor\n\n\0"); printf("Usage:\n\t%s\n\t%s\n\t%s\n\t%s\n\n", "Report bugs to \n\0", "--filename file open file\0", "--single-thread run in single thread mode\0", "--help display this help and exit\0", "--version output version information and exit\0"); exit(0); }else if(!strncmp(argv[i], "--version\0", 10)){ printf("GSequencer 0.4.2\n\n\0"); printf("%s\n%s\n%s\n\n\0", "Copyright (C) 2005-2015 Joël Krähemann\0", "This is free software; see the source for copying conditions. There is NO\0", "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\0"); printf("Written by Joël Krähemann\n\0"); exit(0); }else if(!strncmp(argv[i], "--single-thread\0", 16)){ single_thread = TRUE; }else if(!strncmp(argv[i], "--filename\0", 11)){ filename = argv[i + 1]; i++; } } config = ags_config_new(); wdir = g_strdup_printf("%s/%s\0", pw->pw_dir, AGS_DEFAULT_DIRECTORY); config_file = g_strdup_printf("%s/%s\0", wdir, AGS_DEFAULT_CONFIG); ags_config_load_from_file(config, config_file); g_free(wdir); g_free(config_file); if(filename != NULL){ AgsFile *file; AgsThread *thread; file = g_object_new(AGS_TYPE_FILE, "filename\0", filename, NULL); ags_file_open(file); ags_file_read(file); ags_main = AGS_MAIN(file->ags_main); #ifdef AGS_USE_TIMER /* Start the timer */ its.it_value.tv_sec = 0; its.it_value.tv_nsec = NSEC_PER_SEC / AGS_THREAD_MAX_PRECISION; its.it_interval.tv_sec = its.it_value.tv_sec; its.it_interval.tv_nsec = its.it_value.tv_nsec; if(timer_settime(timerid, 0, &its, NULL) == -1){ perror("timer_settime\0"); exit(EXIT_FAILURE); } if(sigprocmask(SIG_UNBLOCK, &ags_timer_mask, NULL) == -1){ perror("sigprocmask\0"); exit(EXIT_FAILURE); } #endif gui_thread = ags_thread_find_type(ags_main->main_loop, AGS_TYPE_GUI_THREAD); #ifdef _USE_PTH pth_join(gui_thread->thread, NULL); #else pthread_join(*(gui_thread->thread), NULL); #endif }else{ ags_main = ags_main_new(); if(single_thread){ ags_main->flags = AGS_MAIN_SINGLE_THREAD; } /* Declare ourself as a real time task */ param.sched_priority = AGS_PRIORITY; if(sched_setscheduler(0, SCHED_FIFO, ¶m) == -1) { perror("sched_setscheduler failed\0"); } mlockall(MCL_CURRENT | MCL_FUTURE); if((AGS_MAIN_SINGLE_THREAD & (ags_main->flags)) == 0){ // GdkFrameClock *frame_clock; #ifdef AGS_WITH_XMLRPC_C AbyssInit(&error); xmlrpc_env_init(&(ags_main->env)); #endif /* AGS_WITH_XMLRPC_C */ /* AgsDevout */ devout = ags_devout_new((GObject *) ags_main); ags_main_add_devout(ags_main, devout); /* */ g_object_set(G_OBJECT(ags_main->autosave_thread), "devout\0", devout, NULL); /* AgsWindow */ ags_main->window = window = ags_window_new((GObject *) ags_main); g_object_set(G_OBJECT(window), "devout\0", devout, NULL); g_object_ref(G_OBJECT(window)); gtk_window_set_default_size((GtkWindow *) window, 500, 500); gtk_paned_set_position((GtkPaned *) window->paned, 300); ags_connectable_connect(window); gtk_widget_show_all((GtkWidget *) window); /* AgsServer */ ags_main->server = ags_server_new((GObject *) ags_main); /* AgsMainLoop */ ags_main->main_loop = (AgsThread *) ags_audio_loop_new((GObject *) devout, (GObject *) ags_main); ags_main->thread_pool->parent = ags_main->main_loop; g_object_ref(G_OBJECT(ags_main->main_loop)); ags_connectable_connect(AGS_CONNECTABLE(G_OBJECT(ags_main->main_loop))); /* AgsTaskThread */ async_queue = (AgsThread *) ags_task_thread_new(devout); AGS_TASK_THREAD(async_queue)->thread_pool = ags_main->thread_pool; ags_main_loop_set_async_queue(AGS_MAIN_LOOP(ags_main->main_loop), async_queue); ags_thread_add_child_extended(ags_main->main_loop, async_queue, TRUE, TRUE); /* AgsGuiThread */ gui_thread = (AgsThread *) ags_gui_thread_new(); ags_thread_add_child_extended(ags_main->main_loop, gui_thread, TRUE, TRUE); /* AgsDevoutThread */ devout_thread = (AgsThread *) ags_devout_thread_new(devout); ags_thread_add_child_extended(ags_main->main_loop, devout_thread, TRUE, TRUE); /* AgsExportThread */ export_thread = (AgsThread *) ags_export_thread_new(devout, NULL); ags_thread_add_child_extended(ags_main->main_loop, export_thread, TRUE, TRUE); /* start thread tree */ ags_thread_start(ags_main->main_loop); /* wait thread */ pthread_mutex_lock(AGS_THREAD(ags_main->main_loop)->start_mutex); g_atomic_int_set(&(AGS_THREAD(ags_main->main_loop)->start_wait), TRUE); if(g_atomic_int_get(&(AGS_THREAD(ags_main->main_loop)->start_wait)) == TRUE && g_atomic_int_get(&(AGS_THREAD(ags_main->main_loop)->start_done)) == FALSE){ while(g_atomic_int_get(&(AGS_THREAD(ags_main->main_loop)->start_wait)) == TRUE && g_atomic_int_get(&(AGS_THREAD(ags_main->main_loop)->start_done)) == FALSE){ pthread_cond_wait(AGS_THREAD(ags_main->main_loop)->start_cond, AGS_THREAD(ags_main->main_loop)->start_mutex); } } pthread_mutex_unlock(AGS_THREAD(ags_main->main_loop)->start_mutex); /* complete thread pool */ ags_thread_pool_start(ags_main->thread_pool); }else{ AgsSingleThread *single_thread; devout = ags_devout_new((GObject *) ags_main); ags_main_add_devout(ags_main, devout); g_object_set(G_OBJECT(ags_main->autosave_thread), "devout\0", devout, NULL); /* threads */ single_thread = ags_single_thread_new((GObject *) devout); /* AgsWindow */ ags_main->window = window = ags_window_new((GObject *) ags_main); g_object_set(G_OBJECT(window), "devout\0", devout, NULL); gtk_window_set_default_size((GtkWindow *) window, 500, 500); gtk_paned_set_position((GtkPaned *) window->paned, 300); ags_connectable_connect(window); gtk_widget_show_all((GtkWidget *) window); /* AgsMainLoop */ ags_main->main_loop = AGS_MAIN_LOOP(ags_audio_loop_new((GObject *) devout, (GObject *) ags_main)); g_object_ref(G_OBJECT(ags_main->main_loop)); /* complete thread pool */ ags_main->thread_pool->parent = AGS_THREAD(ags_main->main_loop); ags_thread_pool_start(ags_main->thread_pool); /* start thread tree */ ags_thread_start((AgsThread *) single_thread); } #ifdef AGS_USE_TIMER /* Start the timer */ its.it_value.tv_sec = 0; its.it_value.tv_nsec = NSEC_PER_SEC / AGS_THREAD_MAX_PRECISION; // / AGS_AUDIO_LOOP_DEFAULT_JIFFIE; its.it_interval.tv_sec = its.it_value.tv_sec; its.it_interval.tv_nsec = its.it_value.tv_nsec; if(timer_settime(timerid, 0, &its, NULL) == -1){ perror("timer_settime\0"); exit(EXIT_FAILURE); } if(sigprocmask(SIG_UNBLOCK, &ags_timer_mask, NULL) == -1){ perror("sigprocmask\0"); exit(EXIT_FAILURE); } #endif gui_thread = ags_thread_find_type(ags_main->main_loop, AGS_TYPE_GUI_THREAD); if(!single_thread){ /* join gui thread */ #ifdef _USE_PTH pth_join(gui_thread->thread, NULL); #else pthread_join(*(gui_thread->thread), NULL); #endif } } /* free managers */ if(ags_ladspa_manager != NULL){ g_object_unref(ags_ladspa_manager_get_instance()); } uid = getuid(); pw = getpwuid(uid); autosave_filename = g_strdup_printf("%s/%s/%d-%s\0", pw->pw_dir, AGS_DEFAULT_DIRECTORY, getpid(), AGS_AUTOSAVE_THREAD_DEFAULT_FILENAME); autosave_file = g_file_new_for_path(autosave_filename); if(g_file_query_exists(autosave_file, NULL)){ g_file_delete(autosave_file, NULL, NULL); } g_free(autosave_filename); g_object_unref(autosave_file); // muntrace(); return(0); } gsequencer-0.6.37/src/ags/thread/0000755000175000017500000000000012633241335013563 500000000000000gsequencer-0.6.37/src/ags/thread/ags_thread_pool.h0000644000175000017500000000520612621463700017010 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_THREAD_POOL_H__ #define __AGS_THREAD_POOL_H__ #include #include #ifdef AGS_USE_LINUX_THREADS #include #else #include #endif #define AGS_TYPE_THREAD_POOL (ags_thread_pool_get_type()) #define AGS_THREAD_POOL(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_THREAD_POOL, AgsThreadPool)) #define AGS_THREAD_POOL_CLASS(class) (G_TYPE_CHECK_CLASS_CAST(class, AGS_TYPE_THREAD_POOL, AgsThreadPoolClass)) #define AGS_IS_THREAD_POOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_THREAD_POOL)) #define AGS_IS_THREAD_POOL_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_THREAD_POOL)) #define AGS_THREAD_POOL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS(obj, AGS_TYPE_THREAD_POOL, AgsThreadPoolClass)) typedef struct _AgsThreadPool AgsThreadPool; typedef struct _AgsThreadPoolClass AgsThreadPoolClass; typedef enum{ AGS_THREAD_POOL_RUNNING = 1, AGS_THREAD_POOL_READY = 1 << 1, }AgsThreadPoolFlags; struct _AgsThreadPool { GObject object; volatile guint flags; volatile guint max_unused_threads; volatile guint max_threads; pthread_t *thread; pthread_mutex_t *creation_mutex; pthread_cond_t *creation_cond; volatile guint n_threads; volatile guint newly_pulled; volatile guint queued; AgsThread *parent; volatile GList *returnable_thread; volatile GList *running_thread; pthread_mutex_t *pull_mutex; pthread_mutex_t *return_mutex; pthread_cond_t *return_cond; }; struct _AgsThreadPoolClass { GObjectClass object; void (*start)(AgsThreadPool *thread_pool); }; GType ags_thread_pool_get_type(); AgsThread* ags_thread_pool_pull(AgsThreadPool *thread_pool); void ags_thread_pool_start(AgsThreadPool *thread_pool); AgsThreadPool* ags_thread_pool_new(AgsThread *parent); #endif /*__AGS_THREAD_POOL_H__*/ gsequencer-0.6.37/src/ags/thread/ags_recycling_thread_callbacks.h0000644000175000017500000000207312626272146022023 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_RECYCLING_THREAD_CALLBACKS_H__ #define __AGS_RECYCLING_THREAD_CALLBACKS_H__ #include #include void ags_recycling_thread_iterate_callback(AgsRecyclingThread *thread, gpointer user_data); #endif /* __AGS_RECYCLING_THREAD_CALLBACKS_H__ */ gsequencer-0.6.37/src/ags/thread/ags_thread-posix.c0000644000175000017500000020330112627531133017110 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void ags_thread_class_init(AgsThreadClass *thread); void ags_thread_connectable_interface_init(AgsConnectableInterface *connectable); void ags_thread_init(AgsThread *thread); void ags_thread_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_thread_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_thread_connect(AgsConnectable *connectable); void ags_thread_disconnect(AgsConnectable *connectable); void ags_thread_finalize(GObject *gobject); void ags_thread_resume_handler(int sig); void ags_thread_suspend_handler(int sig); void ags_thread_real_start(AgsThread *thread); void* ags_thread_timer(void *ptr); void* ags_thread_loop(void *ptr); void ags_thread_real_timelock(AgsThread *thread); void* ags_thread_timelock_loop(void *ptr); void ags_thread_real_stop(AgsThread *thread); /** * SECTION:ags_thread-posix * @short_description: threads * @title: AgsThread * @section_id: * @include: ags/thread/ags_thread.h * * The #AgsThread base class. It supports organizing them within a tree, * perform syncing and frequencies. */ enum{ PROP_0, PROP_FREQUENCY, PROP_DEVOUT, }; enum{ START, RUN, SUSPEND, RESUME, TIMELOCK, STOP, LAST_SIGNAL, }; static gpointer ags_thread_parent_class = NULL; static guint thread_signals[LAST_SIGNAL]; extern pthread_mutex_t ags_application_mutex; __thread AgsThread *ags_thread_self = NULL; GType ags_thread_get_type() { static GType ags_type_thread = 0; if(!ags_type_thread){ const GTypeInfo ags_thread_info = { sizeof (AgsThreadClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_thread_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsThread), 0, /* n_preallocs */ (GInstanceInitFunc) ags_thread_init, }; const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_thread_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_thread = g_type_register_static(G_TYPE_OBJECT, "AgsThread\0", &ags_thread_info, 0); g_type_add_interface_static(ags_type_thread, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return(ags_type_thread); } void ags_thread_class_init(AgsThreadClass *thread) { GObjectClass *gobject; GParamSpec *param_spec; ags_thread_parent_class = g_type_class_peek_parent(thread); /* GObject */ gobject = (GObjectClass *) thread; gobject->set_property = ags_thread_set_property; gobject->get_property = ags_thread_get_property; gobject->finalize = ags_thread_finalize; /* properties */ /** * AgsThread:devout: * * The assigned #AgsDevout. * * Since: 0.4 */ param_spec = g_param_spec_object("devout\0", "devout assigned to\0", "The AgsDevout it is assigned to.\0", AGS_TYPE_DEVOUT, G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_DEVOUT, param_spec); /** * AgsThread:frequency: * * The frequency to run at in Hz. * * Since: 0.4 */ param_spec = g_param_spec_double("frequency\0", "JIFFIE\0", "JIFFIE\0", 0.01, 1000.0, 1000.0, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_FREQUENCY, param_spec); /* AgsThread */ thread->start = ags_thread_real_start; thread->run = NULL; thread->suspend = NULL; thread->resume = NULL; thread->timelock = ags_thread_real_timelock; thread->stop = ags_thread_real_stop; /* signals */ /** * AgsThread::start: * @thread: the object playing. * * The ::start signal is invoked as thread started. */ thread_signals[START] = g_signal_new("start\0", G_TYPE_FROM_CLASS (thread), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AgsThreadClass, start), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); /** * AgsThread::run: * @thread: the object playing. * * The ::run signal is invoked during run loop. */ thread_signals[RUN] = g_signal_new("run\0", G_TYPE_FROM_CLASS (thread), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AgsThreadClass, run), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); /** * AgsThread::suspend: * @thread: the object playing. * * The ::suspend signal is invoked during suspending. */ thread_signals[SUSPEND] = g_signal_new("suspend\0", G_TYPE_FROM_CLASS (thread), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AgsThreadClass, suspend), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); /** * AgsThread::resume: * @thread: the object playing. * @recall_id: the appropriate #AgsRecallID * * The ::resume signal is invoked during resuming. */ thread_signals[RESUME] = g_signal_new("resume\0", G_TYPE_FROM_CLASS (thread), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AgsThreadClass, resume), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); /** * AgsThread::timelock: * @thread: the object playing. * @recall_id: the appropriate #AgsRecallID * * The ::timelock signal is invoked as standard compution * time exceeded. */ thread_signals[TIMELOCK] = g_signal_new("timelock\0", G_TYPE_FROM_CLASS (thread), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AgsThreadClass, timelock), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); /** * AgsThread::stop: * @thread: the object playing. * @recall_id: the appropriate #AgsRecallID * * The ::stop signal is invoked as @thread stopped. */ thread_signals[STOP] = g_signal_new("stop\0", G_TYPE_FROM_CLASS (thread), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AgsThreadClass, stop), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); } void ags_thread_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->is_ready = NULL; connectable->is_connected = NULL; connectable->connect = ags_thread_connect; connectable->disconnect = ags_thread_disconnect; } void ags_thread_init(AgsThread *thread) { AgsMutexManager *mutex_manager; pthread_mutex_t *mutex; pthread_mutexattr_t attr; /* insert audio loop mutex */ //FIXME:JK: memory leak pthread_mutexattr_init(&attr); pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); mutex = (pthread_mutex_t *) malloc(sizeof(pthread_mutex_t)); pthread_mutex_init(mutex, &attr); pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); ags_mutex_manager_insert(mutex_manager, (GObject *) thread, mutex); pthread_mutex_unlock(&(ags_application_mutex)); /* fields */ g_atomic_int_set(&(thread->flags), 0); thread->rt_setup = FALSE; thread->devout = NULL; thread->thread = (pthread_t *) malloc(sizeof(pthread_t)); pthread_attr_init(&(thread->thread_attr)); thread->freq = AGS_THREAD_DEFAULT_JIFFIE; pthread_mutexattr_init(&(thread->mutexattr)); pthread_mutexattr_settype(&(thread->mutexattr), PTHREAD_MUTEX_RECURSIVE); thread->mutex = (pthread_mutex_t *) malloc(sizeof(pthread_mutex_t)); pthread_mutex_init(thread->mutex, &(thread->mutexattr)); thread->cond = (pthread_cond_t *) malloc(sizeof(pthread_cond_t)); pthread_cond_init(thread->cond, NULL); thread->start_mutex = (pthread_mutex_t *) malloc(sizeof(pthread_mutex_t)); pthread_mutex_init(thread->start_mutex, NULL); thread->start_cond = (pthread_cond_t *) malloc(sizeof(pthread_cond_t)); pthread_cond_init(thread->start_cond, NULL); g_atomic_int_set(&(thread->start_wait), FALSE); g_atomic_int_set(&(thread->start_done), FALSE); thread->barrier = (pthread_barrier_t **) malloc(2 * sizeof(pthread_barrier_t *)); thread->barrier[0] = (pthread_barrier_t *) malloc(sizeof(pthread_barrier_t)); thread->barrier[1] = (pthread_barrier_t *) malloc(sizeof(pthread_barrier_t)); thread->first_barrier = TRUE; thread->wait_count[0] = 1; thread->wait_count[1] = 1; thread->timelock_mutex = (pthread_mutex_t *) malloc(sizeof(pthread_mutex_t)); pthread_mutex_init(thread->timelock_mutex, NULL); thread->timelock_cond = (pthread_cond_t *) malloc(sizeof(pthread_cond_t)); pthread_cond_init(thread->timelock_cond, NULL); thread->greedy_mutex = (pthread_mutex_t *) malloc(sizeof(pthread_mutex_t)); pthread_mutex_init(thread->greedy_mutex, NULL); thread->greedy_cond = (pthread_cond_t *) malloc(sizeof(pthread_cond_t)); pthread_cond_init(thread->greedy_cond, NULL); g_atomic_int_set(&(thread->locked_greedy), 0); thread->timelock.tv_sec = 0; thread->timelock.tv_nsec = floor(NSEC_PER_SEC / (AGS_THREAD_DEFAULT_JIFFIE + 1)); thread->greedy_locks = NULL; g_atomic_int_set(&(thread->timer_wait), FALSE); g_atomic_int_set(&(thread->timer_expired), FALSE); thread->suspend_mutex = (pthread_mutex_t *) malloc(sizeof(pthread_mutex_t)); pthread_mutex_init(thread->suspend_mutex, NULL); thread->timer_mutex = (pthread_mutex_t *) malloc(sizeof(pthread_mutex_t)); pthread_mutex_init(thread->timer_mutex, NULL); thread->timer_cond = (pthread_cond_t *) malloc(sizeof(pthread_cond_t)); pthread_cond_init(thread->timer_cond, NULL); g_atomic_pointer_set(&(thread->parent), NULL); g_atomic_pointer_set(&(thread->children), NULL); g_atomic_pointer_set(&(thread->next), NULL); g_atomic_pointer_set(&(thread->prev), NULL); thread->data = NULL; } void ags_thread_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsThread *thread; thread = AGS_THREAD(gobject); switch(prop_id){ case PROP_DEVOUT: { AgsDevout *devout; AgsThread *current; devout = (AgsDevout *) g_value_get_object(value); if(thread->devout != NULL){ g_object_unref(G_OBJECT(thread->devout)); } if(devout != NULL){ g_object_ref(G_OBJECT(devout)); } thread->devout = G_OBJECT(devout); current = g_atomic_pointer_get(&(thread->children)); while(current != NULL){ g_object_set(G_OBJECT(current), "devout\0", devout, NULL); current = g_atomic_pointer_get(&(current->next)); } } break; case PROP_FREQUENCY: { gdouble freq; freq = g_value_get_double(value); if(freq == thread->freq){ return; } thread->freq = freq; } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_thread_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsThread *thread; thread = AGS_THREAD(gobject); switch(prop_id){ case PROP_DEVOUT: { g_value_set_object(value, G_OBJECT(thread->devout)); } break; case PROP_FREQUENCY: { g_value_set_double(value, thread->freq); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_thread_connect(AgsConnectable *connectable) { AgsThread *thread, *child; thread = AGS_THREAD(connectable); if((AGS_THREAD_CONNECTED & (thread->flags)) != 0){ return; } #ifdef AGS_DEBUG g_message("connecting thread\0"); #endif child = g_atomic_pointer_get(&(thread->children)); while(child != NULL){ ags_connectable_connect(AGS_CONNECTABLE(child)); child = g_atomic_pointer_get(&(child->next)); } } void ags_thread_disconnect(AgsConnectable *connectable) { /* empty */ } void ags_thread_finalize(GObject *gobject) { AgsThread *thread; void *stackaddr; size_t stacksize; thread = AGS_THREAD(gobject); if(thread->devout != NULL){ g_object_unref(G_OBJECT(thread->devout)); } pthread_attr_getstack(&(thread->thread_attr), &stackaddr, &stacksize); pthread_attr_destroy(&(thread->thread_attr)); pthread_mutexattr_destroy(&(thread->mutexattr)); pthread_mutex_destroy(thread->mutex); free(thread->mutex); pthread_cond_destroy(thread->cond); free(thread->cond); pthread_mutex_destroy(thread->start_mutex); pthread_cond_destroy(thread->start_cond); free(thread->start_cond); pthread_mutex_destroy(thread->timelock_mutex); free(thread->timelock_mutex); pthread_cond_destroy(thread->timelock_cond); free(thread->timelock_cond); pthread_mutex_destroy(thread->greedy_mutex); free(thread->greedy_mutex); pthread_cond_destroy(thread->greedy_cond); free(thread->greedy_cond); pthread_mutex_destroy(thread->suspend_mutex); free(thread->suspend_mutex); pthread_mutex_destroy(thread->timer_mutex); pthread_cond_destroy(thread->timer_cond); free(thread->timer_cond); /* call parent */ G_OBJECT_CLASS(ags_thread_parent_class)->finalize(gobject); free(stackaddr); free(thread->thread); } void ags_thread_resume_handler(int sig) { #ifdef AGS_DEBUG g_message("thread resume\0"); #endif g_atomic_int_and(&(ags_thread_self->flags), (~AGS_THREAD_SUSPENDED)); ags_thread_resume(ags_thread_self); } void ags_thread_suspend_handler(int sig) { #ifdef AGS_DEBUG g_message("thread suspend\0"); #endif if(ags_thread_self == NULL) return; if ((AGS_THREAD_SUSPENDED & (g_atomic_int_get(&(ags_thread_self->flags)))) != 0) return; g_atomic_int_or(&(ags_thread_self->flags), AGS_THREAD_SUSPENDED); ags_thread_suspend(ags_thread_self); do sigsuspend(&(ags_thread_self->wait_mask)); while ((AGS_THREAD_SUSPENDED & (g_atomic_int_get(&(ags_thread_self->flags)))) != 0); } AgsAccountingTable* ags_accounting_table_alloc(AgsThread *thread) { AgsAccountingTable *accounting_table; accounting_table = (AgsAccountingTable *) malloc(sizeof(AgsAccountingTable)); accounting_table->thread = thread; return(accounting_table); } void ags_accounting_table_set_sanity(GList *table, AgsThread *thread, gdouble sanity) { if(table == NULL){ return; } table = g_list_first(table); while(table != NULL){ if(AGS_ACCOUNTING_TABLE(table->data)->thread == thread){ break; } table = table->next; } if(table != NULL){ AGS_ACCOUNTING_TABLE(table->data)->sanity == sanity; } } /** * ags_thread_set_sync: * @thread: an #AgsThread * @tic: the tic as sync occured. * * Unsets AGS_THREAD_WAIT_0, AGS_THREAD_WAIT_1 or AGS_THREAD_WAIT_2. * Additionaly the thread is woken up by this function if waiting. * * Since: 0.4 */ void ags_thread_set_sync(AgsThread *thread, guint tic) { guint flags; gboolean broadcast; gboolean waiting; if(thread == NULL){ return; } broadcast = FALSE; waiting = FALSE; if(tic > 2){ tic = tic % 3; } flags = g_atomic_int_get(&(thread->flags)); switch(tic){ case 0: { if((AGS_THREAD_WAIT_0 & flags) != 0){ g_atomic_int_and(&(thread->flags), (~AGS_THREAD_WAIT_0)); waiting = TRUE; } } break; case 1: { if((AGS_THREAD_WAIT_1 & flags) != 0){ g_atomic_int_and(&(thread->flags), (~AGS_THREAD_WAIT_1)); waiting = TRUE; } } break; case 2: { if((AGS_THREAD_WAIT_2 & flags) != 0){ g_atomic_int_and(&(thread->flags), (~AGS_THREAD_WAIT_2)); waiting = TRUE; } } break; } if(waiting){ pthread_mutex_lock(thread->mutex); if(broadcast){ pthread_cond_broadcast(thread->cond); }else{ pthread_cond_signal(thread->cond); } pthread_mutex_unlock(thread->mutex); } } /** * ags_thread_set_sync: * @thread: an #AgsThread * @tic: the tic as sync occured. * * Calls ags_thread_set_sync() on all threads. * * Since: 0.4 */ void ags_thread_set_sync_all(AgsThread *thread, guint tic) { AgsThread *main_loop; auto void ags_thread_set_sync_all_recursive(AgsThread *thread, guint tic); void ags_thread_set_sync_all_recursive(AgsThread *thread, guint tic){ AgsThread *child; ags_thread_set_sync(thread, tic); child = g_atomic_pointer_get(&(thread->children)); while(child != NULL){ ags_thread_set_sync_all_recursive(child, tic); child = g_atomic_pointer_get(&(child->next)); } } main_loop = ags_thread_get_toplevel(thread); pthread_mutex_lock(ags_main_loop_get_tree_lock(AGS_MAIN_LOOP(main_loop))); ags_thread_set_sync_all_recursive(main_loop, tic); pthread_mutex_unlock(ags_main_loop_get_tree_lock(AGS_MAIN_LOOP(main_loop))); } /** * ags_thread_lock: * @thread: an #AgsThread * * Locks the threads own mutex and sets the appropriate flag. * * Since: 0.4 */ void ags_thread_lock(AgsThread *thread) { AgsThread *main_loop; if(thread == NULL){ return; } main_loop = ags_thread_get_toplevel(thread); if(AGS_IS_MAIN_LOOP(main_loop)){ pthread_mutex_lock(ags_main_loop_get_tree_lock(AGS_MAIN_LOOP(main_loop))); } if(main_loop == thread){ pthread_mutex_lock(thread->mutex); g_atomic_int_or(&(thread->flags), (AGS_THREAD_LOCKED)); }else{ pthread_mutex_lock(thread->mutex); g_atomic_int_or(&(thread->flags), (AGS_THREAD_LOCKED)); } if(AGS_IS_MAIN_LOOP(main_loop)){ pthread_mutex_unlock(ags_main_loop_get_tree_lock(AGS_MAIN_LOOP(main_loop))); } } /** * ags_thread_trylock: * @thread: an #AgsThread * * Locks the threads own mutex if available and sets the * appropriate flag and returning %TRUE. Otherwise return %FALSE * without lock. * * Since: 0.4 */ gboolean ags_thread_trylock(AgsThread *thread) { AgsThread *main_loop; guint val; if(thread == NULL){ return(FALSE); } main_loop = ags_thread_get_toplevel(thread); if(AGS_IS_MAIN_LOOP(main_loop)){ pthread_mutex_lock(ags_main_loop_get_tree_lock(AGS_MAIN_LOOP(main_loop))); } if(main_loop == thread){ if(pthread_mutex_trylock(thread->mutex) != 0){ if(AGS_IS_MAIN_LOOP(main_loop)){ pthread_mutex_unlock(ags_main_loop_get_tree_lock(AGS_MAIN_LOOP(main_loop))); } return(FALSE); } g_atomic_int_or(&(thread->flags), (AGS_THREAD_LOCKED)); }else{ if(pthread_mutex_trylock(thread->mutex) != 0){ if(AGS_IS_MAIN_LOOP(main_loop)){ pthread_mutex_unlock(ags_main_loop_get_tree_lock(AGS_MAIN_LOOP(main_loop))); } return(FALSE); } g_atomic_int_or(&(thread->flags), (AGS_THREAD_LOCKED)); } if(AGS_IS_MAIN_LOOP(main_loop)){ pthread_mutex_unlock(ags_main_loop_get_tree_lock(AGS_MAIN_LOOP(main_loop))); } return(TRUE); } /** * ags_thread_unlock: * @thread: an #AgsThread * * Unlocks the threads own mutex and unsets the appropriate flag. * * Since: 0.4 */ void ags_thread_unlock(AgsThread *thread) { if(thread == NULL){ return; } g_atomic_int_and(&(thread->flags), (~AGS_THREAD_LOCKED)); pthread_mutex_unlock(thread->mutex); } /** * ags_thread_get_toplevel: * @thread: an #AgsThread * * Retrieve toplevel thread. * * Returns: the toplevevel #AgsThread * * Since: 0.4 */ AgsThread* ags_thread_get_toplevel(AgsThread *thread) { if(thread == NULL){ return(NULL); } while(g_atomic_pointer_get(&(thread->parent)) != NULL){ thread = g_atomic_pointer_get(&(thread->parent)); } return(thread); } /** * ags_thread_first: * @thread: an #AgsThread * * Retrieve first sibling. * * Returns: the very first #AgsThread within same tree level * * Since: 0.4 */ AgsThread* ags_thread_first(AgsThread *thread) { if(thread == NULL){ return(NULL); } while(g_atomic_pointer_get(&(thread->prev)) != NULL){ thread = g_atomic_pointer_get(&(thread->prev)); } return(thread); } /** * ags_thread_last: * @thread: an #AgsThread * * Retrieve last sibling. * * Returns: the very last @AgsThread within same tree level * * Since: 0.4 */ AgsThread* ags_thread_last(AgsThread *thread) { if(thread == NULL){ return(NULL); } while(g_atomic_pointer_get(&(thread->next)) != NULL){ thread = g_atomic_pointer_get(&(thread->next)); } return(thread); } /** * ags_thread_remove_child: * @thread: an #AgsThread * @child: the child to remove * * Remove child of thread. * * Since: 0.4 */ void ags_thread_remove_child(AgsThread *thread, AgsThread *child) { AgsThread *main_loop; AgsThread *prev, *next; if(thread == NULL || child == NULL){ return; } main_loop = ags_thread_get_toplevel(thread); // pthread_mutex_lock(ags_main_loop_get_tree_lock(AGS_MAIN_LOOP(main_loop))); if(g_atomic_pointer_get(&(thread->children)) == child){ g_atomic_pointer_set(&(thread->children), g_atomic_pointer_get(&(child->next))); } if((prev = g_atomic_pointer_get(&(child->prev))) != NULL){ g_atomic_pointer_set(&(prev->next), g_atomic_pointer_get(&(child->next))); } if((next = g_atomic_pointer_get(&(child->next))) != NULL){ g_atomic_pointer_set(&(next->prev), g_atomic_pointer_get(&(child->prev))); } g_atomic_pointer_set(&(child->parent), NULL); g_atomic_pointer_set(&(child->prev), NULL); g_atomic_pointer_set(&(child->next), NULL); // pthread_mutex_unlock(ags_main_loop_get_tree_lock(AGS_MAIN_LOOP(main_loop))); } /** * ags_thread_add_child: * @thread: an #AgsThread * @child: the child to remove * * Add child to thread. * * Since: 0.4 */ void ags_thread_add_child(AgsThread *thread, AgsThread *child) { ags_thread_add_child_extended(thread, child, FALSE, TRUE); } /** * ags_thread_add_child: * @thread: an #AgsThread * @child: the child to remove * @no_start: don't start thread * @no_wait: don't wait until started * * Add child to thread. * * Since: 0.4.2 */ void ags_thread_add_child_extended(AgsThread *thread, AgsThread *child, gboolean no_start, gboolean no_wait) { AgsThread *toplevel; if(thread == NULL || child == NULL){ return; } toplevel = ags_thread_get_toplevel(thread); if(g_atomic_pointer_get(&(child->parent)) != NULL){ ags_thread_remove_child(child->parent, child); } /* */ if(AGS_IS_MAIN_LOOP(toplevel)){ pthread_mutex_lock(ags_main_loop_get_tree_lock(AGS_MAIN_LOOP(toplevel))); } if(g_atomic_pointer_get(&(thread->children)) == NULL){ g_atomic_pointer_set(&(thread->children), child); g_atomic_pointer_set(&(child->parent), thread); }else{ AgsThread *sibling; sibling = ags_thread_last(g_atomic_pointer_get(&(thread->children))); g_atomic_pointer_set(&(sibling->next), child); g_atomic_pointer_set(&(child->prev), sibling); g_atomic_pointer_set(&(child->parent), thread); } if(AGS_IS_MAIN_LOOP(toplevel)){ pthread_mutex_unlock(ags_main_loop_get_tree_lock(AGS_MAIN_LOOP(toplevel))); } if(!no_start){ if((AGS_THREAD_RUNNING & (g_atomic_int_get(&(thread->flags)))) != 0){ /* start child */ ags_thread_start(child); if(!no_wait){ guint val; /* wait child */ pthread_mutex_lock(child->start_mutex); g_atomic_int_set(&(child->start_wait), TRUE); if(g_atomic_int_get(&(child->start_wait)) == TRUE && g_atomic_int_get(&(child->start_done)) == FALSE){ while(g_atomic_int_get(&(child->start_wait)) == TRUE && g_atomic_int_get(&(child->start_done)) == FALSE){ pthread_cond_wait(child->start_cond, child->start_mutex); } } pthread_mutex_unlock(child->start_mutex); } } } } /** * ags_thread_parental_is_locked: * @thread: an #AgsThread * @parent: where to stop iteration * * Check the AGS_THREAD_LOCKED flag in parental levels. * * Returns: %TRUE if locked otherwise %FALSE * * Since: 0.4 */ gboolean ags_thread_parental_is_locked(AgsThread *thread, AgsThread *parent) { AgsThread *current; if(thread == NULL){ return(FALSE); } current = g_atomic_pointer_get(&(thread->parent)); while(current != parent){ if((AGS_THREAD_LOCKED & (g_atomic_int_get(&(current->flags)))) != 0){ return(TRUE); } current = g_atomic_pointer_get(&(current->parent)); } return(FALSE); } /** * ags_thread_sibling_is_locked: * @thread: an #AgsThread * * Check the AGS_THREAD_LOCKED flag within sibling. * * Returns: %TRUE if locked otherwise %FALSE * * Since: 0.4 */ gboolean ags_thread_sibling_is_locked(AgsThread *thread) { if(thread == NULL){ return(FALSE); } thread = ags_thread_first(thread); while(g_atomic_pointer_get(&(thread->next)) != NULL){ if((AGS_THREAD_LOCKED & (g_atomic_int_get(&(thread->flags)))) != 0){ return(TRUE); } thread = g_atomic_pointer_get(&(thread->next)); } return(FALSE); } /** * ags_thread_children_is_locked: * @thread: an #AgsThread * * Check the AGS_THREAD_LOCKED flag within children. * * Returns: %TRUE if locked otherwise %FALSE * * Since: 0.4 */ gboolean ags_thread_children_is_locked(AgsThread *thread) { auto gboolean ags_thread_children_is_locked_recursive(AgsThread *thread); gboolean ags_thread_children_is_locked_recursive(AgsThread *thread){ AgsThread *child; if(thread == NULL){ return(FALSE); } if((AGS_THREAD_LOCKED & (g_atomic_int_get(&(thread->flags)))) != 0){ return(TRUE); } child = g_atomic_pointer_get(&(thread->children)); while(child != NULL){ if(ags_thread_children_is_locked_recursive(child)){ return(TRUE); } child = g_atomic_pointer_get(&(child->next)); } return(FALSE); } if(thread == NULL){ return(FALSE); } return(ags_thread_children_is_locked_recursive(thread)); } gboolean ags_thread_is_current_ready(AgsThread *current, guint tic) { AgsThread *toplevel; guint flags; gboolean retval; toplevel = ags_thread_get_toplevel(current); // pthread_mutex_lock(current->mutex); flags = g_atomic_int_get(&(current->flags)); retval = FALSE; if((AGS_THREAD_RUNNING & flags) == 0){ retval = TRUE; } if((AGS_THREAD_INITIAL_RUN & flags) != 0){ retval = TRUE; } if((AGS_THREAD_READY & flags) != 0){ retval = TRUE; } if(retval){ // pthread_mutex_unlock(current->mutex); return(TRUE); } if(tic > 2){ tic = tic % 3; } switch(tic){ case 0: { if((AGS_THREAD_WAIT_0 & flags) == 0){ retval = TRUE; } } break; case 1: { if((AGS_THREAD_WAIT_1 & flags) == 0){ retval = TRUE; } } break; case 2: { if((AGS_THREAD_WAIT_2 & flags) == 0){ retval = TRUE; } } break; } // pthread_mutex_unlock(current->mutex); return(retval); } gboolean ags_thread_is_tree_ready(AgsThread *thread, guint tic) { AgsThread *main_loop; gboolean retval; auto gboolean ags_thread_is_tree_ready_current_tic(AgsThread *current); auto gboolean ags_thread_is_tree_ready_recursive(AgsThread *current); gboolean ags_thread_is_tree_ready_current_tic(AgsThread *current){ AgsThread *toplevel; guint flags; gboolean retval; toplevel = ags_thread_get_toplevel(current); // pthread_mutex_lock(current->mutex); flags = g_atomic_int_get(&(current->flags)); retval = FALSE; if((AGS_THREAD_RUNNING & flags) == 0){ retval = TRUE; } if((AGS_THREAD_INITIAL_RUN & flags) != 0){ retval = TRUE; } if((AGS_THREAD_READY & flags) != 0){ retval = TRUE; } if(retval){ // pthread_mutex_unlock(current->mutex); return(TRUE); } if(tic > 2){ tic = tic % 3; } switch(tic){ case 0: { if((AGS_THREAD_WAIT_0 & flags) != 0){ retval = TRUE; } } break; case 1: { if((AGS_THREAD_WAIT_1 & flags) != 0){ retval = TRUE; } } break; case 2: { if((AGS_THREAD_WAIT_2 & flags) != 0){ retval = TRUE; } } break; } // pthread_mutex_unlock(current->mutex); return(retval); } gboolean ags_thread_is_tree_ready_recursive(AgsThread *current){ AgsThread *children; children = g_atomic_pointer_get(&(current->children)); if(!ags_thread_is_tree_ready_current_tic(current)){ return(FALSE); } while(children != NULL){ if(!ags_thread_is_tree_ready_recursive(children)){ return(FALSE); } children = g_atomic_pointer_get(&(children->next)); } return(TRUE); } main_loop = ags_thread_get_toplevel(thread); retval = ags_thread_is_tree_ready_recursive(main_loop); return(retval); } /** * ags_thread_next_parent_locked: * @thread: an #AgsThread * @parent: the parent #AgsThread where to stop. * * Retrieve next locked thread above @thread. * * Since: 0.4 */ AgsThread* ags_thread_next_parent_locked(AgsThread *thread, AgsThread *parent) { AgsThread *current; current = g_atomic_pointer_get(&(thread->parent)); while(current != parent){ if((AGS_THREAD_WAITING_FOR_CHILDREN & (g_atomic_int_get(&(current->flags)))) != 0){ return(current); } current = g_atomic_pointer_get(&(current->parent)); } return(NULL); } /** * ags_thread_next_sibling_locked: * @thread: an #AgsThread * * Retrieve next locked thread neighbooring @thread * * Since: 0.4 */ AgsThread* ags_thread_next_sibling_locked(AgsThread *thread) { AgsThread *current; current = ags_thread_first(thread); while(current != NULL){ if(current == thread){ current = g_atomic_pointer_get(&(current->next)); continue; } if((AGS_THREAD_WAITING_FOR_SIBLING & (g_atomic_int_get(&(thread->flags)))) != 0){ return(current); } current = g_atomic_pointer_get(&(current->next)); } return(NULL); } /** * ags_thread_next_children_locked: * @thread: an #AgsThread * * Retrieve next locked thread following @thread * * Since: 0.4 */ AgsThread* ags_thread_next_children_locked(AgsThread *thread) { auto AgsThread* ags_thread_next_children_locked_recursive(AgsThread *thread); AgsThread* ags_thread_next_children_locked_recursive(AgsThread *child){ AgsThread *current; current = ags_thread_last(child); while(current != NULL){ ags_thread_next_children_locked_recursive(g_atomic_pointer_get(&(current->children))); if((AGS_THREAD_WAITING_FOR_PARENT & (g_atomic_int_get(&(current->flags)))) != 0){ return(current); } current = g_atomic_pointer_get(&(current->prev)); } return(NULL); } return(ags_thread_next_children_locked(g_atomic_pointer_get(&(thread->children)))); } /** * ags_thread_lock_parent: * @thread: an #AgsThread * @parent: the parent #AgsThread where to stop. * * Lock parent tree structure. * * Since: 0.4 */ void ags_thread_lock_parent(AgsThread *thread, AgsThread *parent) { AgsThread *current; if(thread == NULL){ return; } ags_thread_lock(thread); current = g_atomic_pointer_get(&(thread->parent)); while(current != parent){ ags_thread_lock(current); g_atomic_int_or(&(current->flags), AGS_THREAD_WAITING_FOR_CHILDREN); current = g_atomic_pointer_get(&(current->parent)); } } /** * ags_thread_lock_sibling: * @thread: an #AgsThread * * Lock sibling tree structure. * * Since: 0.4 */ void ags_thread_lock_sibling(AgsThread *thread) { AgsThread *current; if(thread == NULL){ return; } ags_thread_lock(thread); current = ags_thread_first(thread); while(current != NULL){ if(current == thread){ current = g_atomic_pointer_get(&(current->next)); continue; } ags_thread_lock(current); g_atomic_int_or(&(current->flags), AGS_THREAD_WAITING_FOR_SIBLING); current = g_atomic_pointer_get(&(current->next)); } } /** * ags_thread_lock_children: * @thread: an #AgsThread * * Lock child tree structure. * * Since: 0.4 */ void ags_thread_lock_children(AgsThread *thread) { auto void ags_thread_lock_children_recursive(AgsThread *child); void ags_thread_lock_children_recursive(AgsThread *child){ AgsThread *current; current = ags_thread_last(child); while(current != NULL){ ags_thread_lock_children_recursive(g_atomic_pointer_get(&(current->children))); ags_thread_lock(current); g_atomic_int_or(&(current->flags), AGS_THREAD_WAITING_FOR_PARENT); current = g_atomic_pointer_get(&(current->prev)); } } ags_thread_lock(thread); ags_thread_lock_children_recursive(g_atomic_pointer_get(&(thread->children))); } void ags_thread_lock_all(AgsThread *thread) { ags_thread_lock_parent(thread, NULL); ags_thread_lock_sibling(thread); ags_thread_lock_children(thread); } /** * ags_thread_unlock_parent: * @thread: an #AgsThread * @parent: the parent #AgsThread where to stop. * * Unlock parent tree structure. * * Since: 0.4 */ void ags_thread_unlock_parent(AgsThread *thread, AgsThread *parent) { AgsThread *current; if(thread == NULL){ return; } current = g_atomic_pointer_get(&(thread->parent)); while(current != parent){ g_atomic_int_and(&(current->flags), (~AGS_THREAD_WAITING_FOR_CHILDREN)); if((AGS_THREAD_BROADCAST_PARENT & (g_atomic_int_get(&(thread->flags)))) == 0){ pthread_cond_signal(current->cond); }else{ pthread_cond_broadcast(current->cond); } ags_thread_unlock(current); current = g_atomic_pointer_get(&(current->parent)); } } /** * ags_thread_unlock_sibling: * @thread: an #AgsThread * * Unlock sibling tree structure. * * Since: 0.4 */ void ags_thread_unlock_sibling(AgsThread *thread) { AgsThread *current; if(thread == NULL){ return; } current = ags_thread_first(thread); while(current != NULL){ if(current == thread){ current = g_atomic_pointer_get(&(current->next)); continue; } g_atomic_int_and(&(current->flags), (~AGS_THREAD_WAITING_FOR_SIBLING)); if((AGS_THREAD_BROADCAST_SIBLING & (g_atomic_int_get(&(thread->flags)))) == 0){ pthread_cond_signal(current->cond); }else{ pthread_cond_broadcast(current->cond); } ags_thread_unlock(current); current = g_atomic_pointer_get(&(current->next)); } } /** * ags_thread_unlock_children: * @thread: an #AgsThread * * Unlock child tree structure. * * Since: 0.4 */ void ags_thread_unlock_children(AgsThread *thread) { auto void ags_thread_unlock_children_recursive(AgsThread *child); void ags_thread_unlock_children_recursive(AgsThread *child){ AgsThread *current; if(child == NULL){ return; } current = ags_thread_last(child); while(current != NULL){ ags_thread_unlock_children_recursive(g_atomic_pointer_get(&(current->children))); g_atomic_int_and(&(current->flags), (~AGS_THREAD_WAITING_FOR_PARENT)); if((AGS_THREAD_INITIAL_RUN & (g_atomic_int_get(&(thread->flags)))) == 0 && !AGS_IS_MAIN_LOOP(thread)){ if((AGS_THREAD_BROADCAST_CHILDREN & (g_atomic_int_get(&(thread->flags)))) == 0){ pthread_cond_signal(current->cond); }else{ pthread_cond_broadcast(current->cond); } } ags_thread_unlock(current); current = g_atomic_pointer_get(&(current->prev)); } } ags_thread_unlock_children_recursive(g_atomic_pointer_get(&(thread->children))); } void ags_thread_unlock_all(AgsThread *thread) { ags_thread_unlock_parent(thread, NULL); ags_thread_unlock_sibling(thread); ags_thread_unlock_children(thread); } /** * ags_thread_wait_parent: * @thread: an #AgsThread * @parent: the parent #AgsThread where to stop. * * Wait on parent tree structure. * * Since: 0.4 */ void ags_thread_wait_parent(AgsThread *thread, AgsThread *parent) { AgsThread *current; if(thread == NULL || thread == parent){ return; } /* wait parent */ current = g_atomic_pointer_get(&(thread->parent)); while((current != NULL && current != parent) && (((AGS_THREAD_IDLE & (g_atomic_int_get(&(current->flags)))) != 0 || (AGS_THREAD_WAITING_FOR_CHILDREN & (g_atomic_int_get(&(current->flags)))) == 0) || g_atomic_pointer_get(&(current->parent)) != parent)){ pthread_cond_wait(current->cond, current->mutex); if(!((AGS_THREAD_IDLE & (g_atomic_int_get(&(current->flags)))) != 0 || (AGS_THREAD_WAITING_FOR_CHILDREN & (g_atomic_int_get(&(current->flags)))) == 0)){ current = g_atomic_pointer_get(&(current->parent)); } } /* unset flag */ g_atomic_int_and(&(thread->flags), (~AGS_THREAD_WAITING_FOR_PARENT)); } /** * ags_thread_wait_sibling: * @thread: an #AgsThread * * Wait on sibling tree structure. * * Since: 0.4 */ void ags_thread_wait_sibling(AgsThread *thread) { AgsThread *current; if(thread == NULL){ return; } /* wait sibling */ current = ags_thread_first(thread); while(current != NULL && (((AGS_THREAD_IDLE & (g_atomic_int_get(&(current->flags)))) != 0 || (AGS_THREAD_WAITING_FOR_SIBLING & (g_atomic_int_get(&(current->flags)))) == 0) || g_atomic_pointer_get(&(current->next)) != NULL)){ if(current == thread){ current = g_atomic_pointer_get(&(current->next)); continue; } pthread_cond_wait(current->cond, current->mutex); if(!((AGS_THREAD_IDLE & (g_atomic_int_get(&(current->flags)))) != 0 || (AGS_THREAD_WAITING_FOR_SIBLING & (g_atomic_int_get(&(current->flags)))) == 0)){ current = g_atomic_pointer_get(&(current->next)); } } /* unset flags */ g_atomic_int_and(&(thread->flags), (~AGS_THREAD_WAITING_FOR_SIBLING)); } /** * ags_thread_wait_children: * @thread: an #AgsThread * * Wait on child tree structure. * * Since: 0.4 */ void ags_thread_wait_children(AgsThread *thread) { auto void ags_thread_wait_children_recursive(AgsThread *child); void ags_thread_wait_children_recursive(AgsThread *child){ gboolean initial_run; if(child == NULL){ return; } initial_run = TRUE; while(child != NULL && (((AGS_THREAD_IDLE & (g_atomic_int_get(&(child->flags)))) != 0 || (AGS_THREAD_WAITING_FOR_PARENT & (g_atomic_int_get(&(child->flags)))) == 0) || g_atomic_pointer_get(&(child->next)) != NULL)){ if(initial_run){ ags_thread_wait_children_recursive(g_atomic_pointer_get(&(child->children))); initial_run = FALSE; } pthread_cond_wait(child->cond, child->mutex); if(!((AGS_THREAD_IDLE & (g_atomic_int_get(&(child->flags)))) != 0 || (AGS_THREAD_WAITING_FOR_PARENT & (g_atomic_int_get(&(child->flags)))) == 0)){ child = g_atomic_pointer_get(&(child->next)); initial_run = TRUE; } } } if(thread == NULL){ return; } /* wait children */ ags_thread_wait_children_recursive(g_atomic_pointer_get(&(thread->children))); /* unset flags */ g_atomic_int_and(&(thread->flags), (~AGS_THREAD_WAITING_FOR_CHILDREN)); } /** * ags_thread_signal_parent: * @thread: an #AgsThread * @broadcast: whether to perforam a signal or to broadcast * * Signals the tree in higher levels. * * Since: 0.4 */ void ags_thread_signal_parent(AgsThread *thread, AgsThread *parent, gboolean broadcast) { AgsThread *current; current = g_atomic_pointer_get(&(thread->parent)); while(current != NULL){ if((AGS_THREAD_WAIT_FOR_CHILDREN & (g_atomic_int_get(&(current->flags)))) != 0){ if(!broadcast){ pthread_cond_signal(current->cond); }else{ pthread_cond_broadcast(current->cond); } } current = g_atomic_pointer_get(&(current->parent)); } } /** * ags_thread_signal_sibling: * @thread: an #AgsThread * @broadcast: whether to perforam a signal or to broadcast * * Signals the tree on same level. * * Since: 0.4 */ void ags_thread_signal_sibling(AgsThread *thread, gboolean broadcast) { AgsThread *current; current = ags_thread_first(thread); while(current != NULL){ if((AGS_THREAD_WAIT_FOR_SIBLING & (g_atomic_int_get(&(current->flags)))) != 0){ if(!broadcast){ pthread_cond_signal(current->cond); }else{ pthread_cond_broadcast(current->cond); } } current = g_atomic_pointer_get(&(current->next)); } } /** * ags_thread_signal_children: * @thread: an #AgsThread * @broadcast: whether to perforam a signal or to broadcast * * Signals the tree in lower levels. * * Since: 0.4 */ void ags_thread_signal_children(AgsThread *thread, gboolean broadcast) { auto void ags_thread_signal_children_recursive(AgsThread *thread, gboolean broadcast); void ags_thread_signal_children_recursive(AgsThread *thread, gboolean broadcast){ AgsThread *current; if(thread == NULL){ return; } current = thread; while(current != NULL){ if((AGS_THREAD_WAIT_FOR_PARENT & (g_atomic_int_get(&(current->flags)))) != 0){ if(!broadcast){ pthread_cond_signal(current->cond); }else{ pthread_cond_broadcast(current->cond); } } ags_thread_signal_children_recursive(current, broadcast); current = g_atomic_pointer_get(&(current->next)); } } ags_thread_signal_children(g_atomic_pointer_get(&(thread->children)), broadcast); } void ags_thread_real_start(AgsThread *thread) { AgsMainLoop *main_loop; guint val; if(thread == NULL){ return; } main_loop = AGS_MAIN_LOOP(ags_thread_get_toplevel(thread)); thread->rt_setup = FALSE; #ifdef AGS_DEBUG g_message("thread start: %s\0", G_OBJECT_TYPE_NAME(thread)); #endif /* */ val = g_atomic_int_get(&(thread->flags)); if((AGS_THREAD_TIMELOCK_RUN & val) != 0){ pthread_create(thread->timelock_thread, NULL, ags_thread_timelock_loop, thread); } /* */ pthread_create(thread->thread, &(thread->thread_attr), &ags_thread_loop, thread); } /** * ags_thread_start: * @thread: the #AgsThread instance * * Start the thread. * * Since: 0.4 */ void ags_thread_start(AgsThread *thread) { g_return_if_fail(AGS_IS_THREAD(thread)); g_object_ref(G_OBJECT(thread)); g_signal_emit(G_OBJECT(thread), thread_signals[START], 0); g_object_unref(G_OBJECT(thread)); } void* ags_thread_timer(void *ptr) { } void* ags_thread_loop(void *ptr) { AgsThread *thread, *main_loop; GObject *async_queue; pthread_mutex_t *run_mutex; pthread_cond_t *run_cond; gboolean is_in_sync; gboolean wait_for_parent, wait_for_sibling, wait_for_children; guint current_tic, next_tic; guint tic; guint val, running, locked_greedy; guint counter, delay; guint i, i_stop; struct timespec time_prev, time_now; auto void ags_thread_loop_sync(AgsThread *thread); auto void ags_thread_loop_wait_async(); void ags_thread_loop_sync(AgsThread *thread){ /* sync */ if(current_tic = 2){ next_tic = 0; }else if(current_tic = 0){ next_tic = 1; }else if(current_tic = 1){ next_tic = 2; } if(next_tic = 2){ tic = 0; }else if(next_tic = 0){ tic = 1; }else if(next_tic = 1){ tic = 2; } pthread_mutex_lock(ags_main_loop_get_tree_lock(AGS_MAIN_LOOP(main_loop))); switch(current_tic){ case 0: { g_atomic_int_or(&(thread->flags), AGS_THREAD_WAIT_0); } break; case 1: { g_atomic_int_or(&(thread->flags), AGS_THREAD_WAIT_1); } break; case 2: { g_atomic_int_or(&(thread->flags), AGS_THREAD_WAIT_2); } break; } if(!ags_thread_is_tree_ready(thread, current_tic)){ // ags_thread_hangcheck(main_loop); while(!ags_thread_is_current_ready(thread, current_tic)){ pthread_mutex_unlock(ags_main_loop_get_tree_lock(AGS_MAIN_LOOP(main_loop))); pthread_cond_wait(thread->cond, thread->mutex); pthread_mutex_lock(ags_main_loop_get_tree_lock(AGS_MAIN_LOOP(main_loop))); } pthread_mutex_unlock(ags_main_loop_get_tree_lock(AGS_MAIN_LOOP(main_loop))); ags_main_loop_set_last_sync(AGS_MAIN_LOOP(main_loop), current_tic); ags_main_loop_set_tic(AGS_MAIN_LOOP(main_loop), next_tic); }else{ /* async-queue */ ags_async_queue_set_run(AGS_ASYNC_QUEUE(async_queue), FALSE); /* thread tree */ ags_thread_set_sync_all(main_loop, current_tic); pthread_mutex_unlock(ags_main_loop_get_tree_lock(AGS_MAIN_LOOP(main_loop))); ags_main_loop_set_last_sync(AGS_MAIN_LOOP(main_loop), current_tic); ags_main_loop_set_tic(AGS_MAIN_LOOP(main_loop), next_tic); } current_tic = next_tic; } void ags_thread_loop_wait_async(){ /* async-queue */ if(!AGS_IS_ASYNC_QUEUE(thread)){ if((AGS_THREAD_RUNNING & (g_atomic_int_get(&(AGS_THREAD(async_queue)->flags)))) != 0 && (AGS_THREAD_INITIAL_RUN & (g_atomic_int_get(&(AGS_THREAD(async_queue)->flags)))) == 0 && (AGS_THREAD_INITIAL_RUN & (g_atomic_int_get(&(thread->flags)))) == 0){ pthread_mutex_lock(run_mutex); // g_message("blocked\0"); if(!ags_async_queue_is_run(AGS_ASYNC_QUEUE(async_queue))){ // g_message("wait\0"); while(!ags_async_queue_is_run(AGS_ASYNC_QUEUE(async_queue))){ pthread_cond_wait(run_cond, run_mutex); } } pthread_mutex_unlock(run_mutex); } }else{ // g_message("not blocked\0"); } } ags_thread_self = thread = AGS_THREAD(ptr); main_loop = ags_thread_get_toplevel(thread); /* async-queue */ async_queue = ags_main_loop_get_async_queue(main_loop); run_mutex = ags_async_queue_get_run_mutex(AGS_ASYNC_QUEUE(async_queue)); run_cond = ags_async_queue_get_run_cond(AGS_ASYNC_QUEUE(async_queue)); /* */ current_tic = ags_main_loop_get_tic(AGS_MAIN_LOOP(main_loop)); g_atomic_int_or(&(thread->flags), (AGS_THREAD_RUNNING | AGS_THREAD_INITIAL_RUN)); running = g_atomic_int_get(&(thread->flags)); counter = 0; /* */ #ifndef AGS_USE_TIMER if(g_atomic_pointer_get(&(thread->parent)) == NULL){ clock_gettime(CLOCK_MONOTONIC, &time_prev); } #endif while((AGS_THREAD_RUNNING & running) != 0){ if(thread->freq >= 1.0){ delay = AGS_THREAD_MAX_PRECISION / thread->freq / (1000.0 / AGS_THREAD_MAX_PRECISION); i_stop = 1; }else{ delay = AGS_THREAD_MAX_PRECISION / thread->freq / (1000.0 / AGS_THREAD_MAX_PRECISION); i_stop = 1; } /* if still running */ running = g_atomic_int_get(&(thread->flags)); /* idle */ if(g_atomic_pointer_get(&(thread->parent)) == NULL){ #ifdef AGS_USE_TIMER pthread_mutex_lock(thread->timer_mutex); if(!g_atomic_int_get(&(thread->timer_expired))){ g_atomic_int_set(&(thread->timer_wait), TRUE); while(!g_atomic_int_get(&(thread->timer_expired))){ pthread_cond_wait(thread->timer_cond, thread->timer_mutex); } } g_atomic_int_set(&(thread->timer_wait), FALSE); g_atomic_int_set(&(thread->timer_expired), FALSE); pthread_mutex_unlock(thread->timer_mutex); #else long time_spent; static const long time_unit = NSEC_PER_SEC / AGS_THREAD_MAX_PRECISION; clock_gettime(CLOCK_MONOTONIC, &time_now); if(time_now.tv_sec > time_prev.tv_sec){ time_spent = (time_now.tv_nsec) + (NSEC_PER_SEC - time_prev.tv_nsec); }else{ time_spent = time_now.tv_nsec - time_prev.tv_nsec; } if(time_spent < time_unit){ struct timespec timed_sleep = { 0, 0, }; if(time_spent < time_unit){ timed_sleep.tv_nsec = time_unit - time_spent; nanosleep(&timed_sleep, NULL); } } clock_gettime(CLOCK_MONOTONIC, &time_prev); #endif } if(delay >= 1.0){ counter++; if(counter < delay){ counter++; if((AGS_THREAD_INITIAL_RUN & (g_atomic_int_get(&(thread->flags)))) != 0){ /* unset initial run */ /* signal AgsAudioLoop */ pthread_mutex_lock(thread->start_mutex); g_atomic_int_and(&(thread->flags), (~AGS_THREAD_INITIAL_RUN)); g_atomic_int_set(&(thread->start_done), TRUE); if(g_atomic_int_get(&(thread->start_wait)) == TRUE){ pthread_cond_broadcast(thread->start_cond); } pthread_mutex_unlock(thread->start_mutex); }else{ /* run in hierarchy */ pthread_mutex_lock(thread->mutex); ags_thread_loop_sync(thread); pthread_mutex_unlock(thread->mutex); ags_thread_loop_wait_async(); } // pthread_yield(); continue; }else{ counter = 0; } }else{ if(counter < delay){ counter++; if((AGS_THREAD_INITIAL_RUN & (g_atomic_int_get(&(thread->flags)))) != 0){ /* unset initial run */ g_atomic_int_and(&(thread->flags), (~AGS_THREAD_INITIAL_RUN)); g_atomic_int_and(&(thread->flags), (~AGS_THREAD_WAIT_0)); /* signal AgsAudioLoop */ pthread_mutex_lock(thread->start_mutex); g_atomic_int_and(&(thread->flags), (~AGS_THREAD_INITIAL_RUN)); g_atomic_int_set(&(thread->start_done), TRUE); if(g_atomic_int_get(&(thread->start_wait)) == TRUE){ pthread_cond_broadcast(thread->start_cond); } pthread_mutex_unlock(thread->start_mutex); }else{ /* run in hierarchy */ pthread_mutex_lock(thread->mutex); ags_thread_loop_sync(thread); pthread_mutex_unlock(thread->mutex); ags_thread_loop_wait_async(); } // pthread_yield(); continue; }else{ counter = 0; } } for(i = 0; i < i_stop && (AGS_THREAD_RUNNING & running) != 0; i++){ running = g_atomic_int_get(&(thread->flags)); /* barrier */ if((AGS_THREAD_WAITING_FOR_BARRIER & (g_atomic_int_get(&(thread->flags)))) != 0){ int wait_count; if(thread->first_barrier){ /* retrieve wait count */ ags_thread_lock(thread); wait_count = thread->wait_count[0]; ags_thread_unlock(thread); /* init and wait */ pthread_barrier_init(thread->barrier[0], NULL, wait_count); pthread_barrier_wait(thread->barrier[0]); }else{ /* retrieve wait count */ ags_thread_lock(thread); wait_count = thread->wait_count[1]; ags_thread_unlock(thread); /* init and wait */ pthread_barrier_init(thread->barrier[1], NULL, wait_count); pthread_barrier_wait(thread->barrier[1]); } } if((AGS_THREAD_INITIAL_RUN & (g_atomic_int_get(&(thread->flags)))) == 0){ /* run in hierarchy */ pthread_mutex_lock(thread->mutex); ags_thread_loop_sync(thread); pthread_mutex_unlock(thread->mutex); ags_thread_loop_wait_async(); } /* */ switch(current_tic){ case 2: { current_tic = 0; break; } case 1: { current_tic = 2; break; } case 0: { current_tic = 1; break; } } /* set idle flag */ g_atomic_int_or(&(thread->flags), AGS_THREAD_IDLE); if((AGS_THREAD_WAIT_FOR_PARENT & (g_atomic_int_get(&(thread->flags)))) != 0){ wait_for_parent = TRUE; g_atomic_int_or(&(thread->flags), AGS_THREAD_WAITING_FOR_PARENT); ags_thread_lock_parent(thread, NULL); }else{ wait_for_parent = FALSE; } /* lock sibling */ if((AGS_THREAD_WAIT_FOR_SIBLING & (g_atomic_int_get(&(thread->flags)))) != 0){ wait_for_sibling = TRUE; g_atomic_int_or(&(thread->flags), AGS_THREAD_WAITING_FOR_SIBLING); ags_thread_lock_sibling(thread); }else{ wait_for_sibling = FALSE; } /* lock_children */ if((AGS_THREAD_WAIT_FOR_CHILDREN & (g_atomic_int_get(&(thread->flags)))) != 0){ wait_for_children = TRUE; g_atomic_int_or(&(thread->flags), AGS_THREAD_WAITING_FOR_CHILDREN); ags_thread_lock_children(thread); }else{ wait_for_children = FALSE; } /* skip very first sync of AgsAudioLoop */ if((AGS_THREAD_INITIAL_RUN & (g_atomic_int_get(&(thread->flags)))) == 0 && !AGS_IS_MAIN_LOOP(thread)){ /* wait parent */ if(wait_for_parent){ ags_thread_wait_parent(thread, NULL); } /* wait sibling */ if(wait_for_sibling){ ags_thread_wait_sibling(thread); } /* wait children */ if(wait_for_children){ ags_thread_wait_children(thread); } } /* check for greedy to announce */ if(thread->greedy_locks != NULL){ GList *greedy_locks; greedy_locks = thread->greedy_locks; while(greedy_locks != NULL){ pthread_mutex_lock(AGS_THREAD(greedy_locks->data)->greedy_mutex); locked_greedy = g_atomic_int_get(&(AGS_THREAD(greedy_locks->data)->locked_greedy)); locked_greedy++; g_atomic_int_set(&(AGS_THREAD(greedy_locks->data)->locked_greedy), locked_greedy); pthread_mutex_unlock(AGS_THREAD(greedy_locks->data)->greedy_mutex); greedy_locks = greedy_locks->next; } } /* greedy work around */ pthread_mutex_lock(thread->greedy_mutex); locked_greedy = g_atomic_int_get(&(thread->locked_greedy)); if(locked_greedy != 0){ while(locked_greedy != 0){ pthread_cond_wait(thread->greedy_cond, thread->greedy_mutex); locked_greedy = g_atomic_int_get(&(thread->locked_greedy)); } } pthread_mutex_unlock(thread->greedy_mutex); /* */ pthread_mutex_lock(thread->timelock_mutex); val = g_atomic_int_get(&(thread->flags)); if((AGS_THREAD_TIMELOCK_RUN & val) != 0){ guint locked; locked = g_atomic_int_get(&(thread->flags)); g_atomic_int_and(&(thread->flags), (~AGS_THREAD_TIMELOCK_WAIT)); if((AGS_THREAD_TIMELOCK_WAIT & locked) != 0){ pthread_cond_signal(thread->timelock_cond); } } pthread_mutex_unlock(thread->timelock_mutex); /* run */ ags_thread_run(thread); // g_printf("%s\n\0", G_OBJECT_TYPE_NAME(thread)); /* */ running = g_atomic_int_get(&(thread->flags)); /* check for greedy to release */ if(thread->greedy_locks != NULL){ GList *greedy_locks; greedy_locks = thread->greedy_locks; while(greedy_locks != NULL){ pthread_mutex_lock(AGS_THREAD(greedy_locks->data)->greedy_mutex); locked_greedy = g_atomic_int_get(&(AGS_THREAD(greedy_locks->data)->locked_greedy)); locked_greedy--; g_atomic_int_set(&(AGS_THREAD(greedy_locks->data)->locked_greedy), locked_greedy); pthread_cond_signal(AGS_THREAD(greedy_locks->data)->greedy_cond); pthread_mutex_unlock(AGS_THREAD(greedy_locks->data)->greedy_mutex); greedy_locks = greedy_locks->next; } } /* unset idle flag */ g_atomic_int_and(&(thread->flags), (~AGS_THREAD_IDLE)); /* unlock parent */ if(wait_for_parent){ ags_thread_unlock_parent(thread, NULL); } /* unlock sibling */ if(wait_for_sibling){ ags_thread_unlock_sibling(thread); } /* unlock children */ if(wait_for_children){ ags_thread_unlock_children(thread); } if(thread->freq >= 1.0){ /* unset initial run */ if((AGS_THREAD_INITIAL_RUN & (g_atomic_int_get(&(thread->flags)))) != 0){ g_atomic_int_and(&(thread->flags), (~AGS_THREAD_INITIAL_RUN)); g_atomic_int_and(&(thread->flags), (~AGS_THREAD_WAIT_0)); /* signal AgsAudioLoop */ pthread_mutex_lock(thread->start_mutex); g_atomic_int_and(&(thread->flags), (~AGS_THREAD_INITIAL_RUN)); g_atomic_int_set(&(thread->start_done), TRUE); if(g_atomic_int_get(&(thread->start_wait)) == TRUE){ pthread_cond_broadcast(thread->start_cond); } pthread_mutex_unlock(thread->start_mutex); } } } pthread_yield(); } if(current_tic = 2){ next_tic = 0; }else if(current_tic = 0){ next_tic = 1; }else if(current_tic = 1){ next_tic = 2; } if(next_tic = 2){ tic = 0; }else if(next_tic = 0){ tic = 1; }else if(next_tic = 1){ tic = 2; } pthread_mutex_lock(ags_main_loop_get_tree_lock(AGS_MAIN_LOOP(main_loop))); if((AGS_THREAD_UNREF_ON_EXIT & (g_atomic_int_get(&(thread->flags)))) != 0){ ags_thread_remove_child(g_atomic_pointer_get(&(thread->parent)), thread); g_object_unref(thread); } if(ags_thread_is_tree_ready(main_loop, current_tic) && current_tic == ags_main_loop_get_tic(AGS_MAIN_LOOP(main_loop))){ ags_thread_set_sync_all(main_loop, current_tic); pthread_mutex_unlock(ags_main_loop_get_tree_lock(AGS_MAIN_LOOP(main_loop))); ags_main_loop_set_last_sync(AGS_MAIN_LOOP(main_loop), current_tic); ags_main_loop_set_tic(AGS_MAIN_LOOP(main_loop), next_tic); }else{ pthread_mutex_unlock(ags_main_loop_get_tree_lock(AGS_MAIN_LOOP(main_loop))); } #ifdef AGS_DEBUG g_message("thread finished\0"); #endif /* exit thread */ pthread_exit(NULL); } /** * ags_thread_run: * @thread: the #AgsThread instance * * Only for internal use of ags_thread_loop but you may want to set the your very own * class function namely your thread's routine. * * Since: 0.4 */ void ags_thread_run(AgsThread *thread) { g_return_if_fail(AGS_IS_THREAD(thread)); g_object_ref(G_OBJECT(thread)); g_signal_emit(G_OBJECT(thread), thread_signals[RUN], 0); g_object_unref(G_OBJECT(thread)); } void ags_thread_suspend(AgsThread *thread) { g_return_if_fail(AGS_IS_THREAD(thread)); g_object_ref(G_OBJECT(thread)); g_signal_emit(G_OBJECT(thread), thread_signals[SUSPEND], 0); g_object_unref(G_OBJECT(thread)); } void ags_thread_resume(AgsThread *thread) { g_return_if_fail(AGS_IS_THREAD(thread)); g_object_ref(G_OBJECT(thread)); g_signal_emit(G_OBJECT(thread), thread_signals[RESUME], 0); g_object_unref(G_OBJECT(thread)); } void* ags_thread_timelock_loop(void *ptr) { AgsThread *thread; int retval; guint val; thread = AGS_THREAD(ptr); val = g_atomic_int_get(&(thread->flags)); pthread_mutex_lock(thread->timelock_mutex); g_atomic_int_or(&(thread->flags), AGS_THREAD_TIMELOCK_WAIT); while((AGS_THREAD_RUNNING & (val)) != 0){ g_atomic_int_or(&(thread->flags), AGS_THREAD_TIMELOCK_WAIT); val = g_atomic_int_get(&(thread->flags)); while((AGS_THREAD_TIMELOCK_WAIT & (val)) != 0){ retval = pthread_cond_wait(thread->timelock_cond, thread->timelock_mutex); val = g_atomic_int_get(&(thread->flags)); } nanosleep(&(thread->timelock), NULL); // ndelay(thread->timelock.tv_nsec); val = g_atomic_int_get(&(thread->flags)); if((AGS_THREAD_WAIT_0 & val) != 0){ #ifdef AGS_DEBUG g_message("thread in realtime\0"); #endif }else{ #ifdef AGS_DEBUG g_message("thread timelock\0"); #endif ags_thread_timelock(thread); } val = g_atomic_int_get(&(thread->flags)); } pthread_mutex_unlock(thread->timelock_mutex); } void ags_thread_real_timelock(AgsThread *thread) { AgsThread *main_loop; GList *greedy_locks; guint locked_greedy, val; guint tic, next_tic; pthread_mutex_lock(thread->greedy_mutex); tic = ags_main_loop_get_tic(AGS_MAIN_LOOP(main_loop)); if(tic = 2){ next_tic = 0; }else if(tic = 0){ next_tic = 1; }else if(tic = 1){ next_tic = 2; } #if defined(AGS_PTHREAD_SUSPEND) || defined(AGS_LINUX_SIGNALS) val = g_atomic_int_get(&(thread->flags)); if((AGS_THREAD_SKIP_NON_GREEDY & val) != 0){ #endif /* * bad choice because throughput will suffer but it's your only choice as long * pthread_suspend and pthread_resume will be missing. */ ags_thread_lock(main_loop); greedy_locks = thread->greedy_locks; while(greedy_locks != NULL){ pthread_mutex_lock(AGS_THREAD(greedy_locks->data)->greedy_mutex); g_atomic_int_or(&(AGS_THREAD(greedy_locks->data)->flags), (AGS_THREAD_WAIT_0 | AGS_THREAD_SKIPPED_BY_TIMELOCK)); pthread_mutex_unlock(AGS_THREAD(greedy_locks->data)->greedy_mutex); greedy_locks = greedy_locks->next; } ags_thread_unlock(main_loop); if(!ags_thread_is_tree_ready(thread, next_tic)){ g_atomic_int_or(&(thread->flags), AGS_THREAD_WAIT_0); while(!ags_thread_is_current_ready(thread, next_tic)){ pthread_cond_wait(thread->cond, thread->greedy_mutex); } }else{ ags_main_loop_set_last_sync(AGS_MAIN_LOOP(main_loop), tic); ags_main_loop_set_tic(AGS_MAIN_LOOP(main_loop), next_tic); ags_thread_set_sync_all(main_loop, tic); } #if defined(AGS_PTHREAD_SUSPEND) || defined(AGS_LINUX_SIGNALS) }else{ g_atomic_int_or(&(thread->flags), AGS_THREAD_TIMELOCK_RESUME); /* throughput is mandatory */ #ifdef AGS_PTHREAD_SUSPEND pthread_suspend(thread->thread); #else pthread_kill(thread_id, AGS_THREAD_SUSPEND_SIG); #endif /* allow non greedy to continue */ greedy_locks = thread->greedy_locks; while(greedy_locks != NULL){ pthread_mutex_lock(AGS_THREAD(greedy_locks->data)->greedy_mutex); locked_greedy = g_atomic_int_get(&(AGS_THREAD(greedy_locks->data)->locked_greedy)); locked_greedy--; g_atomic_int_set(&(AGS_THREAD(greedy_locks->data)->locked_greedy), locked_greedy); pthread_cond_signal(AGS_THREAD(greedy_locks->data)->greedy_cond); pthread_mutex_unlock(AGS_THREAD(greedy_locks->data)->greedy_mutex); greedy_locks = greedy_locks->next; } /* skip syncing for greedy */ main_loop = ags_thread_get_toplevel(thread); if(!ags_thread_is_tree_ready(thread, next_tic)){ g_atomic_int_or(&(thread->flags), AGS_THREAD_WAIT_0); while(!ags_thread_is_current_ready(thread, next_tic)){ pthread_cond_wait(thread->cond, thread->greedy_mutex); } }else{ ags_main_loop_set_last_sync(AGS_MAIN_LOOP(main_loop), tic); ags_main_loop_set_tic(AGS_MAIN_LOOP(main_loop), next_tic); ags_thread_set_sync_all(main_loop, tic); } /* your chance */ #ifdef AGS_PTHREAD_SUSPEND pthread_resume(thread->thread)); #else pthread_kill(thread_id, AGS_THREAD_RESUME_SIG); #endif } #endif pthread_mutex_unlock(thread->greedy_mutex); } void ags_thread_timelock(AgsThread *thread) { g_return_if_fail(AGS_IS_THREAD(thread)); g_object_ref(G_OBJECT(thread)); g_signal_emit(G_OBJECT(thread), thread_signals[TIMELOCK], 0); g_object_unref(G_OBJECT(thread)); } void ags_thread_real_stop(AgsThread *thread) { g_atomic_int_and(&(thread->flags), (~AGS_THREAD_RUNNING)); } /** * ags_thread_stop: * @thread: the #AgsThread instance * * Stop the threads loop by unsetting AGS_THREAD_RUNNING flag. * * Since: 0.4 */ void ags_thread_stop(AgsThread *thread) { g_return_if_fail(AGS_IS_THREAD(thread)); g_object_ref(G_OBJECT(thread)); g_signal_emit(G_OBJECT(thread), thread_signals[STOP], 0); g_object_unref(G_OBJECT(thread)); } /** * ags_thread_hangcheck: * @thread: the #AgsThread instance * * Performs hangcheck of thread. * * Since: 0.4 */ void ags_thread_hangcheck(AgsThread *thread) { AgsThread *toplevel; gboolean synced[3]; auto void ags_thread_hangcheck_recursive(AgsThread *thread); auto void ags_thread_hangcheck_unsync_all(AgsThread *thread, gboolean broadcast); void ags_thread_hangcheck_recursive(AgsThread *thread){ AgsThread *child; guint flags; flags = g_atomic_int_get(&(thread->flags)); if((AGS_THREAD_WAIT_0 & flags) != 0){ synced[0] = TRUE; } if((AGS_THREAD_WAIT_1 & flags) != 0){ synced[1] = TRUE; } if((AGS_THREAD_WAIT_2 & flags) != 0){ synced[2] = TRUE; } /* iterate tree */ child = thread->children; while(child != NULL){ ags_thread_hangcheck_recursive(child); child = g_atomic_pointer_get(&(child->next)); } } void ags_thread_hangcheck_unsync_all(AgsThread *thread, gboolean broadcast){ AgsThread *child; guint flags; flags = g_atomic_int_get(&(thread->flags)); g_atomic_int_and(&(thread->flags), (~(AGS_THREAD_WAIT_0 | AGS_THREAD_WAIT_1 | AGS_THREAD_WAIT_2))); if(AGS_THREAD_WAIT_0 & flags){ if(broadcast){ pthread_cond_broadcast(thread->cond); }else{ pthread_cond_signal(thread->cond); } } if(AGS_THREAD_WAIT_1 & flags){ if(broadcast){ pthread_cond_broadcast(thread->cond); }else{ pthread_cond_signal(thread->cond); } } if(AGS_THREAD_WAIT_2 & flags){ if(broadcast){ pthread_cond_broadcast(thread->cond); }else{ pthread_cond_signal(thread->cond); } } /* iterate tree */ child = g_atomic_pointer_get(&(thread->children)); while(child != NULL){ ags_thread_hangcheck_unsync_all(child, broadcast); child = g_atomic_pointer_get(&(child->next)); } } /* detect memory corruption */ synced[0] = FALSE; synced[1] = FALSE; synced[2] = FALSE; /* fill synced array */ toplevel = ags_thread_get_toplevel(thread); ags_thread_hangcheck_recursive(toplevel); /* */ if(!((synced[0] && !synced[1] && !synced[2]) || (!synced[0] && synced[1] && !synced[2]) || (!synced[0] && !synced[1] && synced[2]))){ g_warning("thread tree hung up\0"); ags_thread_hangcheck_unsync_all(toplevel, FALSE); } } AgsThread* ags_thread_find_type(AgsThread *thread, GType type) { AgsThread *current, *retval; AgsMutexManager *mutex_manager; GType current_type; pthread_mutex_t *current_mutex; if(thread == NULL || type == G_TYPE_NONE){ return(NULL); } pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); current_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) thread); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(current_mutex); current_type = G_OBJECT_TYPE(thread); pthread_mutex_unlock(current_mutex); if(g_type_is_a(current_type, type)){ return(thread); } current = g_atomic_pointer_get(&(thread->children)); while(current != NULL){ if((retval = ags_thread_find_type(current, type)) != NULL){ return(retval); } current = g_atomic_pointer_get(&(current->next)); } return(NULL); } /** * ags_thread_new: * @data: an #GObject * * Create a new #AgsThread you may provide a #gpointer as @data * to your thread routine. * * Since: 0.4 */ AgsThread* ags_thread_new(gpointer data) { AgsThread *thread; thread = (AgsThread *) g_object_new(AGS_TYPE_THREAD, NULL); thread->data = data; return(thread); } gsequencer-0.6.37/src/ags/thread/ags_channel_thread.c0000644000175000017500000003231612627535430017452 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include void ags_channel_thread_class_init(AgsChannelThreadClass *channel_thread); void ags_channel_thread_connectable_interface_init(AgsConnectableInterface *connectable); void ags_channel_thread_init(AgsChannelThread *channel_thread); void ags_channel_thread_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_channel_thread_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_channel_thread_connect(AgsConnectable *connectable); void ags_channel_thread_disconnect(AgsConnectable *connectable); void ags_channel_thread_finalize(GObject *gobject); void ags_channel_thread_start(AgsThread *thread); void ags_channel_thread_run(AgsThread *thread); void ags_channel_thread_stop(AgsThread *thread); /** * SECTION:ags_channel_thread * @short_description: channel thread * @title: AgsChannelThread * @section_id: * @include: ags/thread/ags_channel_thread.h * * The #AgsChannelThread acts as channel output thread to soundcard. */ enum{ PROP_0, PROP_CHANNEL, }; static gpointer ags_channel_thread_parent_class = NULL; static AgsConnectableInterface *ags_channel_thread_parent_connectable_interface; extern pthread_mutex_t ags_application_mutex; extern AgsConfig *config; GType ags_channel_thread_get_type() { static GType ags_type_channel_thread = 0; if(!ags_type_channel_thread){ static const GTypeInfo ags_channel_thread_info = { sizeof (AgsChannelThreadClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_channel_thread_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsChannelThread), 0, /* n_preallocs */ (GInstanceInitFunc) ags_channel_thread_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_channel_thread_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_channel_thread = g_type_register_static(AGS_TYPE_THREAD, "AgsChannelThread\0", &ags_channel_thread_info, 0); g_type_add_interface_static(ags_type_channel_thread, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_channel_thread); } void ags_channel_thread_class_init(AgsChannelThreadClass *channel_thread) { GObjectClass *gobject; AgsThreadClass *thread; GParamSpec *param_spec; ags_channel_thread_parent_class = g_type_class_peek_parent(channel_thread); /* GObject */ gobject = (GObjectClass *) channel_thread; gobject->set_property = ags_channel_thread_set_property; gobject->get_property = ags_channel_thread_get_property; gobject->finalize = ags_channel_thread_finalize; /* properties */ /** * AgsChannelThread:channel: * * The assigned #AgsChannel. * * Since: 0.4.2 */ param_spec = g_param_spec_object("channel\0", "channel assigned to\0", "The AgsChannel it is assigned to.\0", AGS_TYPE_CHANNEL, G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_CHANNEL, param_spec); /* AgsThread */ thread = (AgsThreadClass *) channel_thread; thread->start = ags_channel_thread_start; thread->run = ags_channel_thread_run; thread->stop = ags_channel_thread_stop; } void ags_channel_thread_connectable_interface_init(AgsConnectableInterface *connectable) { ags_channel_thread_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_channel_thread_connect; connectable->disconnect = ags_channel_thread_disconnect; } void ags_channel_thread_init(AgsChannelThread *channel_thread) { AgsThread *thread; gchar *str0, *str1; thread = (AgsThread *) channel_thread; str0 = ags_config_get(config, AGS_CONFIG_DEVOUT, "samplerate\0"); str0 = ags_config_get(config, AGS_CONFIG_DEVOUT, "buffer_size\0"); if(str0 == NULL || str1 == NULL){ thread->freq = AGS_CHANNEL_THREAD_DEFAULT_JIFFIE; }else{ guint samplerate; guint buffer_size; samplerate = g_ascii_strtoull(str0, NULL, 10); buffer_size = g_ascii_strtoull(str0, NULL, 10); thread->freq = ceil((gdouble) samplerate / (gdouble) buffer_size); } g_free(str0); g_free(str1); g_atomic_int_set(&(channel_thread->flags), 0); /* start */ pthread_mutexattr_init(&(channel_thread->wakeup_attr)); pthread_mutexattr_settype(&(channel_thread->wakeup_attr), PTHREAD_MUTEX_RECURSIVE); channel_thread->wakeup_mutex = (pthread_mutex_t *) malloc(sizeof(pthread_mutex_t)); pthread_mutex_init(channel_thread->wakeup_mutex, &(channel_thread->wakeup_attr)); channel_thread->wakeup_cond = (pthread_cond_t *) malloc(sizeof(pthread_cond_t)); pthread_cond_init(channel_thread->wakeup_cond, NULL); /* sync */ pthread_mutexattr_init(&(channel_thread->done_attr)); pthread_mutexattr_settype(&(channel_thread->done_attr), PTHREAD_MUTEX_RECURSIVE); channel_thread->done_mutex = (pthread_mutex_t *) malloc(sizeof(pthread_mutex_t)); pthread_mutex_init(channel_thread->done_mutex, &(channel_thread->done_attr)); channel_thread->done_cond = (pthread_cond_t *) malloc(sizeof(pthread_cond_t)); pthread_cond_init(channel_thread->done_cond, NULL); } void ags_channel_thread_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsChannelThread *channel_thread; channel_thread = AGS_CHANNEL_THREAD(gobject); switch(prop_id){ case PROP_CHANNEL: { AgsChannel *channel; channel = (AgsChannel *) g_value_get_object(value); if(channel_thread->channel != NULL){ g_object_unref(G_OBJECT(channel_thread->channel)); } if(channel != NULL){ g_object_ref(G_OBJECT(channel)); } channel_thread->channel = G_OBJECT(channel); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_channel_thread_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsChannelThread *channel_thread; channel_thread = AGS_CHANNEL_THREAD(gobject); switch(prop_id){ case PROP_CHANNEL: { g_value_set_object(value, G_OBJECT(channel_thread->channel)); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_channel_thread_connect(AgsConnectable *connectable) { ags_channel_thread_parent_connectable_interface->connect(connectable); /* empty */ } void ags_channel_thread_disconnect(AgsConnectable *connectable) { ags_channel_thread_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_channel_thread_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_channel_thread_parent_class)->finalize(gobject); /* empty */ } void ags_channel_thread_start(AgsThread *thread) { /* reset status */ g_atomic_int_or(&(AGS_CHANNEL_THREAD(thread)->flags), (AGS_CHANNEL_THREAD_WAIT | AGS_CHANNEL_THREAD_DONE | AGS_CHANNEL_THREAD_WAIT_SYNC | AGS_CHANNEL_THREAD_DONE_SYNC)); AGS_THREAD_CLASS(ags_channel_thread_parent_class)->start(thread); } void ags_channel_thread_run(AgsThread *thread) { AgsChannel *channel; AgsDevoutPlay *devout_play; AgsRecallID *current_recall_id; AgsMutexManager *mutex_manager; AgsChannelThread *channel_thread; AgsThread *current_thread; gint stage; pthread_mutex_t *channel_mutex; if(!thread->rt_setup){ struct sched_param param; /* Declare ourself as a real time task */ param.sched_priority = AGS_RT_PRIORITY; if(sched_setscheduler(0, SCHED_FIFO, ¶m) == -1) { perror("sched_setscheduler failed\0"); } thread->rt_setup = TRUE; } channel_thread = AGS_CHANNEL_THREAD(thread); if((AGS_THREAD_INITIAL_RUN & (g_atomic_int_get(&(thread->flags)))) != 0){ pthread_mutex_lock(channel_thread->done_mutex); g_atomic_int_and(&(channel_thread->flags), (~AGS_CHANNEL_THREAD_WAIT_SYNC)); pthread_mutex_unlock(channel_thread->done_mutex); pthread_mutex_lock(channel_thread->wakeup_mutex); g_atomic_int_or(&(channel_thread->flags), (AGS_CHANNEL_THREAD_DONE | AGS_CHANNEL_THREAD_WAIT)); pthread_mutex_unlock(channel_thread->wakeup_mutex); return; } // thread->freq = AGS_DEVOUT(thread->devout)->delay[AGS_DEVOUT(thread->devout)->tic_counter] / AGS_DEVOUT(thread->devout)->delay_factor; channel = channel_thread->channel; /* lookup channel mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); channel_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel); pthread_mutex_unlock(&(ags_application_mutex)); /* get devout play */ pthread_mutex_lock(channel_mutex); devout_play = channel->devout_play; current_thread = devout_play->channel_thread[0]; pthread_mutex_unlock(channel_mutex); /* start - wait until signaled */ if(thread != current_thread){ pthread_mutex_lock(channel_thread->wakeup_mutex); g_atomic_int_and(&(channel_thread->flags), (~AGS_CHANNEL_THREAD_DONE)); if((AGS_CHANNEL_THREAD_DONE & (g_atomic_int_get(&(channel_thread->flags)))) == 0 && (AGS_CHANNEL_THREAD_WAIT & (g_atomic_int_get(&(channel_thread->flags)))) != 0){ while((AGS_CHANNEL_THREAD_DONE & (g_atomic_int_get(&(channel_thread->flags)))) == 0 && (AGS_CHANNEL_THREAD_WAIT & (g_atomic_int_get(&(channel_thread->flags)))) != 0){ pthread_cond_wait(channel_thread->wakeup_cond, channel_thread->wakeup_mutex); } } g_atomic_int_or(&(channel_thread->flags), (AGS_CHANNEL_THREAD_DONE | AGS_CHANNEL_THREAD_WAIT)); pthread_mutex_unlock(channel_thread->wakeup_mutex); } /* do channel processing */ for(stage = 0; stage < 3; stage++){ /* playback */ pthread_mutex_lock(channel_mutex); current_thread = devout_play->channel_thread[0]; current_recall_id = devout_play->recall_id[0]; pthread_mutex_unlock(channel_mutex); if(thread == current_thread){ ags_channel_recursive_play(channel, current_recall_id, stage); } /* sequencer */ pthread_mutex_lock(channel_mutex); current_thread = devout_play->channel_thread[1]; current_recall_id = devout_play->recall_id[1]; pthread_mutex_unlock(channel_mutex); if(thread == current_thread){ ags_channel_recursive_play(channel, current_recall_id, stage); } /* notation */ pthread_mutex_lock(channel_mutex); current_thread = devout_play->channel_thread[2]; current_recall_id = devout_play->recall_id[2]; pthread_mutex_unlock(channel_mutex); if(thread == current_thread){ ags_channel_recursive_play(channel, current_recall_id, stage); } } /* sync */ pthread_mutex_lock(channel_thread->done_mutex); g_atomic_int_and(&(channel_thread->flags), (~AGS_CHANNEL_THREAD_WAIT_SYNC)); if((AGS_CHANNEL_THREAD_DONE_SYNC & (g_atomic_int_get(&(channel_thread->flags)))) == 0){ pthread_cond_signal(channel_thread->done_cond); } pthread_mutex_unlock(channel_thread->done_mutex); } void ags_channel_thread_stop(AgsThread *thread) { AgsChannelThread *channel_thread; /* */ channel_thread = AGS_CHANNEL_THREAD(thread); /* call parent */ AGS_THREAD_CLASS(ags_channel_thread_parent_class)->stop(thread); /* ensure synced */ pthread_mutex_lock(channel_thread->done_mutex); g_atomic_int_and(&(channel_thread->flags), (~AGS_CHANNEL_THREAD_WAIT_SYNC)); if((AGS_CHANNEL_THREAD_DONE_SYNC & (g_atomic_int_get(&(channel_thread->flags)))) == 0){ pthread_cond_signal(channel_thread->done_cond); } pthread_mutex_unlock(channel_thread->done_mutex); } /** * ags_channel_thread_new: * @devout: the #AgsDevout * @channel: the #AgsChannel * * Create a new #AgsChannelThread. * * Returns: the new #AgsChannelThread * * Since: 0.4.2 */ AgsChannelThread* ags_channel_thread_new(GObject *devout, GObject *channel) { AgsChannelThread *channel_thread; channel_thread = (AgsChannelThread *) g_object_new(AGS_TYPE_CHANNEL_THREAD, "devout\0", devout, "channel\0", channel, NULL); return(channel_thread); } gsequencer-0.6.37/src/ags/thread/ags_thread-posix.h0000644000175000017500000001736012626272146017132 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_THREAD_H__ #define __AGS_THREAD_H__ #include #include #define _GNU_SOURCE #include #include #define AGS_TYPE_THREAD (ags_thread_get_type()) #define AGS_THREAD(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_THREAD, AgsThread)) #define AGS_THREAD_CLASS(class) (G_TYPE_CHECK_CLASS_CAST(class, AGS_TYPE_THREAD, AgsThreadClass)) #define AGS_IS_THREAD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_THREAD)) #define AGS_IS_THREAD_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_THREAD)) #define AGS_THREAD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS(obj, AGS_TYPE_THREAD, AgsThreadClass)) #define AGS_ACCOUNTING_TABLE(ptr) ((AgsAccountingTable *)(ptr)) #define MSEC_PER_SEC (1000000) /* The number of msecs per sec. */ #define NSEC_PER_SEC (1000000000) /* The number of nsecs per sec. */ #define AGS_THREAD_RESUME_SIG SIGUSR2 #define AGS_THREAD_SUSPEND_SIG SIGUSR1 #define AGS_THREAD_DEFAULT_JIFFIE (250) #define AGS_THREAD_MAX_PRECISION (250) #define AGS_THREAD_DEFAULT_ATTACK (1.0) typedef struct _AgsThread AgsThread; typedef struct _AgsThreadClass AgsThreadClass; typedef struct _AgsAccountingTable AgsAccountingTable; typedef enum{ AGS_THREAD_RUNNING = 1, AGS_THREAD_IDLE = 1 << 1, AGS_THREAD_LOCKED = 1 << 2, AGS_THREAD_WAIT_FOR_PARENT = 1 << 3, AGS_THREAD_WAIT_FOR_SIBLING = 1 << 4, AGS_THREAD_WAIT_FOR_CHILDREN = 1 << 5, AGS_THREAD_WAIT_FOR_BARRIER = 1 << 6, AGS_THREAD_WAITING_FOR_PARENT = 1 << 7, AGS_THREAD_WAITING_FOR_SIBLING = 1 << 8, AGS_THREAD_WAITING_FOR_CHILDREN = 1 << 9, AGS_THREAD_WAITING_FOR_BARRIER = 1 << 10, AGS_THREAD_BROADCAST_PARENT = 1 << 11, AGS_THREAD_BROADCAST_SIBLING = 1 << 12, AGS_THREAD_BROADCAST_CHILDREN = 1 << 13, AGS_THREAD_INITIAL_RUN = 1 << 14, AGS_THREAD_TREE_SYNC_0 = 1 << 15, AGS_THREAD_WAIT_0 = 1 << 16, AGS_THREAD_TREE_SYNC_1 = 1 << 17, AGS_THREAD_WAIT_1 = 1 << 18, AGS_THREAD_TREE_SYNC_2 = 1 << 19, AGS_THREAD_WAIT_2 = 1 << 20, AGS_THREAD_TIMELOCK_RUN = 1 << 21, AGS_THREAD_TIMELOCK_WAIT = 1 << 22, AGS_THREAD_TIMELOCK_RESUME = 1 << 23, /* * prefered way would be unlocking greedy_locks * and the suspend to not become greedy * but while pthread_suspend and pthread_resume * are missing you need this as work-around */ AGS_THREAD_SKIP_NON_GREEDY = 1 << 24, AGS_THREAD_SKIPPED_BY_TIMELOCK = 1 << 25, AGS_THREAD_LOCK_GREEDY_RUN_MUTEX = 1 << 26, AGS_THREAD_SUSPENDED = 1 << 27, AGS_THREAD_SINGLE_LOOP = 1 << 28, AGS_THREAD_READY = 1 << 29, AGS_THREAD_UNREF_ON_EXIT = 1 << 30, AGS_THREAD_CONNECTED = 1 << 31, }AgsThreadFlags; struct _AgsThread { GObject object; volatile guint flags; gboolean rt_setup; sigset_t wait_mask; GObject *devout; pthread_t *thread; pthread_attr_t thread_attr; gdouble freq; pthread_mutex_t *mutex; pthread_mutexattr_t mutexattr; pthread_cond_t *cond; pthread_mutex_t *start_mutex; pthread_cond_t *start_cond; volatile gboolean start_wait; volatile gboolean start_done; pthread_barrier_t **barrier; gboolean first_barrier; int wait_count[2]; pthread_t timelock_thread; pthread_mutex_t *timelock_mutex; pthread_cond_t *timelock_cond; pthread_mutex_t *greedy_mutex; pthread_cond_t *greedy_cond; pthread_mutex_t *greedy_run_mutex; volatile guint locked_greedy; struct timespec timelock; GList *greedy_locks; pthread_mutex_t *suspend_mutex; volatile gboolean critical_region; volatile gboolean timer_wait; volatile gboolean timer_expired; pthread_mutex_t *timer_mutex; pthread_cond_t *timer_cond; volatile AgsThread *parent; volatile AgsThread *next; volatile AgsThread *prev; volatile AgsThread *children; gpointer data; }; struct _AgsThreadClass { GObjectClass object; void (*start)(AgsThread *thread); void (*run)(AgsThread *thread); void (*suspend)(AgsThread *thread); void (*resume)(AgsThread *thread); void (*timelock)(AgsThread *thread); void (*stop)(AgsThread *thread); }; struct _AgsAccountingTable { AgsThread *thread; gdouble sanity; }; GType ags_thread_get_type(); AgsAccountingTable* ags_accounting_table_alloc(AgsThread *thread); void ags_accounting_table_set_sanity(GList *table, AgsThread *thread, gdouble sanity); void ags_thread_set_sync(AgsThread *thread, guint tic); void ags_thread_set_sync_all(AgsThread *thread, guint tic); void ags_thread_lock(AgsThread *thread); gboolean ags_thread_trylock(AgsThread *thread); void ags_thread_unlock(AgsThread *thread); AgsThread* ags_thread_get_toplevel(AgsThread *thread); AgsThread* ags_thread_first(AgsThread *thread); AgsThread* ags_thread_last(AgsThread *thread); void ags_thread_remove_child(AgsThread *thread, AgsThread *child); void ags_thread_add_child(AgsThread *thread, AgsThread *child); void ags_thread_add_child_extended(AgsThread *thread, AgsThread *child, gboolean no_start, gboolean no_Wait); gboolean ags_thread_parental_is_locked(AgsThread *thread, AgsThread *parent); gboolean ags_thread_sibling_is_locked(AgsThread *thread); gboolean ags_thread_children_is_locked(AgsThread *thread); gboolean ags_thread_is_current_ready(AgsThread *current, guint tic); gboolean ags_thread_is_tree_ready(AgsThread *thread, guint tic); AgsThread* ags_thread_next_parent_locked(AgsThread *thread, AgsThread *parent); AgsThread* ags_thread_next_sibling_locked(AgsThread *thread); AgsThread* ags_thread_next_children_locked(AgsThread *thread); void ags_thread_lock_parent(AgsThread *thread, AgsThread *parent); void ags_thread_lock_sibling(AgsThread *thread); void ags_thread_lock_children(AgsThread *thread); void ags_thread_lock_all(AgsThread *thread); void ags_thread_unlock_parent(AgsThread *thread, AgsThread *parent); void ags_thread_unlock_sibling(AgsThread *thread); void ags_thread_unlock_children(AgsThread *thread); void ags_thread_unlock_all(AgsThread *thread); void ags_thread_wait_parent(AgsThread *thread, AgsThread *parent); void ags_thread_wait_sibling(AgsThread *thread); void ags_thread_wait_children(AgsThread *thread); void ags_thread_signal_parent(AgsThread *thread, AgsThread *parent, gboolean broadcast); void ags_thread_signal_sibling(AgsThread *thread, gboolean broadcast); void ags_thread_signal_children(AgsThread *thread, gboolean broadcast); void ags_thread_start(AgsThread *thread); void ags_thread_run(AgsThread *thread); void ags_thread_suspend(AgsThread *thread); void ags_thread_resume(AgsThread *thread); void ags_thread_timelock(AgsThread *thread); void ags_thread_stop(AgsThread *thread); void ags_thread_hangcheck(AgsThread *thread); AgsThread* ags_thread_find_type(AgsThread *thread, GType type); AgsThread* ags_thread_new(gpointer data); #endif /*__AGS_THREAD_H__*/ gsequencer-0.6.37/src/ags/thread/ags_single_thread.h0000644000175000017500000000447112626272146017332 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_SINGLE_THREAD_H__ #define __AGS_SINGLE_THREAD_H__ #include #include #ifdef AGS_USE_LINUX_THREADS #include #else #include #endif #include #include #include #include #include #define AGS_TYPE_SINGLE_THREAD (ags_single_thread_get_type()) #define AGS_SINGLE_THREAD(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_SINGLE_THREAD, AgsSingleThread)) #define AGS_SINGLE_THREAD_CLASS(class) (G_TYPE_CHECK_CLASS_CAST(class, AGS_TYPE_SINGLE_THREAD, AgsSingleThreadClass)) #define AGS_IS_SINGLE_THREAD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_SINGLE_THREAD)) #define AGS_IS_SINGLE_THREAD_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_SINGLE_THREAD)) #define AGS_SINGLE_THREAD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS(obj, AGS_TYPE_SINGLE_THREAD, AgsSingleThreadClass)) #define AGS_SINGLE_THREAD_DEFAULT_GUI_JIFFIE (30) typedef struct _AgsSingleThread AgsSingleThread; typedef struct _AgsSingleThreadClass AgsSingleThreadClass; struct _AgsSingleThread { AgsThread thread; AgsAudioLoop *audio_loop; AgsDevoutThread *devout_thread; AgsTaskThread *task_thread; AgsGuiThread *gui_thread; }; struct _AgsSingleThreadClass { AgsThreadClass thread; }; GType ags_single_thread_get_type(); AgsSingleThread* ags_single_thread_new(); #endif /*__AGS_SINGLE_THREAD_H__*/ gsequencer-0.6.37/src/ags/thread/ags_audio_loop.c0000644000175000017500000012736612627534753016666 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include void ags_audio_loop_class_init(AgsAudioLoopClass *audio_loop); void ags_audio_loop_connectable_interface_init(AgsConnectableInterface *connectable); void ags_audio_loop_main_loop_interface_init(AgsMainLoopInterface *main_loop); void ags_audio_loop_init(AgsAudioLoop *audio_loop); void ags_audio_loop_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_audio_loop_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_audio_loop_connect(AgsConnectable *connectable); void ags_audio_loop_disconnect(AgsConnectable *connectable); pthread_mutex_t* ags_audio_loop_get_tree_lock(AgsMainLoop *main_loop); void ags_audio_loop_set_async_queue(AgsMainLoop *main_loop, GObject *async_queue); GObject* ags_audio_loop_get_async_queue(AgsMainLoop *main_loop); void ags_audio_loop_set_tic(AgsMainLoop *main_loop, guint tic); guint ags_audio_loop_get_tic(AgsMainLoop *main_loop); void ags_audio_loop_set_last_sync(AgsMainLoop *main_loop, guint last_sync); guint ags_audio_loop_get_last_sync(AgsMainLoop *main_loop); void ags_audio_loop_finalize(GObject *gobject); void ags_audio_loop_start(AgsThread *thread); void ags_audio_loop_run(AgsThread *thread); void ags_audio_loop_play_recall(AgsAudioLoop *audio_loop); void ags_audio_loop_play_channel(AgsAudioLoop *audio_loop); void ags_audio_loop_play_channel_super_threaded(AgsAudioLoop *audio_loop, AgsDevoutPlay *devout_play); void ags_audio_loop_sync_channel_super_threaded(AgsAudioLoop *audio_loop, AgsDevoutPlay *devout_play); void ags_audio_loop_play_audio(AgsAudioLoop *audio_loop); void ags_audio_loop_play_audio_super_threaded(AgsAudioLoop *audio_loop, AgsDevoutPlayDomain *devout_play_domain); void ags_audio_loop_sync_audio_super_threaded(AgsAudioLoop *audio_loop, AgsDevoutPlayDomain *devout_play_domain); /** * SECTION:ags_audio_loop * @short_description: audio loop * @title: AgsAudioLoop * @section_id: * @include: ags/thread/ags_audio_loop.h * * The #AgsAudioLoop is suitable as #AgsMainLoop and does * audio processing. */ enum{ PROP_0, PROP_PLAY_RECALL, PROP_PLAY_CHANNEL, PROP_PLAY_AUDIO, }; static gpointer ags_audio_loop_parent_class = NULL; static AgsConnectableInterface *ags_audio_loop_parent_connectable_interface; extern pthread_mutex_t ags_application_mutex; extern AgsConfig *config; GType ags_audio_loop_get_type() { static GType ags_type_audio_loop = 0; if(!ags_type_audio_loop){ static const GTypeInfo ags_audio_loop_info = { sizeof (AgsAudioLoopClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_audio_loop_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsAudioLoop), 0, /* n_preallocs */ (GInstanceInitFunc) ags_audio_loop_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_audio_loop_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_main_loop_interface_info = { (GInterfaceInitFunc) ags_audio_loop_main_loop_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_audio_loop = g_type_register_static(AGS_TYPE_THREAD, "AgsAudioLoop\0", &ags_audio_loop_info, 0); g_type_add_interface_static(ags_type_audio_loop, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_audio_loop, AGS_TYPE_MAIN_LOOP, &ags_main_loop_interface_info); } return (ags_type_audio_loop); } void ags_audio_loop_class_init(AgsAudioLoopClass *audio_loop) { GObjectClass *gobject; AgsThreadClass *thread; GParamSpec *param_spec; ags_audio_loop_parent_class = g_type_class_peek_parent(audio_loop); /* GObject */ gobject = (GObjectClass *) audio_loop; gobject->set_property = ags_audio_loop_set_property; gobject->get_property = ags_audio_loop_get_property; gobject->finalize = ags_audio_loop_finalize; /* properties */ /** * AgsAudioLoop:play-recall: * * An #AgsRecall to add for playback. * * Since: 0.4 */ param_spec = g_param_spec_object("play_recall\0", "recall to run\0", "A recall to run\0", AGS_TYPE_RECALL, G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_PLAY_RECALL, param_spec); /** * AgsAudioLoop:play-channel: * * An #AgsChannel to add for playback. * * Since: 0.4 */ param_spec = g_param_spec_object("play_channel\0", "channel to run\0", "A channel to run\0", AGS_TYPE_CHANNEL, G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_PLAY_CHANNEL, param_spec); /** * AgsAudioLoop:play-audio: * * An #AgsAudio to add for playback. * * Since: 0.4 */ param_spec = g_param_spec_object("play_audio\0", "audio to run\0", "A audio to run\0", AGS_TYPE_AUDIO, G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_PLAY_AUDIO, param_spec); /* AgsThread */ thread = (AgsThreadClass *) audio_loop; thread->start = ags_audio_loop_start; thread->run = ags_audio_loop_run; /* AgsAudioLoop */ } void ags_audio_loop_connectable_interface_init(AgsConnectableInterface *connectable) { ags_audio_loop_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_audio_loop_connect; connectable->disconnect = ags_audio_loop_disconnect; } void ags_audio_loop_main_loop_interface_init(AgsMainLoopInterface *main_loop) { main_loop->get_tree_lock = ags_audio_loop_get_tree_lock; main_loop->set_async_queue = ags_audio_loop_set_async_queue; main_loop->get_async_queue = ags_audio_loop_get_async_queue; main_loop->set_tic = ags_audio_loop_set_tic; main_loop->get_tic = ags_audio_loop_get_tic; main_loop->set_last_sync = ags_audio_loop_set_last_sync; main_loop->get_last_sync = ags_audio_loop_get_last_sync; } void ags_audio_loop_init(AgsAudioLoop *audio_loop) { AgsThread *thread; gchar *str0, *str1; /* calculate frequency */ thread = (AgsThread *) audio_loop; // thread->flags |= AGS_THREAD_WAIT_FOR_CHILDREN; pthread_mutex_lock(&(ags_application_mutex)); str0 = ags_config_get(config, AGS_CONFIG_DEVOUT, "samplerate\0"); str0 = ags_config_get(config, AGS_CONFIG_DEVOUT, "buffer_size\0"); pthread_mutex_unlock(&(ags_application_mutex)); if(str0 == NULL || str1 == NULL){ thread->freq = AGS_AUDIO_LOOP_DEFAULT_JIFFIE; }else{ guint samplerate; guint buffer_size; samplerate = g_ascii_strtoull(str0, NULL, 10); buffer_size = g_ascii_strtoull(str0, NULL, 10); thread->freq = ceil((gdouble) samplerate / (gdouble) buffer_size); } g_free(str0); g_free(str1); audio_loop->flags = 0; g_atomic_int_set(&(audio_loop->tic), 0); g_atomic_int_set(&(audio_loop->last_sync), 0); audio_loop->ags_main = NULL; /* tree lock mutex */ pthread_mutexattr_init(&(audio_loop->tree_lock_mutexattr)); pthread_mutexattr_settype(&(audio_loop->tree_lock_mutexattr), PTHREAD_MUTEX_RECURSIVE); audio_loop->tree_lock = (pthread_mutex_t *) malloc(sizeof(pthread_mutex_t)); pthread_mutex_init(audio_loop->tree_lock, &(audio_loop->tree_lock_mutexattr)); /* recall mutex */ audio_loop->recall_mutex = (pthread_mutex_t *) malloc(sizeof(pthread_mutex_t)); pthread_mutex_init(audio_loop->recall_mutex, NULL); /* recall related lists */ audio_loop->play_recall_ref = 0; audio_loop->play_recall = NULL; audio_loop->play_channel_ref = 0; audio_loop->play_channel = NULL; audio_loop->play_audio_ref = 0; audio_loop->play_audio = NULL; audio_loop->play_notation_ref = 0; audio_loop->play_notation = NULL; } void ags_audio_loop_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsAudioLoop *audio_loop; audio_loop = AGS_AUDIO_LOOP(gobject); switch(prop_id){ case PROP_PLAY_RECALL: { AgsRecall *recall; recall = (AgsRecall *) g_value_get_pointer(value); if(recall != NULL){ audio_loop->play_recall = g_list_prepend(audio_loop->play_recall, recall); } } break; case PROP_PLAY_CHANNEL: { AgsChannel *channel; channel = (AgsChannel *) g_value_get_pointer(value); if(channel != NULL){ audio_loop->play_channel = g_list_prepend(audio_loop->play_channel, channel); } } break; case PROP_PLAY_AUDIO: { AgsAudio *audio; audio = (AgsAudio *) g_value_get_pointer(value); if(audio != NULL){ audio_loop->play_audio = g_list_prepend(audio_loop->play_audio, audio); } } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_audio_loop_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsAudioLoop *audio_loop; audio_loop = AGS_AUDIO_LOOP(gobject); switch(prop_id){ case PROP_PLAY_RECALL: { g_value_set_pointer(value, audio_loop->play_recall); } break; case PROP_PLAY_CHANNEL: { g_value_set_pointer(value, audio_loop->play_channel); } break; case PROP_PLAY_AUDIO: { g_value_set_pointer(value, audio_loop->play_audio); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_audio_loop_connect(AgsConnectable *connectable) { ags_audio_loop_parent_connectable_interface->connect(connectable); /* empty */ } void ags_audio_loop_disconnect(AgsConnectable *connectable) { ags_audio_loop_parent_connectable_interface->disconnect(connectable); /* empty */ } pthread_mutex_t* ags_audio_loop_get_tree_lock(AgsMainLoop *main_loop) { return(AGS_AUDIO_LOOP(main_loop)->tree_lock); } void ags_audio_loop_set_async_queue(AgsMainLoop *main_loop, GObject *async_queue) { AGS_AUDIO_LOOP(main_loop)->async_queue = async_queue; } GObject* ags_audio_loop_get_async_queue(AgsMainLoop *main_loop) { return(AGS_AUDIO_LOOP(main_loop)->async_queue); } void ags_audio_loop_set_tic(AgsMainLoop *main_loop, guint tic) { g_atomic_int_set(&(AGS_AUDIO_LOOP(main_loop)->tic), tic); } guint ags_audio_loop_get_tic(AgsMainLoop *main_loop) { return(g_atomic_int_get(&(AGS_AUDIO_LOOP(main_loop)->tic))); } void ags_audio_loop_set_last_sync(AgsMainLoop *main_loop, guint last_sync) { g_atomic_int_set(&(AGS_AUDIO_LOOP(main_loop)->last_sync), last_sync); } guint ags_audio_loop_get_last_sync(AgsMainLoop *main_loop) { gint val; val = g_atomic_int_get(&(AGS_AUDIO_LOOP(main_loop)->last_sync)); return(val); } void ags_audio_loop_finalize(GObject *gobject) { AgsAudioLoop *audio_loop; audio_loop = AGS_AUDIO_LOOP(gobject); /* free AgsDevoutPlay lists */ ags_list_free_and_free_link(audio_loop->play_recall); ags_list_free_and_free_link(audio_loop->play_channel); ags_list_free_and_free_link(audio_loop->play_audio); /* call parent */ G_OBJECT_CLASS(ags_audio_loop_parent_class)->finalize(gobject); } void ags_audio_loop_start(AgsThread *thread) { AgsAudioLoop *audio_loop; audio_loop = AGS_AUDIO_LOOP(thread); if((AGS_THREAD_SINGLE_LOOP & (thread->flags)) == 0){ /* */ AGS_THREAD_CLASS(ags_audio_loop_parent_class)->start(thread); } } void ags_audio_loop_run(AgsThread *thread) { AgsAudioLoop *audio_loop; AgsMutexManager *mutex_manager; guint val; guint audio_loop_flags; guint play_recall_ref; guint play_channel_ref; guint play_audio_ref; guint play_notation_ref; pthread_mutex_t *mutex; /* lookup thread mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, thread); pthread_mutex_unlock(&(ags_application_mutex)); /* start other threads */ if((AGS_THREAD_INITIAL_RUN & (g_atomic_int_get(&(thread->flags)))) != 0){ AgsThread *async_queue; AgsThread *gui_thread; /* get async queue and gui thread */ pthread_mutex_lock(mutex); async_queue = ags_main_loop_get_async_queue(AGS_MAIN_LOOP(thread)); pthread_mutex_unlock(mutex); gui_thread = ags_thread_find_type(thread, AGS_TYPE_GUI_THREAD); /* */ g_atomic_int_set(&(async_queue->start_wait), TRUE); g_atomic_int_set(&(gui_thread->start_wait), TRUE); ags_thread_start(async_queue); ags_thread_start(gui_thread); /* wait thread */ pthread_mutex_lock(async_queue->start_mutex); if(g_atomic_int_get(&(async_queue->start_wait)) == TRUE && g_atomic_int_get(&(async_queue->start_done)) == FALSE){ while(g_atomic_int_get(&(async_queue->start_wait)) == TRUE && g_atomic_int_get(&(async_queue->start_done)) == FALSE){ pthread_cond_wait(async_queue->start_cond, async_queue->start_mutex); } } pthread_mutex_unlock(async_queue->start_mutex); /* wait thread */ pthread_mutex_lock(gui_thread->start_mutex); if(g_atomic_int_get(&(gui_thread->start_wait)) == TRUE && g_atomic_int_get(&(gui_thread->start_done)) == FALSE){ while(g_atomic_int_get(&(gui_thread->start_wait)) == TRUE && g_atomic_int_get(&(gui_thread->start_done)) == FALSE){ pthread_cond_wait(gui_thread->start_cond, gui_thread->start_mutex); } } pthread_mutex_unlock(gui_thread->start_mutex); } if(!thread->rt_setup){ struct sched_param param; /* Declare ourself as a real time task */ param.sched_priority = AGS_RT_PRIORITY; if(sched_setscheduler(0, SCHED_FIFO, ¶m) == -1) { perror("sched_setscheduler failed\0"); } thread->rt_setup = TRUE; } // thread->freq = AGS_DEVOUT(thread->devout)->delay[AGS_DEVOUT(thread->devout)->tic_counter] / AGS_DEVOUT(thread->devout)->delay_factor; audio_loop = AGS_AUDIO_LOOP(thread); pthread_mutex_lock(mutex); audio_loop_flags = audio_loop->flags; pthread_mutex_unlock(mutex); pthread_mutex_lock(audio_loop->recall_mutex); /* play recall */ if((AGS_AUDIO_LOOP_PLAY_RECALL & (audio_loop_flags)) != 0){ ags_audio_loop_play_recall(audio_loop); pthread_mutex_lock(mutex); if(audio_loop->play_recall_ref == 0){ audio_loop->flags &= (~AGS_AUDIO_LOOP_PLAY_RECALL); } pthread_mutex_unlock(mutex); } /* play channel */ if((AGS_AUDIO_LOOP_PLAY_CHANNEL & (audio_loop_flags)) != 0){ ags_audio_loop_play_channel(audio_loop); pthread_mutex_lock(mutex); if(audio_loop->play_channel_ref == 0){ audio_loop->flags &= (~AGS_AUDIO_LOOP_PLAY_CHANNEL); } pthread_mutex_unlock(mutex); } /* play audio */ if((AGS_AUDIO_LOOP_PLAY_AUDIO & (audio_loop_flags)) != 0){ ags_audio_loop_play_audio(audio_loop); pthread_mutex_lock(mutex); if(audio_loop->play_audio_ref == 0){ audio_loop->flags &= (~AGS_AUDIO_LOOP_PLAY_AUDIO); } pthread_mutex_unlock(mutex); } pthread_mutex_unlock(audio_loop->recall_mutex); /* decide if we stop */ pthread_mutex_lock(mutex); play_recall_ref = audio_loop->play_recall_ref; play_channel_ref = audio_loop->play_channel_ref; play_audio_ref = audio_loop->play_audio_ref; play_notation_ref = audio_loop->play_notation_ref; pthread_mutex_unlock(mutex); if(play_recall_ref == 0 && play_channel_ref == 0 && play_audio_ref == 0 && play_notation_ref == 0){ AgsThread *devout_thread; AgsThread *export_thread; devout_thread = ags_thread_find_type(thread, AGS_TYPE_DEVOUT_THREAD); export_thread = ags_thread_find_type(thread, AGS_TYPE_EXPORT_THREAD); if((AGS_THREAD_RUNNING & (g_atomic_int_get(&(devout_thread->flags)))) != 0){ ags_thread_stop(devout_thread); } if((AGS_THREAD_RUNNING & (g_atomic_int_get(&(export_thread->flags)))) != 0){ ags_thread_stop(export_thread); } } pango_fc_font_map_cache_clear(pango_cairo_font_map_get_default()); pango_cairo_font_map_set_default(NULL); // cairo_debug_reset_static_data(); // FcFini(); } /** * ags_audio_loop_play_recall: * @audio_loop: an #AgsAudioLoop * * Runs all recalls assigned with @audio_loop. You may want to use * #AgsAppendRecall task to add an #AgsRecall. * * Since: 0.4 */ void ags_audio_loop_play_recall(AgsAudioLoop *audio_loop) { AgsDevoutPlay *devout_play; AgsRecall *recall; // AgsRecallID *recall_id; AgsMutexManager *mutex_manager; GList *list, *list_next; guint stage; pthread_mutex_t *mutex; pthread_mutex_t *devout_mutex, *audio_mutex; pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio_loop); pthread_mutex_unlock(&(ags_application_mutex)); /* */ pthread_mutex_lock(mutex); audio_loop->flags |= AGS_AUDIO_LOOP_PLAYING_RECALL; stage = 0; ags_audio_loop_play_recall0: list = audio_loop->play_recall; if(list == NULL){ if((AGS_AUDIO_LOOP_PLAY_RECALL_TERMINATING & (audio_loop->flags)) != 0){ audio_loop->flags &= (~(AGS_AUDIO_LOOP_PLAY_RECALL | AGS_AUDIO_LOOP_PLAY_RECALL_TERMINATING)); }else{ audio_loop->flags |= AGS_AUDIO_LOOP_PLAY_RECALL_TERMINATING; } } //FIXME:JK: probably missing else audio_loop->flags &= (~AGS_AUDIO_LOOP_PLAY_RECALL_TERMINATING); pthread_mutex_unlock(mutex); while(list != NULL){ AgsAudio *audio; devout_play = AGS_DEVOUT_PLAY(list->data); recall = AGS_RECALL(devout_play->source); audio = NULL; if(AGS_IS_RECALL_AUDIO(recall)){ g_object_get(recall, "audio\0", &audio, NULL); }else if(AGS_IS_RECALL_AUDIO_RUN(recall)){ g_object_get(AGS_RECALL_AUDIO_RUN(recall)->recall_audio, "audio\0", &audio, NULL); }else if(AGS_IS_RECALL_CHANNEL(recall) || AGS_IS_RECALL_CHANNEL_RUN(recall)){ AgsChannel *source; g_object_get(recall, "source\0", &source, NULL); audio = (AgsAudio *) source->audio; } /* */ if(audio != NULL){ pthread_mutex_lock(&(ags_application_mutex)); devout_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) recall->devout); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); pthread_mutex_lock(devout_mutex); pthread_mutex_lock(audio_mutex); // recall_id = devout_play->recall_id; list_next = list->next; if((AGS_RECALL_REMOVE & (recall->flags)) == 0){ if((AGS_RECALL_HIDE & (recall->flags)) == 0){ if(stage == 0){ ags_recall_run_pre(recall); }else if(stage == 1){ ags_recall_run_inter(recall); }else{ ags_recall_run_post(recall); } } }else{ ags_audio_loop_remove_recall(audio_loop, devout_play); g_object_unref(recall); free(devout_play); } pthread_mutex_unlock(audio_mutex); pthread_mutex_unlock(devout_mutex); }else{ /* lock free */ list_next = list->next; if((AGS_RECALL_REMOVE & (recall->flags)) == 0){ if((AGS_RECALL_HIDE & (recall->flags)) == 0){ if(stage == 0){ ags_recall_run_pre(recall); }else if(stage == 1){ ags_recall_run_inter(recall); }else{ ags_recall_run_post(recall); } } }else{ ags_audio_loop_remove_recall(audio_loop, devout_play); g_object_unref(recall); free(devout_play); } } list = list_next; } if(stage == 0){ stage = 1; goto ags_audio_loop_play_recall0; }else if(stage == 1){ stage = 2; goto ags_audio_loop_play_recall0; } audio_loop->flags &= (~AGS_AUDIO_LOOP_PLAYING_RECALL); } /** * ags_audio_loop_play_channel: * @audio_loop: an #AgsAudioLoop * * Runs all recalls descending recursively and ascending till next * #AgsRecycling around prior added #AgsChannel with #AgsAppendChannel * task. * * Since: 0.4 */ void ags_audio_loop_play_channel(AgsAudioLoop *audio_loop) { AgsDevoutPlay *play; AgsChannel *channel; AgsMutexManager *mutex_manager; GList *list_play, *list_next_play; gint stage; pthread_mutex_t *devout_mutex, *audio_mutex; if(audio_loop->play_channel == NULL){ if((AGS_AUDIO_LOOP_PLAY_CHANNEL_TERMINATING & (audio_loop->flags)) != 0){ audio_loop->flags &= (~(AGS_AUDIO_LOOP_PLAY_CHANNEL | AGS_AUDIO_LOOP_PLAY_CHANNEL_TERMINATING)); }else{ audio_loop->flags |= AGS_AUDIO_LOOP_PLAY_CHANNEL_TERMINATING; } } audio_loop->flags &= (~AGS_AUDIO_LOOP_PLAY_CHANNEL_TERMINATING); /* */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); pthread_mutex_unlock(&(ags_application_mutex)); /* entry point */ audio_loop->flags |= AGS_AUDIO_LOOP_PLAYING_CHANNEL; /* run the 3 stages */ list_play = audio_loop->play_channel; while(list_play != NULL){ list_next_play = list_play->next; play = (AgsDevoutPlay *) list_play->data; channel = AGS_CHANNEL(play->source); /* */ pthread_mutex_lock(&(ags_application_mutex)); devout_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) AGS_AUDIO(channel->audio)->devout); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) channel->audio); pthread_mutex_unlock(&(ags_application_mutex)); // pthread_mutex_lock(devout_mutex); // pthread_mutex_lock(audio_mutex); /* */ if((AGS_DEVOUT_PLAY_REMOVE & (g_atomic_int_get(&(play->flags)))) == 0){ if((AGS_DEVOUT_PLAY_SUPER_THREADED_CHANNEL & (g_atomic_int_get(&(play->flags)))) != 0){ /* super threaded */ ags_audio_loop_play_channel_super_threaded(audio_loop, play); }else{ gboolean remove_play; /* not super threaded */ remove_play = TRUE; for(stage = 0; stage < 3; stage++){ if((AGS_DEVOUT_PLAY_PLAYBACK & (g_atomic_int_get(&(play->flags)))) != 0 && play->recall_id[0] != NULL){ remove_play = FALSE; ags_channel_recursive_play(channel, play->recall_id[0], stage); } if((AGS_DEVOUT_PLAY_SEQUENCER & (g_atomic_int_get(&(play->flags)))) != 0 && play->recall_id[1] != NULL){ remove_play = FALSE; ags_channel_recursive_play(channel, play->recall_id[1], stage); } if((AGS_DEVOUT_PLAY_NOTATION & (g_atomic_int_get(&(play->flags)))) != 0 && play->recall_id[2] != NULL){ remove_play = FALSE; ags_channel_recursive_play(channel, play->recall_id[2], stage); } } if(remove_play){ ags_audio_loop_remove_channel(audio_loop, channel); } } } // pthread_mutex_unlock(audio_mutex); // pthread_mutex_unlock(devout_mutex); list_play = list_next_play; } /* sync the 3 stages */ list_play = audio_loop->play_channel; while(list_play != NULL){ list_next_play = list_play->next; play = (AgsDevoutPlay *) list_play->data; channel = AGS_CHANNEL(play->source); if((AGS_DEVOUT_PLAY_SUPER_THREADED_CHANNEL & (g_atomic_int_get(&(play->flags)))) != 0){ /* super threaded */ ags_audio_loop_sync_channel_super_threaded(audio_loop, play); } list_play = list_next_play; } } void ags_audio_loop_play_channel_super_threaded(AgsAudioLoop *audio_loop, AgsDevoutPlay *devout_play) { AgsThread *thread; AgsChannelThread *channel_thread; /* playback */ thread = devout_play->channel_thread[0]; channel_thread = (AgsChannelThread *) thread; if((AGS_THREAD_RUNNING & (g_atomic_int_get(&(thread->flags)))) == 0){ guint val; g_atomic_int_set(&(AGS_THREAD(thread)->start_wait), TRUE); ags_thread_start(thread); /* wait child */ pthread_mutex_lock(thread->start_mutex); if(g_atomic_int_get(&(thread->start_wait)) == TRUE && g_atomic_int_get(&(thread->start_done)) == FALSE){ while(g_atomic_int_get(&(thread->start_wait)) == TRUE && g_atomic_int_get(&(thread->start_done)) == FALSE){ pthread_cond_wait(thread->start_cond, thread->start_mutex); } } pthread_mutex_unlock(thread->start_mutex); } /* wakeup wait */ pthread_mutex_lock(channel_thread->wakeup_mutex); g_atomic_int_and(&(channel_thread->flags), (~AGS_CHANNEL_THREAD_WAIT)); if((AGS_CHANNEL_THREAD_DONE & (g_atomic_int_get(&(channel_thread->flags)))) == 0){ pthread_cond_signal(channel_thread->wakeup_cond); } pthread_mutex_unlock(channel_thread->wakeup_mutex); } void ags_audio_loop_sync_channel_super_threaded(AgsAudioLoop *audio_loop, AgsDevoutPlay *devout_play) { AgsThread *thread; AgsChannelThread *channel_thread; gboolean playback; /* playback */ thread = devout_play->channel_thread[0]; channel_thread = (AgsChannelThread *) thread; playback = FALSE; if((AGS_DEVOUT_PLAY_PLAYBACK & (g_atomic_int_get(&(devout_play->flags)))) != 0){ playback = TRUE; pthread_mutex_lock(channel_thread->done_mutex); if((AGS_THREAD_RUNNING & (g_atomic_int_get(&(thread->flags)))) != 0 && (AGS_THREAD_INITIAL_RUN & (g_atomic_int_get(&(thread->flags)))) == 0){ g_atomic_int_and(&(channel_thread->flags), (~AGS_CHANNEL_THREAD_DONE_SYNC)); if((AGS_CHANNEL_THREAD_DONE_SYNC & (g_atomic_int_get(&(channel_thread->flags)))) == 0 && (AGS_CHANNEL_THREAD_WAIT_SYNC & (g_atomic_int_get(&(channel_thread->flags)))) != 0){ while((AGS_CHANNEL_THREAD_DONE_SYNC & (g_atomic_int_get(&(channel_thread->flags)))) == 0 && (AGS_CHANNEL_THREAD_WAIT_SYNC & (g_atomic_int_get(&(channel_thread->flags)))) != 0){ pthread_cond_wait(channel_thread->done_cond, channel_thread->done_mutex); } } } g_atomic_int_or(&(channel_thread->flags), (AGS_CHANNEL_THREAD_WAIT_SYNC | AGS_CHANNEL_THREAD_DONE_SYNC)); pthread_mutex_unlock(channel_thread->done_mutex); } /* */ if(playback && devout_play->recall_id[0] == NULL){ ags_thread_stop(thread); g_atomic_int_and(&(devout_play->flags), (~AGS_DEVOUT_PLAY_PLAYBACK)); } /* remove from playback */ if(!playback){ ags_thread_stop(thread); ags_audio_loop_remove_channel(audio_loop, devout_play->source); } } /** * ags_audio_loop_play_audio: * @audio_loop: an #AgsAudioLoop * * Like ags_audio_loop_play_channel() except that it runs all channels within * #AgsAudio. * * Since: 0.4 */ void ags_audio_loop_play_audio(AgsAudioLoop *audio_loop) { AgsDevoutPlayDomain *play_domain; AgsDevoutPlay *play; AgsAudio *audio; AgsChannel *output; AgsMutexManager *mutex_manager; GList *list_play_domain, *list_next_play_domain; GList *list_play; gint stage; pthread_mutex_t *devout_mutex, *audio_mutex; if(audio_loop->play_audio == NULL){ if((AGS_AUDIO_LOOP_PLAY_AUDIO_TERMINATING & (audio_loop->flags)) != 0){ audio_loop->flags &= (~(AGS_AUDIO_LOOP_PLAY_AUDIO | AGS_AUDIO_LOOP_PLAY_AUDIO_TERMINATING)); }else{ audio_loop->flags |= AGS_AUDIO_LOOP_PLAY_AUDIO_TERMINATING; } } audio_loop->flags &= (~AGS_AUDIO_LOOP_PLAY_AUDIO_TERMINATING); /* */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); pthread_mutex_unlock(&(ags_application_mutex)); /* entry point */ audio_loop->flags |= AGS_AUDIO_LOOP_PLAYING_AUDIO; list_play_domain = audio_loop->play_audio; while(list_play_domain != NULL){ list_next_play_domain = list_play_domain->next; play_domain = (AgsDevoutPlayDomain *) list_play_domain->data; audio = (AgsAudio *) play_domain->domain; /* */ pthread_mutex_lock(&(ags_application_mutex)); devout_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio->devout); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); if((AGS_DEVOUT_PLAY_DOMAIN_SUPER_THREADED_AUDIO & (g_atomic_int_get(&(play_domain->flags)))) != 0){ ags_audio_loop_play_audio_super_threaded(audio_loop, play_domain); }else{ /* */ output = audio->output; while(output != NULL){ play = output->devout_play; // ags_devout_play_find_source(play_domain->devout_play, // (GObject *) output); if(play == NULL){ output = output->next; continue; } if((AGS_DEVOUT_PLAY_SUPER_THREADED_RECYCLING & (g_atomic_int_get(&(play->flags)))) != 0){ //TODO:JK: implement me /* super threaded recycling level */ if((AGS_DEVOUT_PLAY_PLAYBACK & (g_atomic_int_get(&(play->flags)))) != 0){ play->iterator_thread[0]->flags |= AGS_ITERATOR_THREAD_DONE; pthread_cond_signal(&(play->iterator_thread[0]->tic_cond)); } if((AGS_DEVOUT_PLAY_SEQUENCER & (g_atomic_int_get(&(play->flags)))) != 0){ play->iterator_thread[1]->flags |= AGS_ITERATOR_THREAD_DONE; pthread_cond_signal(&(play->iterator_thread[1]->tic_cond)); } if((AGS_DEVOUT_PLAY_NOTATION & (g_atomic_int_get(&(play->flags)))) != 0){ play->iterator_thread[2]->flags |= AGS_ITERATOR_THREAD_DONE; pthread_cond_signal(&(play->iterator_thread[2]->tic_cond)); } }else{ pthread_mutex_t *devout_mutex, *audio_mutex; gboolean remove_domain; /* not super threaded */ pthread_mutex_lock(&(ags_application_mutex)); devout_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio->devout); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); // pthread_mutex_lock(audio_mutex); // pthread_mutex_lock(devout_mutex); remove_domain = TRUE; /* run the 3 stages */ for(stage = 0; stage < 3; stage++){ if((AGS_DEVOUT_PLAY_REMOVE & (g_atomic_int_get(&(play->flags)))) == 0){ if((AGS_DEVOUT_PLAY_PLAYBACK & (g_atomic_int_get(&(play->flags)))) != 0 && play->recall_id[0] != NULL){ remove_domain = FALSE; ags_channel_recursive_play(output, play->recall_id[0], stage); } if((AGS_DEVOUT_PLAY_SEQUENCER & (g_atomic_int_get(&(play->flags)))) != 0 && play->recall_id[1] != NULL){ remove_domain = FALSE; ags_channel_recursive_play(output, play->recall_id[1], stage); } if((AGS_DEVOUT_PLAY_NOTATION & (g_atomic_int_get(&(play->flags)))) != 0 && play->recall_id[2] != NULL){ remove_domain = FALSE; ags_channel_recursive_play(output, play->recall_id[2], stage); } } } /* check for removal */ if(remove_domain){ AgsChannel *channel; ags_audio_loop_remove_audio(audio_loop, audio); channel = audio->output; while(channel != NULL){ play = AGS_DEVOUT_PLAY(channel->devout_play); g_atomic_int_and(&(play->flags), (~(AGS_DEVOUT_PLAY_REMOVE | AGS_DEVOUT_PLAY_DONE))); // ags_audio_done(audio); //TODO:JK: verify g_object_unref() missing play->recall_id[0] = NULL; play->recall_id[1] = NULL; play->recall_id[2] = NULL; channel = channel->next; } } // pthread_mutex_unlock(devout_mutex); // pthread_mutex_unlock(audio_mutex); } output = output->next; } } /* iterate */ list_play_domain = list_next_play_domain; } /* sync - wait the 3 stages */ list_play_domain = audio_loop->play_audio; while(list_play_domain != NULL){ list_next_play_domain = list_play_domain->next; play_domain = (AgsDevoutPlayDomain *) list_play_domain->data; audio = AGS_AUDIO(play_domain->domain); if((AGS_DEVOUT_PLAY_DOMAIN_SUPER_THREADED_AUDIO & (g_atomic_int_get(&(play_domain->flags)))) != 0){ ags_audio_loop_sync_audio_super_threaded(audio_loop, play_domain); }else{ /* */ output = audio->output; while(output != NULL){ play = output->devout_play; // ags_devout_play_find_source(play_domain->devout_play, if(play == NULL){ output = output->next; continue; } if((AGS_DEVOUT_PLAY_SUPER_THREADED_CHANNEL & (g_atomic_int_get(&(play->flags)))) != 0){ ags_audio_loop_sync_channel_super_threaded(audio_loop, play); }else if((AGS_DEVOUT_PLAY_SUPER_THREADED_RECYCLING & (g_atomic_int_get(&(play->flags)))) != 0){ //TODO:JK: implement me } output = output->next; } } /* iterate */ list_play_domain = list_next_play_domain; } } /** * ags_audio_loop_play_audio_super_threaded: * @audio_loop: the #AgsAudioLoop * @devout_play_domain: an #AgsDevoutPlayDomain * * Play audio super-threaded. * * Since: 0.4.2 */ void ags_audio_loop_play_audio_super_threaded(AgsAudioLoop *audio_loop, AgsDevoutPlayDomain *devout_play_domain) { gboolean sequencer, notation; /* super threaded audio level */ sequencer = FALSE; notation = FALSE; /* sequencer */ if((AGS_DEVOUT_PLAY_DOMAIN_SEQUENCER & (g_atomic_int_get(&(devout_play_domain->flags)))) != 0){ AgsThread *thread; AgsAudioThread *audio_thread; thread = devout_play_domain->audio_thread[1]; audio_thread = (AgsAudioThread *) thread; sequencer = TRUE; if((AGS_THREAD_RUNNING & (g_atomic_int_get(&(thread->flags)))) == 0){ guint val; g_atomic_int_set(&(thread->start_wait), TRUE); ags_thread_start(thread); /* wait child */ pthread_mutex_lock(thread->start_mutex); if(g_atomic_int_get(&(thread->start_wait)) == TRUE && g_atomic_int_get(&(thread->start_done)) == FALSE){ while(g_atomic_int_get(&(thread->start_wait)) == TRUE && g_atomic_int_get(&(thread->start_done)) == FALSE){ pthread_cond_wait(thread->start_cond, thread->start_mutex); } } pthread_mutex_unlock(thread->start_mutex); } /* wakeup wait */ pthread_mutex_lock(audio_thread->wakeup_mutex); g_atomic_int_and(&(audio_thread->flags), (~AGS_AUDIO_THREAD_WAIT)); if((AGS_AUDIO_THREAD_DONE & (g_atomic_int_get(&(audio_thread->flags)))) == 0){ pthread_cond_signal(audio_thread->wakeup_cond); } pthread_mutex_unlock(audio_thread->wakeup_mutex); } /* notation */ if((AGS_DEVOUT_PLAY_DOMAIN_NOTATION & (g_atomic_int_get(&(devout_play_domain->flags)))) != 0){ AgsThread *thread; AgsAudioThread *audio_thread; thread = devout_play_domain->audio_thread[2]; audio_thread = (AgsAudioThread *) thread; notation = TRUE; if((AGS_THREAD_RUNNING & (g_atomic_int_get(&(thread->flags)))) == 0){ guint val; g_atomic_int_set(&(thread->start_wait), TRUE); ags_thread_start(thread); /* wait child */ pthread_mutex_lock(thread->start_mutex); if(g_atomic_int_get(&(thread->start_wait)) == TRUE && g_atomic_int_get(&(thread->start_done)) == FALSE){ while(g_atomic_int_get(&(thread->start_wait)) == TRUE && g_atomic_int_get(&(thread->start_done)) == FALSE){ pthread_cond_wait(thread->start_cond, thread->start_mutex); } } pthread_mutex_unlock(thread->start_mutex); } /* wakeup wait */ pthread_mutex_lock(audio_thread->wakeup_mutex); g_atomic_int_and(&(audio_thread->flags), (~AGS_AUDIO_THREAD_WAIT)); if((AGS_AUDIO_THREAD_DONE & (g_atomic_int_get(&(audio_thread->flags)))) == 0){ pthread_cond_signal(audio_thread->wakeup_cond); } pthread_mutex_unlock(audio_thread->wakeup_mutex); } } /** * ags_audio_loop_sync_audio_super_threaded: * @audio_loop: the #AgsAudioLoop * @devout_play_domain: an #AgsDevoutPlayDomain * * Sync audio super-threaded. * * Since: 0.4.2 */ void ags_audio_loop_sync_audio_super_threaded(AgsAudioLoop *audio_loop, AgsDevoutPlayDomain *devout_play_domain) { GList *devout_play; gboolean sequencer, notation; gboolean found_sequencer, found_notation; sequencer = FALSE; notation = FALSE; /* sequencer */ if((AGS_DEVOUT_PLAY_DOMAIN_SEQUENCER & (g_atomic_int_get(&(devout_play_domain->flags)))) != 0){ AgsAudioThread *audio_thread; audio_thread = AGS_AUDIO_THREAD(devout_play_domain->audio_thread[1]); sequencer = TRUE; pthread_mutex_lock(audio_thread->done_mutex); if((AGS_THREAD_RUNNING & (g_atomic_int_get(&(devout_play_domain->audio_thread[1]->flags)))) != 0 && (AGS_THREAD_INITIAL_RUN & (g_atomic_int_get(&(devout_play_domain->audio_thread[1]->flags)))) == 0){ g_atomic_int_and(&(audio_thread->flags), (~AGS_AUDIO_THREAD_DONE_SYNC)); if((AGS_AUDIO_THREAD_DONE_SYNC & (g_atomic_int_get(&(audio_thread->flags)))) == 0 && (AGS_AUDIO_THREAD_WAIT_SYNC & (g_atomic_int_get(&(audio_thread->flags)))) != 0){ while((AGS_AUDIO_THREAD_DONE_SYNC & (g_atomic_int_get(&(audio_thread->flags)))) == 0 && (AGS_AUDIO_THREAD_WAIT_SYNC & (g_atomic_int_get(&(audio_thread->flags)))) != 0){ pthread_cond_wait(audio_thread->done_cond, audio_thread->done_mutex); } } } g_atomic_int_or(&(audio_thread->flags), (AGS_AUDIO_THREAD_WAIT_SYNC | AGS_AUDIO_THREAD_DONE_SYNC)); pthread_mutex_unlock(audio_thread->done_mutex); } /* notation */ if((AGS_DEVOUT_PLAY_DOMAIN_NOTATION & (g_atomic_int_get(&(devout_play_domain->flags)))) != 0){ AgsAudioThread *audio_thread; audio_thread = AGS_AUDIO_THREAD(devout_play_domain->audio_thread[2]); notation = TRUE; pthread_mutex_lock(audio_thread->done_mutex); if((AGS_THREAD_RUNNING & (g_atomic_int_get(&(devout_play_domain->audio_thread[2]->flags)))) != 0 && (AGS_THREAD_INITIAL_RUN & (g_atomic_int_get(&(devout_play_domain->audio_thread[2]->flags)))) == 0){ g_atomic_int_and(&(audio_thread->flags), (~AGS_AUDIO_THREAD_DONE_SYNC)); if((AGS_AUDIO_THREAD_DONE_SYNC & (g_atomic_int_get(&(audio_thread->flags)))) == 0 && (AGS_AUDIO_THREAD_WAIT_SYNC & (g_atomic_int_get(&(audio_thread->flags)))) != 0){ while((AGS_AUDIO_THREAD_DONE_SYNC & (g_atomic_int_get(&(audio_thread->flags)))) == 0 && (AGS_AUDIO_THREAD_WAIT_SYNC & (g_atomic_int_get(&(audio_thread->flags)))) != 0){ pthread_cond_wait(audio_thread->done_cond, audio_thread->done_mutex); } } } g_atomic_int_or(&(audio_thread->flags), (AGS_AUDIO_THREAD_WAIT_SYNC | AGS_AUDIO_THREAD_DONE_SYNC)); pthread_mutex_unlock(audio_thread->done_mutex); } /* check if flags are still valid */ found_sequencer = FALSE; found_notation = FALSE; devout_play = devout_play_domain->devout_play; while(devout_play != NULL){ if(sequencer && AGS_DEVOUT_PLAY(devout_play->data)->recall_id[1] != NULL){ found_sequencer = TRUE; } if(notation && AGS_DEVOUT_PLAY(devout_play->data)->recall_id[2] != NULL){ found_notation = TRUE; } devout_play = devout_play->next; } if(!found_sequencer){ ags_thread_stop(devout_play_domain->audio_thread[1]); g_atomic_int_and(&(devout_play_domain->flags), (~AGS_DEVOUT_PLAY_DOMAIN_SEQUENCER)); } if(!found_notation){ ags_thread_stop(devout_play_domain->audio_thread[2]); g_atomic_int_and(&(devout_play_domain->flags), (~AGS_DEVOUT_PLAY_DOMAIN_NOTATION)); } /* remove domain from playback */ if(!found_sequencer && !found_notation){ ags_audio_loop_remove_audio(audio_loop, devout_play_domain->domain); } } /** * ags_audio_loop_add_audio: * @audio_loop: the #AgsAudioLoop * @audio: an #AgsAudio * * Add audio for playback. * * Since: 0.4 */ void ags_audio_loop_add_audio(AgsAudioLoop *audio_loop, GObject *audio) { if(g_list_find(audio_loop->play_audio, AGS_AUDIO(audio)->devout_play_domain) == NULL){ audio_loop->play_audio_ref = audio_loop->play_audio_ref + 1; g_object_ref(G_OBJECT(audio)); audio_loop->play_audio = g_list_prepend(audio_loop->play_audio, AGS_AUDIO(audio)->devout_play_domain); } } /** * ags_audio_loop_remove_audio: * @audio_loop: the #AgsAudioLoop * @audio: an #AgsAudio * * Remove audio of playback. * * Since: 0.4 */ void ags_audio_loop_remove_audio(AgsAudioLoop *audio_loop, GObject *audio) { if(g_list_find(audio_loop->play_audio, AGS_AUDIO(audio)->devout_play_domain) != NULL){ audio_loop->play_audio = g_list_remove(audio_loop->play_audio, AGS_AUDIO(audio)->devout_play_domain); audio_loop->play_audio_ref = audio_loop->play_audio_ref - 1; g_object_unref(audio); } } /** * ags_audio_loop_add_channel: * @audio_loop: the #AgsAudioLoop * @channel: an #AgsChannel * * Add channel for playback. * * Since: 0.4 */ void ags_audio_loop_add_channel(AgsAudioLoop *audio_loop, GObject *channel) { if(g_list_find(audio_loop->play_channel, AGS_CHANNEL(channel)->devout_play) == NULL){ g_object_ref(G_OBJECT(channel)); audio_loop->play_channel = g_list_prepend(audio_loop->play_channel, AGS_CHANNEL(channel)->devout_play); audio_loop->play_channel_ref = audio_loop->play_channel_ref + 1; } } /** * ags_audio_loop_remove_channel: * @audio_loop: the #AgsAudioLoop * @channel: an #AgsChannel * * Remove channel of playback. * * Since: 0.4 */ void ags_audio_loop_remove_channel(AgsAudioLoop *audio_loop, GObject *channel) { if(g_list_find(audio_loop->play_channel, AGS_CHANNEL(channel)->devout_play) != NULL){ audio_loop->play_channel = g_list_remove(audio_loop->play_channel, AGS_CHANNEL(channel)->devout_play); audio_loop->play_channel_ref = audio_loop->play_channel_ref - 1; g_object_unref(channel); } } /** * ags_audio_loop_add_recall: * @audio_loop: the #AgsAudioLoop * @recall: an #AgsRecall * * Add recall for playback. * * Since: 0.4 */ void ags_audio_loop_add_recall(AgsAudioLoop *audio_loop, gpointer devout_play) { if(g_list_find(audio_loop->play_recall, devout_play) == NULL){ /* append to AgsDevout */ AGS_DEVOUT_PLAY(devout_play)->flags &= (~AGS_DEVOUT_PLAY_REMOVE); audio_loop->play_recall = g_list_append(audio_loop->play_recall, devout_play); audio_loop->play_recall_ref += 1; } } /** * ags_audio_loop_remove_recall: * @audio_loop: the #AgsAudioLoop * @recall: an #AgsRecall * * Remove recall of playback. * * Since: 0.4 */ void ags_audio_loop_remove_recall(AgsAudioLoop *audio_loop, gpointer devout_play) { if(g_list_find(audio_loop->play_recall, devout_play) != NULL){ audio_loop->play_recall = g_list_remove(audio_loop->play_recall, devout_play); audio_loop->play_recall_ref = audio_loop->play_recall_ref - 1; } } /** * ags_audio_loop_new: * @devout: the #AgsDevout * @ags_main: the #AgsMain * * Create a new #AgsAudioLoop. * * Returns: the new #AgsAudioLoop * * Since: 0.4 */ AgsAudioLoop* ags_audio_loop_new(GObject *devout, GObject *ags_main) { AgsAudioLoop *audio_loop; audio_loop = (AgsAudioLoop *) g_object_new(AGS_TYPE_AUDIO_LOOP, "devout\0", devout, NULL); if(ags_main != NULL){ g_object_ref(G_OBJECT(ags_main)); audio_loop->ags_main = ags_main; } return(audio_loop); } gsequencer-0.6.37/src/ags/thread/ags_recycling_thread.h0000644000175000017500000001051012626272146020017 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_RECYCLING_THREAD_H__ #define __AGS_RECYCLING_THREAD_H__ #include #include #ifdef AGS_USE_LINUX_THREADS #include #else #include #endif #include #define AGS_TYPE_RECYCLING_THREAD (ags_recycling_thread_get_type()) #define AGS_RECYCLING_THREAD(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_RECYCLING_THREAD, AgsRecyclingThread)) #define AGS_RECYCLING_THREAD_CLASS(class) (G_TYPE_CHECK_CLASS_CAST(class, AGS_TYPE_RECYCLING_THREAD, AgsRecyclingThread)) #define AGS_IS_RECYCLING_THREAD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_RECYCLING_THREAD)) #define AGS_IS_RECYCLING_THREAD_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_RECYCLING_THREAD)) #define AGS_RECYCLING_THREAD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS(obj, AGS_TYPE_RECYCLING_THREAD, AgsRecyclingThreadClass)) #define AGS_RECYCLING_THREAD_DEFAULT_JIFFIE (100) typedef struct _AgsRecyclingThread AgsRecyclingThread; typedef struct _AgsRecyclingThreadClass AgsRecyclingThreadClass; typedef struct _AgsRecyclingThreadWorker AgsRecyclingThreadWorker; typedef enum{ AGS_RECYCLING_THREAD_WAIT = 1, AGS_RECYCLING_THREAD_DONE = 1 << 1, AGS_RECYCLING_THREAD_LOCKED = 1 << 2, AGS_RECYCLING_THREAD_LOCKED_PARENT = 1 << 3, AGS_RECYCLING_THREAD_WORKER_WAIT = 1 << 4, AGS_RECYCLING_THREAD_WORKER_DONE = 1 << 5, }AgsRecyclingThreadFlags; struct _AgsRecyclingThread { AgsThread thread; volatile guint flags; AgsThread *iterator_thread; pthread_mutex_t *iteration_mutex; pthread_cond_t *iteration_cond; pthread_t *worker_queue; pthread_mutex_t *worker_mutex; pthread_cond_t *worker_cond; GObject *first_recycling; GObject *last_recycling; GList *worker; }; struct _AgsRecyclingThreadClass { AgsThreadClass thread; void (*play_channel)(AgsRecyclingThread *recycling_thread, GObject *channel, AgsRecallID *recall_id, gint stage); void (*play_audio)(AgsRecyclingThread *recycling_thread, GObject *output, GObject *audio, AgsRecallID *recall_id, gint stage); }; struct _AgsRecyclingThreadWorker { AgsRecyclingThread *recycling_thread; GObject *audio; GObject *channel; AgsRecallID *recall_id; gint stage; gboolean audio_worker; }; GType ags_recycling_thread_get_type(); AgsRecyclingThreadWorker* ags_recycling_thread_worker_alloc(AgsRecyclingThread *recycling_thread, GObject *audio, GObject *channel, AgsRecallID *recall_id, gint stage, gboolean audio_worker); void ags_recycling_thread_add_worker(AgsRecyclingThread *recycling_thread, AgsRecyclingThreadWorker *worker); void ags_recycling_thread_remove_worker(AgsRecyclingThread *recycling_thread, AgsRecyclingThreadWorker *worker); void ags_recycling_thread_play_channel(AgsRecyclingThread *recycling_thread, GObject *channel, AgsRecallID *recall_id, gint stage); void ags_recycling_thread_play_audio(AgsRecyclingThread *recycling_thread, GObject *output, GObject *audio, AgsRecallID *recall_id, gint stage); AgsRecyclingThread* ags_recycling_thread_find_child(AgsRecyclingThread *recycling_thread, GObject *first_recycling); void ags_recycling_thread_fifo(AgsRecyclingThread *recycling_thread); AgsRecyclingThread* ags_recycling_thread_new(GObject *first_recycling, GObject *last_recycling); #endif /*__AGS_RECYCLING_THREAD_H__*/ gsequencer-0.6.37/src/ags/thread/ags_gui_thread.h0000644000175000017500000000400212626455141016621 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_GUI_THREAD_H__ #define __AGS_GUI_THREAD_H__ #include #include #ifdef AGS_USE_LINUX_THREADS #include #else #include #endif #include #define AGS_TYPE_GUI_THREAD (ags_gui_thread_get_type()) #define AGS_GUI_THREAD(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_GUI_THREAD, AgsGuiThread)) #define AGS_GUI_THREAD_CLASS(class) (G_TYPE_CHECK_CLASS_CAST(class, AGS_TYPE_GUI_THREAD, AgsGuiThreadClass)) #define AGS_IS_GUI_THREAD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_GUI_THREAD)) #define AGS_IS_GUI_THREAD_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_GUI_THREAD)) #define AGS_GUI_THREAD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS(obj, AGS_TYPE_GUI_THREAD, AgsGuiThreadClass)) #define AGS_GUI_THREAD_DEFAULT_JIFFIE (60.0) typedef struct _AgsGuiThread AgsGuiThread; typedef struct _AgsGuiThreadClass AgsGuiThreadClass; struct _AgsGuiThread { AgsThread thread; GMutex mutex; GCond cond; GList *task_completion; }; struct _AgsGuiThreadClass { AgsThreadClass thread; }; GType ags_gui_thread_get_type(); AgsGuiThread* ags_gui_thread_new(); #endif /*__AGS_GUI_THREAD_H__*/ gsequencer-0.6.37/src/ags/thread/ags_export_thread.c0000644000175000017500000002151512626272146017363 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include void ags_export_thread_class_init(AgsExportThreadClass *export_thread); void ags_export_thread_connectable_interface_init(AgsConnectableInterface *connectable); void ags_export_thread_init(AgsExportThread *export_thread); void ags_export_thread_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_export_thread_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_export_thread_connect(AgsConnectable *connectable); void ags_export_thread_disconnect(AgsConnectable *connectable); void ags_export_thread_finalize(GObject *gobject); void ags_export_thread_start(AgsThread *thread); void ags_export_thread_run(AgsThread *thread); void ags_export_thread_stop(AgsThread *thread); /** * SECTION:ags_export_thread * @short_description: export thread * @title: AgsExportThread * @section_id: * @include: ags/thread/ags_export_thread.h * * The #AgsExportThread acts as audio output thread to file. */ enum{ PROP_0, PROP_AUDIO_FILE, }; static gpointer ags_export_thread_parent_class = NULL; static AgsConnectableInterface *ags_export_thread_parent_connectable_interface; extern AgsConfig *config; GType ags_export_thread_get_type() { static GType ags_type_export_thread = 0; if(!ags_type_export_thread){ static const GTypeInfo ags_export_thread_info = { sizeof (AgsExportThreadClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_export_thread_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsExportThread), 0, /* n_preallocs */ (GInstanceInitFunc) ags_export_thread_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_export_thread_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_export_thread = g_type_register_static(AGS_TYPE_THREAD, "AgsExportThread\0", &ags_export_thread_info, 0); g_type_add_interface_static(ags_type_export_thread, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_export_thread); } void ags_export_thread_class_init(AgsExportThreadClass *export_thread) { GObjectClass *gobject; AgsThreadClass *thread; GParamSpec *param_spec; ags_export_thread_parent_class = g_type_class_peek_parent(export_thread); /* GObject */ gobject = (GObjectClass *) export_thread; gobject->get_property = ags_export_thread_get_property; gobject->set_property = ags_export_thread_set_property; gobject->finalize = ags_export_thread_finalize; /* properties */ param_spec = g_param_spec_object("audio-file\0", "audio file to write\0", "The audio file to write output.\0", AGS_TYPE_AUDIO_FILE, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_AUDIO_FILE, param_spec); /* AgsThread */ thread = (AgsThreadClass *) export_thread; thread->start = ags_export_thread_start; thread->run = ags_export_thread_run; thread->stop = ags_export_thread_stop; } void ags_export_thread_connectable_interface_init(AgsConnectableInterface *connectable) { ags_export_thread_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_export_thread_connect; connectable->disconnect = ags_export_thread_disconnect; } void ags_export_thread_init(AgsExportThread *export_thread) { AgsThread *thread; gchar *str0, *str1; thread = (AgsThread *) export_thread; str0 = ags_config_get(config, AGS_CONFIG_DEVOUT, "samplerate\0"); str0 = ags_config_get(config, AGS_CONFIG_DEVOUT, "buffer_size\0"); if(str0 == NULL || str1 == NULL){ thread->freq = AGS_EXPORT_THREAD_DEFAULT_JIFFIE; }else{ guint samplerate; guint buffer_size; samplerate = g_ascii_strtoull(str0, NULL, 10); buffer_size = g_ascii_strtoull(str0, NULL, 10); thread->freq = ceil((gdouble) samplerate / (gdouble) buffer_size); } g_free(str0); g_free(str1); export_thread->flags = 0; export_thread->tic = 0; export_thread->counter = 0; export_thread->audio_file = NULL; } void ags_export_thread_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsExportThread *export_thread; export_thread = AGS_EXPORT_THREAD(gobject); switch(prop_id){ case PROP_AUDIO_FILE: { AgsAudioFile *audio_file; audio_file = g_value_get_object(value); if(export_thread->audio_file == audio_file){ return; } if(export_thread->audio_file != NULL){ g_object_unref(export_thread->audio_file); } if(audio_file != NULL){ g_object_ref(audio_file); } export_thread->audio_file = audio_file; } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_export_thread_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsExportThread *export_thread; export_thread = AGS_EXPORT_THREAD(gobject); switch(prop_id){ case PROP_AUDIO_FILE: { g_value_set_object(value, export_thread->audio_file); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_export_thread_connect(AgsConnectable *connectable) { ags_export_thread_parent_connectable_interface->connect(connectable); /* empty */ } void ags_export_thread_disconnect(AgsConnectable *connectable) { ags_export_thread_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_export_thread_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_export_thread_parent_class)->finalize(gobject); /* empty */ } void ags_export_thread_start(AgsThread *thread) { AgsExportThread *export_thread; //TODO:JK: implement me g_message("export start"); export_thread = (AgsExportThread *) thread; export_thread->counter = 0; AGS_THREAD_CLASS(ags_export_thread_parent_class)->start(thread); } void ags_export_thread_run(AgsThread *thread) { AgsExportThread *export_thread; AgsDevout *devout; signed short *devout_buffer; guint buffer_length; // thread->freq = AGS_DEVOUT(thread->devout)->delay[AGS_DEVOUT(thread->devout)->tic_counter] / AGS_DEVOUT(thread->devout)->delay_factor; export_thread = AGS_EXPORT_THREAD(thread); if(export_thread->counter == export_thread->tic){ ags_thread_stop(thread); }else{ export_thread->counter += 1; } devout = (AgsDevout *) thread->devout; if((AGS_DEVOUT_BUFFER0 & (devout->flags)) != 0){ devout_buffer = devout->buffer[0]; }else if((AGS_DEVOUT_BUFFER1 & (devout->flags)) != 0){ devout_buffer = devout->buffer[1]; }else if((AGS_DEVOUT_BUFFER2 & (devout->flags)) != 0){ devout_buffer = devout->buffer[2]; }else if((AGS_DEVOUT_BUFFER3 & (devout->flags)) != 0){ devout_buffer = devout->buffer[3]; } buffer_length = devout->buffer_size; ags_audio_file_write(export_thread->audio_file, devout_buffer, (guint) buffer_length); } void ags_export_thread_stop(AgsThread *thread) { AgsExportThread *export_thread; export_thread = AGS_EXPORT_THREAD(thread); AGS_THREAD_CLASS(ags_export_thread_parent_class)->stop(thread); ags_audio_file_flush(export_thread->audio_file); ags_audio_file_close(export_thread->audio_file); } /** * ags_export_thread_new: * @export: the #AgsExport * @audio_file: the output file * * Create a new #AgsExportThread. * * Returns: the new #AgsExportThread * * Since: 0.4 */ AgsExportThread* ags_export_thread_new(GObject *devout, AgsAudioFile *audio_file) { AgsExportThread *export_thread; export_thread = (AgsExportThread *) g_object_new(AGS_TYPE_EXPORT_THREAD, "devout\0", devout, "audio-file\0", audio_file, NULL); return(export_thread); } gsequencer-0.6.37/src/ags/thread/ags_audio_loop.h0000644000175000017500000000716212626272146016654 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_AUDIO_LOOP_H__ #define __AGS_AUDIO_LOOP_H__ #include #include #ifdef AGS_USE_LINUX_THREADS #include #else #include #endif #define AGS_TYPE_AUDIO_LOOP (ags_audio_loop_get_type()) #define AGS_AUDIO_LOOP(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_AUDIO_LOOP, AgsAudioLoop)) #define AGS_AUDIO_LOOP_CLASS(class) (G_TYPE_CHECK_CLASS_CAST(class, AGS_TYPE_AUDIO_LOOP, AgsAudioLoopClass)) #define AGS_IS_AUDIO_LOOP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_AUDIO_LOOP)) #define AGS_IS_AUDIO_LOOP_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_AUDIO_LOOP)) #define AGS_AUDIO_LOOP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS(obj, AGS_TYPE_AUDIO_LOOP, AgsAudioLoopClass)) #define AGS_AUDIO_LOOP_DEFAULT_JIFFIE (48.0) typedef struct _AgsAudioLoop AgsAudioLoop; typedef struct _AgsAudioLoopClass AgsAudioLoopClass; typedef enum{ AGS_AUDIO_LOOP_PLAY_RECALL = 1, AGS_AUDIO_LOOP_PLAYING_RECALL = 1 << 1, AGS_AUDIO_LOOP_PLAY_RECALL_TERMINATING = 1 << 2, AGS_AUDIO_LOOP_PLAY_CHANNEL = 1 << 3, AGS_AUDIO_LOOP_PLAYING_CHANNEL = 1 << 4, AGS_AUDIO_LOOP_PLAY_CHANNEL_TERMINATING = 1 << 5, AGS_AUDIO_LOOP_PLAY_AUDIO = 1 << 6, AGS_AUDIO_LOOP_PLAYING_AUDIO = 1 << 7, AGS_AUDIO_LOOP_PLAY_NOTATION = 1 << 8, AGS_AUDIO_LOOP_PLAYING_NOTATION = 1 << 9, AGS_AUDIO_LOOP_PLAY_AUDIO_TERMINATING = 1 << 10, }AgsAudioLoopFlags; struct _AgsAudioLoop { AgsThread thread; guint flags; volatile guint tic; volatile guint last_sync; GCond cond; GMutex mutex; gdouble frequency; GObject *ags_main; GObject *async_queue; pthread_mutexattr_t tree_lock_mutexattr; pthread_mutex_t *tree_lock; pthread_mutex_t *recall_mutex; guint play_recall_ref; GList *play_recall; // play AgsRecall guint play_channel_ref; GList *play_channel; // play AgsChannel guint play_audio_ref; GList *play_audio; // play AgsAudio guint play_notation_ref; GList *play_notation; GList *tree_sanity; }; struct _AgsAudioLoopClass { AgsThreadClass thread; }; GType ags_audio_loop_get_type(); void ags_audio_loop_add_audio(AgsAudioLoop *audio_loop, GObject *audio); void ags_audio_loop_remove_audio(AgsAudioLoop *audio_loop, GObject *audio); void ags_audio_loop_add_channel(AgsAudioLoop *audio_loop, GObject *channel); void ags_audio_loop_remove_channel(AgsAudioLoop *audio_loop, GObject *channel); void ags_audio_loop_add_recall(AgsAudioLoop *audio_loop, gpointer devout_play); void ags_audio_loop_remove_recall(AgsAudioLoop *audio_loop, gpointer devout_play); AgsAudioLoop* ags_audio_loop_new(GObject *devout, GObject *ags_main); #endif /*__AGS_AUDIO_LOOP_H__*/ gsequencer-0.6.37/src/ags/thread/ags_single_thread.c0000644000175000017500000001721112626272146017321 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include void ags_single_thread_class_init(AgsSingleThreadClass *single_thread); void ags_single_thread_connectable_interface_init(AgsConnectableInterface *connectable); void ags_single_thread_init(AgsSingleThread *single_thread); void ags_single_thread_connect(AgsConnectable *connectable); void ags_single_thread_disconnect(AgsConnectable *connectable); void ags_single_thread_finalize(GObject *gobject); void ags_single_thread_start(AgsThread *thread); void ags_single_thread_run(AgsThread *thread); void ags_single_thread_stop(AgsThread *thread); void* ags_single_thread_loop(void *ptr); static gpointer ags_single_thread_parent_class = NULL; static AgsConnectableInterface *ags_single_thread_parent_connectable_interface; GType ags_single_thread_get_type() { static GType ags_type_single_thread = 0; if(!ags_type_single_thread){ static const GTypeInfo ags_single_thread_info = { sizeof (AgsSingleThreadClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_single_thread_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsSingleThread), 0, /* n_preallocs */ (GInstanceInitFunc) ags_single_thread_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_single_thread_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_single_thread = g_type_register_static(AGS_TYPE_THREAD, "AgsSingleThread\0", &ags_single_thread_info, 0); g_type_add_interface_static(ags_type_single_thread, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_single_thread); } void ags_single_thread_class_init(AgsSingleThreadClass *single_thread) { GObjectClass *gobject; AgsThreadClass *thread; ags_single_thread_parent_class = g_type_class_peek_parent(single_thread); /* GObject */ gobject = (GObjectClass *) single_thread; gobject->finalize = ags_single_thread_finalize; /* AgsThread */ thread = (AgsThreadClass *) single_thread; thread->start = ags_single_thread_start; thread->run = ags_single_thread_run; thread->stop = ags_single_thread_stop; } void ags_single_thread_connectable_interface_init(AgsConnectableInterface *connectable) { ags_single_thread_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_single_thread_connect; connectable->disconnect = ags_single_thread_disconnect; } void ags_single_thread_init(AgsSingleThread *single_thread) { AgsThread *thread; AgsAudioLoop *audio_loop; thread = AGS_THREAD(single_thread); audio_loop = single_thread->audio_loop = ags_audio_loop_new(NULL, NULL); AGS_THREAD(single_thread->audio_loop)->flags |= AGS_THREAD_SINGLE_LOOP; single_thread->task_thread = ags_thread_find_type(audio_loop, AGS_TYPE_TASK_THREAD); AGS_THREAD(single_thread->task_thread)->flags |= AGS_THREAD_SINGLE_LOOP; single_thread->devout_thread = ags_thread_find_type(audio_loop, AGS_TYPE_DEVOUT_THREAD); AGS_THREAD(single_thread->task_thread)->flags |= AGS_THREAD_SINGLE_LOOP; single_thread->gui_thread = ags_thread_find_type(audio_loop, AGS_TYPE_GUI_THREAD); AGS_THREAD(single_thread->gui_thread)->flags |= AGS_THREAD_SINGLE_LOOP; } void ags_single_thread_connect(AgsConnectable *connectable) { ags_single_thread_parent_connectable_interface->connect(connectable); /* empty */ } void ags_single_thread_disconnect(AgsConnectable *connectable) { ags_single_thread_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_single_thread_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_single_thread_parent_class)->finalize(gobject); /* empty */ } void ags_single_thread_start(AgsThread *thread) { AgsSingleThread *single_thread; AgsDevout *devout; single_thread = AGS_SINGLE_THREAD(thread); devout = AGS_DEVOUT(thread->devout); devout->flags |= AGS_DEVOUT_NONBLOCKING; g_object_set(G_OBJECT(single_thread->audio_loop), "devout\0", devout, NULL); g_object_set(G_OBJECT(single_thread->task_thread), "devout\0", devout, NULL); g_object_set(G_OBJECT(single_thread->devout_thread), "devout\0", devout, NULL); g_object_set(G_OBJECT(single_thread->gui_thread), "devout\0", devout, NULL); g_atomic_int_or(&(thread->flags), (AGS_THREAD_RUNNING | AGS_THREAD_INITIAL_RUN)); ags_single_thread_run(thread); // pthread_create(&(AGS_THREAD(single_thread)->thread), NULL, // &(ags_single_thread_loop), thread); ags_thread_start((AgsThread *) single_thread->audio_loop); ags_thread_start((AgsThread *) single_thread->task_thread); ags_thread_start((AgsThread *) single_thread->gui_thread); } void* ags_single_thread_loop(void *ptr) { ags_single_thread_run(AGS_THREAD(ptr)); pthread_exit(NULL); } void ags_single_thread_run(AgsThread *thread) { AgsSingleThread *single_thread; struct timespec play_start, play_exceeded, play_idle, current; single_thread = AGS_SINGLE_THREAD(thread); play_idle.tv_sec = 0; play_idle.tv_nsec = floor((double) NSEC_PER_SEC / (double) AGS_AUDIO_LOOP_DEFAULT_JIFFIE); while((AGS_THREAD_RUNNING & (g_atomic_int_get(&thread->flags))) != 0){ /* initial value to calculate timing */ clock_gettime(CLOCK_MONOTONIC, &play_start); /* */ ags_thread_run((AgsThread *) single_thread->audio_loop); ags_thread_run((AgsThread *) single_thread->task_thread); if((AGS_THREAD_RUNNING & (AGS_THREAD(single_thread->devout_thread)->flags)) != 0){ ags_thread_run((AgsThread *) single_thread->devout_thread); } ags_thread_run((AgsThread *) single_thread->gui_thread); /* do timing */ clock_gettime(CLOCK_MONOTONIC, &play_exceeded); if(play_start.tv_sec < play_exceeded.tv_sec){ play_exceeded.tv_nsec += NSEC_PER_SEC; play_exceeded.tv_sec--; } if(play_start.tv_sec < play_exceeded.tv_sec){ continue; } /* calculate timing */ current.tv_sec = 0; current.tv_nsec = play_idle.tv_nsec - (play_exceeded.tv_nsec - play_start.tv_nsec); // nanosleep(¤t, NULL); } } void ags_single_thread_stop(AgsThread *thread) { AgsSingleThread *single_thread; single_thread = AGS_SINGLE_THREAD(thread); ags_thread_stop((AgsThread *) single_thread->audio_loop); ags_thread_stop((AgsThread *) single_thread->task_thread); ags_thread_stop((AgsThread *) single_thread->devout_thread); ags_thread_stop((AgsThread *) single_thread->gui_thread); } AgsSingleThread* ags_single_thread_new(GObject *devout) { AgsSingleThread *single_thread; single_thread = (AgsSingleThread *) g_object_new(AGS_TYPE_SINGLE_THREAD, "devout\0", devout, NULL); return(single_thread); } gsequencer-0.6.37/src/ags/thread/ags_devout_thread.c0000644000175000017500000002114412626272146017346 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include void ags_devout_thread_class_init(AgsDevoutThreadClass *devout_thread); void ags_devout_thread_connectable_interface_init(AgsConnectableInterface *connectable); void ags_devout_thread_init(AgsDevoutThread *devout_thread); void ags_devout_thread_connect(AgsConnectable *connectable); void ags_devout_thread_disconnect(AgsConnectable *connectable); void ags_devout_thread_finalize(GObject *gobject); void ags_devout_thread_start(AgsThread *thread); void ags_devout_thread_run(AgsThread *thread); void ags_devout_thread_stop(AgsThread *thread); /** * SECTION:ags_devout_thread * @short_description: devout thread * @title: AgsDevoutThread * @section_id: * @include: ags/thread/ags_devout_thread.h * * The #AgsDevoutThread acts as audio output thread to soundcard. */ static gpointer ags_devout_thread_parent_class = NULL; static AgsConnectableInterface *ags_devout_thread_parent_connectable_interface; extern AgsConfig *config; extern pthread_mutex_t ags_application_mutex; GType ags_devout_thread_get_type() { static GType ags_type_devout_thread = 0; if(!ags_type_devout_thread){ static const GTypeInfo ags_devout_thread_info = { sizeof (AgsDevoutThreadClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_devout_thread_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsDevoutThread), 0, /* n_preallocs */ (GInstanceInitFunc) ags_devout_thread_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_devout_thread_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_devout_thread = g_type_register_static(AGS_TYPE_THREAD, "AgsDevoutThread\0", &ags_devout_thread_info, 0); g_type_add_interface_static(ags_type_devout_thread, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_devout_thread); } void ags_devout_thread_class_init(AgsDevoutThreadClass *devout_thread) { GObjectClass *gobject; AgsThreadClass *thread; ags_devout_thread_parent_class = g_type_class_peek_parent(devout_thread); /* GObject */ gobject = (GObjectClass *) devout_thread; gobject->finalize = ags_devout_thread_finalize; /* AgsThread */ thread = (AgsThreadClass *) devout_thread; thread->start = ags_devout_thread_start; thread->run = ags_devout_thread_run; thread->stop = ags_devout_thread_stop; } void ags_devout_thread_connectable_interface_init(AgsConnectableInterface *connectable) { ags_devout_thread_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_devout_thread_connect; connectable->disconnect = ags_devout_thread_disconnect; } void ags_devout_thread_init(AgsDevoutThread *devout_thread) { AgsThread *thread; gchar *str0, *str1; thread = (AgsThread *) devout_thread; str0 = ags_config_get(config, AGS_CONFIG_DEVOUT, "samplerate\0"); str0 = ags_config_get(config, AGS_CONFIG_DEVOUT, "buffer_size\0"); if(str0 == NULL || str1 == NULL){ thread->freq = AGS_DEVOUT_THREAD_DEFAULT_JIFFIE; }else{ guint samplerate; guint buffer_size; samplerate = g_ascii_strtoull(str0, NULL, 10); buffer_size = g_ascii_strtoull(str0, NULL, 10); thread->freq = ceil((gdouble) samplerate / (gdouble) buffer_size); } g_free(str0); g_free(str1); devout_thread->timestamp_thread = (AgsThread *) ags_timestamp_thread_new(); ags_thread_add_child(thread, devout_thread->timestamp_thread); devout_thread->error = NULL; } void ags_devout_thread_connect(AgsConnectable *connectable) { ags_devout_thread_parent_connectable_interface->connect(connectable); /* empty */ } void ags_devout_thread_disconnect(AgsConnectable *connectable) { ags_devout_thread_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_devout_thread_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_devout_thread_parent_class)->finalize(gobject); /* empty */ } void ags_devout_thread_start(AgsThread *thread) { AgsDevout *devout; AgsDevoutThread *devout_thread; static gboolean initialized = FALSE; GError *error; devout_thread = AGS_DEVOUT_THREAD(thread); devout = AGS_DEVOUT(thread->devout); /* */ devout->flags |= (AGS_DEVOUT_BUFFER3 | AGS_DEVOUT_PLAY | AGS_DEVOUT_NONBLOCKING); /* */ devout_thread->error = NULL; if((AGS_DEVOUT_ALSA & (devout->flags)) != 0){ if(devout->out.alsa.handle == NULL){ ags_devout_alsa_init(devout, &(devout_thread->error)); if(devout_thread->error == NULL){ devout->flags &= (~AGS_DEVOUT_START_PLAY); }else{ /* preserve AgsAudioLoop from playing */ devout->flags &= (~(AGS_DEVOUT_BUFFER3 | AGS_DEVOUT_PLAY | AGS_DEVOUT_NONBLOCKING)); g_message("aborting\0"); return; } #ifdef AGS_DEBUG g_message("ags_devout_alsa_play\0"); #endif } } memset(devout->buffer[0], 0, devout->dsp_channels * devout->buffer_size * sizeof(signed short)); memset(devout->buffer[1], 0, devout->dsp_channels * devout->buffer_size * sizeof(signed short)); memset(devout->buffer[2], 0, devout->dsp_channels * devout->buffer_size * sizeof(signed short)); memset(devout->buffer[3], 0, devout->dsp_channels * devout->buffer_size * sizeof(signed short)); if((AGS_THREAD_SINGLE_LOOP & (g_atomic_int_get(&(thread->flags)))) == 0){ AGS_THREAD_CLASS(ags_devout_thread_parent_class)->start(thread); } } void ags_devout_thread_run(AgsThread *thread) { AgsDevout *devout; AgsMutexManager *mutex_manager; AgsDevoutThread *devout_thread; long delay; pthread_mutex_t *mutex; GError *error; // thread->freq = AGS_DEVOUT(thread->devout)->delay[AGS_DEVOUT(thread->devout)->tic_counter] / AGS_DEVOUT(thread->devout)->delay_factor; devout_thread = AGS_DEVOUT_THREAD(thread); devout = (AgsDevout *) thread->devout; pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) devout); pthread_mutex_unlock(&(ags_application_mutex)); // delay = (long) floor(NSEC_PER_SEC / devout->frequency * devout->buffer_size); pthread_mutex_lock(mutex); if((AGS_THREAD_INITIAL_RUN & (thread->flags)) != 0){ // time(&(devout_thread->time_val)); } pthread_mutex_unlock(mutex); // g_message("play\0"); if((AGS_DEVOUT_PLAY & (devout->flags)) != 0){ error = NULL; ags_devout_alsa_play(devout, &error); } if(error != NULL){ //TODO:JK: implement me } } void ags_devout_thread_stop(AgsThread *thread) { AgsDevout *devout; AgsAudioLoop *audio_loop; AgsDevoutThread *devout_thread; devout_thread = AGS_DEVOUT_THREAD(thread); devout = AGS_DEVOUT(thread->devout); audio_loop = AGS_AUDIO_LOOP(thread->parent); if((AGS_DEVOUT_START_PLAY & (devout->flags)) != 0){ #ifdef AGS_DEBUG g_message("ags_devout_thread_stop: just starting\n\0"); #endif return; } AGS_THREAD_CLASS(ags_devout_thread_parent_class)->stop(thread); devout->flags &= ~(AGS_DEVOUT_PLAY); if((AGS_DEVOUT_ALSA & (devout->flags)) != 0){ ags_devout_alsa_free(devout); }else{ } } /** * ags_devout_thread_new: * @devout: the #AgsDevout * * Create a new #AgsDevoutThread. * * Returns: the new #AgsDevoutThread * * Since: 0.4 */ AgsDevoutThread* ags_devout_thread_new(GObject *devout) { AgsDevoutThread *devout_thread; devout_thread = (AgsDevoutThread *) g_object_new(AGS_TYPE_DEVOUT_THREAD, "devout\0", devout, NULL); return(devout_thread); } gsequencer-0.6.37/src/ags/thread/ags_task_thread.c0000644000175000017500000004001712626272146017002 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include void ags_task_thread_class_init(AgsTaskThreadClass *task_thread); void ags_task_thread_connectable_interface_init(AgsConnectableInterface *connectable); void ags_task_thread_async_queue_interface_init(AgsAsyncQueueInterface *async_queue); void ags_task_thread_init(AgsTaskThread *task_thread); void ags_task_thread_connect(AgsConnectable *connectable); void ags_task_thread_disconnect(AgsConnectable *connectable); void ags_task_thread_finalize(GObject *gobject); void ags_task_thread_set_run_mutex(AgsAsyncQueue *async_queue, pthread_mutex_t *run_mutex); pthread_mutex_t* ags_task_thread_get_run_mutex(AgsAsyncQueue *async_queue); void ags_task_thread_set_run_cond(AgsAsyncQueue *async_queue, pthread_cond_t *run_cond); pthread_cond_t* ags_task_thread_get_run_cond(AgsAsyncQueue *async_queue); void ags_task_thread_set_run(AgsAsyncQueue *async_queue, gboolean is_run); gboolean ags_task_thread_is_run(AgsAsyncQueue *async_queue); void ags_task_thread_start(AgsThread *thread); void ags_task_thread_run(AgsThread *thread); void ags_task_thread_append_task_queue(AgsReturnableThread *returnable_thread, gpointer data); void ags_task_thread_append_tasks_queue(AgsReturnableThread *returnable_thread, gpointer data); extern pthread_mutex_t ags_application_mutex; extern AgsConfig *config; /** * SECTION:ags_task_thread * @short_description: task thread * @title: AgsTaskThread * @section_id: * @include: ags/thread/ags_task_thread.h * * The #AgsTaskThread acts as task queue thread. */ static gpointer ags_task_thread_parent_class = NULL; static AgsConnectableInterface *ags_task_thread_parent_connectable_interface; static gboolean DEBUG; GType ags_task_thread_get_type() { static GType ags_type_task_thread = 0; if(!ags_type_task_thread){ static const GTypeInfo ags_task_thread_info = { sizeof (AgsTaskThreadClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_task_thread_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsTaskThread), 0, /* n_preallocs */ (GInstanceInitFunc) ags_task_thread_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_task_thread_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_async_queue_interface_info = { (GInterfaceInitFunc) ags_task_thread_async_queue_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_task_thread = g_type_register_static(AGS_TYPE_THREAD, "AgsTaskThread\0", &ags_task_thread_info, 0); g_type_add_interface_static(ags_type_task_thread, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_task_thread, AGS_TYPE_ASYNC_QUEUE, &ags_async_queue_interface_info); } return (ags_type_task_thread); } void ags_task_thread_class_init(AgsTaskThreadClass *task_thread) { GObjectClass *gobject; AgsThreadClass *thread; ags_task_thread_parent_class = g_type_class_peek_parent(task_thread); /* GObject */ gobject = (GObjectClass *) task_thread; gobject->finalize = ags_task_thread_finalize; /* AgsThread */ thread = (AgsThreadClass *) task_thread; thread->start = ags_task_thread_start; thread->run = ags_task_thread_run; } void ags_task_thread_connectable_interface_init(AgsConnectableInterface *connectable) { ags_task_thread_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_task_thread_connect; connectable->disconnect = ags_task_thread_disconnect; } void ags_task_thread_async_queue_interface_init(AgsAsyncQueueInterface *async_queue) { async_queue->set_run_mutex = ags_task_thread_set_run_mutex; async_queue->get_run_mutex = ags_task_thread_get_run_mutex; async_queue->set_run_cond = ags_task_thread_set_run_cond; async_queue->get_run_cond = ags_task_thread_get_run_cond; async_queue->set_run = ags_task_thread_set_run; async_queue->is_run = ags_task_thread_is_run; } void ags_task_thread_init(AgsTaskThread *task_thread) { AgsThread *thread; pthread_mutexattr_t mutexattr; thread = AGS_THREAD(task_thread); // g_atomic_int_or(&(thread->flags), // AGS_THREAD_LOCK_GREEDY_RUN_MUTEX); thread->freq = AGS_TASK_THREAD_DEFAULT_JIFFIE; /* async queue */ g_atomic_int_set(&(task_thread->is_run), FALSE); pthread_mutexattr_init(&(mutexattr)); pthread_mutexattr_settype(&(mutexattr), PTHREAD_MUTEX_RECURSIVE); task_thread->run_mutex = (pthread_mutex_t *) malloc(sizeof(pthread_mutex_t)); pthread_mutex_init(task_thread->run_mutex, &mutexattr); task_thread->run_cond = (pthread_cond_t *) malloc(sizeof(pthread_cond_t)); pthread_cond_init(task_thread->run_cond, NULL); /* */ task_thread->read_mutex = (pthread_mutex_t *) malloc(sizeof(pthread_mutex_t)); pthread_mutex_init(task_thread->read_mutex, NULL); task_thread->launch_mutex = (pthread_mutex_t *) malloc(sizeof(pthread_mutex_t)); pthread_mutex_init(task_thread->launch_mutex, NULL); g_atomic_int_set(&(task_thread->queued), 0); g_atomic_int_set(&(task_thread->pending), 0); g_atomic_pointer_set(&(task_thread->exec), NULL); g_atomic_pointer_set(&(task_thread->queue), NULL); task_thread->thread_pool = NULL; } void ags_task_thread_connect(AgsConnectable *connectable) { AgsTaskThread *task_thread; ags_task_thread_parent_connectable_interface->connect(connectable); task_thread = AGS_TASK_THREAD(connectable); task_thread->thread_pool = AGS_MAIN(AGS_AUDIO_LOOP(AGS_THREAD(task_thread)->parent)->ags_main)->thread_pool; task_thread->thread_pool->parent = (AgsThread *) task_thread; } void ags_task_thread_disconnect(AgsConnectable *connectable) { ags_task_thread_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_task_thread_finalize(GObject *gobject) { AgsTaskThread *task_thread; task_thread = AGS_TASK_THREAD(gobject); /* free AgsTask lists */ ags_list_free_and_unref_link(g_atomic_pointer_get(&(task_thread->exec))); ags_list_free_and_unref_link(g_atomic_pointer_get(&(task_thread->queue))); /* */ G_OBJECT_CLASS(ags_task_thread_parent_class)->finalize(gobject); } void ags_task_thread_set_run_mutex(AgsAsyncQueue *async_queue, pthread_mutex_t *run_mutex) { AGS_TASK_THREAD(async_queue)->run_mutex = run_mutex; } pthread_mutex_t* ags_task_thread_get_run_mutex(AgsAsyncQueue *async_queue) { return(AGS_TASK_THREAD(async_queue)->run_mutex); } void ags_task_thread_set_run_cond(AgsAsyncQueue *async_queue, pthread_cond_t *run_cond) { AGS_TASK_THREAD(async_queue)->run_cond = run_cond; } pthread_cond_t* ags_task_thread_get_run_cond(AgsAsyncQueue *async_queue) { return(AGS_TASK_THREAD(async_queue)->run_cond); } void ags_task_thread_set_run(AgsAsyncQueue *async_queue, gboolean is_run) { g_atomic_int_set(&(AGS_TASK_THREAD(async_queue)->is_run), is_run); } gboolean ags_task_thread_is_run(AgsAsyncQueue *async_queue) { return(g_atomic_int_get(&(AGS_TASK_THREAD(async_queue)->is_run))); } void ags_task_thread_start(AgsThread *thread) { AgsTaskThread *task_thread; task_thread = AGS_TASK_THREAD(thread); if((AGS_THREAD_RUNNING & (g_atomic_int_get(&(task_thread->thread_pool->flags)))) == 0){ ags_thread_pool_start(task_thread->thread_pool); while((AGS_THREAD_POOL_READY & (g_atomic_int_get(&(task_thread->thread_pool->flags)))) == 0){ usleep(500000); } } if((AGS_THREAD_SINGLE_LOOP & (g_atomic_int_get(&(thread->flags)))) == 0){ AGS_THREAD_CLASS(ags_task_thread_parent_class)->start(thread); } } void ags_task_thread_run(AgsThread *thread) { AgsDevout *devout; AgsTaskThread *task_thread; GList *list; guint buffer_size; guint samplerate; static struct timespec play_idle; static useconds_t idle; guint prev_pending; static gboolean initialized = FALSE; pthread_mutex_lock(&(ags_application_mutex)); task_thread = AGS_TASK_THREAD(thread); devout = AGS_DEVOUT(thread->devout); /* buffer_size = g_ascii_strtoull(ags_config_get(config, AGS_CONFIG_DEVOUT, "buffer-size\0"), NULL, 10); samplerate = g_ascii_strtoull(ags_config_get(config, AGS_CONFIG_DEVOUT, "samplerate\0"), NULL, 10); */ if(!initialized){ // play_idle.tv_sec = 0; // play_idle.tv_nsec = 10 * round(sysconf(_SC_CLK_TCK) * (double) buffer_size / (double) samplerate); // idle = sysconf(_SC_CLK_TCK) * round(sysconf(_SC_CLK_TCK) * (double) buffer_size / (double) samplerate / 8.0); initialized = TRUE; } pthread_mutex_unlock(&(ags_application_mutex)); /* */ pthread_mutex_lock(task_thread->read_mutex); g_atomic_pointer_set(&(task_thread->exec), g_atomic_pointer_get(&(task_thread->queue))); g_atomic_pointer_set(&(task_thread->queue), NULL); list = g_atomic_pointer_get(&(task_thread->exec)); prev_pending = g_atomic_int_get(&(task_thread->pending)); g_atomic_int_set(&(task_thread->pending), g_list_length(list)); g_atomic_int_set(&(task_thread->queued), g_atomic_int_get(&(task_thread->queued)) - prev_pending); pthread_mutex_unlock(task_thread->read_mutex); /* launch tasks */ if(list != NULL){ AgsTask *task; int i; pthread_mutex_lock(task_thread->launch_mutex); // pthread_mutex_lock(AGS_AUDIO_LOOP(thread->parent)->recall_mutex); for(i = 0; i < g_atomic_int_get(&(task_thread->pending)); i++){ task = AGS_TASK(list->data); #ifdef AGS_DEBUG g_message("ags_task_thread - launching task: %s\n\0", G_OBJECT_TYPE_NAME(task)); #endif ags_task_launch(task); list = list->next; } // pthread_mutex_unlock(AGS_AUDIO_LOOP(thread->parent)->recall_mutex); pthread_mutex_unlock(task_thread->launch_mutex); } pthread_mutex_lock(task_thread->read_mutex); g_list_free_full(g_atomic_pointer_get(&(task_thread->exec)), g_object_unref); g_atomic_pointer_set(&(task_thread->exec), NULL); pthread_mutex_unlock(task_thread->read_mutex); /* async queue */ pthread_mutex_lock(task_thread->run_mutex); ags_async_queue_set_run(AGS_ASYNC_QUEUE(task_thread), TRUE); pthread_cond_broadcast(task_thread->run_cond); pthread_mutex_unlock(task_thread->run_mutex); /* clean-up */ pango_fc_font_map_cache_clear(pango_cairo_font_map_get_default()); pango_cairo_font_map_set_default(NULL); // cairo_debug_reset_static_data(); // FcFini(); } void ags_task_thread_append_task_queue(AgsReturnableThread *returnable_thread, gpointer data) { AgsTask *task; AgsTaskThread *task_thread; AgsTaskThreadAppend *append; GList *tmplist; gboolean initial_wait; int ret; g_atomic_int_and(&(AGS_THREAD(returnable_thread)->flags), (~AGS_THREAD_READY)); append = (AgsTaskThreadAppend *) g_atomic_pointer_get(&(returnable_thread->safe_data)); task_thread = g_atomic_pointer_get(&(append->task_thread)); task = AGS_TASK(g_atomic_pointer_get(&(append->data))); free(append); /* lock */ pthread_mutex_lock(task_thread->read_mutex); /* append to queue */ g_atomic_int_set(&(task_thread->queued), g_atomic_int_get(&(task_thread->queued)) + 1); tmplist = g_atomic_pointer_get(&(task_thread->queue)); g_atomic_pointer_set(&(task_thread->queue), g_list_append(tmplist, task)); /* unlock */ pthread_mutex_unlock(task_thread->read_mutex); /* */ // g_message("ags_task_thread_append_task_thread ------------------------- %d\0", devout->append_task_suspend); } /** * ags_task_thread_append_task: * @task_thread: an #AgsTaskThread * @task: an #AgsTask * * Adds the task to @task_thread. * * Since: 0.4 */ void ags_task_thread_append_task(AgsTaskThread *task_thread, AgsTask *task) { AgsTaskThreadAppend *append; AgsThread *thread; #ifdef AGS_DEBUG g_message("append task\0"); #endif append = (AgsTaskThreadAppend *) malloc(sizeof(AgsTaskThreadAppend)); g_atomic_pointer_set(&(append->task_thread), task_thread); g_atomic_pointer_set(&(append->data), task); thread = ags_thread_pool_pull(task_thread->thread_pool); pthread_mutex_lock(AGS_RETURNABLE_THREAD(thread)->reset_mutex); g_atomic_pointer_set(&(AGS_RETURNABLE_THREAD(thread)->safe_data), append); ags_returnable_thread_connect_safe_run(AGS_RETURNABLE_THREAD(thread), ags_task_thread_append_task_queue); g_atomic_int_or(&(AGS_RETURNABLE_THREAD(thread)->flags), AGS_RETURNABLE_THREAD_IN_USE); pthread_mutex_unlock(AGS_RETURNABLE_THREAD(thread)->reset_mutex); } void ags_task_thread_append_tasks_queue(AgsReturnableThread *returnable_thread, gpointer data) { AgsTask *task; AgsTaskThread *task_thread; AgsTaskThreadAppend *append; GList *list, *tmplist; gboolean initial_wait; int ret; g_atomic_int_and(&(AGS_THREAD(returnable_thread)->flags), (~AGS_THREAD_READY)); append = (AgsTaskThreadAppend *) g_atomic_pointer_get(&(returnable_thread->safe_data)); task_thread = g_atomic_pointer_get(&(append->task_thread)); list = (GList *) g_atomic_pointer_get(&(append->data)); free(append); /* lock */ pthread_mutex_lock(task_thread->read_mutex); /* append to queue */ g_atomic_int_set(&(task_thread->queued), g_atomic_int_get(&(task_thread->queued)) + g_list_length(list)); tmplist = g_atomic_pointer_get(&(task_thread->queue)); g_atomic_pointer_set(&(task_thread->queue), g_list_concat(tmplist, list)); /* */ pthread_mutex_unlock(task_thread->read_mutex); } /** * ags_task_thread_append_tasks: * @task_thread: an #AgsTaskThread * @list: a GList with #AgsTask as data * * Concats the list with @task_thread's internal task list. Don't * free the list you pass. It will be freed for you. * * Since: 0.4 */ void ags_task_thread_append_tasks(AgsTaskThread *task_thread, GList *list) { AgsTaskThreadAppend *append; AgsThread *thread; #ifdef AGS_DEBUG g_message("append tasks\0"); #endif append = (AgsTaskThreadAppend *) malloc(sizeof(AgsTaskThreadAppend)); g_atomic_pointer_set(&(append->task_thread), task_thread); g_atomic_pointer_set(&(append->data), list); thread = ags_thread_pool_pull(task_thread->thread_pool); pthread_mutex_lock(AGS_RETURNABLE_THREAD(thread)->reset_mutex); g_atomic_pointer_set(&(AGS_RETURNABLE_THREAD(thread)->safe_data), append); ags_returnable_thread_connect_safe_run(AGS_RETURNABLE_THREAD(thread), ags_task_thread_append_tasks_queue); g_atomic_int_or(&(AGS_RETURNABLE_THREAD(thread)->flags), AGS_RETURNABLE_THREAD_IN_USE); pthread_mutex_unlock(AGS_RETURNABLE_THREAD(thread)->reset_mutex); } /** * ags_task_thread_new: * @devout: the #AgsDevout * * Create a new #AgsTaskThread. * * Returns: the new #AgsTaskThread * * Since: 0.4 */ AgsTaskThread* ags_task_thread_new(GObject *devout) { AgsTaskThread *task_thread; task_thread = (AgsTaskThread *) g_object_new(AGS_TYPE_TASK_THREAD, "devout\0", devout, NULL); return(task_thread); } gsequencer-0.6.37/src/ags/thread/ags_returnable_thread.h0000644000175000017500000000554312621463700020206 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_RETURNABLE_THREAD_H__ #define __AGS_RETURNABLE_THREAD_H__ #include #include #ifdef AGS_USE_LINUX_THREADS #include #else #include #endif #define AGS_TYPE_RETURNABLE_THREAD (ags_returnable_thread_get_type()) #define AGS_RETURNABLE_THREAD(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_RETURNABLE_THREAD, AgsReturnableThread)) #define AGS_RETURNABLE_THREAD_CLASS(class) (G_TYPE_CHECK_CLASS_CAST(class, AGS_TYPE_RETURNABLE_THREAD, AgsReturnableThreadClass)) #define AGS_IS_RETURNABLE_THREAD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_RETURNABLE_THREAD)) #define AGS_IS_RETURNABLE_THREAD_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_RETURNABLE_THREAD)) #define AGS_RETURNABLE_THREAD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS(obj, AGS_TYPE_RETURNABLE_THREAD, AgsReturnableThreadClass)) #define AGS_RETURNABLE_THREAD_DEFAULT_JIFFIE (250.0) typedef struct _AgsReturnableThread AgsReturnableThread; typedef struct _AgsReturnableThreadClass AgsReturnableThreadClass; typedef void (*AgsReturnableThreadCallback)(AgsReturnableThread *returnable_thread, gpointer data); typedef enum{ AGS_RETURNABLE_THREAD_IN_USE = 1, AGS_RETURNABLE_THREAD_RESET = 1 << 1, }AgsReturnableThreadFlags; struct _AgsReturnableThread { AgsThread thread; volatile guint flags; GObject *thread_pool; pthread_mutex_t *reset_mutex; volatile void *safe_data; gulong handler; }; struct _AgsReturnableThreadClass { AgsThreadClass thread; void (*safe_run)(AgsReturnableThread *returnable_thread); }; GType ags_returnable_thread_get_type(); void ags_returnable_thread_safe_run(AgsReturnableThread *returnable_thread); void ags_returnable_thread_connect_safe_run(AgsReturnableThread *returnable_thread, AgsReturnableThreadCallback callback); void ags_returnable_thread_disconnect_safe_run(AgsReturnableThread *returnable_thread); AgsReturnableThread* ags_returnable_thread_new(GObject *thread_pool); #endif /*__AGS_RETURNABLE_THREAD_H__*/ gsequencer-0.6.37/src/ags/thread/ags_timestamp_thread.c0000644000175000017500000001200712626272146020041 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include void ags_timestamp_thread_class_init(AgsTimestampThreadClass *timestamp_thread); void ags_timestamp_thread_connectable_interface_init(AgsConnectableInterface *connectable); void ags_timestamp_thread_init(AgsTimestampThread *timestamp_thread); void ags_timestamp_thread_connect(AgsConnectable *connectable); void ags_timestamp_thread_disconnect(AgsConnectable *connectable); void ags_timestamp_thread_finalize(GObject *gobject); void ags_timestamp_thread_run(AgsThread *thread); static gpointer ags_timestamp_thread_parent_class = NULL; static AgsConnectableInterface *ags_timestamp_thread_parent_connectable_interface; GType ags_timestamp_thread_get_type() { static GType ags_type_timestamp_thread = 0; if(!ags_type_timestamp_thread){ static const GTypeInfo ags_timestamp_thread_info = { sizeof (AgsTimestampThreadClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_timestamp_thread_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsTimestampThread), 0, /* n_preallocs */ (GInstanceInitFunc) ags_timestamp_thread_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_timestamp_thread_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_timestamp_thread = g_type_register_static(AGS_TYPE_THREAD, "AgsTimestampThread\0", &ags_timestamp_thread_info, 0); g_type_add_interface_static(ags_type_timestamp_thread, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_timestamp_thread); } void ags_timestamp_thread_class_init(AgsTimestampThreadClass *timestamp_thread) { GObjectClass *gobject; AgsThreadClass *thread; GParamSpec *param_spec; ags_timestamp_thread_parent_class = g_type_class_peek_parent(timestamp_thread); /* GObject */ gobject = (GObjectClass *) timestamp_thread; gobject->finalize = ags_timestamp_thread_finalize; /* AgsThread */ thread = (AgsThreadClass *) timestamp_thread; thread->run = ags_timestamp_thread_run; } void ags_timestamp_thread_connectable_interface_init(AgsConnectableInterface *connectable) { ags_timestamp_thread_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_timestamp_thread_connect; connectable->disconnect = ags_timestamp_thread_disconnect; } void ags_timestamp_thread_init(AgsTimestampThread *timestamp_thread) { timestamp_thread->current_timestamp = (GObject *) ags_timestamp_new(); timestamp_thread->current_latency = (GObject *) ags_timestamp_new(); } void ags_timestamp_thread_connect(AgsConnectable *connectable) { AgsThread *thread; thread = AGS_THREAD(connectable); ags_timestamp_thread_parent_connectable_interface->connect(connectable); /* empty */ } void ags_timestamp_thread_disconnect(AgsConnectable *connectable) { ags_timestamp_thread_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_timestamp_thread_finalize(GObject *gobject) { AgsTimestampThread *timestamp_thread; timestamp_thread = AGS_TIMESTAMP_THREAD(gobject); /* */ G_OBJECT_CLASS(ags_timestamp_thread_parent_class)->finalize(gobject); } void ags_timestamp_thread_run(AgsThread *thread) { AgsTimestampThread *timestamp_thread; AgsDevout *devout; guint duration; time_t timer; timestamp_thread = AGS_TIMESTAMP_THREAD(thread); devout = AGS_DEVOUT(thread->devout); duration = (devout->tic_counter / (devout->frequency / devout->buffer_size) * AGS_MICROSECONDS_PER_SECOND); timer = time(&(AGS_TIMESTAMP(timestamp_thread->current_timestamp)->timer.unix_time.time_val)); AGS_TIMESTAMP(timestamp_thread->current_latency)->timer.unix_time.time_val = timer - duration; AGS_TIMESTAMP(timestamp_thread->timestamp)->timer.unix_time.time_val = duration; } AgsTimestampThread* ags_timestamp_thread_new() { AgsTimestampThread *timestamp_thread; timestamp_thread = (AgsTimestampThread *) g_object_new(AGS_TYPE_TIMESTAMP_THREAD, NULL); return(timestamp_thread); } gsequencer-0.6.37/src/ags/thread/ags_task_completion.h0000644000175000017500000000450012612232541017674 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_TASK_COMPLETION_H__ #define __AGS_TASK_COMPLETION_H__ #include #include #define AGS_TYPE_TASK_COMPLETION (ags_task_completion_get_type()) #define AGS_TASK_COMPLETION(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_TASK_COMPLETION, AgsTaskCompletion)) #define AGS_TASK_COMPLETION_CLASS(class) (G_TYPE_CHECK_CLASS_CAST(class, AGS_TYPE_TASK_COMPLETION, AgsTaskCompletionClass)) #define AGS_IS_TASK_COMPLETION(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_TASK_COMPLETION)) #define AGS_IS_TASK_COMPLETION_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_TASK_COMPLETION)) #define AGS_TASK_COMPLETION_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS(obj, AGS_TYPE_TASK_COMPLETION, AgsTaskCompletionClass)) typedef struct _AgsTaskCompletion AgsTaskCompletion; typedef struct _AgsTaskCompletionClass AgsTaskCompletionClass; typedef enum{ AGS_TASK_COMPLETION_QUEUED = 1, AGS_TASK_COMPLETION_BUSY = 1 << 1, AGS_TASK_COMPLETION_READY = 1 << 2, AGS_TASK_COMPLETION_COMPLETED = 1 << 3, }AgsTaskCompletionFlags; struct _AgsTaskCompletion { GObject gobject; volatile guint flags; GObject *task; gpointer data; }; struct _AgsTaskCompletionClass { GObjectClass gobject; void (*complete)(AgsTaskCompletion *task_completion); }; GType ags_task_completion_get_type(); void ags_task_completion_complete(AgsTaskCompletion *task_completion); AgsTaskCompletion* ags_task_completion_new(GObject *task, gpointer data); #endif /*__AGS_TASK_COMPLETION_H__*/ gsequencer-0.6.37/src/ags/thread/ags_audio_thread.c0000644000175000017500000004754112627534734017157 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include void ags_audio_thread_class_init(AgsAudioThreadClass *audio_thread); void ags_audio_thread_connectable_interface_init(AgsConnectableInterface *connectable); void ags_audio_thread_init(AgsAudioThread *audio_thread); void ags_audio_thread_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_audio_thread_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_audio_thread_connect(AgsConnectable *connectable); void ags_audio_thread_disconnect(AgsConnectable *connectable); void ags_audio_thread_finalize(GObject *gobject); void ags_audio_thread_start(AgsThread *thread); void ags_audio_thread_run(AgsThread *thread); void ags_audio_thread_stop(AgsThread *thread); void ags_audio_thread_play_channel_super_threaded(AgsAudioThread *audio_thread, AgsDevoutPlay *devout_play); void ags_audio_thread_sync_channel_super_threaded(AgsAudioThread *audio_thread, AgsDevoutPlay *devout_play); /** * SECTION:ags_audio_thread * @short_description: audio thread * @title: AgsAudioThread * @section_id: * @include: ags/thread/ags_audio_thread.h * * The #AgsAudioThread acts as audio output thread to soundcard. */ enum{ PROP_0, PROP_AUDIO, }; static gpointer ags_audio_thread_parent_class = NULL; static AgsConnectableInterface *ags_audio_thread_parent_connectable_interface; extern pthread_mutex_t ags_application_mutex; extern AgsConfig *config; GType ags_audio_thread_get_type() { static GType ags_type_audio_thread = 0; if(!ags_type_audio_thread){ static const GTypeInfo ags_audio_thread_info = { sizeof (AgsAudioThreadClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_audio_thread_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsAudioThread), 0, /* n_preallocs */ (GInstanceInitFunc) ags_audio_thread_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_audio_thread_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_audio_thread = g_type_register_static(AGS_TYPE_THREAD, "AgsAudioThread\0", &ags_audio_thread_info, 0); g_type_add_interface_static(ags_type_audio_thread, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_audio_thread); } void ags_audio_thread_class_init(AgsAudioThreadClass *audio_thread) { GObjectClass *gobject; AgsThreadClass *thread; GParamSpec *param_spec; ags_audio_thread_parent_class = g_type_class_peek_parent(audio_thread); /* GObject */ gobject = (GObjectClass *) audio_thread; gobject->set_property = ags_audio_thread_set_property; gobject->get_property = ags_audio_thread_get_property; gobject->finalize = ags_audio_thread_finalize; /* properties */ /** * AgsAudioThread:audio: * * The assigned #AgsAudio. * * Since: 0.4.2 */ param_spec = g_param_spec_object("audio\0", "audio assigned to\0", "The AgsAudio it is assigned to.\0", AGS_TYPE_AUDIO, G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_AUDIO, param_spec); /* AgsThread */ thread = (AgsThreadClass *) audio_thread; thread->start = ags_audio_thread_start; thread->run = ags_audio_thread_run; thread->stop = ags_audio_thread_stop; } void ags_audio_thread_connectable_interface_init(AgsConnectableInterface *connectable) { ags_audio_thread_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_audio_thread_connect; connectable->disconnect = ags_audio_thread_disconnect; } void ags_audio_thread_init(AgsAudioThread *audio_thread) { AgsThread *thread; gchar *str0, *str1; thread = (AgsThread *) audio_thread; str0 = ags_config_get(config, AGS_CONFIG_DEVOUT, "samplerate\0"); str0 = ags_config_get(config, AGS_CONFIG_DEVOUT, "buffer_size\0"); if(str0 == NULL || str1 == NULL){ thread->freq = AGS_AUDIO_THREAD_DEFAULT_JIFFIE; }else{ guint samplerate; guint buffer_size; samplerate = g_ascii_strtoull(str0, NULL, 10); buffer_size = g_ascii_strtoull(str0, NULL, 10); thread->freq = ceil((gdouble) samplerate / (gdouble) buffer_size); } g_free(str0); g_free(str1); g_atomic_int_set(&(audio_thread->flags), 0); /* start */ pthread_mutexattr_init(&(audio_thread->wakeup_attr)); pthread_mutexattr_settype(&(audio_thread->wakeup_attr), PTHREAD_MUTEX_RECURSIVE); audio_thread->wakeup_mutex = (pthread_mutex_t *) malloc(sizeof(pthread_mutex_t)); pthread_mutex_init(audio_thread->wakeup_mutex, &(audio_thread->wakeup_attr)); audio_thread->wakeup_cond = (pthread_cond_t *) malloc(sizeof(pthread_cond_t)); pthread_cond_init(audio_thread->wakeup_cond, NULL); /* sync */ pthread_mutexattr_init(&(audio_thread->done_attr)); pthread_mutexattr_settype(&(audio_thread->done_attr), PTHREAD_MUTEX_RECURSIVE); audio_thread->done_mutex = (pthread_mutex_t *) malloc(sizeof(pthread_mutex_t)); pthread_mutex_init(audio_thread->done_mutex, &(audio_thread->done_attr)); audio_thread->done_cond = (pthread_cond_t *) malloc(sizeof(pthread_cond_t)); pthread_cond_init(audio_thread->done_cond, NULL); } void ags_audio_thread_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsAudioThread *audio_thread; audio_thread = AGS_AUDIO_THREAD(gobject); switch(prop_id){ case PROP_AUDIO: { AgsAudio *audio; audio = (AgsAudio *) g_value_get_object(value); if(audio_thread->audio != NULL){ g_object_unref(G_OBJECT(audio_thread->audio)); } if(audio != NULL){ g_object_ref(G_OBJECT(audio)); } audio_thread->audio = G_OBJECT(audio); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_audio_thread_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsAudioThread *audio_thread; audio_thread = AGS_AUDIO_THREAD(gobject); switch(prop_id){ case PROP_AUDIO: { g_value_set_object(value, G_OBJECT(audio_thread->audio)); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_audio_thread_connect(AgsConnectable *connectable) { ags_audio_thread_parent_connectable_interface->connect(connectable); /* empty */ } void ags_audio_thread_disconnect(AgsConnectable *connectable) { ags_audio_thread_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_audio_thread_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_audio_thread_parent_class)->finalize(gobject); /* empty */ } void ags_audio_thread_start(AgsThread *thread) { /* reset status */ g_atomic_int_or(&(AGS_AUDIO_THREAD(thread)->flags), (AGS_AUDIO_THREAD_WAIT | AGS_AUDIO_THREAD_DONE | AGS_AUDIO_THREAD_WAIT_SYNC | AGS_AUDIO_THREAD_DONE_SYNC)); AGS_THREAD_CLASS(ags_audio_thread_parent_class)->start(thread); } void ags_audio_thread_run(AgsThread *thread) { AgsAudio *audio; AgsChannel *output; AgsDevoutPlayDomain *devout_play_domain; AgsDevoutPlay *devout_play; AgsRecallID *recall_id[3]; AgsMutexManager *mutex_manager; AgsAudioThread *audio_thread; gint stage; pthread_mutex_t *audio_mutex; pthread_mutex_t *output_mutex; if(!thread->rt_setup){ struct sched_param param; /* Declare ourself as a real time task */ param.sched_priority = AGS_RT_PRIORITY; if(sched_setscheduler(0, SCHED_FIFO, ¶m) == -1) { perror("sched_setscheduler failed\0"); } thread->rt_setup = TRUE; } audio_thread = AGS_AUDIO_THREAD(thread); if((AGS_THREAD_INITIAL_RUN & (g_atomic_int_get(&(thread->flags)))) != 0){ pthread_mutex_lock(audio_thread->done_mutex); g_atomic_int_and(&(audio_thread->flags), (~AGS_AUDIO_THREAD_WAIT_SYNC)); pthread_mutex_unlock(audio_thread->done_mutex); pthread_mutex_lock(audio_thread->wakeup_mutex); g_atomic_int_or(&(audio_thread->flags), (AGS_AUDIO_THREAD_WAIT | AGS_AUDIO_THREAD_DONE)); pthread_mutex_unlock(audio_thread->wakeup_mutex); return; } // thread->freq = AGS_DEVOUT(thread->devout)->delay[AGS_DEVOUT(thread->devout)->tic_counter] / AGS_DEVOUT(thread->devout)->delay_factor; audio = audio_thread->audio; devout_play_domain = audio->devout_play_domain; // g_message(" --- a"); /* start - wait until signaled */ pthread_mutex_lock(audio_thread->wakeup_mutex); g_atomic_int_and(&(audio_thread->flags), (~AGS_AUDIO_THREAD_DONE)); if((AGS_AUDIO_THREAD_WAIT & (g_atomic_int_get(&(audio_thread->flags)))) != 0 && (AGS_AUDIO_THREAD_DONE & (g_atomic_int_get(&(audio_thread->flags)))) == 0){ while((AGS_AUDIO_THREAD_WAIT & (g_atomic_int_get(&(audio_thread->flags)))) != 0 && (AGS_AUDIO_THREAD_DONE & (g_atomic_int_get(&(audio_thread->flags)))) == 0){ pthread_cond_wait(audio_thread->wakeup_cond, audio_thread->wakeup_mutex); } } g_atomic_int_or(&(audio_thread->flags), (AGS_AUDIO_THREAD_WAIT | AGS_AUDIO_THREAD_DONE)); pthread_mutex_unlock(audio_thread->wakeup_mutex); /* lookup audio mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); audio_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) audio); pthread_mutex_unlock(&(ags_application_mutex)); /* do audio processing */ pthread_mutex_lock(audio_mutex); output = audio->output; pthread_mutex_unlock(audio_mutex); while(output != NULL){ /* lookup output mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); output_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) output); pthread_mutex_unlock(&(ags_application_mutex)); /* get devout play */ pthread_mutex_lock(output_mutex); devout_play = output->devout_play; recall_id[0] = devout_play->recall_id[0]; recall_id[1] = devout_play->recall_id[1]; recall_id[2] = devout_play->recall_id[2]; pthread_mutex_unlock(output_mutex); if((AGS_DEVOUT_PLAY_SUPER_THREADED_CHANNEL & (g_atomic_int_get(&(devout_play->flags)))) != 0){ ags_audio_thread_play_channel_super_threaded(audio_thread, devout_play); }else{ for(stage = 0; stage < 3; stage++){ if(audio_thread == devout_play_domain->audio_thread[0]){ ags_channel_recursive_play(output, recall_id[0], stage); } if(audio_thread == devout_play_domain->audio_thread[1]){ ags_channel_recursive_play(output, recall_id[1], stage); } if(audio_thread == devout_play_domain->audio_thread[2]){ ags_channel_recursive_play(output, recall_id[2], stage); } } } output = output->next; } /* sync - wait the 3 stages */ pthread_mutex_lock(audio_mutex); output = audio->output; pthread_mutex_unlock(audio_mutex); while(output != NULL){ /* lookup output mutex */ pthread_mutex_lock(&(ags_application_mutex)); mutex_manager = ags_mutex_manager_get_instance(); output_mutex = ags_mutex_manager_lookup(mutex_manager, (GObject *) output); pthread_mutex_unlock(&(ags_application_mutex)); /* get devout play */ pthread_mutex_lock(output_mutex); devout_play = output->devout_play; pthread_mutex_unlock(output_mutex); if((AGS_DEVOUT_PLAY_SUPER_THREADED_CHANNEL & (g_atomic_int_get(&(devout_play->flags)))) != 0){ ags_audio_thread_sync_channel_super_threaded(audio_thread, devout_play); } output = output->next; } /* sync */ pthread_mutex_lock(audio_thread->done_mutex); g_atomic_int_and(&(audio_thread->flags), (~AGS_AUDIO_THREAD_WAIT_SYNC)); if((AGS_AUDIO_THREAD_DONE_SYNC & (g_atomic_int_get(&(audio_thread->flags)))) == 0){ pthread_cond_signal(audio_thread->done_cond); } pthread_mutex_unlock(audio_thread->done_mutex); } void ags_audio_thread_stop(AgsThread *thread) { AgsAudioThread *audio_thread; AgsThread *child; audio_thread = AGS_AUDIO_THREAD(thread); /* call parent */ AGS_THREAD_CLASS(ags_audio_thread_parent_class)->stop(thread); /* stop channel */ child = thread->children; while(child != NULL){ ags_thread_stop(child); child = child->next; } /* ensure synced */ pthread_mutex_lock(audio_thread->done_mutex); g_atomic_int_and(&(audio_thread->flags), (~AGS_AUDIO_THREAD_WAIT_SYNC)); if((AGS_AUDIO_THREAD_DONE_SYNC & (g_atomic_int_get(&(audio_thread->flags)))) == 0){ pthread_cond_signal(audio_thread->done_cond); } pthread_mutex_unlock(audio_thread->done_mutex); } void ags_audio_thread_play_channel_super_threaded(AgsAudioThread *audio_thread, AgsDevoutPlay *devout_play) { AgsAudio *audio; AgsDevoutPlayDomain *devout_play_domain; gboolean playback, sequencer, notation; audio = audio_thread->audio; devout_play_domain = audio->devout_play_domain; /* super threaded audio level */ sequencer = FALSE; notation = FALSE; /* sequencer */ if(audio_thread == devout_play_domain->audio_thread[1]){ AgsThread *thread; AgsChannelThread *channel_thread; thread = devout_play->channel_thread[1]; channel_thread = (AgsThread *) thread; sequencer = TRUE; if((AGS_THREAD_RUNNING & (g_atomic_int_get(&(thread->flags)))) == 0){ guint val; ags_thread_start(thread); /* wait child */ pthread_mutex_lock(thread->start_mutex); g_atomic_int_set(&(thread->start_wait), TRUE); if(g_atomic_int_get(&(thread->start_wait)) == TRUE && g_atomic_int_get(&(thread->start_done)) == FALSE){ while(g_atomic_int_get(&(thread->start_wait)) == TRUE && g_atomic_int_get(&(thread->start_done)) == FALSE){ pthread_cond_wait(thread->start_cond, thread->start_mutex); } } pthread_mutex_unlock(thread->start_mutex); } /* wakeup wait */ pthread_mutex_lock(channel_thread->wakeup_mutex); g_atomic_int_and(&(channel_thread->flags), (~AGS_CHANNEL_THREAD_WAIT)); if((AGS_CHANNEL_THREAD_DONE & (g_atomic_int_get(&(channel_thread->flags)))) == 0){ pthread_cond_signal(channel_thread->wakeup_cond); } pthread_mutex_unlock(channel_thread->wakeup_mutex); } /* notation */ if(audio_thread == devout_play_domain->audio_thread[2]){ AgsThread *thread; AgsChannelThread *channel_thread; thread = devout_play->channel_thread[2]; channel_thread = (AgsThread *) thread; notation = TRUE; if((AGS_THREAD_RUNNING & (g_atomic_int_get(&(thread->flags)))) == 0){ guint val; ags_thread_start(thread); /* wait child */ pthread_mutex_lock(thread->start_mutex); g_atomic_int_set(&(thread->start_wait), TRUE); if(g_atomic_int_get(&(thread->start_wait)) == TRUE && g_atomic_int_get(&(thread->start_done)) == FALSE){ while(g_atomic_int_get(&(thread->start_wait)) == TRUE && g_atomic_int_get(&(thread->start_done)) == FALSE){ pthread_cond_wait(thread->start_cond, thread->start_mutex); } } pthread_mutex_unlock(thread->start_mutex); } /* wakeup wait */ pthread_mutex_lock(channel_thread->wakeup_mutex); g_atomic_int_and(&(channel_thread->flags), (~AGS_CHANNEL_THREAD_WAIT)); if((AGS_CHANNEL_THREAD_DONE & (g_atomic_int_get(&(channel_thread->flags)))) == 0){ pthread_cond_signal(channel_thread->wakeup_cond); } pthread_mutex_unlock(channel_thread->wakeup_mutex); } } void ags_audio_thread_sync_channel_super_threaded(AgsAudioThread *audio_thread, AgsDevoutPlay *devout_play) { AgsAudio *audio; AgsDevoutPlayDomain *devout_play_domain; gboolean sequencer, notation; audio = audio_thread->audio; devout_play_domain = audio->devout_play_domain; sequencer = FALSE; notation = FALSE; /* sequencer */ if(audio_thread == devout_play_domain->audio_thread[1]){ AgsChannelThread *channel_thread; channel_thread = (AgsChannelThread *) devout_play->channel_thread[1]; sequencer = TRUE; pthread_mutex_lock(channel_thread->done_mutex); if((AGS_THREAD_RUNNING & (g_atomic_int_get(&(devout_play->channel_thread[1]->flags)))) != 0 && (AGS_THREAD_INITIAL_RUN & (g_atomic_int_get(&(devout_play->channel_thread[1]->flags)))) == 0){ g_atomic_int_and(&(channel_thread->flags), (~AGS_CHANNEL_THREAD_DONE_SYNC)); if((AGS_CHANNEL_THREAD_DONE_SYNC & (g_atomic_int_get(&(channel_thread->flags)))) == 0 && (AGS_CHANNEL_THREAD_WAIT_SYNC & (g_atomic_int_get(&(channel_thread->flags)))) != 0){ while((AGS_CHANNEL_THREAD_DONE_SYNC & (g_atomic_int_get(&(channel_thread->flags)))) == 0 && (AGS_CHANNEL_THREAD_WAIT_SYNC & (g_atomic_int_get(&(channel_thread->flags)))) != 0){ pthread_cond_wait(channel_thread->done_cond, channel_thread->done_mutex); } } } g_atomic_int_or(&(channel_thread->flags), (AGS_CHANNEL_THREAD_WAIT_SYNC | AGS_CHANNEL_THREAD_DONE_SYNC)); pthread_mutex_unlock(channel_thread->done_mutex); } /* notation */ if(audio_thread == devout_play_domain->audio_thread[2]){ AgsChannelThread *channel_thread; channel_thread = (AgsChannelThread *) devout_play->channel_thread[2]; notation = TRUE; pthread_mutex_lock(channel_thread->done_mutex); if((AGS_THREAD_RUNNING & (g_atomic_int_get(&(devout_play->channel_thread[2]->flags)))) != 0 && (AGS_THREAD_INITIAL_RUN & (g_atomic_int_get(&(devout_play->channel_thread[2]->flags)))) == 0){ g_atomic_int_and(&(channel_thread->flags), (~AGS_CHANNEL_THREAD_DONE_SYNC)); if((AGS_CHANNEL_THREAD_DONE_SYNC & (g_atomic_int_get(&(channel_thread->flags)))) == 0 && (AGS_CHANNEL_THREAD_WAIT_SYNC & (g_atomic_int_get(&(channel_thread->flags)))) != 0){ while((AGS_CHANNEL_THREAD_DONE_SYNC & (g_atomic_int_get(&(channel_thread->flags)))) == 0 && (AGS_CHANNEL_THREAD_WAIT_SYNC & (g_atomic_int_get(&(channel_thread->flags)))) != 0){ pthread_cond_wait(channel_thread->done_cond, channel_thread->done_mutex); } } } g_atomic_int_or(&(channel_thread->flags), (AGS_CHANNEL_THREAD_WAIT_SYNC | AGS_CHANNEL_THREAD_DONE_SYNC)); pthread_mutex_unlock(channel_thread->done_mutex); } } /** * ags_audio_thread_new: * @devout: the #AgsDevout * @audio: the #AgsAudio * * Create a new #AgsAudioThread. * * Returns: the new #AgsAudioThread * * Since: 0.4.2 */ AgsAudioThread* ags_audio_thread_new(GObject *devout, GObject *audio) { AgsAudioThread *audio_thread; audio_thread = (AgsAudioThread *) g_object_new(AGS_TYPE_AUDIO_THREAD, "devout\0", devout, "audio\0", audio, NULL); return(audio_thread); } gsequencer-0.6.37/src/ags/thread/ags_audio_thread.h0000644000175000017500000000473012626272146017150 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_AUDIO_THREAD_H__ #define __AGS_AUDIO_THREAD_H__ #include #include #ifdef AGS_USE_LINUX_THREADS #include #else #include #endif #define AGS_TYPE_AUDIO_THREAD (ags_audio_thread_get_type()) #define AGS_AUDIO_THREAD(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_AUDIO_THREAD, AgsAudioThread)) #define AGS_AUDIO_THREAD_CLASS(class) (G_TYPE_CHECK_CLASS_CAST(class, AGS_TYPE_AUDIO_THREAD, AgsAudioThreadClass)) #define AGS_IS_AUDIO_THREAD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_AUDIO_THREAD)) #define AGS_IS_AUDIO_THREAD_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_AUDIO_THREAD)) #define AGS_AUDIO_THREAD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS(obj, AGS_TYPE_AUDIO_THREAD, AgsAudioThreadClass)) #define AGS_AUDIO_THREAD_DEFAULT_JIFFIE (48.0) typedef struct _AgsAudioThread AgsAudioThread; typedef struct _AgsAudioThreadClass AgsAudioThreadClass; typedef enum{ AGS_AUDIO_THREAD_DONE = 1, AGS_AUDIO_THREAD_WAIT = 1 << 1, AGS_AUDIO_THREAD_DONE_SYNC = 1 << 2, AGS_AUDIO_THREAD_WAIT_SYNC = 1 << 3, }AgsAudioThreadFlags; struct _AgsAudioThread { AgsThread thread; volatile guint flags; pthread_mutexattr_t wakeup_attr; pthread_mutex_t *wakeup_mutex; pthread_cond_t *wakeup_cond; pthread_mutexattr_t done_attr; pthread_mutex_t *done_mutex; pthread_cond_t *done_cond; GObject *audio; }; struct _AgsAudioThreadClass { AgsThreadClass thread; }; GType ags_audio_thread_get_type(); AgsAudioThread* ags_audio_thread_new(GObject *devout, GObject *audio); #endif /*__AGS_AUDIO_THREAD_H__*/ gsequencer-0.6.37/src/ags/thread/ags_mutex_manager.c0000644000175000017500000001140612626272146017345 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_mutex_manager_class_init(AgsMutexManagerClass *mutex_manager); void ags_mutex_manager_connectable_interface_init(AgsConnectableInterface *connectable); void ags_mutex_manager_init(AgsMutexManager *mutex_manager); void ags_mutex_manager_connect(AgsConnectable *connectable); void ags_mutex_manager_disconnect(AgsConnectable *connectable); void ags_mutex_manager_finalize(GObject *gobject); void ags_mutex_manager_destroy_data(gpointer data); static gpointer ags_mutex_manager_parent_class = NULL; AgsMutexManager *ags_mutex_manager = NULL; GType ags_mutex_manager_get_type() { static GType ags_type_mutex_manager = 0; if(!ags_type_mutex_manager){ const GTypeInfo ags_mutex_manager_info = { sizeof (AgsMutexManagerClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_mutex_manager_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsMutexManager), 0, /* n_preallocs */ (GInstanceInitFunc) ags_mutex_manager_init, }; const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_mutex_manager_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_mutex_manager = g_type_register_static(G_TYPE_OBJECT, "AgsMutexManager\0", &ags_mutex_manager_info, 0); g_type_add_interface_static(ags_type_mutex_manager, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return(ags_type_mutex_manager); } void ags_mutex_manager_class_init(AgsMutexManagerClass *mutex_manager) { GObjectClass *gobject; GParamSpec *param_spec; ags_mutex_manager_parent_class = g_type_class_peek_parent(mutex_manager); /* GObject */ gobject = (GObjectClass *) mutex_manager; gobject->finalize = ags_mutex_manager_finalize; } void ags_mutex_manager_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->connect = ags_mutex_manager_connect; connectable->disconnect = ags_mutex_manager_disconnect; } void ags_mutex_manager_init(AgsMutexManager *mutex_manager) { mutex_manager->lock_object = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, (GDestroyNotify) ags_mutex_manager_destroy_data); } void ags_mutex_manager_connect(AgsConnectable *connectable) { /* empty */ } void ags_mutex_manager_disconnect(AgsConnectable *connectable) { /* empty */ } void ags_mutex_manager_finalize(GObject *gobject) { AgsMutexManager *mutex_manager; mutex_manager = AGS_MUTEX_MANAGER(gobject); g_hash_table_destroy(mutex_manager->lock_object); } void ags_mutex_manager_destroy_data(gpointer data) { pthread_mutex_destroy((pthread_mutex_t *) data); } gboolean ags_mutex_manager_insert(AgsMutexManager *mutex_manager, GObject *lock_object, pthread_mutex_t *mutex) { return(g_hash_table_insert(mutex_manager->lock_object, lock_object, mutex)); } gboolean ags_mutex_manager_remove(AgsMutexManager *mutex_manager, GObject *lock_object) { pthread_mutex_t *mutex; mutex = g_hash_table_lookup(mutex_manager->lock_object, lock_object); if(mutex == NULL || pthread_mutex_trylock(mutex) != 0){ return(FALSE); } g_hash_table_remove(mutex_manager->lock_object, lock_object); pthread_mutex_unlock(mutex); return(TRUE); } pthread_mutex_t* ags_mutex_manager_lookup(AgsMutexManager *mutex_manager, GObject *lock_object) { pthread_mutex_t *mutex; mutex = (pthread_mutex_t *) g_hash_table_lookup(mutex_manager->lock_object, lock_object); return(mutex); } AgsMutexManager* ags_mutex_manager_get_instance() { if(ags_mutex_manager == NULL){ ags_mutex_manager = ags_mutex_manager_new(); } return(ags_mutex_manager); } AgsMutexManager* ags_mutex_manager_new() { AgsMutexManager *mutex_manager; mutex_manager = (AgsMutexManager *) g_object_new(AGS_TYPE_MUTEX_MANAGER, NULL); return(mutex_manager); } gsequencer-0.6.37/src/ags/thread/ags_devout_thread.h0000644000175000017500000000413412626272146017353 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_DEVOUT_THREAD_H__ #define __AGS_DEVOUT_THREAD_H__ #include #include #ifdef AGS_USE_LINUX_THREADS #include #else #include #endif #define AGS_TYPE_DEVOUT_THREAD (ags_devout_thread_get_type()) #define AGS_DEVOUT_THREAD(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_DEVOUT_THREAD, AgsDevoutThread)) #define AGS_DEVOUT_THREAD_CLASS(class) (G_TYPE_CHECK_CLASS_CAST(class, AGS_TYPE_DEVOUT_THREAD, AgsDevoutThreadClass)) #define AGS_IS_DEVOUT_THREAD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_DEVOUT_THREAD)) #define AGS_IS_DEVOUT_THREAD_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_DEVOUT_THREAD)) #define AGS_DEVOUT_THREAD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS(obj, AGS_TYPE_DEVOUT_THREAD, AgsDevoutThreadClass)) #define AGS_DEVOUT_THREAD_DEFAULT_JIFFIE (48.0) typedef struct _AgsDevoutThread AgsDevoutThread; typedef struct _AgsDevoutThreadClass AgsDevoutThreadClass; struct _AgsDevoutThread { AgsThread thread; time_t time_val; AgsThread *timestamp_thread; GError *error; }; struct _AgsDevoutThreadClass { AgsThreadClass thread; }; GType ags_devout_thread_get_type(); AgsDevoutThread* ags_devout_thread_new(GObject *devout); #endif /*__AGS_DEVOUT_THREAD_H__*/ gsequencer-0.6.37/src/ags/thread/ags_returnable_thread.c0000644000175000017500000002247212626272146020210 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include void ags_returnable_thread_class_init(AgsReturnableThreadClass *returnable_thread); void ags_returnable_thread_connectable_interface_init(AgsConnectableInterface *connectable); void ags_returnable_thread_init(AgsReturnableThread *returnable_thread); void ags_returnable_thread_connect(AgsConnectable *connectable); void ags_returnable_thread_disconnect(AgsConnectable *connectable); void ags_returnable_thread_finalize(GObject *gobject); void ags_returnable_thread_start(AgsThread *thread); void ags_returnable_thread_run(AgsThread *thread); void ags_returnable_thread_stop(AgsThread *thread); void ags_returnable_thread_resume(AgsThread *thread); /** * SECTION:ags_returnable_thread * @short_description: returnable thread * @title: AgsReturnableThread * @section_id: * @include: ags/thread/ags_returnable_thread.h * * The #AgsReturnableThread acts as thread. It should return after a short * while because of limited thread pool. */ enum{ SAFE_RUN, LAST_SIGNAL, }; static gpointer ags_returnable_thread_parent_class = NULL; static AgsConnectableInterface *ags_returnable_thread_parent_connectable_interface; static guint returnable_thread_signals[LAST_SIGNAL]; GType ags_returnable_thread_get_type() { static GType ags_type_returnable_thread = 0; if(!ags_type_returnable_thread){ static const GTypeInfo ags_returnable_thread_info = { sizeof (AgsReturnableThreadClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_returnable_thread_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsReturnableThread), 0, /* n_preallocs */ (GInstanceInitFunc) ags_returnable_thread_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_returnable_thread_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_returnable_thread = g_type_register_static(AGS_TYPE_THREAD, "AgsReturnableThread\0", &ags_returnable_thread_info, 0); g_type_add_interface_static(ags_type_returnable_thread, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_returnable_thread); } void ags_returnable_thread_class_init(AgsReturnableThreadClass *returnable_thread) { GObjectClass *gobject; AgsThreadClass *thread; ags_returnable_thread_parent_class = g_type_class_peek_parent(returnable_thread); /* GObjectClass */ gobject = (GObjectClass *) returnable_thread; gobject->finalize = ags_returnable_thread_finalize; /* AgsThreadClass */ thread = (AgsThreadClass *) returnable_thread; thread->start = ags_returnable_thread_start; thread->run = ags_returnable_thread_run; thread->stop = ags_returnable_thread_stop; thread->resume = ags_returnable_thread_resume; /* AgsReturnableThreadClass */ returnable_thread->safe_run = NULL; /* signals */ returnable_thread_signals[SAFE_RUN] = g_signal_new("safe-run\0", G_TYPE_FROM_CLASS (returnable_thread), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AgsReturnableThreadClass, safe_run), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); } void ags_returnable_thread_connectable_interface_init(AgsConnectableInterface *connectable) { ags_returnable_thread_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_returnable_thread_connect; connectable->disconnect = ags_returnable_thread_disconnect; } void ags_returnable_thread_init(AgsReturnableThread *returnable_thread) { AgsThread *thread; thread = AGS_THREAD(returnable_thread); pthread_attr_setdetachstate(&(thread->thread_attr), PTHREAD_CREATE_DETACHED); g_atomic_int_or(&(thread->flags), AGS_THREAD_UNREF_ON_EXIT); thread->freq = AGS_RETURNABLE_THREAD_DEFAULT_JIFFIE; g_atomic_int_set(&(returnable_thread->flags), 0); returnable_thread->reset_mutex = (pthread_mutex_t *) malloc(sizeof(pthread_mutex_t)); pthread_mutex_init(returnable_thread->reset_mutex, NULL); g_atomic_pointer_set(&(returnable_thread->safe_data), NULL); } void ags_returnable_thread_connect(AgsConnectable *connectable) { ags_returnable_thread_parent_connectable_interface->connect(connectable); /* empty */ } void ags_returnable_thread_disconnect(AgsConnectable *connectable) { ags_returnable_thread_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_returnable_thread_finalize(GObject *gobject) { // pthread_mutex_destroy(AGS_RETURNABLE_THREAD(gobject)->reset_mutex); free(AGS_RETURNABLE_THREAD(gobject)->reset_mutex); /* call parent */ G_OBJECT_CLASS(ags_returnable_thread_parent_class)->finalize(gobject); } void ags_returnable_thread_start(AgsThread *thread) { AGS_THREAD_CLASS(ags_returnable_thread_parent_class)->start(thread); } void ags_returnable_thread_run(AgsThread *thread) { AgsReturnableThread *returnable_thread; AgsThreadPool *thread_pool; GList *tmplist; // g_message("reset:0\0"); /* retrieve some variables */ returnable_thread = AGS_RETURNABLE_THREAD(thread); thread_pool = (AgsThreadPool *) returnable_thread->thread_pool; if((AGS_THREAD_INITIAL_RUN & (g_atomic_int_get(&(thread->flags)))) != 0){ #ifdef AGS_DEBUG g_message("returnable thread initial\0"); #endif return; } /* safe run */ pthread_mutex_lock(returnable_thread->reset_mutex); if((AGS_RETURNABLE_THREAD_IN_USE & (g_atomic_int_get(&(returnable_thread->flags)))) != 0){ ags_returnable_thread_safe_run(returnable_thread); pthread_mutex_unlock(returnable_thread->reset_mutex); /* release thread in thread pool */ pthread_mutex_lock(thread_pool->pull_mutex); tmplist = g_atomic_pointer_get(&(thread_pool->running_thread)); g_atomic_pointer_set(&(thread_pool->running_thread), g_list_remove(tmplist, thread)); ags_returnable_thread_disconnect(returnable_thread); ags_returnable_thread_disconnect_safe_run(returnable_thread); g_atomic_int_and(&(returnable_thread->flags), (~AGS_RETURNABLE_THREAD_IN_USE)); pthread_mutex_unlock(thread_pool->pull_mutex); pthread_mutex_lock(thread_pool->return_mutex); g_atomic_int_dec_and_test(&(thread_pool->n_threads)); // ags_thread_remove_child(thread->parent, // thread); g_atomic_int_and(&(AGS_THREAD(returnable_thread)->flags), (~AGS_THREAD_RUNNING)); if(g_atomic_int_get(&(thread_pool->queued)) > 0){ pthread_cond_signal(&(thread_pool->return_cond)); } pthread_mutex_unlock(thread_pool->return_mutex); }else{ pthread_mutex_unlock(returnable_thread->reset_mutex); } } void ags_returnable_thread_safe_run(AgsReturnableThread *returnable_thread) { g_return_if_fail(AGS_IS_RETURNABLE_THREAD(returnable_thread)); g_object_ref(G_OBJECT(returnable_thread)); g_signal_emit(G_OBJECT(returnable_thread), returnable_thread_signals[SAFE_RUN], 0); g_object_unref(G_OBJECT(returnable_thread)); } void ags_returnable_thread_stop(AgsThread *thread) { AGS_THREAD_CLASS(ags_returnable_thread_parent_class)->stop(thread); } void ags_returnable_thread_resume(AgsThread *thread) { /* empty */ } /** * ags_returnable_thread_connect_safe_run: * @returnable_thread: the thread to connect * @callback: the callback * * Connects @callback to @thread. * * Since: 0.4 */ void ags_returnable_thread_connect_safe_run(AgsReturnableThread *returnable_thread, AgsReturnableThreadCallback callback) { returnable_thread->handler = g_signal_connect(G_OBJECT(returnable_thread), "safe-run\0", G_CALLBACK(callback), returnable_thread); } /** * ags_returnable_thread_disconnect_safe_run: * @returnable_thread: the thread to disconnect * * Disconnects callback of @thread. * * Since: 0.4 */ void ags_returnable_thread_disconnect_safe_run(AgsReturnableThread *returnable_thread) { g_signal_handler_disconnect(G_OBJECT(returnable_thread), returnable_thread->handler); } /** * ags_returnable_thread_new: * @thread_pool: the #AgsThreadPool * * Create a new #AgsReturnableThread. * * Returns: the new #AgsReturnableThread * * Since: 0.4 */ AgsReturnableThread* ags_returnable_thread_new(GObject *thread_pool) { AgsReturnableThread *returnable_thread; returnable_thread = (AgsReturnableThread *) g_object_new(AGS_TYPE_RETURNABLE_THREAD, NULL); returnable_thread->thread_pool = thread_pool; return(returnable_thread); } gsequencer-0.6.37/src/ags/thread/ags_mutex_manager.h0000644000175000017500000000434012626272146017351 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_MUTEX_MANAGER_H__ #define __AGS_MUTEX_MANAGER_H__ #include #include #define AGS_TYPE_MUTEX_MANAGER (ags_mutex_manager_get_type()) #define AGS_MUTEX_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_MUTEX_MANAGER, AgsMutexManager)) #define AGS_MUTEX_MANAGER_CLASS(class) (G_TYPE_CHECK_CLASS_CAST(class, AGS_TYPE_MUTEX_MANAGER, AgsMutexManagerClass)) #define AGS_IS_MUTEX_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_MUTEX_MANAGER)) #define AGS_IS_MUTEX_MANAGER_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_MUTEX_MANAGER)) #define AGS_MUTEX_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS(obj, AGS_TYPE_MUTEX_MANAGER, AgsMutexManagerClass)) typedef struct _AgsMutexManager AgsMutexManager; typedef struct _AgsMutexManagerClass AgsMutexManagerClass; struct _AgsMutexManager { GObject object; GHashTable *lock_object; }; struct _AgsMutexManagerClass { GObjectClass object; }; GType ags_mutex_manager_get_type(); gboolean ags_mutex_manager_insert(AgsMutexManager *mutex_manager, GObject *lock_object, pthread_mutex_t *mutex); gboolean ags_mutex_manager_remove(AgsMutexManager *mutex_manager, GObject *lock_object); pthread_mutex_t* ags_mutex_manager_lookup(AgsMutexManager *mutex_manager, GObject *lock_object); AgsMutexManager* ags_mutex_manager_get_instance(); AgsMutexManager* ags_mutex_manager_new(); #endif /*__AGS_MUTEX_MANAGER_H__*/ gsequencer-0.6.37/src/ags/thread/ags_iterator_thread.c0000644000175000017500000001726012626272146017675 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include void ags_iterator_thread_class_init(AgsIteratorThreadClass *iterator_thread); void ags_iterator_thread_connectable_interface_init(AgsConnectableInterface *connectable); void ags_iterator_thread_init(AgsIteratorThread *iterator_thread); void ags_iterator_thread_connect(AgsConnectable *connectable); void ags_iterator_thread_disconnect(AgsConnectable *connectable); void ags_iterator_thread_finalize(GObject *gobject); void ags_iterator_thread_start(AgsThread *thread); void ags_iterator_thread_run(AgsThread *thread); void ags_iterator_thread_real_children_ready(AgsIteratorThread *iterator_thread, AgsThread *current); enum{ CHILDREN_READY, LAST_SIGNAL, }; static gpointer ags_iterator_thread_parent_class = NULL; static AgsConnectableInterface *ags_iterator_thread_parent_connectable_interface; static guint iterator_thread_signals[LAST_SIGNAL]; GType ags_iterator_thread_get_type() { static GType ags_type_iterator_thread = 0; if(!ags_type_iterator_thread){ static const GTypeInfo ags_iterator_thread_info = { sizeof (AgsIteratorThreadClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_iterator_thread_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsIteratorThread), 0, /* n_preallocs */ (GInstanceInitFunc) ags_iterator_thread_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_iterator_thread_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_iterator_thread = g_type_register_static(AGS_TYPE_THREAD, "AgsIteratorThread\0", &ags_iterator_thread_info, 0); g_type_add_interface_static(ags_type_iterator_thread, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_iterator_thread); } void ags_iterator_thread_class_init(AgsIteratorThreadClass *iterator_thread) { GObjectClass *gobject; AgsThreadClass *thread; ags_iterator_thread_parent_class = g_type_class_peek_parent(iterator_thread); /* GObject */ gobject = (GObjectClass *) iterator_thread; gobject->finalize = ags_iterator_thread_finalize; /* AgsThread */ thread = (AgsThreadClass *) iterator_thread; thread->start = ags_iterator_thread_start; /* AgsIteratorThread */ iterator_thread->children_ready = ags_iterator_thread_real_children_ready; /* signals */ iterator_thread_signals[CHILDREN_READY] = g_signal_new("children_ready\0", G_TYPE_FROM_CLASS(iterator_thread), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsIteratorThreadClass, children_ready), NULL, NULL, g_cclosure_user_marshal_VOID__OBJECT_OBJECT, G_TYPE_BOOLEAN, 2, G_TYPE_OBJECT, G_TYPE_OBJECT); } void ags_iterator_thread_connectable_interface_init(AgsConnectableInterface *connectable) { ags_iterator_thread_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_iterator_thread_connect; connectable->disconnect = ags_iterator_thread_disconnect; } void ags_iterator_thread_init(AgsIteratorThread *iterator_thread) { iterator_thread->flags = 0; iterator_thread->tic_mutex = (pthread_mutex_t *) malloc(sizeof(pthread_mutex_t)); pthread_mutex_init(iterator_thread->tic_mutex, NULL); iterator_thread->tic_cond = (pthread_cond_t *) malloc(sizeof(pthread_cond_t)); pthread_cond_init(iterator_thread->tic_cond, NULL); iterator_thread->recycling_thread = NULL; iterator_thread->channel = NULL; iterator_thread->recall_id = 0; iterator_thread->stage = 0; } void ags_iterator_thread_connect(AgsConnectable *connectable) { AgsThread *thread; thread = AGS_THREAD(connectable); ags_iterator_thread_parent_connectable_interface->connect(connectable); /* empty */ } void ags_iterator_thread_disconnect(AgsConnectable *connectable) { ags_iterator_thread_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_iterator_thread_finalize(GObject *gobject) { AgsIteratorThread *iterator_thread; iterator_thread = AGS_ITERATOR_THREAD(gobject); /* */ G_OBJECT_CLASS(ags_iterator_thread_parent_class)->finalize(gobject); } void ags_iterator_thread_start(AgsThread *thread) { AGS_THREAD_CLASS(ags_iterator_thread_parent_class)->start(thread); } void ags_iterator_thread_run(AgsThread *thread) { AgsIteratorThread *iterator_thread; guint flags; guint i; iterator_thread = AGS_ITERATOR_THREAD(thread); /* */ for(i = 0; i < 3; i++){ /* wait to be signaled */ pthread_mutex_lock(iterator_thread->tic_mutex); g_atomic_int_and(&(iterator_thread->flags), (~AGS_ITERATOR_THREAD_DONE)); flags = g_atomic_int_get(&(iterator_thread->flags)); if((AGS_ITERATOR_THREAD_WAIT & (flags)) != 0 && (AGS_ITERATOR_THREAD_DONE & (flags)) == 0){ flags = g_atomic_int_get(&(iterator_thread->flags)); while((AGS_ITERATOR_THREAD_WAIT & (flags)) != 0 && (AGS_ITERATOR_THREAD_DONE & (flags)) == 0){ pthread_cond_wait(iterator_thread->tic_cond, iterator_thread->tic_mutex); } } g_atomic_int_or(&(iterator_thread->flags), (AGS_ITERATOR_THREAD_WAIT | AGS_ITERATOR_THREAD_DONE)); pthread_mutex_unlock(iterator_thread->tic_mutex); /* process tree */ iterator_thread->stage = i; ags_channel_recursive_play_threaded(iterator_thread->channel, iterator_thread->recall_id, iterator_thread->stage); } } void ags_iterator_thread_real_children_ready(AgsIteratorThread *iterator_thread, AgsThread *current) { AgsRecyclingThread *recycling_thread; recycling_thread = AGS_RECYCLING_THREAD(current); /* signal iterator thread's run */ pthread_mutex_lock(recycling_thread->iteration_mutex); g_atomic_int_and(&(recycling_thread->flags), (~AGS_RECYCLING_THREAD_WAIT)); if((AGS_RECYCLING_THREAD_DONE & (g_atomic_int_get(&(iterator_thread->flags)))) == 0){ pthread_cond_signal(recycling_thread->iteration_cond); } pthread_mutex_unlock(recycling_thread->iteration_mutex); } void ags_iterator_thread_children_ready(AgsIteratorThread *iterator_thread, AgsThread *current) { g_return_if_fail(AGS_IS_ITERATOR_THREAD(iterator_thread)); g_object_ref((GObject *) iterator_thread); g_signal_emit(G_OBJECT(iterator_thread), iterator_thread_signals[CHILDREN_READY], 0, current); g_object_unref((GObject *) iterator_thread); } AgsIteratorThread* ags_iterator_thread_new(AgsChannel *channel, AgsRecallID *recall_id, gint stage) { AgsIteratorThread *iterator_thread; iterator_thread = (AgsIteratorThread *) g_object_new(AGS_TYPE_ITERATOR_THREAD, NULL); iterator_thread->channel = channel; iterator_thread->recall_id = recall_id; iterator_thread->stage = stage; return(iterator_thread); } gsequencer-0.6.37/src/ags/thread/ags_timestamp_thread.h0000644000175000017500000000516712621463700020050 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_TIMESTAMP_THREAD_H__ #define __AGS_TIMESTAMP_THREAD_H__ #include #include #ifdef AGS_USE_LINUX_THREADS #include #else #include #endif #define AGS_TYPE_TIMESTAMP_THREAD (ags_timestamp_thread_get_type()) #define AGS_TIMESTAMP_THREAD(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_TIMESTAMP_THREAD, AgsTimestampThread)) #define AGS_TIMESTAMP_THREAD_CLASS(class) (G_TYPE_CHECK_CLASS_CAST(class, AGS_TYPE_TIMESTAMP_THREAD, AgsTimestampThread)) #define AGS_IS_TIMESTAMP_THREAD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_TIMESTAMP_THREAD)) #define AGS_IS_TIMESTAMP_THREAD_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_TIMESTAMP_THREAD)) #define AGS_TIMESTAMP_THREAD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS(obj, AGS_TYPE_TIMESTAMP_THREAD, AgsTimestampThreadClass)) #define AGS_MICROSECONDS_PER_SECOND (1000000.0) #define AGS_TIMESTAMP_THREAD_DEFAULT_BPM (120.0) #define AGS_TIMESTAMP_THREAD_DEFAULT_SAMPLERATE (44100.0) #define AGS_TIMESTAMP_THREAD_DEFAULT_BUFFER_SIZE (256.0) #define AGS_TIMESTAMP_THREAD_DEFAULT_JIFFIE (AGS_MICROSECONDS_PER_SECOND * \ 60.0 / AGS_TIMESTAMP_THREAD_DEFAULT_BPM) #define AGS_TIMESTAMP_THREAD_DEFAULT_TIC (AGS_TIMESTAMP_THREAD_DEFAULT_JIFFIE / \ AGS_TIMESTAMP_THREAD_DEFAULT_SAMPLERATE / AGS_TIMESTAMP_THREAD_DEFAULT_BUFFER_SIZE) typedef struct _AgsTimestampThread AgsTimestampThread; typedef struct _AgsTimestampThreadClass AgsTimestampThreadClass; struct _AgsTimestampThread { AgsThread thread; GObject *current_timestamp; GObject *current_latency; GObject *timestamp; }; struct _AgsTimestampThreadClass { AgsThreadClass thread; }; GType ags_timestamp_thread_get_type(); AgsTimestampThread* ags_timestamp_thread_new(); #endif /*__AGS_TIMESTAMP_THREAD_H__*/ gsequencer-0.6.37/src/ags/thread/ags_export_thread.h0000644000175000017500000000454512626272146017374 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_EXPORT_THREAD_H__ #define __AGS_EXPORT_THREAD_H__ #include #include #ifdef AGS_USE_LINUX_THREADS #include #else #include #endif #include #define AGS_TYPE_EXPORT_THREAD (ags_export_thread_get_type()) #define AGS_EXPORT_THREAD(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_EXPORT_THREAD, AgsExportThread)) #define AGS_EXPORT_THREAD_CLASS(class) (G_TYPE_CHECK_CLASS_CAST(class, AGS_TYPE_EXPORT_THREAD, AgsExportThreadClass)) #define AGS_IS_EXPORT_THREAD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_EXPORT_THREAD)) #define AGS_IS_EXPORT_THREAD_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_EXPORT_THREAD)) #define AGS_EXPORT_THREAD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS(obj, AGS_TYPE_EXPORT_THREAD, AgsExportThreadClass)) #define AGS_EXPORT_THREAD_DEFAULT_JIFFIE (48.0) // same as devout thread #define AGS_EXPORT_THREAD_BUFFER_TIME (1.0 / (AGS_DEVOUT_DEFAULT_FORMAT / 8)) typedef struct _AgsExportThread AgsExportThread; typedef struct _AgsExportThreadClass AgsExportThreadClass; typedef enum{ AGS_EXPORT_THREAD_LIVE_PERFORMANCE = 1, }AgsExportThreadFlags; struct _AgsExportThread { AgsThread thread; guint flags; guint tic; guint counter; AgsAudioFile *audio_file; }; struct _AgsExportThreadClass { AgsThreadClass thread; }; GType ags_export_thread_get_type(); AgsExportThread* ags_export_thread_new(GObject *devout, AgsAudioFile *audio_file); #endif /*__AGS_EXPORT_THREAD_H__*/ gsequencer-0.6.37/src/ags/thread/ags_history.h0000644000175000017500000000343412626272146016221 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_HISTORY_H__ #define __AGS_HISTORY_H__ #include #include #include #define AGS_TYPE_HISTORY (ags_history_get_type()) #define AGS_HISTORY(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_HISTORY, AgsHistory)) #define AGS_HISTORY_CLASS(class) (G_TYPE_CHECK_CLASS_CAST(class, AGS_TYPE_HISTORY, AgsHistory)) #define AGS_IS_HISTORY(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_HISTORY)) #define AGS_IS_HISTORY_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_HISTORY)) #define AGS_HISTORY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS(obj, AGS_TYPE_HISTORY, AgsHistoryClass)) typedef struct _AgsHistory AgsHistory; typedef struct _AgsHistoryClass AgsHistoryClass; typedef struct _AgsHistoryAppend AgsHistoryAppend; struct _AgsHistory { GObject gobject; GList *task; }; struct _AgsHistoryClass { GObjectClass gobject; }; GType ags_history_get_type(); AgsHistory* ags_history_new(); #endif /*__AGS_HISTORY_H__*/ gsequencer-0.6.37/src/ags/thread/ags_record_thread.c0000644000175000017500000001645212626272146017324 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include void ags_record_thread_class_init(AgsRecordThreadClass *record_thread); void ags_record_thread_connectable_interface_init(AgsConnectableInterface *connectable); void ags_record_thread_init(AgsRecordThread *record_thread); void ags_record_thread_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_record_thread_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_record_thread_connect(AgsConnectable *connectable); void ags_record_thread_disconnect(AgsConnectable *connectable); void ags_record_thread_finalize(GObject *gobject); void ags_record_thread_start(AgsThread *thread); void ags_record_thread_run(AgsThread *thread); void ags_record_thread_stop(AgsThread *thread); enum{ PROP_0, PROP_REGISTRY, }; static gpointer ags_record_thread_parent_class = NULL; static AgsConnectableInterface *ags_record_thread_parent_connectable_interface; GType ags_record_thread_get_type() { static GType ags_type_record_thread = 0; if(!ags_type_record_thread){ static const GTypeInfo ags_record_thread_info = { sizeof (AgsRecordThreadClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_record_thread_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsRecordThread), 0, /* n_preallocs */ (GInstanceInitFunc) ags_record_thread_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_record_thread_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_record_thread = g_type_register_static(AGS_TYPE_THREAD, "AgsRecordThread\0", &ags_record_thread_info, 0); g_type_add_interface_static(ags_type_record_thread, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_record_thread); } void ags_record_thread_class_init(AgsRecordThreadClass *record_thread) { GObjectClass *gobject; AgsThreadClass *thread; GParamSpec *param_spec; ags_record_thread_parent_class = g_type_class_peek_parent(record_thread); /* GObject */ gobject = (GObjectClass *) record_thread; gobject->get_property = ags_record_thread_get_property; gobject->set_property = ags_record_thread_set_property; gobject->finalize = ags_record_thread_finalize; /* properties */ param_spec = g_param_spec_object("registry\0", "registry to check against\0", "The registry to check against serialization.\0", AGS_TYPE_REGISTRY, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_REGISTRY, param_spec); /* AgsThread */ thread = (AgsThreadClass *) record_thread; thread->start = ags_record_thread_start; thread->run = ags_record_thread_run; thread->stop = ags_record_thread_stop; } void ags_record_thread_connectable_interface_init(AgsConnectableInterface *connectable) { ags_record_thread_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_record_thread_connect; connectable->disconnect = ags_record_thread_disconnect; } void ags_record_thread_init(AgsRecordThread *record_thread) { AgsThread *thread; thread = AGS_THREAD(record_thread); record_thread->registry = NULL; record_thread->delay = AGS_RECORD_THREAD_DEFAULT_DELAY; record_thread->counter = 0; } void ags_record_thread_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsRecordThread *record_thread; record_thread = AGS_RECORD_THREAD(gobject); switch(prop_id){ case PROP_REGISTRY: { AgsRegistry *registry; registry = g_value_get_object(value); if(record_thread->registry == registry){ return; } if(record_thread->registry != NULL){ g_object_unref(record_thread->registry); } if(registry != NULL){ g_object_ref(registry); } record_thread->registry = registry; } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_record_thread_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsRecordThread *record_thread; record_thread = AGS_RECORD_THREAD(gobject); switch(prop_id){ case PROP_REGISTRY: { g_value_set_object(value, record_thread->registry); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_record_thread_connect(AgsConnectable *connectable) { ags_record_thread_parent_connectable_interface->connect(connectable); /* empty */ } void ags_record_thread_disconnect(AgsConnectable *connectable) { ags_record_thread_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_record_thread_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_record_thread_parent_class)->finalize(gobject); /* empty */ } void ags_record_thread_start(AgsThread *thread) { //TODO:JK: implement me AGS_THREAD_CLASS(ags_record_thread_parent_class)->start(thread); } void ags_record_thread_run(AgsThread *thread) { AgsRecordThread *record_thread; record_thread = AGS_RECORD_THREAD(thread); if(record_thread->counter != record_thread->delay){ record_thread->counter += 1; }else{ record_thread->counter = 0; if((AGS_REGISTRY_DIRTY & (record_thread->registry->flags)) != 0){ AgsFile *next_file, *current_file; current_file = record_thread->registry->current; next_file = ags_file_new(current_file->filename); pthread_mutex_lock(&(record_thread->registry->mutex)); g_object_unref(record_thread->registry->previous); record_thread->registry->previous = current_file; record_thread->registry->current = next_file; pthread_mutex_unlock(&(record_thread->registry->mutex)); ags_file_write(current_file); record_thread->registry->flags &= (~AGS_REGISTRY_DIRTY); } } } void ags_record_thread_stop(AgsThread *thread) { //TODO:JK: implement me } AgsRecordThread* ags_record_thread_new(GObject *devout, AgsRegistry *registry) { AgsRecordThread *record_thread; record_thread = (AgsRecordThread *) g_object_new(AGS_TYPE_RECORD_THREAD, "devout\0", devout, "registry\0", registry, NULL); return(record_thread); } gsequencer-0.6.37/src/ags/thread/ags_autosave_thread.c0000644000175000017500000002271312626272146017672 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include void ags_autosave_thread_class_init(AgsAutosaveThreadClass *autosave_thread); void ags_autosave_thread_connectable_interface_init(AgsConnectableInterface *connectable); void ags_autosave_thread_main_loop_interface_init(AgsMainLoopInterface *main_loop); void ags_autosave_thread_init(AgsAutosaveThread *autosave_thread); void ags_autosave_thread_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_autosave_thread_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_autosave_thread_connect(AgsConnectable *connectable); void ags_autosave_thread_disconnect(AgsConnectable *connectable); void ags_autosave_thread_set_tic(AgsMainLoop *main_loop, guint tic); guint ags_autosave_thread_get_tic(AgsMainLoop *main_loop); void ags_autosave_thread_set_last_sync(AgsMainLoop *main_loop, guint last_sync); guint ags_autosave_thread_get_last_sync(AgsMainLoop *main_loop); void ags_autosave_thread_finalize(GObject *gobject); void ags_autosave_thread_start(AgsThread *thread); void ags_autosave_thread_run(AgsThread *thread); /** * SECTION:ags_autosave_thread * @short_description: auto safe * @title: AgsAutosaveThread * @section_id: * @include: ags/thread/ags_autosave_thread.h * * The #AgsAutosaveThread performs auto-safe. */ enum{ PROP_0, PROP_AGS_MAIN, }; static gpointer ags_autosave_thread_parent_class = NULL; static AgsConnectableInterface *ags_autosave_thread_parent_connectable_interface; GType ags_autosave_thread_get_type() { static GType ags_type_autosave_thread = 0; if(!ags_type_autosave_thread){ static const GTypeInfo ags_autosave_thread_info = { sizeof (AgsAutosaveThreadClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_autosave_thread_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsAutosaveThread), 0, /* n_preallocs */ (GInstanceInitFunc) ags_autosave_thread_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_autosave_thread_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; static const GInterfaceInfo ags_main_loop_interface_info = { (GInterfaceInitFunc) ags_autosave_thread_main_loop_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_autosave_thread = g_type_register_static(AGS_TYPE_THREAD, "AgsAutosaveThread\0", &ags_autosave_thread_info, 0); g_type_add_interface_static(ags_type_autosave_thread, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); g_type_add_interface_static(ags_type_autosave_thread, AGS_TYPE_MAIN_LOOP, &ags_main_loop_interface_info); } return (ags_type_autosave_thread); } void ags_autosave_thread_class_init(AgsAutosaveThreadClass *autosave_thread) { GObjectClass *gobject; AgsThreadClass *thread; GParamSpec *param_spec; ags_autosave_thread_parent_class = g_type_class_peek_parent(autosave_thread); /* GObject */ gobject = (GObjectClass *) autosave_thread; gobject->get_property = ags_autosave_thread_get_property; gobject->set_property = ags_autosave_thread_set_property; gobject->finalize = ags_autosave_thread_finalize; /* properties */ param_spec = g_param_spec_object("ags_main\0", "ags_main to check against\0", "The ags_main to check against serialization.\0", AGS_TYPE_MAIN, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_AGS_MAIN, param_spec); /* AgsThread */ thread = (AgsThreadClass *) autosave_thread; thread->start = ags_autosave_thread_start; thread->run = ags_autosave_thread_run; } void ags_autosave_thread_connectable_interface_init(AgsConnectableInterface *connectable) { ags_autosave_thread_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_autosave_thread_connect; connectable->disconnect = ags_autosave_thread_disconnect; } void ags_autosave_thread_main_loop_interface_init(AgsMainLoopInterface *main_loop) { main_loop->set_tic = ags_autosave_thread_set_tic; main_loop->get_tic = ags_autosave_thread_get_tic; main_loop->set_last_sync = ags_autosave_thread_set_last_sync; main_loop->get_last_sync = ags_autosave_thread_get_last_sync; } void ags_autosave_thread_init(AgsAutosaveThread *autosave_thread) { AgsThread *thread; thread = AGS_THREAD(autosave_thread); g_atomic_int_or(&(thread->flags), AGS_THREAD_READY); thread->freq = AGS_AUTOSAVE_THREAD_DEFAULT_JIFFIE; g_atomic_int_set(&(autosave_thread->tic), 0); g_atomic_int_set(&(autosave_thread->last_sync), 0); autosave_thread->ags_main = NULL; autosave_thread->counter = 0; } void ags_autosave_thread_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsAutosaveThread *autosave_thread; autosave_thread = AGS_AUTOSAVE_THREAD(gobject); switch(prop_id){ case PROP_AGS_MAIN: { AgsMain *ags_main; ags_main = g_value_get_object(value); if(autosave_thread->ags_main == ags_main){ return; } if(autosave_thread->ags_main != NULL){ g_object_unref(autosave_thread->ags_main); } if(ags_main != NULL){ g_object_ref(ags_main); } autosave_thread->ags_main = ags_main; } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_autosave_thread_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsAutosaveThread *autosave_thread; autosave_thread = AGS_AUTOSAVE_THREAD(gobject); switch(prop_id){ case PROP_AGS_MAIN: { g_value_set_object(value, autosave_thread->ags_main); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_autosave_thread_connect(AgsConnectable *connectable) { ags_autosave_thread_parent_connectable_interface->connect(connectable); /* empty */ } void ags_autosave_thread_disconnect(AgsConnectable *connectable) { ags_autosave_thread_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_autosave_thread_set_tic(AgsMainLoop *main_loop, guint tic) { g_atomic_int_set(&(AGS_AUTOSAVE_THREAD(main_loop)->tic), tic); } guint ags_autosave_thread_get_tic(AgsMainLoop *main_loop) { return(g_atomic_int_get(&(AGS_AUTOSAVE_THREAD(main_loop)->tic))); } void ags_autosave_thread_set_last_sync(AgsMainLoop *main_loop, guint last_sync) { g_atomic_int_set(&(AGS_AUTOSAVE_THREAD(main_loop)->last_sync), last_sync); } guint ags_autosave_thread_get_last_sync(AgsMainLoop *main_loop) { gint val; val = g_atomic_int_get(&(AGS_AUTOSAVE_THREAD(main_loop)->last_sync)); return(val); } void ags_autosave_thread_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_autosave_thread_parent_class)->finalize(gobject); /* empty */ } void ags_autosave_thread_start(AgsThread *thread) { AGS_THREAD_CLASS(ags_autosave_thread_parent_class)->start(thread); } void ags_autosave_thread_run(AgsThread *thread) { AgsAutosaveThread *autosave_thread; static const struct timespec delay = { 1, 0, }; autosave_thread = AGS_AUTOSAVE_THREAD(thread); if(autosave_thread->counter != autosave_thread->delay){ autosave_thread->counter += 1; }else{ AgsFile *file; struct passwd *pw; uid_t uid; gchar *filename; autosave_thread->counter = 0; uid = getuid(); pw = getpwuid(uid); filename = g_strdup_printf("%s/%s/%d-%s\0", pw->pw_dir, AGS_DEFAULT_DIRECTORY, getpid(), AGS_AUTOSAVE_THREAD_DEFAULT_FILENAME); file = (AgsFile *) g_object_new(AGS_TYPE_FILE, "main\0", autosave_thread->ags_main, "filename\0", filename, NULL); ags_file_write_concurrent(file); g_object_unref(file); } nanosleep(&delay, NULL); } /** * ags_autosave_thread_new: * @devout: the #AgsDevout * @ags_main: the #AgsMain * * Create a new #AgsAutosaveThread. * * Returns: the new #AgsAutosaveThread * * Since: 0.4 */ AgsAutosaveThread* ags_autosave_thread_new(GObject *devout, AgsMain *ags_main) { AgsAutosaveThread *autosave_thread; autosave_thread = (AgsAutosaveThread *) g_object_new(AGS_TYPE_AUTOSAVE_THREAD, "devout\0", devout, "ags-main\0", ags_main, NULL); return(autosave_thread); } gsequencer-0.6.37/src/ags/thread/ags_recycling_thread_callbacks.c0000644000175000017500000000163312626272146022017 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include void ags_recycling_thread_iterate_callback(AgsRecyclingThread *thread, gpointer user_data) { } gsequencer-0.6.37/src/ags/thread/ags_recycling_thread.c0000644000175000017500000004711612626272146020026 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include void ags_recycling_thread_class_init(AgsRecyclingThreadClass *recycling_thread); void ags_recycling_thread_connectable_interface_init(AgsConnectableInterface *connectable); void ags_recycling_thread_init(AgsRecyclingThread *recycling_thread); void ags_recycling_thread_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_recycling_thread_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_recycling_thread_connect(AgsConnectable *connectable); void ags_recycling_thread_disconnect(AgsConnectable *connectable); void ags_recycling_thread_finalize(GObject *gobject); void ags_recycling_thread_queue(void *data); void ags_recycling_thread_start(AgsThread *thread); void ags_recycling_thread_run(AgsThread *thread); void ags_recycling_thread_real_play_channel(AgsRecyclingThread *recycling_thread, GObject *channel, AgsRecallID *recall_id, gint stage); void ags_recycling_thread_real_play_audio(AgsRecyclingThread *recycling_thread, GObject *output, GObject *audio, AgsRecallID *recall_id, gint stage); void ags_recycling_thread_play_channel_worker(AgsRecyclingThread *recycling_thread, GObject *channel, AgsRecallID *recall_id, gint stage); void ags_recycling_thread_play_audio_worker(AgsRecyclingThread *recycling_thread, GObject *output, GObject *audio, AgsRecallID *recall_id, gint stage); enum{ PROP_0, PROP_ITERATOR_THREAD, PROP_FIRST_RECYCLING, PROP_LAST_RECYCLING, }; enum{ PLAY_AUDIO, PLAY_CHANNEL, LAST_SIGNAL, }; static gpointer ags_recycling_thread_parent_class = NULL; static AgsConnectableInterface *ags_recycling_thread_parent_connectable_interface; static guint recycling_thread_signals[LAST_SIGNAL]; GType ags_recycling_thread_get_type() { static GType ags_type_recycling_thread = 0; if(!ags_type_recycling_thread){ static const GTypeInfo ags_recycling_thread_info = { sizeof (AgsRecyclingThreadClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_recycling_thread_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsRecyclingThread), 0, /* n_preallocs */ (GInstanceInitFunc) ags_recycling_thread_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_recycling_thread_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_recycling_thread = g_type_register_static(AGS_TYPE_THREAD, "AgsRecyclingThread\0", &ags_recycling_thread_info, 0); g_type_add_interface_static(ags_type_recycling_thread, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_recycling_thread); } void ags_recycling_thread_class_init(AgsRecyclingThreadClass *recycling_thread) { GObjectClass *gobject; AgsThreadClass *thread; GParamSpec *param_spec; ags_recycling_thread_parent_class = g_type_class_peek_parent(recycling_thread); /* GObject */ gobject = (GObjectClass *) recycling_thread; gobject->set_property = ags_recycling_thread_set_property; gobject->get_property = ags_recycling_thread_get_property; gobject->finalize = ags_recycling_thread_finalize; /* properties */ param_spec = g_param_spec_object("iterator-thread\0", "assigned iterator thread\0", "The iterator thread object it is assigned to\0", AGS_TYPE_ITERATOR_THREAD, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_ITERATOR_THREAD, param_spec); param_spec = g_param_spec_object("first-recycling\0", "assigned first recycling\0", "The first recycling to acquire lock\0", AGS_TYPE_RECYCLING, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_FIRST_RECYCLING, param_spec); param_spec = g_param_spec_object("last-recycling\0", "assigned last recycling\0", "The last recycling to acquire lock\0", AGS_TYPE_RECYCLING, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_LAST_RECYCLING, param_spec); /* AgsThread */ thread = (AgsThreadClass *) recycling_thread; thread->start = ags_recycling_thread_start; thread->run = ags_recycling_thread_run; /* AgsRecyclingThread */ recycling_thread->play_channel = ags_recycling_thread_play_channel; recycling_thread->play_audio = ags_recycling_thread_play_audio; /* signals */ recycling_thread_signals[PLAY_CHANNEL] = g_signal_new("play_channel\0", G_TYPE_FROM_CLASS(recycling_thread), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsRecyclingThreadClass, play_channel), NULL, NULL, g_cclosure_user_marshal_VOID__OBJECT_OBJECT_OBJECT_INT_BOOLEAN, G_TYPE_NONE, 5, G_TYPE_OBJECT, G_TYPE_OBJECT, G_TYPE_OBJECT, G_TYPE_INT, G_TYPE_BOOLEAN); recycling_thread_signals[PLAY_AUDIO] = g_signal_new("play_audio\0", G_TYPE_FROM_CLASS(recycling_thread), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsRecyclingThreadClass, play_audio), NULL, NULL, g_cclosure_user_marshal_VOID__OBJECT_OBJECT_OBJECT_OBJECT_OBJECT_OBJECT_UINT_INT_BOOLEAN, G_TYPE_NONE, 9, G_TYPE_OBJECT, G_TYPE_OBJECT, G_TYPE_OBJECT, G_TYPE_OBJECT, G_TYPE_OBJECT, G_TYPE_OBJECT, G_TYPE_UINT, G_TYPE_INT, G_TYPE_BOOLEAN); } void ags_recycling_thread_connectable_interface_init(AgsConnectableInterface *connectable) { ags_recycling_thread_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_recycling_thread_connect; connectable->disconnect = ags_recycling_thread_disconnect; } void ags_recycling_thread_init(AgsRecyclingThread *recycling_thread) { recycling_thread->flags = 0; recycling_thread->iterator_thread = NULL; recycling_thread->iteration_mutex = (pthread_mutex_t *) malloc(sizeof(pthread_mutex_t)); pthread_mutex_init(recycling_thread->iteration_mutex, NULL); recycling_thread->iteration_cond = (pthread_cond_t *) malloc(sizeof(pthread_cond_t)); pthread_cond_init(recycling_thread->iteration_cond, NULL); recycling_thread->worker_queue = (pthread_t *) malloc(sizeof(pthread_t)); recycling_thread->worker_mutex = (pthread_mutex_t *) malloc(sizeof(pthread_mutex_t)); pthread_mutex_init(recycling_thread->worker_mutex, NULL); recycling_thread->worker_cond = (pthread_cond_t *) malloc(sizeof(pthread_cond_t)); pthread_cond_init(recycling_thread->worker_cond, NULL); recycling_thread->first_recycling = NULL; recycling_thread->last_recycling = NULL; recycling_thread->worker = NULL; } void ags_recycling_thread_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsRecyclingThread *recycling_thread; recycling_thread = AGS_RECYCLING_THREAD(gobject); switch(prop_id){ case PROP_ITERATOR_THREAD: { AgsThread *iterator_thread; iterator_thread = (AgsThread *) g_value_get_object(value); if(recycling_thread->iterator_thread == iterator_thread){ return; } if(recycling_thread->iterator_thread != NULL){ g_object_unref(recycling_thread->iterator_thread); } if(iterator_thread != NULL){ g_object_ref(iterator_thread); } recycling_thread->iterator_thread = iterator_thread; } break; case PROP_FIRST_RECYCLING: { AgsRecycling *first_recycling; first_recycling = (AgsRecycling *) g_value_get_object(value); if(recycling_thread->first_recycling == first_recycling){ return; } if(recycling_thread->first_recycling != NULL){ g_object_unref(recycling_thread->first_recycling); } if(first_recycling != NULL){ g_object_ref(first_recycling); } recycling_thread->first_recycling = first_recycling; } break; case PROP_LAST_RECYCLING: { AgsRecycling *last_recycling; last_recycling = (AgsRecycling *) g_value_get_object(value); if(recycling_thread->last_recycling == last_recycling){ return; } if(recycling_thread->last_recycling != NULL){ g_object_unref(recycling_thread->last_recycling); } if(last_recycling != NULL){ g_object_ref(last_recycling); } recycling_thread->last_recycling = last_recycling; } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_recycling_thread_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsRecyclingThread *recycling_thread; recycling_thread = AGS_RECYCLING_THREAD(gobject); switch(prop_id){ case PROP_ITERATOR_THREAD: g_value_set_object(value, recycling_thread->iterator_thread); break; case PROP_FIRST_RECYCLING: g_value_set_object(value, recycling_thread->first_recycling); break; case PROP_LAST_RECYCLING: g_value_set_object(value, recycling_thread->last_recycling); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_recycling_thread_connect(AgsConnectable *connectable) { AgsThread *thread; thread = AGS_THREAD(connectable); ags_recycling_thread_parent_connectable_interface->connect(connectable); /* empty */ } void ags_recycling_thread_disconnect(AgsConnectable *connectable) { ags_recycling_thread_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_recycling_thread_finalize(GObject *gobject) { AgsRecyclingThread *recycling_thread; recycling_thread = AGS_RECYCLING_THREAD(gobject); /* */ G_OBJECT_CLASS(ags_recycling_thread_parent_class)->finalize(gobject); } void ags_recycling_thread_queue(void *data) { AgsRecyclingThread *recycling_thread; AgsRecyclingThreadWorker *worker; GList *list; guint flags; recycling_thread = AGS_RECYCLING_THREAD(data); while((AGS_THREAD_RUNNING & (g_atomic_int_get(&(recycling_thread->flags)))) != 0){ /* wait until fifo is available */ pthread_mutex_lock(recycling_thread->worker_mutex); g_atomic_int_and(&(recycling_thread->flags), ~AGS_RECYCLING_THREAD_WORKER_DONE); flags = g_atomic_int_get(&(recycling_thread->flags)); if((AGS_RECYCLING_THREAD_WORKER_WAIT & (flags)) != 0 && (AGS_RECYCLING_THREAD_WORKER_DONE & (flags)) == 0){ while((AGS_RECYCLING_THREAD_WORKER_WAIT & (flags)) != 0 && (AGS_RECYCLING_THREAD_WORKER_DONE & (flags)) == 0){ pthread_cond_wait(recycling_thread->worker_cond, recycling_thread->worker_mutex); flags = g_atomic_int_get(&(recycling_thread->flags)); } } g_atomic_int_or(&(recycling_thread->flags), (AGS_RECYCLING_THREAD_WORKER_WAIT | AGS_RECYCLING_THREAD_WORKER_DONE)); pthread_mutex_unlock(recycling_thread->worker_mutex); /* lock context */ ags_concurrent_tree_lock_context(AGS_CONCURRENT_TREE(recycling_thread->first_recycling)); /* process worker */ list = g_list_reverse(recycling_thread->worker); while(list != NULL){ worker = list->data; if(worker->audio_worker){ ags_recycling_thread_play_audio_worker(recycling_thread, worker->channel, worker->audio, worker->recall_id, worker->stage); }else{ ags_recycling_thread_play_channel_worker(recycling_thread, worker->channel, worker->recall_id, worker->stage); } list = list->next; } /* clear worker */ g_list_free_full(recycling_thread->worker, free); recycling_thread->worker = NULL; /* unlock context */ ags_concurrent_tree_unlock_context(AGS_CONCURRENT_TREE(recycling_thread->first_recycling)); /* notify iterator thread, signal fifo */ ags_iterator_thread_children_ready(recycling_thread->iterator_thread, recycling_thread); } } void ags_recycling_thread_start(AgsThread *thread) { AgsRecyclingThread *recycling_thread; recycling_thread = AGS_RECYCLING_THREAD(thread); pthread_create(recycling_thread->worker_queue, NULL, &ags_recycling_thread_queue, thread); AGS_THREAD_CLASS(ags_recycling_thread_parent_class)->start(thread); } void ags_recycling_thread_run(AgsThread *thread) { AgsRecyclingThread *recycling_thread; guint flags; guint i; recycling_thread = AGS_RECYCLING_THREAD(thread); for(i = 0; i < 3; i++){ /* wait for next run */ ags_recycling_thread_fifo(recycling_thread); /* signal worker */ pthread_mutex_lock(recycling_thread->worker_mutex); g_atomic_int_and(&(recycling_thread->flags), ~AGS_RECYCLING_THREAD_WORKER_WAIT); flags = g_atomic_int_get(&(recycling_thread->flags)); if((AGS_RECYCLING_THREAD_WORKER_DONE & (flags)) == 0){ pthread_cond_signal(recycling_thread->worker_cond); } pthread_mutex_unlock(recycling_thread->worker_mutex); } } AgsRecyclingThreadWorker* ags_recycling_thread_worker_alloc(AgsRecyclingThread *recycling_thread, GObject *audio, GObject *channel, AgsRecallID *recall_id, gint stage, gboolean audio_worker) { AgsRecyclingThreadWorker *worker; worker = (AgsRecyclingThreadWorker *) malloc(sizeof(AgsRecyclingThreadWorker)); worker->audio = audio; worker->channel = channel; worker->recall_id = recall_id; worker->stage = stage; worker->audio_worker = audio_worker; return(worker); } void ags_recycling_thread_add_worker(AgsRecyclingThread *recycling_thread, AgsRecyclingThreadWorker *worker) { recycling_thread->worker = g_list_prepend(recycling_thread, worker); } void ags_recycling_thread_remove_worker(AgsRecyclingThread *recycling_thread, AgsRecyclingThreadWorker *worker) { recycling_thread->worker = g_list_remove(recycling_thread, worker); } void ags_recycling_thread_real_play_channel(AgsRecyclingThread *recycling_thread, GObject *channel, AgsRecallID *recall_id, gint stage) { ags_recycling_thread_add_worker(recycling_thread, ags_recycling_thread_worker_alloc(recycling_thread, NULL, channel, recall_id, stage, FALSE)); } void ags_recycling_thread_play_channel(AgsRecyclingThread *recycling_thread, GObject *channel, AgsRecallID *recall_id, gint stage) { g_return_if_fail(AGS_IS_RECYCLING_THREAD(recycling_thread)); g_return_if_fail(AGS_IS_CHANNEL(channel)); g_object_ref((GObject *) recycling_thread); g_signal_emit(G_OBJECT(recycling_thread), recycling_thread_signals[PLAY_CHANNEL], 0, channel, recall_id, stage); g_object_unref((GObject *) recycling_thread); } void ags_recycling_thread_real_play_audio(AgsRecyclingThread *recycling_thread, GObject *output, GObject *audio, AgsRecallID *recall_id, gint stage) { ags_recycling_thread_add_worker(recycling_thread, ags_recycling_thread_worker_alloc(recycling_thread, audio, output, recall_id, stage, TRUE)); } void ags_recycling_thread_play_audio(AgsRecyclingThread *recycling_thread, GObject *output, GObject *audio, AgsRecallID *recall_id, gint stage) { g_return_if_fail(AGS_IS_RECYCLING_THREAD(recycling_thread)); g_return_if_fail(AGS_IS_AUDIO(audio)); g_return_if_fail(AGS_IS_CHANNEL(output)); g_object_ref((GObject *) recycling_thread); g_signal_emit(G_OBJECT(recycling_thread), recycling_thread_signals[PLAY_CHANNEL], 0, output, audio, recall_id, stage); g_object_unref((GObject *) recycling_thread); } void ags_recycling_thread_play_channel_worker(AgsRecyclingThread *recycling_thread, GObject *channel, AgsRecallID *recall_id, gint stage) { ags_channel_play(AGS_CHANNEL(channel), recall_id, stage); } void ags_recycling_thread_play_audio_worker(AgsRecyclingThread *recycling_thread, GObject *output, GObject *audio, AgsRecallID *recall_id, gint stage) { AgsChannel *input; if((AGS_AUDIO_ASYNC & (AGS_AUDIO(audio)->flags)) != 0){ input = ags_channel_nth(AGS_AUDIO(audio)->input, AGS_CHANNEL(output)->audio_channel); }else{ input = ags_channel_nth(AGS_AUDIO(audio)->input, AGS_CHANNEL(output)->line); } if((AGS_AUDIO_OUTPUT_HAS_RECYCLING & (AGS_AUDIO(audio)->flags)) != 0){ AgsRecallID *input_recall_id; gint child_position; /* input_recall_id - check if there is a new recycling */ child_position = ags_recycling_container_find_child(recall_id->recycling_container, input->first_recycling); if(child_position == -1){ input_recall_id = ags_recall_id_find_recycling_container(input->recall_id, recall_id->recycling_container); }else{ GList *list; list = g_list_nth(recall_id->recycling_container->children, child_position); if(list != NULL){ input_recall_id = ags_recall_id_find_recycling_container(input->recall_id, AGS_RECYCLING_CONTAINER(list->data)); }else{ input_recall_id = NULL; } } ags_audio_play(AGS_AUDIO(audio), input_recall_id, stage); } ags_audio_play(AGS_AUDIO(audio), recall_id, stage); } AgsRecyclingThread* ags_recycling_thread_find_child(AgsRecyclingThread *recycling_thread, GObject *first_recycling) { //TODO:JK: implement me return(NULL); } void ags_recycling_thread_fifo(AgsRecyclingThread *recycling_thread) { guint flags; pthread_mutex_lock(recycling_thread->iteration_mutex); g_atomic_int_or(&(recycling_thread->flags), AGS_RECYCLING_THREAD_WAIT); flags = g_atomic_int_get(&(recycling_thread->flags)); while((AGS_RECYCLING_THREAD_WAIT & (flags)) != 0 && (AGS_RECYCLING_THREAD_DONE & (flags)) == 0){ pthread_cond_wait(recycling_thread->iteration_cond, recycling_thread->iteration_mutex); flags = g_atomic_int_get(&(recycling_thread->flags)); } pthread_mutex_unlock(recycling_thread->iteration_mutex); } AgsRecyclingThread* ags_recycling_thread_new(GObject *first_recycling, GObject *last_recycling) { AgsRecyclingThread *recycling_thread; recycling_thread = (AgsRecyclingThread *) g_object_new(AGS_TYPE_RECYCLING_THREAD, "first-recycling\0", first_recycling, "last-recycling\0", last_recycling, NULL); return(recycling_thread); } gsequencer-0.6.37/src/ags/thread/ags_iterator_thread.h0000644000175000017500000000502612626272146017677 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_ITERATOR_THREAD_H__ #define __AGS_ITERATOR_THREAD_H__ #include #include #ifdef AGS_USE_LINUX_THREADS #include #else #include #endif #include #define AGS_TYPE_ITERATOR_THREAD (ags_iterator_thread_get_type()) #define AGS_ITERATOR_THREAD(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_ITERATOR_THREAD, AgsIteratorThread)) #define AGS_ITERATOR_THREAD_CLASS(class) (G_TYPE_CHECK_CLASS_CAST(class, AGS_TYPE_ITERATOR_THREAD, AgsIteratorThread)) #define AGS_IS_ITERATOR_THREAD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_ITERATOR_THREAD)) #define AGS_IS_ITERATOR_THREAD_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_ITERATOR_THREAD)) #define AGS_ITERATOR_THREAD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS(obj, AGS_TYPE_ITERATOR_THREAD, AgsIteratorThreadClass)) typedef struct _AgsIteratorThread AgsIteratorThread; typedef struct _AgsIteratorThreadClass AgsIteratorThreadClass; typedef enum{ AGS_ITERATOR_THREAD_DONE = 1, AGS_ITERATOR_THREAD_WAIT = 1 << 1, }AgsIteratorThreadFlags; struct _AgsIteratorThread { AgsThread thread; volatile guint flags; pthread_mutex_t *tic_mutex; pthread_cond_t *tic_cond; AgsThread *recycling_thread; AgsChannel *channel; AgsRecallID *recall_id; gint stage; }; struct _AgsIteratorThreadClass { AgsThreadClass thread; void (*children_ready)(AgsIteratorThread *iterator_thread, AgsThread *current); }; GType ags_iterator_thread_get_type(); void ags_iterator_thread_children_ready(AgsIteratorThread *iterator_thread, AgsThread *current); AgsIteratorThread* ags_iterator_thread_new(); #endif /*__AGS_ITERATOR_THREAD_H__*/ gsequencer-0.6.37/src/ags/thread/ags_channel_thread.h0000644000175000017500000000503512626272146017456 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_CHANNEL_THREAD_H__ #define __AGS_CHANNEL_THREAD_H__ #include #include #ifdef AGS_USE_LINUX_THREADS #include #else #include #endif #define AGS_TYPE_CHANNEL_THREAD (ags_channel_thread_get_type()) #define AGS_CHANNEL_THREAD(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_CHANNEL_THREAD, AgsChannelThread)) #define AGS_CHANNEL_THREAD_CLASS(class) (G_TYPE_CHECK_CLASS_CAST(class, AGS_TYPE_CHANNEL_THREAD, AgsChannelThreadClass)) #define AGS_IS_CHANNEL_THREAD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_CHANNEL_THREAD)) #define AGS_IS_CHANNEL_THREAD_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_CHANNEL_THREAD)) #define AGS_CHANNEL_THREAD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS(obj, AGS_TYPE_CHANNEL_THREAD, AgsChannelThreadClass)) #define AGS_CHANNEL_THREAD_DEFAULT_JIFFIE (48.0) typedef struct _AgsChannelThread AgsChannelThread; typedef struct _AgsChannelThreadClass AgsChannelThreadClass; typedef enum{ AGS_CHANNEL_THREAD_DONE = 1, AGS_CHANNEL_THREAD_WAIT = 1 << 1, AGS_CHANNEL_THREAD_DONE_SYNC = 1 << 2, AGS_CHANNEL_THREAD_WAIT_SYNC = 1 << 3, }AgsChannelThreadFlags; struct _AgsChannelThread { AgsThread thread; volatile guint flags; pthread_mutexattr_t wakeup_attr; pthread_mutex_t *wakeup_mutex; pthread_cond_t *wakeup_cond; pthread_mutexattr_t done_attr; pthread_mutex_t *done_mutex; pthread_cond_t *done_cond; GObject *channel; }; struct _AgsChannelThreadClass { AgsThreadClass thread; }; GType ags_channel_thread_get_type(); AgsChannelThread* ags_channel_thread_new(GObject *devout, GObject *channel); #endif /*__AGS_CHANNEL_THREAD_H__*/ gsequencer-0.6.37/src/ags/thread/ags_task_thread.h0000644000175000017500000000521412626272146017007 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_TASK_THREAD_H__ #define __AGS_TASK_THREAD_H__ #include #include #ifdef AGS_USE_LINUX_THREADS #include #else #include #endif #include #include #define AGS_TYPE_TASK_THREAD (ags_task_thread_get_type()) #define AGS_TASK_THREAD(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_TASK_THREAD, AgsTaskThread)) #define AGS_TASK_THREAD_CLASS(class) (G_TYPE_CHECK_CLASS_CAST(class, AGS_TYPE_TASK_THREAD, AgsTaskThread)) #define AGS_IS_TASK_THREAD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_TASK_THREAD)) #define AGS_IS_TASK_THREAD_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_TASK_THREAD)) #define AGS_TASK_THREAD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS(obj, AGS_TYPE_TASK_THREAD, AgsTaskThreadClass)) #define AGS_TASK_THREAD_DEFAULT_JIFFIE (250.0) typedef struct _AgsTaskThread AgsTaskThread; typedef struct _AgsTaskThreadClass AgsTaskThreadClass; typedef struct _AgsTaskThreadAppend AgsTaskThreadAppend; struct _AgsTaskThread { AgsThread thread; guint flags; volatile gboolean is_run; pthread_mutex_t *run_mutex; pthread_cond_t *run_cond; pthread_mutex_t *read_mutex; pthread_mutex_t *launch_mutex; volatile guint queued; volatile guint pending; volatile GList *exec; volatile GList *queue; AgsThreadPool *thread_pool; }; struct _AgsTaskThreadClass { AgsThreadClass thread; }; struct _AgsTaskThreadAppend { volatile AgsTaskThread *task_thread; volatile gpointer data; }; GType ags_task_thread_get_type(); void ags_task_thread_append_task(AgsTaskThread *task_thread, AgsTask *task); void ags_task_thread_append_tasks(AgsTaskThread *task_thread, GList *list); AgsTaskThread* ags_task_thread_new(GObject *devout); #endif /*__AGS_TASK_THREAD_H__*/ gsequencer-0.6.37/src/ags/thread/ags_autosave_thread.h0000644000175000017500000000444512626272146017701 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_AUTOSAVE_THREAD_H__ #define __AGS_AUTOSAVE_THREAD_H__ #include #include #ifdef AGS_USE_LINUX_THREADS #include #else #include #endif #include #define AGS_TYPE_AUTOSAVE_THREAD (ags_autosave_thread_get_type()) #define AGS_AUTOSAVE_THREAD(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_AUTOSAVE_THREAD, AgsAutosaveThread)) #define AGS_AUTOSAVE_THREAD_CLASS(class) (G_TYPE_CHECK_CLASS_CAST(class, AGS_TYPE_AUTOSAVE_THREAD, AgsAutosaveThreadClass)) #define AGS_IS_AUTOSAVE_THREAD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_AUTOSAVE_THREAD)) #define AGS_IS_AUTOSAVE_THREAD_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_AUTOSAVE_THREAD)) #define AGS_AUTOSAVE_THREAD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS(obj, AGS_TYPE_AUTOSAVE_THREAD, AgsAutosaveThreadClass)) #define AGS_AUTOSAVE_THREAD_DEFAULT_JIFFIE (0.2) #define AGS_AUTOSAVE_THREAD_DEFAULT_FILENAME "ags-autosaved.xml\0" typedef struct _AgsAutosaveThread AgsAutosaveThread; typedef struct _AgsAutosaveThreadClass AgsAutosaveThreadClass; struct _AgsAutosaveThread { AgsThread thread; volatile guint tic; volatile guint last_sync; AgsMain *ags_main; guint delay; guint counter; }; struct _AgsAutosaveThreadClass { AgsThreadClass thread; }; GType ags_autosave_thread_get_type(); AgsAutosaveThread* ags_autosave_thread_new(GObject *devout, AgsMain *ags_main); #endif /*__AGS_AUTOSAVE_THREAD_H__*/ gsequencer-0.6.37/src/ags/thread/ags_history.c0000644000175000017500000000604212626272146016212 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include void ags_history_class_init(AgsHistoryClass *history); void ags_history_connectable_interface_init(AgsConnectableInterface *connectable); void ags_history_init(AgsHistory *history); void ags_history_connect(AgsConnectable *connectable); void ags_history_disconnect(AgsConnectable *connectable); void ags_history_finalize(GObject *gobject); enum{ LAUNCH, FAILURE, LAST_SIGNAL, }; static gpointer ags_history_parent_class = NULL; static guint history_signals[LAST_SIGNAL]; GType ags_history_get_type() { static GType ags_type_history = 0; if(!ags_type_history){ static const GTypeInfo ags_history_info = { sizeof (AgsHistoryClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_history_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsHistory), 0, /* n_preallocs */ (GInstanceInitFunc) ags_history_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_history_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_history = g_type_register_static(G_TYPE_OBJECT, "AgsHistory\0", &ags_history_info, 0); g_type_add_interface_static(ags_type_history, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_history); } void ags_history_class_init(AgsHistoryClass *history) { GObjectClass *gobject; ags_history_parent_class = g_type_class_peek_parent(history); /* GObjectClass */ gobject = (GObjectClass *) history; gobject->finalize = ags_history_finalize; } void ags_history_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->connect = ags_history_connect; connectable->disconnect = ags_history_disconnect; } void ags_history_init(AgsHistory *history) { } void ags_history_connect(AgsConnectable *connectable) { /* empty */ } void ags_history_disconnect(AgsConnectable *connectable) { /* empty */ } void ags_history_finalize(GObject *gobject) { } AgsHistory* ags_history_new() { AgsHistory *history; history = (AgsHistory *) g_object_new(AGS_TYPE_HISTORY, NULL); return(history); } gsequencer-0.6.37/src/ags/thread/ags_thread_pool.c0000644000175000017500000003356012626451036017013 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include void ags_thread_pool_class_init(AgsThreadPoolClass *thread_pool); void ags_thread_pool_connectable_interface_init(AgsConnectableInterface *connectable); void ags_thread_pool_init(AgsThreadPool *thread_pool); void ags_thread_pool_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_thread_pool_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_thread_pool_connect(AgsConnectable *connectable); void ags_thread_pool_disconnect(AgsConnectable *connectable); void ags_thread_pool_finalize(GObject *gobject); void* ags_thread_pool_creation_thread(void *ptr); void ags_thread_pool_real_start(AgsThreadPool *thread_pool); /** * SECTION:ags_thread_pool * @short_description: thread pool * @title: AgsThreadPool * @section_id: * @include: ags/thread/ags_thread_pool.h * * The #AgsThreadPool acts as preinstantiated threads store. * This can achieve enormeous performance. */ #define AGS_THREAD_POOL_DEFAULT_MAX_UNUSED_THREADS 32 #define AGS_THREAD_POOL_DEFAULT_MAX_THREADS 1024 enum{ PROP_0, PROP_MAX_UNUSED_THREADS, PROP_MAX_THREADS, }; enum{ START, LAST_SIGNAL, }; static gpointer ags_thread_pool_parent_class = NULL; static guint thread_pool_signals[LAST_SIGNAL]; GType ags_thread_pool_get_type() { static GType ags_type_thread_pool = 0; if(!ags_type_thread_pool){ static const GTypeInfo ags_thread_pool_info = { sizeof (AgsThreadPoolClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_thread_pool_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsThreadPool), 0, /* n_preallocs */ (GInstanceInitFunc) ags_thread_pool_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_thread_pool_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_thread_pool = g_type_register_static(G_TYPE_OBJECT, "AgsThreadPool\0", &ags_thread_pool_info, 0); g_type_add_interface_static(ags_type_thread_pool, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_thread_pool); } void ags_thread_pool_class_init(AgsThreadPoolClass *thread_pool) { GObjectClass *gobject; GParamSpec *param_spec; ags_thread_pool_parent_class = g_type_class_peek_parent(thread_pool); /* GObjectClass */ gobject = (GObjectClass *) thread_pool; gobject->set_property = ags_thread_pool_set_property; gobject->get_property = ags_thread_pool_get_property; gobject->finalize = ags_thread_pool_finalize; /* properties */ param_spec = g_param_spec_uint("max-unused-threads\0", "maximum unused threads\0", "The maximum of unused threads.\0", 1, 65535, 24, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_MAX_UNUSED_THREADS, param_spec); param_spec = g_param_spec_uint("max-threads\0", "maximum threads to use\0", "The maximum of threads to be created.\0", 1, 65535, 1024, G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_MAX_THREADS, param_spec); /* AgsThreadPoolClass */ thread_pool->start = ags_thread_pool_real_start; /* signals */ thread_pool_signals[START] = g_signal_new("start\0", G_TYPE_FROM_CLASS (thread_pool), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (AgsThreadPoolClass, start), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); } void ags_thread_pool_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->connect = ags_thread_pool_connect; connectable->disconnect = ags_thread_pool_disconnect; } void ags_thread_pool_init(AgsThreadPool *thread_pool) { AgsThread *thread; GList *list; guint i; g_atomic_int_set(&(thread_pool->flags), 0); g_atomic_int_set(&(thread_pool->max_unused_threads), AGS_THREAD_POOL_DEFAULT_MAX_UNUSED_THREADS); g_atomic_int_set(&(thread_pool->max_threads), AGS_THREAD_POOL_DEFAULT_MAX_THREADS); thread_pool->thread = (pthread_t *) malloc(sizeof(pthread_t)); thread_pool->creation_mutex = (pthread_mutex_t *) malloc(sizeof(pthread_mutex_t)); pthread_mutex_init(thread_pool->creation_mutex, NULL); thread_pool->creation_cond = (pthread_cond_t *) malloc(sizeof(pthread_cond_t)); pthread_cond_init(thread_pool->creation_cond, NULL); g_atomic_int_set(&(thread_pool->n_threads), g_atomic_int_get(&(thread_pool->max_unused_threads))); g_atomic_int_set(&(thread_pool->newly_pulled), 0); g_atomic_int_set(&(thread_pool->queued), 0); thread_pool->parent = NULL; list = NULL; for(i = 0; i < g_atomic_int_get(&(thread_pool->max_unused_threads)); i++){ thread = (AgsThread *) ags_returnable_thread_new((GObject *) thread_pool); list = g_list_prepend(list, thread); } g_atomic_pointer_set(&(thread_pool->returnable_thread), list); g_atomic_pointer_set(&(thread_pool->running_thread), NULL); thread_pool->pull_mutex = (pthread_mutex_t *) malloc(sizeof(pthread_mutex_t)); pthread_mutex_init(thread_pool->pull_mutex, NULL); thread_pool->return_mutex = (pthread_mutex_t *) malloc(sizeof(pthread_mutex_t)); pthread_mutex_init(thread_pool->return_mutex, NULL); thread_pool->return_cond = (pthread_cond_t *) malloc(sizeof(pthread_cond_t)); pthread_cond_init(thread_pool->return_cond, NULL); } void ags_thread_pool_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsThreadPool *thread_pool; thread_pool = AGS_THREAD_POOL(gobject); switch(prop_id){ case PROP_MAX_UNUSED_THREADS: { g_atomic_int_set(&(thread_pool->max_unused_threads), g_value_get_uint(value)); } break; case PROP_MAX_THREADS: { g_atomic_int_set(&(thread_pool->max_threads), g_value_get_uint(value)); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_thread_pool_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsThreadPool *thread_pool; thread_pool = AGS_THREAD_POOL(gobject); switch(prop_id){ case PROP_MAX_UNUSED_THREADS: { g_value_set_uint(value, g_atomic_int_get(&(thread_pool->max_unused_threads))); } break; case PROP_MAX_THREADS: { g_value_set_uint(value, g_atomic_int_get(&(thread_pool->max_threads))); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_thread_pool_connect(AgsConnectable *connectable) { /* empty */ } void ags_thread_pool_disconnect(AgsConnectable *connectable) { AgsThreadPool *thread_pool; GList *list; thread_pool = AGS_THREAD_POOL(connectable); list = g_atomic_pointer_get(&(thread_pool->returnable_thread)); //TODO:JK: implement me } void ags_thread_pool_finalize(GObject *gobject) { AgsThreadPool *thread_pool; thread_pool = AGS_THREAD_POOL(gobject); ags_list_free_and_unref_link(g_atomic_pointer_get(&(thread_pool->returnable_thread))); /* call parent */ G_OBJECT_CLASS(ags_thread_pool_parent_class)->finalize(gobject); } void* ags_thread_pool_creation_thread(void *ptr) { AgsThreadPool *thread_pool; AgsThread *thread; GList *tmplist; guint n_threads, max_threads; guint i, i_stop; thread_pool = AGS_THREAD_POOL(ptr); #ifdef AGS_DEBUG g_message("ags_thread_pool_creation_thread\0"); #endif while((AGS_THREAD_POOL_RUNNING & (g_atomic_int_get(&(thread_pool->flags)))) != 0){ #ifdef AGS_DEBUG g_message("ags_thread_pool_creation_thread@loopStart\0"); #endif pthread_mutex_lock(thread_pool->creation_mutex); g_atomic_int_or(&(thread_pool->flags), AGS_THREAD_POOL_READY); while(g_atomic_int_get(&(thread_pool->newly_pulled)) == 0){ pthread_cond_wait(thread_pool->creation_cond, thread_pool->creation_mutex); } n_threads = g_atomic_int_get(&(thread_pool->n_threads)); max_threads = g_atomic_int_get(&(thread_pool->max_threads)); i_stop = g_atomic_int_get(&(thread_pool->newly_pulled)); g_atomic_int_set(&(thread_pool->newly_pulled), 0); #ifdef AGS_DEBUG g_message("ags_thread_pool_creation_thread@loop0\0"); #endif g_atomic_int_and(&(thread_pool->flags), (~AGS_THREAD_POOL_READY)); if(n_threads < max_threads){ for(i = 0; i < i_stop && n_threads < max_threads; i++){ thread = (AgsThread *) ags_returnable_thread_new((GObject *) thread_pool); tmplist = g_atomic_pointer_get(&(thread_pool->returnable_thread)); g_atomic_pointer_set(&(thread_pool->returnable_thread), g_list_prepend(tmplist, thread)); ags_thread_add_child(AGS_THREAD(thread_pool->parent), thread); ags_connectable_connect(AGS_CONNECTABLE(thread)); g_atomic_int_inc(&(thread_pool->n_threads)); n_threads++; } } pthread_mutex_unlock(thread_pool->creation_mutex); #ifdef AGS_DEBUG g_message("ags_thread_pool_creation_thread@loopEND\0"); #endif } } /** * ags_thread_pool_pull: * @thread_pool: the #AgsThreadPool * * Pull a previously instantiated #AgsReturnableThread. Note this * function may block until a new thread is available. * * Returns: a new #AgsThread * * Since: 0.4 */ AgsThread* ags_thread_pool_pull(AgsThreadPool *thread_pool) { AgsReturnableThread *returnable_thread; GList *list, *tmplist; guint max_threads, n_threads; auto void ags_thread_pool_pull_running(); void ags_thread_pool_pull_running(){ g_atomic_int_inc(&(thread_pool->newly_pulled)); do{ pthread_mutex_lock(thread_pool->creation_mutex); if((AGS_THREAD_POOL_READY & (g_atomic_int_get(&(thread_pool->flags)))) != 0){ pthread_cond_signal(thread_pool->creation_cond); } pthread_mutex_unlock(thread_pool->creation_mutex); list = g_atomic_pointer_get(&(thread_pool->returnable_thread)); while(list != NULL){ returnable_thread = AGS_RETURNABLE_THREAD(list->data); if((AGS_RETURNABLE_THREAD_IN_USE & (g_atomic_int_get(&(returnable_thread->flags)))) == 0){ pthread_mutex_lock(thread_pool->creation_mutex); tmplist = g_atomic_pointer_get(&(thread_pool->returnable_thread)); g_atomic_pointer_set(&(thread_pool->returnable_thread), g_list_remove(tmplist, returnable_thread)); pthread_mutex_unlock(thread_pool->creation_mutex); pthread_mutex_lock(thread_pool->pull_mutex); tmplist = g_atomic_pointer_get(&(thread_pool->running_thread)); g_atomic_pointer_set(&(thread_pool->running_thread), g_list_prepend(tmplist, returnable_thread)); pthread_mutex_unlock(thread_pool->pull_mutex); break; } list = list->next; } }while(list == NULL); } returnable_thread = NULL; pthread_mutex_lock(thread_pool->return_mutex); max_threads = g_atomic_int_get(&(thread_pool->max_threads)); if((n_threads = g_atomic_int_get(&(thread_pool->n_threads))) <= max_threads){ ags_thread_pool_pull_running(); }else{ g_atomic_int_inc(&(thread_pool->queued)); while((n_threads = g_atomic_int_get(&(thread_pool->n_threads))) > max_threads){ g_message("n_threads >= max_threads\0"); pthread_cond_wait(thread_pool->return_cond, thread_pool->return_mutex); } g_atomic_int_dec_and_test(&(thread_pool->queued)); ags_thread_pool_pull_running(); } if(g_atomic_int_get(&(thread_pool->queued)) > 0){ pthread_cond_signal(&(thread_pool->return_cond)); } pthread_mutex_unlock(thread_pool->return_mutex); // pthread_detach(*(AGS_THREAD(returnable_thread)->thread)); return(AGS_THREAD(returnable_thread)); } void ags_thread_pool_real_start(AgsThreadPool *thread_pool) { GList *list; gint n_threads; gint i; g_atomic_int_or(&(thread_pool->flags), AGS_THREAD_POOL_RUNNING); pthread_create(thread_pool->thread, NULL, &(ags_thread_pool_creation_thread), thread_pool); list = g_atomic_pointer_get(&(thread_pool->returnable_thread)); while(list != NULL){ ags_thread_add_child(AGS_THREAD(thread_pool->parent), AGS_THREAD(list->data)); // ags_thread_start(AGS_THREAD(list->data)); list = list->next; } } /** * ags_thread_pool_start: * @thread_pool: the #AgsThreadPool * * Start the thread pool. * * Since: 0.4 */ void ags_thread_pool_start(AgsThreadPool *thread_pool) { g_return_if_fail(AGS_IS_THREAD_POOL(thread_pool)); g_object_ref(G_OBJECT(thread_pool)); g_signal_emit(G_OBJECT(thread_pool), thread_pool_signals[START], 0); g_object_unref(G_OBJECT(thread_pool)); } /** * ags_thread_pool_new: * @parent: the parent #AgsThread of returnable threads * * Create a new #AgsThreadPool. * * Returns: the new #AgsThreadPool * * Since: 0.4 */ AgsThreadPool* ags_thread_pool_new(AgsThread *parent) { AgsThreadPool *thread_pool; thread_pool = (AgsThreadPool *) g_object_new(AGS_TYPE_THREAD_POOL, NULL); thread_pool->parent = parent; return(thread_pool); } gsequencer-0.6.37/src/ags/thread/ags_record_thread.h0000644000175000017500000000421412626272146017322 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_RECORD_THREAD_H__ #define __AGS_RECORD_THREAD_H__ #include #include #ifdef AGS_USE_LINUX_THREADS #include #else #include #endif #include #define AGS_TYPE_RECORD_THREAD (ags_record_thread_get_type()) #define AGS_RECORD_THREAD(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_RECORD_THREAD, AgsRecordThread)) #define AGS_RECORD_THREAD_CLASS(class) (G_TYPE_CHECK_CLASS_CAST(class, AGS_TYPE_RECORD_THREAD, AgsRecordThreadClass)) #define AGS_IS_RECORD_THREAD(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_RECORD_THREAD)) #define AGS_IS_RECORD_THREAD_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_RECORD_THREAD)) #define AGS_RECORD_THREAD_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS(obj, AGS_TYPE_RECORD_THREAD, AgsRecordThreadClass)) #define AGS_RECORD_THREAD_DEFAULT_DELAY (128) typedef struct _AgsRecordThread AgsRecordThread; typedef struct _AgsRecordThreadClass AgsRecordThreadClass; struct _AgsRecordThread { AgsThread thread; AgsRegistry *registry; guint delay; guint counter; }; struct _AgsRecordThreadClass { AgsThreadClass thread; }; GType ags_record_thread_get_type(); AgsRecordThread* ags_record_thread_new(GObject *devout, AgsRegistry *registry); #endif /*__AGS_RECORD_THREAD_H__*/ gsequencer-0.6.37/src/ags/thread/ags_task_completion.c0000644000175000017500000001324312626272146017705 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include void ags_task_completion_class_init(AgsTaskCompletionClass *task_completion); void ags_task_completion_connectable_interface_init(AgsConnectableInterface *connectable); void ags_task_completion_init(AgsTaskCompletion *task_completion); void ags_task_completion_connect(AgsConnectable *connectable); void ags_task_completion_disconnect(AgsConnectable *connectable); void ags_task_completion_finalize(GObject *gobject); void ags_task_completion_launch_callback(AgsTask *task, AgsTaskCompletion *task_completion); /** * SECTION:ags_task_completion * @short_description: gui thread * @title: AgsTaskCompletion * @section_id: * @include: ags/thread/ags_task_completion.h * * The #AgsTaskCompletion should be used to complete tasks from caller thread. */ enum{ COMPLETE, LAST_SIGNAL, }; static gpointer ags_task_completion_parent_class = NULL; static guint task_completion_signals[LAST_SIGNAL]; GType ags_task_completion_get_type() { static GType ags_type_task_completion = 0; if(!ags_type_task_completion){ static const GTypeInfo ags_task_completion_info = { sizeof (AgsTaskCompletionClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_task_completion_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsTaskCompletion), 0, /* n_preallocs */ (GInstanceInitFunc) ags_task_completion_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_task_completion_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_task_completion = g_type_register_static(G_TYPE_OBJECT, "AgsTaskCompletion\0", &ags_task_completion_info, 0); g_type_add_interface_static(ags_type_task_completion, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_task_completion); } void ags_task_completion_class_init(AgsTaskCompletionClass *task_completion) { GObjectClass *gobject; ags_task_completion_parent_class = g_type_class_peek_parent(task_completion); /* GObject */ gobject = (GObjectClass *) task_completion; gobject->finalize = ags_task_completion_finalize; /* AgsTaskClass */ task_completion->complete = NULL; /* signals */ /** * AgsTaskCompletion::complete: * @task_completion: the object to complete. * * The ::complete signal is emited as a task was finished */ task_completion_signals[COMPLETE] = g_signal_new("complete\0", G_TYPE_FROM_CLASS(task_completion), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsTaskCompletionClass, complete), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); } void ags_task_completion_connectable_interface_init(AgsConnectableInterface *connectable) { connectable->connect = ags_task_completion_connect; connectable->disconnect = ags_task_completion_disconnect; } void ags_task_completion_init(AgsTaskCompletion *task_completion) { g_atomic_int_set(&(task_completion->flags), 0); task_completion->task = NULL; task_completion->data = NULL; } void ags_task_completion_connect(AgsConnectable *connectable) { AgsTaskCompletion *task_completion; task_completion = AGS_TASK_COMPLETION(connectable); g_atomic_int_or(&(task_completion->flags), AGS_TASK_COMPLETION_QUEUED); g_signal_connect_after(task_completion->task, "launch\0", G_CALLBACK(ags_task_completion_launch_callback), task_completion); } void ags_task_completion_disconnect(AgsConnectable *connectable) { /* empty */ } void ags_task_completion_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_task_completion_parent_class)->finalize(gobject); /* empty */ } void ags_task_completion_complete(AgsTaskCompletion *task_completion) { g_return_if_fail(AGS_IS_TASK_COMPLETION(task_completion)); g_object_ref(G_OBJECT(task_completion)); g_signal_emit(G_OBJECT(task_completion), task_completion_signals[COMPLETE], 0); g_object_unref(G_OBJECT(task_completion)); } void ags_task_completion_launch_callback(AgsTask *task, AgsTaskCompletion *task_completion) { g_atomic_int_and(&(task_completion->flags), (~(AGS_TASK_COMPLETION_QUEUED | AGS_TASK_COMPLETION_BUSY))); g_atomic_int_or(&(task_completion->flags), AGS_TASK_COMPLETION_READY); } /** * ags_task_completion_new: * @task: the #AgsTask * @data: pointer to user data * * Create a new #AgsTaskCompletion. * * Returns: the new #AgsTaskCompletion * * Since: 0.4 */ AgsTaskCompletion* ags_task_completion_new(GObject *task, gpointer data) { AgsTaskCompletion *task_completion; task_completion = (AgsTaskCompletion *) g_object_new(AGS_TYPE_TASK_COMPLETION, NULL); task_completion->task = task; g_object_ref(task); task_completion->data = data; return(task_completion); } gsequencer-0.6.37/src/ags/thread/ags_gui_thread.c0000644000175000017500000002157112633221627016624 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include #include #include void ags_gui_thread_class_init(AgsGuiThreadClass *gui_thread); void ags_gui_thread_connectable_interface_init(AgsConnectableInterface *connectable); void ags_gui_thread_init(AgsGuiThread *gui_thread); void ags_gui_thread_connect(AgsConnectable *connectable); void ags_gui_thread_disconnect(AgsConnectable *connectable); void ags_gui_thread_finalize(GObject *gobject); void ags_gui_thread_start(AgsThread *thread); void ags_gui_thread_run(AgsThread *thread); void ags_gui_thread_suspend(AgsThread *thread); void ags_gui_thread_resume(AgsThread *thread); void ags_gui_thread_stop(AgsThread *thread); void ags_gui_thread_suspend_handler(int sig); /** * SECTION:ags_gui_thread * @short_description: gui thread * @title: AgsGuiThread * @section_id: * @include: ags/thread/ags_gui_thread.h * * The #AgsGuiThread acts as graphical user interface thread. */ static gpointer ags_gui_thread_parent_class = NULL; static AgsConnectableInterface *ags_gui_thread_parent_connectable_interface; GType ags_gui_thread_get_type() { static GType ags_type_gui_thread = 0; if(!ags_type_gui_thread){ static const GTypeInfo ags_gui_thread_info = { sizeof (AgsGuiThreadClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_gui_thread_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsGuiThread), 0, /* n_preallocs */ (GInstanceInitFunc) ags_gui_thread_init, }; static const GInterfaceInfo ags_connectable_interface_info = { (GInterfaceInitFunc) ags_gui_thread_connectable_interface_init, NULL, /* interface_finalize */ NULL, /* interface_data */ }; ags_type_gui_thread = g_type_register_static(AGS_TYPE_THREAD, "AgsGuiThread\0", &ags_gui_thread_info, 0); g_type_add_interface_static(ags_type_gui_thread, AGS_TYPE_CONNECTABLE, &ags_connectable_interface_info); } return (ags_type_gui_thread); } void ags_gui_thread_class_init(AgsGuiThreadClass *gui_thread) { GObjectClass *gobject; AgsThreadClass *thread; ags_gui_thread_parent_class = g_type_class_peek_parent(gui_thread); /* GObject */ gobject = (GObjectClass *) gui_thread; gobject->finalize = ags_gui_thread_finalize; /* AgsThread */ thread = (AgsThreadClass *) gui_thread; thread->start = ags_gui_thread_start; thread->run = ags_gui_thread_run; thread->suspend = ags_gui_thread_suspend; thread->resume = ags_gui_thread_resume; thread->stop = ags_gui_thread_stop; } void ags_gui_thread_connectable_interface_init(AgsConnectableInterface *connectable) { ags_gui_thread_parent_connectable_interface = g_type_interface_peek_parent(connectable); connectable->connect = ags_gui_thread_connect; connectable->disconnect = ags_gui_thread_disconnect; } void ags_gui_thread_init(AgsGuiThread *gui_thread) { AgsThread *thread; thread = AGS_THREAD(gui_thread); // g_atomic_int_or(&(thread->flags), // AGS_THREAD_TIMELOCK_RUN); thread->freq = AGS_GUI_THREAD_DEFAULT_JIFFIE; g_cond_init(&(gui_thread->cond)); g_mutex_init(&(gui_thread->mutex)); gui_thread->task_completion = NULL; } void ags_gui_thread_connect(AgsConnectable *connectable) { ags_gui_thread_parent_connectable_interface->connect(connectable); /* empty */ } void ags_gui_thread_disconnect(AgsConnectable *connectable) { ags_gui_thread_parent_connectable_interface->disconnect(connectable); /* empty */ } void ags_gui_thread_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_gui_thread_parent_class)->finalize(gobject); /* empty */ } void ags_gui_thread_start(AgsThread *thread) { AgsGuiThread *gui_thread; /* */ gui_thread = AGS_GUI_THREAD(thread); /* */ if((AGS_THREAD_SINGLE_LOOP & (g_atomic_int_get(&(thread->flags)))) == 0){ AGS_THREAD_CLASS(ags_gui_thread_parent_class)->start(thread); } } void ags_gui_thread_run(AgsThread *thread) { AgsGuiThread *gui_thread; GMainContext *main_context; int success; auto void ags_gui_thread_do_gtk_iteration(); auto void ags_gui_thread_complete_task(); void ags_gui_thread_do_gtk_iteration(){ if((AGS_THREAD_INITIAL_RUN & (g_atomic_int_get(&(thread->flags)))) == 0){ g_main_context_release(main_context); } if(!g_main_context_acquire(main_context)){ gboolean got_ownership = FALSE; while(!got_ownership){ got_ownership = g_main_context_wait(main_context, &(gui_thread->cond), &(gui_thread->mutex)); } } /* */ // success = pthread_mutex_trylock(thread->suspend_mutex); success = FALSE; if(success){ g_atomic_int_set(&(thread->critical_region), TRUE); } /* */ // pthread_mutex_lock(audio_loop->recall_mutex); if(success){ /* */ pthread_mutex_unlock(thread->suspend_mutex); }else{ // g_atomic_int_set(&(thread->critical_region), // TRUE); } /* */ g_main_context_iteration(main_context, FALSE); /* */ // success = pthread_mutex_trylock(thread->suspend_mutex); /* */ // pthread_mutex_unlock(audio_loop->recall_mutex); /* */ // g_atomic_int_set(&(thread->critical_region), // FALSE); if(success){ pthread_mutex_unlock(thread->suspend_mutex); } g_main_context_release(main_context); /* */ if(!g_main_context_acquire(main_context)){ gboolean got_ownership = FALSE; while(!got_ownership){ got_ownership = g_main_context_wait(main_context, &(gui_thread->cond), &(gui_thread->mutex)); } } } void ags_gui_thread_complete_task() { GList *list, *list_next; list = gui_thread->task_completion; while(list != NULL){ list_next = list->next; if((AGS_TASK_COMPLETION_READY & (g_atomic_int_get(&(AGS_TASK_COMPLETION(list->data)->flags)))) != 0){ ags_task_completion_complete(AGS_TASK_COMPLETION(list->data)); gui_thread->task_completion = g_list_remove(gui_thread->task_completion, list->data); } list = list_next; } } gui_thread = AGS_GUI_THREAD(thread); /* */ main_context = g_main_context_default(); ags_gui_thread_do_gtk_iteration(); /* if((AGS_THREAD_INITIAL_RUN & (g_atomic_int_get(&(thread->flags)))) == 0){ g_main_context_release(main_context); } gdk_threads_enter(); gtk_main_iteration_do(FALSE); gdk_threads_leave(); if(!g_main_context_acquire(main_context)){ gboolean got_ownership = FALSE; while(!got_ownership){ got_ownership = g_main_context_wait(main_context, &(gui_thread->cond), &(gui_thread->mutex)); } } */ ags_gui_thread_complete_task(); pango_fc_font_map_cache_clear(pango_cairo_font_map_get_default()); pango_cairo_font_map_set_default(NULL); // cairo_debug_reset_static_data(); // FcFini(); } void ags_gui_thread_suspend(AgsThread *thread) { gboolean success; gboolean critical_region; success = pthread_mutex_trylock(thread->suspend_mutex); critical_region = g_atomic_int_get(&(thread->critical_region)); if(success || critical_region){ if(success){ pthread_mutex_unlock(thread->suspend_mutex); } } } void ags_gui_thread_resume(AgsThread *thread) { gboolean success; gboolean critical_region; success = pthread_mutex_trylock(thread->suspend_mutex); critical_region = g_atomic_int_get(&(thread->critical_region)); if(success || critical_region){ if(success){ pthread_mutex_unlock(thread->suspend_mutex); } } } void ags_gui_thread_stop(AgsThread *thread) { /* */ AGS_THREAD_CLASS(ags_gui_thread_parent_class)->stop(thread); /* */ gdk_flush(); } /** * ags_gui_thread_new: * * Create a new #AgsGuiThread. * * Returns: the new #AgsGuiThread * * Since: 0.4 */ AgsGuiThread* ags_gui_thread_new() { AgsGuiThread *gui_thread; gui_thread = (AgsGuiThread *) g_object_new(AGS_TYPE_GUI_THREAD, NULL); return(gui_thread); } gsequencer-0.6.37/src/midi2ags/0000755000175000017500000000000012633241336013242 500000000000000gsequencer-0.6.37/src/midi2ags/object/0000755000175000017500000000000012633241336014510 500000000000000gsequencer-0.6.37/src/midi2ags/object/ags_marshal.c0000644000175000017500000001642012612232537017060 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #ifdef G_ENABLE_DEBUG #define g_marshal_value_peek_boolean(v) g_value_get_boolean (v) #define g_marshal_value_peek_char(v) g_value_get_schar (v) #define g_marshal_value_peek_uchar(v) g_value_get_uchar (v) #define g_marshal_value_peek_int(v) g_value_get_int (v) #define g_marshal_value_peek_uint(v) g_value_get_uint (v) #define g_marshal_value_peek_long(v) g_value_get_long (v) #define g_marshal_value_peek_ulong(v) g_value_get_ulong (v) #define g_marshal_value_peek_int64(v) g_value_get_int64 (v) #define g_marshal_value_peek_uint64(v) g_value_get_uint64 (v) #define g_marshal_value_peek_enum(v) g_value_get_enum (v) #define g_marshal_value_peek_flags(v) g_value_get_flags (v) #define g_marshal_value_peek_float(v) g_value_get_float (v) #define g_marshal_value_peek_double(v) g_value_get_double (v) #define g_marshal_value_peek_string(v) (char*) g_value_get_string (v) #define g_marshal_value_peek_param(v) g_value_get_param (v) #define g_marshal_value_peek_boxed(v) g_value_get_boxed (v) #define g_marshal_value_peek_pointer(v) g_value_get_pointer (v) #define g_marshal_value_peek_object(v) g_value_get_object (v) #define g_marshal_value_peek_variant(v) g_value_get_variant (v) #else /* !G_ENABLE_DEBUG */ /* WARNING: This code accesses GValues directly, which is UNSUPPORTED API. * Do not access GValues directly in your code. Instead, use the * g_value_get_*() functions */ #define g_marshal_value_peek_boolean(v) (v)->data[0].v_int #define g_marshal_value_peek_char(v) (v)->data[0].v_int #define g_marshal_value_peek_uchar(v) (v)->data[0].v_uint #define g_marshal_value_peek_int(v) (v)->data[0].v_int #define g_marshal_value_peek_uint(v) (v)->data[0].v_uint #define g_marshal_value_peek_long(v) (v)->data[0].v_long #define g_marshal_value_peek_ulong(v) (v)->data[0].v_ulong #define g_marshal_value_peek_int64(v) (v)->data[0].v_int64 #define g_marshal_value_peek_uint64(v) (v)->data[0].v_uint64 #define g_marshal_value_peek_enum(v) (v)->data[0].v_long #define g_marshal_value_peek_flags(v) (v)->data[0].v_ulong #define g_marshal_value_peek_float(v) (v)->data[0].v_float #define g_marshal_value_peek_double(v) (v)->data[0].v_double #define g_marshal_value_peek_string(v) (v)->data[0].v_pointer #define g_marshal_value_peek_param(v) (v)->data[0].v_pointer #define g_marshal_value_peek_boxed(v) (v)->data[0].v_pointer #define g_marshal_value_peek_pointer(v) (v)->data[0].v_pointer #define g_marshal_value_peek_object(v) (v)->data[0].v_pointer #define g_marshal_value_peek_variant(v) (v)->data[0].v_pointer #endif /* !G_ENABLE_DEBUG */ /* INT:VOID (ags_marshallers.list:1) */ void g_cclosure_user_marshal_INT__VOID (GClosure *closure, GValue *return_value G_GNUC_UNUSED, guint n_param_values, const GValue *param_values, gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data) { typedef gint (*GMarshalFunc_INT__VOID) (gpointer data1, gpointer data2); register GMarshalFunc_INT__VOID callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; gint v_return; g_return_if_fail (return_value != NULL); g_return_if_fail (n_param_values == 1); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_INT__VOID) (marshal_data ? marshal_data : cc->callback); v_return = callback (data1, data2); g_value_set_int (return_value, v_return); } /* POINTER:VOID (ags_marshallers.list:2) */ void g_cclosure_user_marshal_POINTER__VOID (GClosure *closure, GValue *return_value G_GNUC_UNUSED, guint n_param_values, const GValue *param_values, gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data) { typedef gpointer (*GMarshalFunc_POINTER__VOID) (gpointer data1, gpointer data2); register GMarshalFunc_POINTER__VOID callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; gpointer v_return; g_return_if_fail (return_value != NULL); g_return_if_fail (n_param_values == 1); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_POINTER__VOID) (marshal_data ? marshal_data : cc->callback); v_return = callback (data1, data2); g_value_set_pointer (return_value, v_return); } /* POINTER:UINT (ags_marshallers.list:3) */ void g_cclosure_user_marshal_POINTER__UINT (GClosure *closure, GValue *return_value G_GNUC_UNUSED, guint n_param_values, const GValue *param_values, gpointer invocation_hint G_GNUC_UNUSED, gpointer marshal_data) { typedef gpointer (*GMarshalFunc_POINTER__UINT) (gpointer data1, guint arg_1, gpointer data2); register GMarshalFunc_POINTER__UINT callback; register GCClosure *cc = (GCClosure*) closure; register gpointer data1, data2; gpointer v_return; g_return_if_fail (return_value != NULL); g_return_if_fail (n_param_values == 2); if (G_CCLOSURE_SWAP_DATA (closure)) { data1 = closure->data; data2 = g_value_peek_pointer (param_values + 0); } else { data1 = g_value_peek_pointer (param_values + 0); data2 = closure->data; } callback = (GMarshalFunc_POINTER__UINT) (marshal_data ? marshal_data : cc->callback); v_return = callback (data1, g_marshal_value_peek_uint (param_values + 1), data2); g_value_set_pointer (return_value, v_return); } gsequencer-0.6.37/src/midi2ags/object/ags_marshal.h0000644000175000017500000000470512612232537017070 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __g_cclosure_user_marshal_MARSHAL_H__ #define __g_cclosure_user_marshal_MARSHAL_H__ #include G_BEGIN_DECLS /* INT:VOID (ags_marshallers.list:1) */ extern void g_cclosure_user_marshal_INT__VOID (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); /* POINTER:VOID (ags_marshallers.list:2) */ extern void g_cclosure_user_marshal_POINTER__VOID (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); /* POINTER:UINT (ags_marshallers.list:3) */ extern void g_cclosure_user_marshal_POINTER__UINT (GClosure *closure, GValue *return_value, guint n_param_values, const GValue *param_values, gpointer invocation_hint, gpointer marshal_data); G_END_DECLS #endif /* __g_cclosure_user_marshal_MARSHAL_H__ */ gsequencer-0.6.37/src/midi2ags/midi/0000755000175000017500000000000012633241336014164 500000000000000gsequencer-0.6.37/src/midi2ags/midi/ags_midi_parser.c0000644000175000017500000014357212626272146017421 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include #include void ags_midi_parser_class_init(AgsMidiParserClass *midi_parser); void ags_midi_parser_init(AgsMidiParser *midi_parser); void ags_midi_parser_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec); void ags_midi_parser_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec); void ags_midi_parser_finalize(GObject *gobject); int ags_midi_parser_real_midi_getc(AgsMidiParser *midi_parser); void ags_midi_parser_real_on_error(AgsMidiParser *midi_parser, GError **error); xmlDoc* ags_midi_parser_real_parse_full(AgsMidiParser *midi_parser); xmlNode* ags_midi_parser_real_parse_header(AgsMidiParser *midi_parser); xmlNode* ags_midi_parser_real_parse_track(AgsMidiParser *midi_parser); xmlNode* ags_midi_parser_real_key_on(AgsMidiParser *midi_parser, guint status); xmlNode* ags_midi_parser_real_key_off(AgsMidiParser *midi_parser, guint status); xmlNode* ags_midi_parser_real_key_pressure(AgsMidiParser *midi_parser, guint status); xmlNode* ags_midi_parser_real_change_parameter(AgsMidiParser *midi_parser, guint status); xmlNode* ags_midi_parser_real_change_pitch_bend(AgsMidiParser *midi_parser, guint status); xmlNode* ags_midi_parser_real_change_program(AgsMidiParser *midi_parser, guint status); xmlNode* ags_midi_parser_real_change_channel_pressure(AgsMidiParser *midi_parser, guint status); xmlNode* ags_midi_parser_real_not_defined(AgsMidiParser *midi_parser, guint status); xmlNode* ags_midi_parser_real_sysex(AgsMidiParser *midi_parser, guint status); xmlNode* ags_midi_parser_real_system_common(AgsMidiParser *midi_parser, guint status); xmlNode* ags_midi_parser_real_meta_event(AgsMidiParser *midi_parser, guint status); xmlNode* ags_midi_parser_real_sequence_number(AgsMidiParser *midi_parser, guint meta_type); xmlNode* ags_midi_parser_real_end_of_track(AgsMidiParser *midi_parser, guint meta_type); xmlNode* ags_midi_parser_real_smpte(AgsMidiParser *midi_parser, guint meta_type); xmlNode* ags_midi_parser_real_tempo(AgsMidiParser *midi_parser, guint meta_type); xmlNode* ags_midi_parser_real_time_signature(AgsMidiParser *midi_parser, guint meta_type); xmlNode* ags_midi_parser_real_key_signature(AgsMidiParser *midi_parser, guint meta_type); xmlNode* ags_midi_parser_real_sequencer_meta_event(AgsMidiParser *midi_parser, guint meta_type); xmlNode* ags_midi_parser_real_text_event(AgsMidiParser *midi_parser, guint meta_type); #define AGS_MIDI_PARSER_MAX_TEXT_LENGTH (4096) #define AGS_MIDI_EVENT "event\0" /** * SECTION:ags_midi_parser * @short_description: the menu bar. * @title: AgsMidiParser * @section_id: * @include: ags/X/ags_midi_parser.h * * #AgsMidiParser reads your midi parsers. */ enum{ PROP_0, PROP_FILE, }; enum{ MIDI_GETC, ON_ERROR, PARSE_FULL, PARSE_HEADER, PARSE_TRACK, KEY_ON, KEY_OFF, KEY_PRESSURE, CHANGE_PARAMETER, CHANGE_PITCH_BEND, CHANGE_PROGRAM, CHANGE_CHANNEL_PRESSURE, NOT_DEFINED, SYSEX, SYSTEM_COMMON, META_EVENT, SEQUENCE_NUMBER, END_OF_TRACK, SMPTE, TEMPO, TIME_SIGNATURE, KEY_SIGNATURE, SEQUENCER_META_EVENT, TEXT_EVENT, LAST_SIGNAL, }; static gpointer ags_midi_parser_parent_class = NULL; static guint midi_parser_signals[LAST_SIGNAL]; GType ags_midi_parser_get_type(void) { static GType ags_type_midi_parser = 0; if(!ags_type_midi_parser){ static const GTypeInfo ags_midi_parser_info = { sizeof (AgsMidiParserClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) ags_midi_parser_class_init, NULL, /* class_finalize */ NULL, /* class_data */ sizeof (AgsMidiParser), 0, /* n_preallocs */ (GInstanceInitFunc) ags_midi_parser_init, }; ags_type_midi_parser = g_type_register_static(G_TYPE_OBJECT, "AgsMidiParser\0", &ags_midi_parser_info, 0); } return(ags_type_midi_parser); } void ags_midi_parser_class_init(AgsMidiParserClass *midi_parser) { GObjectClass *gobject; GParamSpec *param_spec; ags_midi_parser_parent_class = g_type_class_peek_parent(midi_parser); /* GObjectClass */ gobject = (GObjectClass *) midi_parser; gobject->set_property = ags_midi_parser_set_property; gobject->get_property = ags_midi_parser_get_property; gobject->finalize = ags_midi_parser_finalize; /** * AgsMidiParser:dsp-channels: * * The dsp channel count * * Since: 0.4.2 */ param_spec = g_param_spec_pointer("file\0", "the file stream\0", "The file stream to parse\0", G_PARAM_READABLE | G_PARAM_WRITABLE); g_object_class_install_property(gobject, PROP_FILE, param_spec); /* AgsMidiParser */ midi_parser->midi_getc = ags_midi_parser_real_midi_getc; midi_parser->on_error = ags_midi_parser_real_on_error; midi_parser->parse_header = ags_midi_parser_real_parse_header; midi_parser->parse_track = ags_midi_parser_real_parse_track; midi_parser->key_on = ags_midi_parser_real_key_on; midi_parser->key_off = ags_midi_parser_real_key_off; midi_parser->key_pressure = ags_midi_parser_real_key_pressure; midi_parser->change_parameter = ags_midi_parser_real_change_parameter; midi_parser->change_pitch_bend = ags_midi_parser_real_change_pitch_bend; midi_parser->change_program = ags_midi_parser_real_change_program; midi_parser->change_channel_pressure = ags_midi_parser_real_change_channel_pressure; midi_parser->not_defined = ags_midi_parser_real_not_defined; midi_parser->sysex = ags_midi_parser_real_sysex; midi_parser->system_common = ags_midi_parser_real_system_common; midi_parser->meta_event = ags_midi_parser_real_meta_event; midi_parser->sequence_number = ags_midi_parser_real_sequence_number; midi_parser->end_of_track = ags_midi_parser_real_end_of_track; midi_parser->smpte = ags_midi_parser_real_smpte; midi_parser->tempo = ags_midi_parser_real_tempo; midi_parser->time_signature = ags_midi_parser_real_time_signature; midi_parser->key_signature = ags_midi_parser_real_key_signature; midi_parser->sequencer_meta_event = ags_midi_parser_real_sequencer_meta_event; midi_parser->text_event = ags_midi_parser_real_text_event; midi_parser->parse_full = ags_midi_parser_real_parse_full; /* signals */ /** * AgsMidiParser::midi-getc: * @midi_parser: the parser * * Returns: The XML node representing the event * * The ::midi-getc signal is emited during parsing of event. */ midi_parser_signals[MIDI_GETC] = g_signal_new("midi-getc\0", G_TYPE_FROM_CLASS(midi_parser), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsMidiParserClass, midi_getc), NULL, NULL, g_cclosure_user_marshal_INT__VOID, G_TYPE_INT, 0); /** * AgsMidiParser::on-error: * @midi_parser: the parser * * Returns: The XML node representing the event * * The ::on-error signal is emited during parsing of event. */ midi_parser_signals[ON_ERROR] = g_signal_new("on-error\0", G_TYPE_FROM_CLASS(midi_parser), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsMidiParserClass, on_error), NULL, NULL, g_cclosure_user_marshal_POINTER__VOID, G_TYPE_POINTER, 0); /** * AgsMidiParser::parse-header: * @midi_parser: the parser * * Returns: The XML node representing the header * * The ::parse-header signal is emited during parsing of header. */ midi_parser_signals[PARSE_HEADER] = g_signal_new("parse-header\0", G_TYPE_FROM_CLASS(midi_parser), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsMidiParserClass, parse_header), NULL, NULL, g_cclosure_user_marshal_POINTER__VOID, G_TYPE_POINTER, 0); /** * AgsMidiParser::parse-track: * @midi_parser: the parser * * Returns: The XML node representing the track * * The ::parse-track signal is emited during parsing of track. */ midi_parser_signals[PARSE_TRACK] = g_signal_new("parse-track\0", G_TYPE_FROM_CLASS(midi_parser), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsMidiParserClass, parse_track), NULL, NULL, g_cclosure_user_marshal_POINTER__VOID, G_TYPE_POINTER, 0); /** * AgsMidiParser::key-on: * @midi_parser: the parser * * Returns: The XML node representing the event * * The ::key-on signal is emited during parsing of event. */ midi_parser_signals[KEY_ON] = g_signal_new("key-on\0", G_TYPE_FROM_CLASS(midi_parser), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsMidiParserClass, key_on), NULL, NULL, g_cclosure_user_marshal_POINTER__UINT, G_TYPE_POINTER, 1, G_TYPE_UINT); /** * AgsMidiParser::key-off: * @midi_parser: the parser * * Returns: The XML node representing the event * * The ::key-off signal is emited during parsing of event. */ midi_parser_signals[KEY_OFF] = g_signal_new("key-off\0", G_TYPE_FROM_CLASS(midi_parser), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsMidiParserClass, key_off), NULL, NULL, g_cclosure_user_marshal_POINTER__UINT, G_TYPE_POINTER, 1, G_TYPE_UINT); /** * AgsMidiParser::key-pressure: * @midi_parser: the parser * * Returns: The XML node representing the event * * The ::key-pressure signal is emited during parsing of event. */ midi_parser_signals[KEY_PRESSURE] = g_signal_new("key-pressure\0", G_TYPE_FROM_CLASS(midi_parser), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsMidiParserClass, key_pressure), NULL, NULL, g_cclosure_user_marshal_POINTER__UINT, G_TYPE_POINTER, 1, G_TYPE_UINT); /** * AgsMidiParser::change-parameter: * @midi_parser: the parser * * Returns: The XML node representing the event * * The ::change-parameter signal is emited during parsing of event. */ midi_parser_signals[CHANGE_PARAMETER] = g_signal_new("change-parameter\0", G_TYPE_FROM_CLASS(midi_parser), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsMidiParserClass, change_parameter), NULL, NULL, g_cclosure_user_marshal_POINTER__UINT, G_TYPE_POINTER, 1, G_TYPE_UINT); /** * AgsMidiParser::change-pitch-bend: * @midi_parser: the parser * * Returns: The XML node representing the event * * The ::change-pitch-bend signal is emited during parsing of event. */ midi_parser_signals[CHANGE_PITCH_BEND] = g_signal_new("change-pitch-bend\0", G_TYPE_FROM_CLASS(midi_parser), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsMidiParserClass, change_pitch_bend), NULL, NULL, g_cclosure_user_marshal_POINTER__UINT, G_TYPE_POINTER, 1, G_TYPE_UINT); /** * AgsMidiParser::change-program: * @midi_parser: the parser * * Returns: The XML node representing the event * * The ::change-program signal is emited during parsing of event. */ midi_parser_signals[CHANGE_PROGRAM] = g_signal_new("change-program\0", G_TYPE_FROM_CLASS(midi_parser), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsMidiParserClass, change_program), NULL, NULL, g_cclosure_user_marshal_POINTER__UINT, G_TYPE_POINTER, 1, G_TYPE_UINT); /** * AgsMidiParser::change-channel-pressure: * @midi_parser: the parser * * Returns: The XML node representing the event * * The ::change-channel-pressure signal is emited during parsing of event. */ midi_parser_signals[CHANGE_CHANNEL_PRESSURE] = g_signal_new("change-channel-pressure\0", G_TYPE_FROM_CLASS(midi_parser), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsMidiParserClass, change_channel_pressure), NULL, NULL, g_cclosure_user_marshal_POINTER__UINT, G_TYPE_POINTER, 1, G_TYPE_UINT); /** * AgsMidiParser::not-defined: * @midi_parser: the parser * * Returns: The XML node representing the event * * The ::not-defined signal is emited during parsing of event. */ midi_parser_signals[NOT_DEFINED] = g_signal_new("not-defined\0", G_TYPE_FROM_CLASS(midi_parser), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsMidiParserClass, not_defined), NULL, NULL, g_cclosure_user_marshal_POINTER__UINT, G_TYPE_POINTER, 1, G_TYPE_UINT); /** * AgsMidiParser::sysex: * @midi_parser: the parser * * Returns: The XML node representing the event * * The ::sysex signal is emited during parsing of event. */ midi_parser_signals[SYSEX] = g_signal_new("sysex\0", G_TYPE_FROM_CLASS(midi_parser), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsMidiParserClass, sysex), NULL, NULL, g_cclosure_user_marshal_POINTER__UINT, G_TYPE_POINTER, 1, G_TYPE_UINT); /** * AgsMidiParser::system-common: * @midi_parser: the parser * * Returns: The XML node representing the event * * The ::system-common signal is emited during parsing of event. */ midi_parser_signals[SYSTEM_COMMON] = g_signal_new("system-common\0", G_TYPE_FROM_CLASS(midi_parser), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsMidiParserClass, system_common), NULL, NULL, g_cclosure_user_marshal_POINTER__UINT, G_TYPE_POINTER, 1, G_TYPE_UINT); /** * AgsMidiParser::meta-event: * @midi_parser: the parser * * Returns: The XML node representing the event * * The ::meta-event signal is emited during parsing of event. */ midi_parser_signals[META_EVENT] = g_signal_new("meta-event\0", G_TYPE_FROM_CLASS(midi_parser), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsMidiParserClass, meta_event), NULL, NULL, g_cclosure_user_marshal_POINTER__UINT, G_TYPE_POINTER, 1, G_TYPE_UINT); /** * AgsMidiParser::sequence-number: * @midi_parser: the parser * * Returns: The XML node representing the event * * The ::sequence-number signal is emited during parsing of event. */ midi_parser_signals[SEQUENCE_NUMBER] = g_signal_new("sequence-number\0", G_TYPE_FROM_CLASS(midi_parser), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsMidiParserClass, sequence_number), NULL, NULL, g_cclosure_user_marshal_POINTER__UINT, G_TYPE_POINTER, 1, G_TYPE_UINT); /** * AgsMidiParser::end-of-track: * @midi_parser: the parser * * Returns: The XML node representing the event * * The ::end-of-track signal is emited during parsing of event. */ midi_parser_signals[END_OF_TRACK] = g_signal_new("end-of-track\0", G_TYPE_FROM_CLASS(midi_parser), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsMidiParserClass, end_of_track), NULL, NULL, g_cclosure_user_marshal_POINTER__UINT, G_TYPE_POINTER, 1, G_TYPE_UINT); /** * AgsMidiParser::smpte: * @midi_parser: the parser * * Returns: The XML node representing the event * * The ::smpte signal is emited during parsing of event. */ midi_parser_signals[SMPTE] = g_signal_new("smpte\0", G_TYPE_FROM_CLASS(midi_parser), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsMidiParserClass, smpte), NULL, NULL, g_cclosure_user_marshal_POINTER__UINT, G_TYPE_POINTER, 1, G_TYPE_UINT); /** * AgsMidiParser::tempo: * @midi_parser: the parser * * Returns: The XML node representing the event * * The ::tempo signal is emited during parsing of event. */ midi_parser_signals[TEMPO] = g_signal_new("tempo\0", G_TYPE_FROM_CLASS(midi_parser), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsMidiParserClass, tempo), NULL, NULL, g_cclosure_user_marshal_POINTER__UINT, G_TYPE_POINTER, 1, G_TYPE_UINT); /** * AgsMidiParser::time-signature: * @midi_parser: the parser * * Returns: The XML node representing the event * * The ::time-signature signal is emited during parsing of event. */ midi_parser_signals[TIME_SIGNATURE] = g_signal_new("time-signature\0", G_TYPE_FROM_CLASS(midi_parser), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsMidiParserClass, time_signature), NULL, NULL, g_cclosure_user_marshal_POINTER__UINT, G_TYPE_POINTER, 1, G_TYPE_UINT); /** * AgsMidiParser::key-signature: * @midi_parser: the parser * * Returns: The XML node representing the event * * The ::key-signature signal is emited during parsing of event. */ midi_parser_signals[KEY_SIGNATURE] = g_signal_new("key-signature\0", G_TYPE_FROM_CLASS(midi_parser), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsMidiParserClass, key_signature), NULL, NULL, g_cclosure_user_marshal_POINTER__UINT, G_TYPE_POINTER, 1, G_TYPE_UINT); /** * AgsMidiParser::sequencer-meta-event: * @midi_parser: the parser * * Returns: The XML node representing the event * * The ::sequencer-meta-event signal is emited during parsing of event. */ midi_parser_signals[SEQUENCER_META_EVENT] = g_signal_new("sequencer-meta-event\0", G_TYPE_FROM_CLASS(midi_parser), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsMidiParserClass, sequencer_meta_event), NULL, NULL, g_cclosure_user_marshal_POINTER__UINT, G_TYPE_POINTER, 1, G_TYPE_UINT); /** * AgsMidiParser::text-event: * @midi_parser: the parser * * Returns: The XML node representing the event * * The ::text-event signal is emited during parsing of event. */ midi_parser_signals[TEXT_EVENT] = g_signal_new("text-event\0", G_TYPE_FROM_CLASS(midi_parser), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsMidiParserClass, text_event), NULL, NULL, g_cclosure_user_marshal_POINTER__UINT, G_TYPE_POINTER, 1, G_TYPE_UINT); /** * AgsMidiParser::parse-full: * @midi_parser: the parser * * Returns: The XML node representing the event * * The ::parse-full signal is emited during parsing of midi file. */ midi_parser_signals[PARSE_FULL] = g_signal_new("parse-full\0", G_TYPE_FROM_CLASS(midi_parser), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(AgsMidiParserClass, parse_full), NULL, NULL, g_cclosure_user_marshal_POINTER__VOID, G_TYPE_POINTER, 0); } void ags_midi_parser_init(AgsMidiParser *midi_parser) { midi_parser->flags = 0; midi_parser->file = NULL; midi_parser->nth_chunk = 0; midi_parser->file_length = 0; midi_parser->offset = 0; midi_parser->current_time = 0; midi_parser->doc = NULL; } void ags_midi_parser_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsMidiParser *midi_parser; midi_parser = AGS_MIDI_PARSER(gobject); switch(prop_id){ case PROP_FILE: { midi_parser->file = g_value_get_pointer(value); } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_midi_parser_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsMidiParser *midi_parser; midi_parser = AGS_MIDI_PARSER(gobject); switch(prop_id){ case PROP_FILE: { g_value_set_pointer(value, midi_parser->file); } default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } } void ags_midi_parser_finalize(GObject *gobject) { G_OBJECT_CLASS(ags_midi_parser_parent_class)->finalize(gobject); } gint16 ags_midi_parser_read_gint16(AgsMidiParser *midi_parser) { char str[2]; gint16 value = 0; str[0] = (char) 0xff & ags_midi_parser_midi_getc(midi_parser); str[1] = (char) 0xff & ags_midi_parser_midi_getc(midi_parser); value = (str[0] & 0xff); value = (value<<8) + (str[1] & 0xff); return(value); } gint32 ags_midi_parser_read_gint24(AgsMidiParser *midi_parser) { char str[4]; gint32 value = 0; str[0] = (char) 0x00; str[1] = (char) 0xff & ags_midi_parser_midi_getc(midi_parser); str[2] = (char) 0xff & ags_midi_parser_midi_getc(midi_parser); str[3] = (char) 0xff & ags_midi_parser_midi_getc(midi_parser); value = (value<<8) + (str[1] & 0xff); value = (value<<8) + (str[2] & 0xff); value = (value<<8) + (str[3] & 0xff); return(value); } gint32 ags_midi_parser_read_gint32(AgsMidiParser *midi_parser) { char str[4]; gint32 value; str[0] = (char) 0xff & ags_midi_parser_midi_getc(midi_parser); str[1] = (char) 0xff & ags_midi_parser_midi_getc(midi_parser); str[2] = (char) 0xff & ags_midi_parser_midi_getc(midi_parser); str[3] = (char) 0xff & ags_midi_parser_midi_getc(midi_parser); value = (str[0] & 0xff); value = (value<<8) + (str[1] & 0xff); value = (value<<8) + (str[2] & 0xff); value = (value<<8) + (str[3] & 0xff); return(value); } long ags_midi_parser_read_varlength(AgsMidiParser *midi_parser) { long value; guint i; char c; c = ags_midi_parser_midi_getc(midi_parser); value = c; i = 1; if(c & 0x80){ value &= 0x7F; do{ value = (value << 7) + ((c = ags_midi_parser_midi_getc(midi_parser)) & 0x7F); i++; }while(c & 0x80); } return(value); } gchar* ags_midi_parser_read_text(AgsMidiParser *midi_parser, gint length) { gchar text[AGS_MIDI_PARSER_MAX_TEXT_LENGTH]; gchar c; guint i; memset(text, 0, AGS_MIDI_PARSER_MAX_TEXT_LENGTH * sizeof(char)); i = 0; while((length <= 0 || i < length) && (c = (char) 0xff & ags_midi_parser_midi_getc(midi_parser)) != EOF){ if(c == '\0' || !(g_ascii_isalnum(c) || g_ascii_ispunct(c) || c == ' ')){ break; } text[i] = c; i++; } text[i] = '\0'; return(g_strdup(text)); } gdouble ags_midi_parser_ticks_to_sec(AgsMidiParser *midi_parser, guint ticks, gint division, guint tempo) { gdouble retval; if(division > 0){ retval = ((gdouble) ticks * tempo) / (gdouble) (division * 1000000.0); return(retval); }else{ gdouble smpte_format, smpte_resolution; smpte_format = (gdouble) ((0xff00 & division) >> 8); smpte_resolution = (gdouble) (0xff & division); retval = (((gdouble) ticks) / (gdouble) (smpte_format * smpte_resolution * 1000000.0)); return(retval); } } int ags_midi_parser_midi_getc(AgsMidiParser *midi_parser) { int c; g_return_val_if_fail(AGS_IS_MIDI_PARSER(midi_parser), '\0'); g_object_ref((GObject *) midi_parser); g_signal_emit(G_OBJECT(midi_parser), midi_parser_signals[MIDI_GETC], 0, &c); g_object_unref((GObject *) midi_parser); return(c); } int ags_midi_parser_real_midi_getc(AgsMidiParser *midi_parser) { int c; c = fgetc(midi_parser->file); if(c == EOF){ g_warning("reached end of file\0"); midi_parser->flags |= AGS_MIDI_PARSER_EOF; } return(c); } void ags_midi_parser_on_error(AgsMidiParser *midi_parser, GError **error) { g_return_if_fail(AGS_IS_MIDI_PARSER(midi_parser)); g_object_ref((GObject *) midi_parser); g_signal_emit(G_OBJECT(midi_parser), midi_parser_signals[ON_ERROR], 0, error); g_object_unref((GObject *) midi_parser); } void ags_midi_parser_real_on_error(AgsMidiParser *midi_parser, GError **error) { } xmlDoc* ags_midi_parser_parse_full(AgsMidiParser *midi_parser) { xmlDoc *doc; g_return_val_if_fail(AGS_IS_MIDI_PARSER(midi_parser), NULL); g_object_ref((GObject *) midi_parser); g_signal_emit(G_OBJECT(midi_parser), midi_parser_signals[PARSE_FULL], 0, &doc); g_object_unref((GObject *) midi_parser); return(doc); } xmlDoc* ags_midi_parser_real_parse_full(AgsMidiParser *midi_parser) { xmlDoc *doc; xmlNode *root_node; xmlNode *tracks_node; xmlNode *current; GError *error; midi_parser->doc = doc = xmlNewDoc("1.0\0"); root_node = xmlNewNode(NULL, "midi\0"); xmlDocSetRootElement(doc, root_node); tracks_node = xmlNewNode(NULL, "midi-tracks\0"); error = NULL; current = ags_midi_parser_parse_header(midi_parser); xmlAddChild(root_node, current); #ifdef DEBUG g_message("parsed header\0"); #endif xmlAddChild(root_node, tracks_node); while(((AGS_MIDI_PARSER_EOF & (midi_parser->flags))) == 0){ current = ags_midi_parser_parse_track(midi_parser); if(current != NULL){ xmlAddChild(tracks_node, current); #ifdef DEBUG g_message("parsed track\0"); #endif }else{ g_warning("skipped input\0"); } } return(doc); } xmlNode* ags_midi_parser_parse_header(AgsMidiParser *midi_parser) { xmlNode *node; g_return_val_if_fail(AGS_IS_MIDI_PARSER(midi_parser), NULL); g_object_ref((GObject *) midi_parser); g_signal_emit(G_OBJECT(midi_parser), midi_parser_signals[PARSE_HEADER], 0, &node); g_object_unref((GObject *) midi_parser); return(node); } xmlNode* ags_midi_parser_real_parse_header(AgsMidiParser *midi_parser) { xmlNode *node; static gchar header[] = "MThd"; guint format; guint count; guint division; guint offset; guint times; guint beat, clicks; guint n; gchar c; n = 0; while(n < 4 && (AGS_MIDI_PARSER_EOF & (midi_parser->flags)) == 0){ c = ags_midi_parser_midi_getc(midi_parser); if(c == header[n]){ n++; }else{ n = 0; } } node = xmlNewNode(NULL, "midi-header\0"); offset = (guint) ags_midi_parser_read_gint32(midi_parser); format = (guint) ags_midi_parser_read_gint16(midi_parser); count = (guint) ags_midi_parser_read_gint16(midi_parser); division = (guint) ags_midi_parser_read_gint16(midi_parser); xmlNewProp(node, "format\0", g_strdup_printf("%d\0", format)); if(division & 0x8000){ /* SMPTE */ times = 0; /* Can't do beats */ xmlNewProp(node, "division\0", g_strdup_printf("%d %d\0", -((-(division>>8))&0xff), division&0xff)); }else{ xmlNewProp(node, "division\0", g_strdup_printf("%d\0", division)); } if(format > 2){ fprintf(stderr, "Can't deal with format %d files\n", format); exit(-1); } beat = clicks = division; xmlNewProp(node, "beat\0", g_strdup_printf("%d\0", beat)); xmlNewProp(node, "track-count\0", g_strdup_printf("%d\0", count)); return(node); } xmlNode* ags_midi_parser_parse_track(AgsMidiParser *midi_parser) { xmlNode *node; g_return_val_if_fail(AGS_IS_MIDI_PARSER(midi_parser), NULL); g_object_ref((GObject *) midi_parser); g_signal_emit(G_OBJECT(midi_parser), midi_parser_signals[PARSE_TRACK], 0, &node); g_object_unref((GObject *) midi_parser); return(node); } xmlNode* ags_midi_parser_real_parse_track(AgsMidiParser *midi_parser) { xmlNode *node, *current; static gchar track[] = "MTrk"; gint offset, start_offset; long delta_time; guint status; guint n; gchar c; n = 0; while(n < 4 && (AGS_MIDI_PARSER_EOF & (midi_parser->flags)) == 0){ c = ags_midi_parser_midi_getc(midi_parser); if(c == track[n]){ n++; }else{ n = 0; } } if((AGS_MIDI_PARSER_EOF & (midi_parser->flags)) != 0){ return(NULL); } node = xmlNewNode(NULL, "midi-track\0"); offset = ags_midi_parser_read_gint32(midi_parser); #ifdef DEBUG g_message("n = %d\noffset = %d\0", n, offset); #endif start_offset = ftell(midi_parser->file); if(offset < 0){ return(NULL); } midi_parser->current_time = 0; for(; ftell(midi_parser->file) < start_offset + offset; ){ delta_time = ags_midi_parser_read_varlength(midi_parser); midi_parser->current_time += delta_time; status = ags_midi_parser_midi_getc(midi_parser); if((0xf0 & (0xf0 & status)) != 0xf0){ current = ags_midi_parser_channel_message(midi_parser, status); if(current != NULL){ xmlNewProp(current, "delta-time\0", g_strdup_printf("%d\0", midi_parser->current_time)); xmlAddChild(node, current); } #ifdef DEBUG g_message("channel message"); #endif }else{ #ifdef DEBUG g_message("status message"); #endif switch(status){ case 0xf0: { /* start of system exclusive */ ags_midi_parser_sysex(midi_parser, status); } case 0xf1: case 0xf2: case 0xf3: case 0xf4: case 0xf5: case 0xf6: { ags_midi_parser_system_common(midi_parser, status); } break; case 0xf7: { /* sysex continuation or arbitrary stuff */ #ifdef DEBUG g_message("sysex end\0"); #endif } break; case 0xff: { /* meta event */ current = ags_midi_parser_meta_event(midi_parser, status); if(current != NULL){ xmlNewProp(current, "delta-time\0", g_strdup_printf("%d\0", midi_parser->current_time)); xmlAddChild(node, current); } } break; default: g_warning("bad byte\0"); break; } } } return(node); } xmlNode* ags_midi_parser_channel_message(AgsMidiParser *midi_parser, guint status) { xmlNode *node; node = NULL; switch(status & 0xf0){ case 0x80: { node = ags_midi_parser_key_off(midi_parser, status); } break; case 0x90: { node = ags_midi_parser_key_on(midi_parser, status); } break; case 0xa0: { node = ags_midi_parser_key_pressure(midi_parser, status); } break; case 0xb0: { node = ags_midi_parser_change_parameter(midi_parser, status); } break; case 0xc0: { node = ags_midi_parser_change_program(midi_parser, status); } break; case 0xd0: { node = ags_midi_parser_change_channel_pressure(midi_parser, status); } break; case 0xe0: { node = ags_midi_parser_change_pitch_bend(midi_parser, status); } break; } return(node); } xmlNode* ags_midi_parser_real_key_on(AgsMidiParser *midi_parser, guint status) { xmlNode *node; int channel, note, velocity; channel = 0xf & status; note = (0x7f) & ags_midi_parser_midi_getc(midi_parser); velocity = (0x7f) & ags_midi_parser_midi_getc(midi_parser); node = xmlNewNode(NULL, "midi-message\0"); xmlNewProp(node, AGS_MIDI_EVENT, "note-on\0"); xmlNewProp(node, "key\0", g_strdup_printf("%d\0", channel)); xmlNewProp(node, "note\0", g_strdup_printf("%d\0", note)); xmlNewProp(node, "velocity\0", g_strdup_printf("%d\0", velocity)); return(node); } xmlNode* ags_midi_parser_key_on(AgsMidiParser *midi_parser, guint status) { xmlNode *node; g_return_val_if_fail(AGS_IS_MIDI_PARSER(midi_parser), NULL); g_object_ref((GObject *) midi_parser); g_signal_emit(G_OBJECT(midi_parser), midi_parser_signals[KEY_ON], 0, status, &node); g_object_unref((GObject *) midi_parser); return(node); } xmlNode* ags_midi_parser_real_key_off(AgsMidiParser *midi_parser, guint status) { xmlNode *node; int channel, note, velocity; channel = 0xf & status; note = (0x7f) & ags_midi_parser_midi_getc(midi_parser); velocity = (0x7f) & ags_midi_parser_midi_getc(midi_parser); node = xmlNewNode(NULL, "midi-message\0"); xmlNewProp(node, AGS_MIDI_EVENT, "note-off\0"); xmlNewProp(node, "key\0", g_strdup_printf("%d\0", channel)); xmlNewProp(node, "note\0", g_strdup_printf("%d\0", note)); xmlNewProp(node, "velocity\0", g_strdup_printf("%d\0", velocity)); return(node); } xmlNode* ags_midi_parser_key_off(AgsMidiParser *midi_parser, guint status) { xmlNode *node; g_return_val_if_fail(AGS_IS_MIDI_PARSER(midi_parser), NULL); g_object_ref((GObject *) midi_parser); g_signal_emit(G_OBJECT(midi_parser), midi_parser_signals[KEY_OFF], 0, status, &node); g_object_unref((GObject *) midi_parser); return(node); } xmlNode* ags_midi_parser_real_key_pressure(AgsMidiParser *midi_parser, guint status) { xmlNode *node; int channel, note, pressure; channel = 0xf & status; note = 0x7f & ags_midi_parser_midi_getc(midi_parser); pressure = 0x7f & ags_midi_parser_midi_getc(midi_parser); node = xmlNewNode(NULL, "midi-message\0"); xmlNewProp(node, AGS_MIDI_EVENT, "polyphonic\0"); xmlNewProp(node, "key\0", g_strdup_printf("%d\0", channel)); xmlNewProp(node, "note\0", g_strdup_printf("%d\0", note)); xmlNewProp(node, "pressure\0", g_strdup_printf("%d\0", pressure)); return(node); } xmlNode* ags_midi_parser_key_pressure(AgsMidiParser *midi_parser, guint status) { xmlNode *node; g_return_val_if_fail(AGS_IS_MIDI_PARSER(midi_parser), NULL); g_object_ref((GObject *) midi_parser); g_signal_emit(G_OBJECT(midi_parser), midi_parser_signals[KEY_PRESSURE], 0, status, &node); g_object_unref((GObject *) midi_parser); return(node); } xmlNode* ags_midi_parser_real_change_parameter(AgsMidiParser *midi_parser, guint status) { xmlNode *node; int channel, control, value; channel = 0xf & status; control = 0x7f & ags_midi_parser_midi_getc(midi_parser); value = 0x7f & ags_midi_parser_midi_getc(midi_parser); node = xmlNewNode(NULL, "midi-message\0"); if(control < 120){ xmlNewProp(node, AGS_MIDI_EVENT, "change-parameter\0"); xmlNewProp(node, "channel\0", g_strdup_printf("%d\0", channel)); xmlNewProp(node, "control\0", g_strdup_printf("%d\0", control)); xmlNewProp(node, "value\0", g_strdup_printf("%d\0", value)); }else{ xmlNewProp(node, AGS_MIDI_EVENT, "change-mode\0"); xmlNewProp(node, "channel\0", g_strdup_printf("%d\0", channel)); switch(control){ case 120: { xmlNewProp(node, "mode\0", "all-sound-off\0"); } break; case 121: { xmlNewProp(node, "mode\0", "reset-control-all\0"); xmlNewProp(node, "value\0", g_strdup_printf("%d\0", value)); } break; case 122: { if(value == 0){ xmlNewProp(node, "mode\0", "local-control-off\0"); }else{ xmlNewProp(node, "mode\0", "local-control-on\0"); } } break; case 123: { xmlNewProp(node, "mode\0", "all-notes-off"); } break; case 124: { xmlNewProp(node, "mode\0", "omni-mode-on"); } break; case 125: { xmlNewProp(node, "mode\0", "omni-mode-off\0"); } break; case 126: { xmlNewProp(node, "mode\0", "mono-mode-on\0"); xmlNewProp(node, "omni-off-channels\0", g_strdup_printf("%d\0", value)); } break; case 127: { xmlNewProp(node, "mode\0", "poly-mode-on\0"); } break; } } return(node); } xmlNode* ags_midi_parser_change_parameter(AgsMidiParser *midi_parser, guint status) { xmlNode *node; g_return_val_if_fail(AGS_IS_MIDI_PARSER(midi_parser), NULL); g_object_ref((GObject *) midi_parser); g_signal_emit(G_OBJECT(midi_parser), midi_parser_signals[CHANGE_PARAMETER], 0, status, &node); g_object_unref((GObject *) midi_parser); return(node); } xmlNode* ags_midi_parser_real_change_pitch_bend(AgsMidiParser *midi_parser, guint status) { xmlNode *node; int channel, pitch, transmitter; channel = 0xf & status; pitch = 0x7f & ags_midi_parser_midi_getc(midi_parser); transmitter = 0x7f & ags_midi_parser_midi_getc(midi_parser); node = xmlNewNode(NULL, "midi-message\0"); xmlNewProp(node, "channel\0", g_strdup_printf("%d\0", channel)); xmlNewProp(node, AGS_MIDI_EVENT, "pitch-bend\0"); xmlNewProp(node, "pitch\0", g_strdup_printf("%d\0", pitch)); xmlNewProp(node, "transmitter\0", g_strdup_printf("%d\0", transmitter)); return(node); } xmlNode* ags_midi_parser_change_pitch_bend(AgsMidiParser *midi_parser, guint status) { xmlNode *node; g_return_val_if_fail(AGS_IS_MIDI_PARSER(midi_parser), NULL); g_object_ref((GObject *) midi_parser); g_signal_emit(G_OBJECT(midi_parser), midi_parser_signals[CHANGE_PITCH_BEND], 0, status, &node); g_object_unref((GObject *) midi_parser); return(node); } xmlNode* ags_midi_parser_real_change_program(AgsMidiParser *midi_parser, guint status) { xmlNode *node; int channel, program; channel = 0xf & status; program = 0x7f & ags_midi_parser_midi_getc(midi_parser); node = xmlNewNode(NULL, "midi-message\0"); xmlNewProp(node, AGS_MIDI_EVENT, "program-change\0"); xmlNewProp(node, "channel\0", g_strdup_printf("%d\0", channel)); xmlNewProp(node, "program\0", g_strdup_printf("%d\0", program)); return(node); } xmlNode* ags_midi_parser_change_program(AgsMidiParser *midi_parser, guint status) { xmlNode *node; g_return_val_if_fail(AGS_IS_MIDI_PARSER(midi_parser), NULL); g_object_ref((GObject *) midi_parser); g_signal_emit(G_OBJECT(midi_parser), midi_parser_signals[CHANGE_PROGRAM], 0, status, &node); g_object_unref((GObject *) midi_parser); return(node); } xmlNode* ags_midi_parser_real_change_channel_pressure(AgsMidiParser *midi_parser, guint status) { xmlNode *node; int channel, pressure; channel = 0xf & status; pressure = 0x7f & ags_midi_parser_midi_getc(midi_parser); node = xmlNewNode(NULL, "midi-message\0"); xmlNewProp(node, AGS_MIDI_EVENT, "channel-pressure\0"); xmlNewProp(node, "channel\0", g_strdup_printf("%d\0", channel)); xmlNewProp(node, "pressure\0", g_strdup_printf("%d\0", pressure)); return(node); } xmlNode* ags_midi_parser_change_channel_pressure(AgsMidiParser *midi_parser, guint status) { xmlNode *node; g_return_val_if_fail(AGS_IS_MIDI_PARSER(midi_parser), NULL); g_object_ref((GObject *) midi_parser); g_signal_emit(G_OBJECT(midi_parser), midi_parser_signals[CHANGE_CHANNEL_PRESSURE], 0, status, &node); g_object_unref((GObject *) midi_parser); return(node); } xmlNode* ags_midi_parser_real_not_defined(AgsMidiParser *midi_parser, guint status) { return(NULL); } xmlNode* ags_midi_parser_not_defined(AgsMidiParser *midi_parser, guint status) { xmlNode *node; g_return_val_if_fail(AGS_IS_MIDI_PARSER(midi_parser), NULL); g_object_ref((GObject *) midi_parser); g_signal_emit(G_OBJECT(midi_parser), midi_parser_signals[NOT_DEFINED], 0, status, &node); g_object_unref((GObject *) midi_parser); return(node); } xmlNode* ags_midi_parser_real_sysex(AgsMidiParser *midi_parser, guint status) { xmlNode *node; gchar c; while((c = ags_midi_parser_midi_getc(midi_parser)) != 0xf7 && c != EOF); #ifdef DEBUG g_message("discarded sysex\0"); #endif } xmlNode* ags_midi_parser_sysex(AgsMidiParser *midi_parser, guint status) { xmlNode *node; g_return_val_if_fail(AGS_IS_MIDI_PARSER(midi_parser), NULL); g_object_ref((GObject *) midi_parser); g_signal_emit(G_OBJECT(midi_parser), midi_parser_signals[SYSEX], 0, status, &node); g_object_unref((GObject *) midi_parser); return(node); } xmlNode* ags_midi_parser_real_system_common(AgsMidiParser *midi_parser, guint status) { xmlNode *node; int c; node = NULL; switch(status){ case 0xf1: { guint quarter_frame; quarter_frame = 0xff & (ags_midi_parser_midi_getc(midi_parser)); } break; case 0xf2: { guint song_position; song_position = 0x7f & (ags_midi_parser_midi_getc(midi_parser)) << 7; song_position = 0x7f & (ags_midi_parser_midi_getc(midi_parser)); } break; case 0xf3: { guint song_select; song_select = 0x7f & (ags_midi_parser_midi_getc(midi_parser)); } break; case 0xf4: { #ifdef DEBUG g_message("undefined\0"); #endif } break; case 0xf5: { #ifdef DEBUG g_message("undefined\0"); #endif } break; case 0xf6: { #ifdef DEBUG g_message("tune request\0"); #endif } break; } return(node); } xmlNode* ags_midi_parser_system_common(AgsMidiParser *midi_parser, guint status) { xmlNode *node; g_return_val_if_fail(AGS_IS_MIDI_PARSER(midi_parser), NULL); g_object_ref((GObject *) midi_parser); g_signal_emit(G_OBJECT(midi_parser), midi_parser_signals[SYSTEM_COMMON], 0, status, &node); g_object_unref((GObject *) midi_parser); return(node); } xmlNode* ags_midi_parser_real_meta_event(AgsMidiParser *midi_parser, guint status) { xmlNode *node; char chunk_meta_length[4]; guint meta_type; meta_type = 0xff & (ags_midi_parser_midi_getc(midi_parser)); midi_parser->offset += 1; node = NULL; switch(meta_type){ case 0x00: { int c; c = ags_midi_parser_midi_getc(midi_parser); if(c == 0x02){ node = ags_midi_parser_sequence_number(midi_parser, meta_type); } } break; case 0x01: /* Text event */ case 0x02: /* Copyright notice */ case 0x03: /* Sequence/Track name */ case 0x04: /* Instrument name */ case 0x05: /* Lyric */ case 0x06: /* Marker */ case 0x07: /* Cue point */ case 0x08: case 0x09: case 0x0a: case 0x0b: case 0x0c: case 0x0d: case 0x0e: case 0x0f: { /* These are all text events */ node = ags_midi_parser_text_event(midi_parser, meta_type); } break; case 0x2f: { int c; c = ags_midi_parser_midi_getc(midi_parser); if(c == 0x0){ /* End of Track */ node = ags_midi_parser_end_of_track(midi_parser, meta_type); } } break; case 0x51: { int c; c = ags_midi_parser_midi_getc(midi_parser); if(c == 0x03){ /* Set tempo */ node = ags_midi_parser_tempo(midi_parser, meta_type); } } break; case 0x54: { int c; c = ags_midi_parser_midi_getc(midi_parser); if(c == 0x05){ node = ags_midi_parser_smpte(midi_parser, meta_type); } } break; case 0x58: { int c; c = ags_midi_parser_midi_getc(midi_parser); if(c == 0x04){ node = ags_midi_parser_time_signature(midi_parser, meta_type); } } break; case 0x59: { int c; c = ags_midi_parser_midi_getc(midi_parser); if(c == 0x02){ node = ags_midi_parser_key_signature(midi_parser, meta_type); } } break; case 0x7f: { node = ags_midi_parser_sequencer_meta_event(midi_parser, meta_type); } break; default: { node = xmlNewNode(NULL, "midi-message\0"); xmlNewProp(node, AGS_MIDI_EVENT, "misc\0"); } } #ifdef DEBUG g_message("meta type 0x%x\0", meta_type); #endif return(node); } xmlNode* ags_midi_parser_meta_event(AgsMidiParser *midi_parser, guint status) { xmlNode *node; g_return_val_if_fail(AGS_IS_MIDI_PARSER(midi_parser), NULL); g_object_ref((GObject *) midi_parser); g_signal_emit(G_OBJECT(midi_parser), midi_parser_signals[META_EVENT], 0, status, &node); g_object_unref((GObject *) midi_parser); return(node); } xmlNode* ags_midi_parser_real_sequence_number(AgsMidiParser *midi_parser, guint meta_type) { xmlNode *node; guint sequence; node = xmlNewNode(NULL, "midi-message\0"); sequence = (guint) ags_midi_parser_read_gint16(midi_parser); xmlNewProp(node, AGS_MIDI_EVENT, "sequence-number\0"); xmlNewProp(node, "sequence\0", g_strdup_printf("%d\0", sequence)); return(node); } xmlNode* ags_midi_parser_sequence_number(AgsMidiParser *midi_parser, guint meta_type) { xmlNode *node; g_return_val_if_fail(AGS_IS_MIDI_PARSER(midi_parser), NULL); g_object_ref((GObject *) midi_parser); g_signal_emit(G_OBJECT(midi_parser), midi_parser_signals[SEQUENCE_NUMBER], 0, meta_type, &node); g_object_unref((GObject *) midi_parser); return(node); } xmlNode* ags_midi_parser_real_end_of_track(AgsMidiParser *midi_parser, guint meta_type) { xmlNode *node; node = xmlNewNode(NULL, "midi-message\0"); xmlNewProp(node, AGS_MIDI_EVENT, "end-of-track\0"); return(node); } xmlNode* ags_midi_parser_end_of_track(AgsMidiParser *midi_parser, guint meta_type) { xmlNode *node; g_return_val_if_fail(AGS_IS_MIDI_PARSER(midi_parser), NULL); g_object_ref((GObject *) midi_parser); g_signal_emit(G_OBJECT(midi_parser), midi_parser_signals[END_OF_TRACK], 0, meta_type, &node); g_object_unref((GObject *) midi_parser); return(node); } xmlNode* ags_midi_parser_real_smpte(AgsMidiParser *midi_parser, guint meta_type) { xmlNode *node; int hr, mn, se, fr, ff; node = xmlNewNode(NULL, "midi-message\0"); hr = ags_midi_parser_midi_getc(midi_parser); mn = ags_midi_parser_midi_getc(midi_parser); se = ags_midi_parser_midi_getc(midi_parser); fr = ags_midi_parser_midi_getc(midi_parser); ff = ags_midi_parser_midi_getc(midi_parser); xmlNewProp(node, AGS_MIDI_EVENT, "smpte\0"); xmlNewProp(node, "timestamp\0", g_strdup_printf("%d %d %d %d %d\0", hr, mn, se, fr, ff)); return(node); } xmlNode* ags_midi_parser_smpte(AgsMidiParser *midi_parser, guint meta_type) { xmlNode *node; g_return_val_if_fail(AGS_IS_MIDI_PARSER(midi_parser), NULL); g_object_ref((GObject *) midi_parser); g_signal_emit(G_OBJECT(midi_parser), midi_parser_signals[SMPTE], 0, meta_type, &node); g_object_unref((GObject *) midi_parser); return(node); } xmlNode* ags_midi_parser_real_tempo(AgsMidiParser *midi_parser, guint meta_type) { xmlNode *node; gint tempo; node = xmlNewNode(NULL, "midi-message\0"); tempo = ags_midi_parser_read_gint24(midi_parser); xmlNewProp(node, AGS_MIDI_EVENT, "tempo-number\0"); xmlNewProp(node, "tempo\0", g_strdup_printf("%ld\0", tempo)); return(node); } xmlNode* ags_midi_parser_tempo(AgsMidiParser *midi_parser, guint meta_type) { xmlNode *node; g_return_val_if_fail(AGS_IS_MIDI_PARSER(midi_parser), NULL); g_object_ref((GObject *) midi_parser); g_signal_emit(G_OBJECT(midi_parser), midi_parser_signals[TEMPO], 0, meta_type, &node); g_object_unref((GObject *) midi_parser); return(node); } xmlNode* ags_midi_parser_real_time_signature(AgsMidiParser *midi_parser, guint meta_type) { xmlNode *node; int nn, dd, cc, bb; int denom = 1; node = xmlNewNode(NULL, "midi-message\0"); nn = ags_midi_parser_midi_getc(midi_parser); dd = ags_midi_parser_midi_getc(midi_parser); cc = ags_midi_parser_midi_getc(midi_parser); bb = ags_midi_parser_midi_getc(midi_parser); while(dd-- > 0){ denom *= 2; } xmlNewProp(node, AGS_MIDI_EVENT, "time-signature\0"); xmlNewProp(node, "timesig\0", g_strdup_printf("%d/%d %d %d\0", nn, denom, cc, bb)); return(node); } xmlNode* ags_midi_parser_time_signature(AgsMidiParser *midi_parser, guint meta_type) { xmlNode *node; g_return_val_if_fail(AGS_IS_MIDI_PARSER(midi_parser), NULL); g_object_ref((GObject *) midi_parser); g_signal_emit(G_OBJECT(midi_parser), midi_parser_signals[TIME_SIGNATURE], 0, meta_type, &node); g_object_unref((GObject *) midi_parser); return(node); } xmlNode* ags_midi_parser_real_key_signature(AgsMidiParser *midi_parser, guint meta_type) { xmlNode *node; int sf, mi; node = xmlNewNode(NULL, "midi-message\0"); xmlNewProp(node, AGS_MIDI_EVENT, "key-signature\0"); sf = ags_midi_parser_midi_getc(midi_parser); mi = ags_midi_parser_midi_getc(midi_parser); xmlNewProp(node, "keysig\0", g_strdup_printf("%d %s\0", (sf>127?sf-256:sf), (mi?"minor":"major"))); return(node); } xmlNode* ags_midi_parser_key_signature(AgsMidiParser *midi_parser, guint meta_type) { xmlNode *node; g_return_val_if_fail(AGS_IS_MIDI_PARSER(midi_parser), NULL); g_object_ref((GObject *) midi_parser); g_signal_emit(G_OBJECT(midi_parser), midi_parser_signals[KEY_SIGNATURE], 0, meta_type, &node); g_object_unref((GObject *) midi_parser); return(node); } xmlNode* ags_midi_parser_real_sequencer_meta_event(AgsMidiParser *midi_parser, guint meta_type) { xmlNode *node; guint len, id, data; node = NULL; len = ags_midi_parser_midi_getc(midi_parser); id = ags_midi_parser_midi_getc(midi_parser); data = ags_midi_parser_midi_getc(midi_parser); return(node); } xmlNode* ags_midi_parser_sequencer_meta_event(AgsMidiParser *midi_parser, guint meta_type) { xmlNode *node; g_return_val_if_fail(AGS_IS_MIDI_PARSER(midi_parser), NULL); g_object_ref((GObject *) midi_parser); g_signal_emit(G_OBJECT(midi_parser), midi_parser_signals[META_EVENT], 0, meta_type, &node); g_object_unref((GObject *) midi_parser); return(node); } xmlNode* ags_midi_parser_real_text_event(AgsMidiParser *midi_parser, guint meta_type) { xmlNode *node; gchar *text; guint text_length; node = xmlNewNode(NULL, "midi-message\0"); text_length = ags_midi_parser_read_varlength(midi_parser); text = ags_midi_parser_read_text(midi_parser, text_length); switch(0x0f & meta_type){ case 0x01: /* Text event */ break; case 0x02: { /* Copyright notice */ xmlNewProp(node, "copyright\0", text); } break; case 0x03: { /* Sequence/Track name */ xmlNewProp(node, "sequence-name\0", text); } break; case 0x04: { /* Instrument name */ xmlNewProp(node, "instrument-name\0", text); } break; case 0x05: /* Lyric */ break; case 0x06: /* Marker */ break; case 0x07: /* Cue point */ break; case 0x08: break; case 0x09: break; case 0x0a: break; case 0x0b: break; case 0x0c: break; case 0x0d: break; case 0x0e: break; case 0x0f: break; default: g_warning("unknown text event\0"); } return(node); } xmlNode* ags_midi_parser_text_event(AgsMidiParser *midi_parser, guint meta_type) { xmlNode *node; g_return_val_if_fail(AGS_IS_MIDI_PARSER(midi_parser), NULL); g_object_ref((GObject *) midi_parser); g_signal_emit(G_OBJECT(midi_parser), midi_parser_signals[TEXT_EVENT], 0, meta_type, &node); g_object_unref((GObject *) midi_parser); return(node); } AgsMidiParser* ags_midi_parser_new(FILE *file) { AgsMidiParser *midi_parser; struct stat sb; midi_parser = (AgsMidiParser *) g_object_new(AGS_TYPE_MIDI_PARSER, "file\0", file, NULL); return(midi_parser); } gsequencer-0.6.37/src/midi2ags/midi/ags_midi_parser.h0000644000175000017500000001452312626272146017417 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #ifndef __AGS_MIDI_PARSER_H__ #define __AGS_MIDI_PARSER_H__ #include #include #include #define AGS_TYPE_MIDI_PARSER (ags_midi_parser_get_type ()) #define AGS_MIDI_PARSER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_MIDI_PARSER, AgsMidiParser)) #define AGS_MIDI_PARSER_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_MIDI_PARSER, AgsMidiParserClass)) #define AGS_IS_MIDI_PARSER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AGS_TYPE_MIDI_PARSER)) #define AGS_IS_MIDI_PARSER_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_MIDI_PARSER)) #define AGS_MIDI_PARSER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), AGS_TYPE_MIDI_PARSER, AgsMidiParserClass)) #define AGS_MIDI_PARSER_MTHD "MThd\0" #define AGS_MIDI_PARSER_MTCK "MTrk\0" typedef struct _AgsMidiParser AgsMidiParser; typedef struct _AgsMidiParserClass AgsMidiParserClass; typedef enum{ AGS_MIDI_PARSER_EOF = 1, AGS_MIDI_PARSER_EOT = 1 << 1, }AgsMidiParserFlags; typedef enum{ AGS_MIDI_CHUNK_HEADER = 1, AGS_MIDI_CHUNK_TRACK = 1 << 1, AGS_MIDI_CHUNK_UNKNOWN = 1 << 2, }AgsMidiChunkFlags; struct _AgsMidiParser { GObject gobject; guint flags; FILE *file; guint nth_chunk; size_t file_length; size_t offset; guint current_time; xmlDoc *doc; }; struct _AgsMidiParserClass { GObjectClass gobject; int (*midi_getc)(AgsMidiParser *midi_parser); void (*on_error)(AgsMidiParser *midi_parser, GError **error); xmlNode* (*parse_header)(AgsMidiParser *midi_parser); xmlNode* (*parse_track)(AgsMidiParser *midi_parser); xmlNode* (*key_on)(AgsMidiParser *midi_parser, guint status); xmlNode* (*key_off)(AgsMidiParser *midi_parser, guint status); xmlNode* (*key_pressure)(AgsMidiParser *midi_parser, guint status); xmlNode* (*change_parameter)(AgsMidiParser *midi_parser, guint status); xmlNode* (*change_pitch_bend)(AgsMidiParser *midi_parser, guint status); xmlNode* (*change_program)(AgsMidiParser *midi_parser, guint status); xmlNode* (*change_channel_pressure)(AgsMidiParser *midi_parser, guint status); xmlNode* (*not_defined)(AgsMidiParser *midi_parser, guint status); xmlNode* (*sysex)(AgsMidiParser *midi_parser, guint status); xmlNode* (*system_common)(AgsMidiParser *midi_parser, guint status); xmlNode* (*meta_event)(AgsMidiParser *midi_parser, guint status); xmlNode* (*sequence_number)(AgsMidiParser *midi_parser, guint meta_type); xmlNode* (*end_of_track)(AgsMidiParser *midi_parser, guint meta_type); xmlNode* (*smpte)(AgsMidiParser *midi_parser, guint meta_type); xmlNode* (*tempo)(AgsMidiParser *midi_parser, guint meta_type); xmlNode* (*time_signature)(AgsMidiParser *midi_parser, guint meta_type); xmlNode* (*key_signature)(AgsMidiParser *midi_parser, guint meta_type); xmlNode* (*sequencer_meta_event)(AgsMidiParser *midi_parser, guint meta_type); xmlNode* (*text_event)(AgsMidiParser *midi_parser, guint meta_type); xmlDoc* (*parse_full)(AgsMidiParser *midi_parser); }; GType ags_midi_parser_get_type(void); gint16 ags_midi_parser_read_gint16(AgsMidiParser *midi_parser); gint32 ags_midi_parser_read_gint24(AgsMidiParser *midi_parser); gint32 ags_midi_parser_read_gint32(AgsMidiParser *midi_parser); long ags_midi_parser_read_varlength(AgsMidiParser *midi_parser); gchar* ags_midi_parser_read_text(AgsMidiParser *midi_parser, gint length); gdouble ags_midi_parser_ticks_to_sec(AgsMidiParser *midi_parser, guint ticks, gint division, guint tempo); int ags_midi_parser_midi_getc(AgsMidiParser *midi_parser); void ags_midi_parser_on_error(AgsMidiParser *midi_parser, GError **error); xmlDoc* ags_midi_parser_parse_full(AgsMidiParser *midi_parser); xmlNode* ags_midi_parser_parse_header(AgsMidiParser *midi_parser); xmlNode* ags_midi_parser_parse_track(AgsMidiParser *midi_parser); xmlNode* ags_midi_parser_channel_message(AgsMidiParser *midi_parser, guint status); xmlNode* ags_midi_parser_key_on(AgsMidiParser *midi_parser, guint status); xmlNode* ags_midi_parser_key_off(AgsMidiParser *midi_parser, guint status); xmlNode* ags_midi_parser_key_pressure(AgsMidiParser *midi_parser, guint status); xmlNode* ags_midi_parser_change_parameter(AgsMidiParser *midi_parser, guint status); xmlNode* ags_midi_parser_change_pitch_bend(AgsMidiParser *midi_parser, guint status); xmlNode* ags_midi_parser_change_program(AgsMidiParser *midi_parser, guint status); xmlNode* ags_midi_parser_change_channel_pressure(AgsMidiParser *midi_parser, guint status); xmlNode* ags_midi_parser_not_defined(AgsMidiParser *midi_parser, guint status); xmlNode* ags_midi_parser_sysex(AgsMidiParser *midi_parser, guint status); xmlNode* ags_midi_parser_system_common(AgsMidiParser *midi_parser, guint status); xmlNode* ags_midi_parser_meta_event(AgsMidiParser *midi_parser, guint status); xmlNode* ags_midi_parser_sequence_number(AgsMidiParser *midi_parser, guint meta_type); xmlNode* ags_midi_parser_end_of_track(AgsMidiParser *midi_parser, guint meta_type); xmlNode* ags_midi_parser_smpte(AgsMidiParser *midi_parser, guint meta_type); xmlNode* ags_midi_parser_tempo(AgsMidiParser *midi_parser, guint meta_type); xmlNode* ags_midi_parser_time_signature(AgsMidiParser *midi_parser, guint meta_type); xmlNode* ags_midi_parser_key_signature(AgsMidiParser *midi_parser, guint meta_type); xmlNode* ags_midi_parser_sequencer_meta_event(AgsMidiParser *midi_parser, guint meta_type); xmlNode* ags_midi_parser_meta_misc(AgsMidiParser *midi_parser, guint meta_type); xmlNode* ags_midi_parser_text_event(AgsMidiParser *midi_parser, guint meta_type); AgsMidiParser* ags_midi_parser_new(FILE *file); #endif /*__AGS_MIDI_PARSER_H__*/ gsequencer-0.6.37/src/midi2ags/main.c0000644000175000017500000000422412626272146014261 00000000000000/* GSequencer - Advanced GTK Sequencer * Copyright (C) 2005-2015 Joël Krähemann * * This file is part of GSequencer. * * GSequencer is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GSequencer is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GSequencer. If not, see . */ #include #include #include #include #include int main(int argc, char **argv) { AgsMidiParser *midi_parser; FILE *out; FILE *file; xmlChar *buffer; gchar *filename; size_t length; if(argc == 2){ if(!strncmp(argv[1], "--help\0", 7)){ printf("midi2xml converts MIDI to XML\n\n\0"); printf("Usage:\n\t%s\n\t%s\n\t%s\n\t%s\n\n", "Report bugs to \n\0", "--help display this help and exit\0", "--version output version information and exit\0", " the file to be processed\0"); exit(0); }else if(!strncmp(argv[1], "--version\0", 10)){ printf("midi2xml 1.0.0\n\n\0"); printf("%s\n%s\n%s\n\n\0", "Copyright (C) 2015 Joël Krähemann\0", "This is free software; see the source for copying conditions. There is NO\0", "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\0"); printf("Written by Joël Krähemann\n\0"); exit(0); }else{ filename = argv[1]; } }else{ return(-1); } file = fopen(filename, "r\0"); fseek(file, 0, SEEK_SET); midi_parser = ags_midi_parser_new(file); ags_midi_parser_parse_full(midi_parser); xmlSaveFormatFileEnc("-", midi_parser->doc, "UTF-8", 1); return(0); } gsequencer-0.6.37/src/ags-lib/0000755000175000017500000000000012633241335013060 500000000000000gsequencer-0.6.37/src/ags-lib/object/0000755000175000017500000000000012633241335014326 500000000000000gsequencer-0.6.37/src/ags-lib/object/ags_connectable.h0000644000175000017500000000454712626272146017546 00000000000000/* AGS - Advanced GTK Sequencer * Copyright (C) 2005-2011 Joël Krähemann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef __AGS_CONNECTABLE_H__ #define __AGS_CONNECTABLE_H__ #include #include #include #define AGS_TYPE_CONNECTABLE (ags_connectable_get_type()) #define AGS_CONNECTABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_CONNECTABLE, AgsConnectable)) #define AGS_CONNECTABLE_INTERFACE(vtable) (G_TYPE_CHECK_CLASS_CAST((vtable), AGS_TYPE_CONNECTABLE, AgsConnectableInterface)) #define AGS_IS_CONNECTABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_CONNECTABLE)) #define AGS_IS_CONNECTABLE_INTERFACE(vtable) (G_TYPE_CHECK_CLASS_TYPE((vtable), AGS_TYPE_CONNECTABLE)) #define AGS_CONNECTABLE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE((obj), AGS_TYPE_CONNECTABLE, AgsConnectableInterface)) typedef void AgsConnectable; typedef struct _AgsConnectableInterface AgsConnectableInterface; struct _AgsConnectableInterface { GTypeInterface interface; void (*add_to_registry)(AgsConnectable *connectable); void (*remove_from_registry)(AgsConnectable *connectable); xmlNode* (*update)(AgsConnectable *connectable); gboolean (*is_ready)(AgsConnectable *connectable); gboolean (*is_connected)(AgsConnectable *connectable); void (*connect)(AgsConnectable *connectable); void (*disconnect)(AgsConnectable *connectable); }; GType ags_connectable_get_type(); void ags_connectable_add_to_registry(AgsConnectable *connectable); void ags_connectable_connect(AgsConnectable *connectable); void ags_connectable_disconnect(AgsConnectable *connectable); #endif /*__AGS_CONNECTABLE_H__*/ gsequencer-0.6.37/src/ags-lib/object/ags_connectable.c0000644000175000017500000000717312626272146017537 00000000000000/* AGS - Advanced GTK Sequencer * Copyright (C) 2005-2011 Joël Krähemann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include void ags_connectable_base_init(AgsConnectableInterface *interface); GType ags_connectable_get_type() { static GType ags_type_connectable = 0; if(!ags_type_connectable){ static const GTypeInfo ags_connectable_info = { sizeof(AgsConnectableInterface), (GBaseInitFunc) ags_connectable_base_init, NULL, /* base_finalize */ }; ags_type_connectable = g_type_register_static(G_TYPE_INTERFACE, "AgsConnectable\0", &ags_connectable_info, 0); } return(ags_type_connectable); } void ags_connectable_base_init(AgsConnectableInterface *interface) { /* empty */ } void ags_connectable_add_to_registry(AgsConnectable *connectable) { AgsConnectableInterface *connectable_interface; g_return_if_fail(AGS_IS_CONNECTABLE(connectable)); connectable_interface = AGS_CONNECTABLE_GET_INTERFACE(connectable); g_return_if_fail(connectable_interface->add_to_registry); connectable_interface->add_to_registry(connectable); } void ags_connectable_remove_from_registry(AgsConnectable *connectable) { AgsConnectableInterface *connectable_interface; g_return_if_fail(AGS_IS_CONNECTABLE(connectable)); connectable_interface = AGS_CONNECTABLE_GET_INTERFACE(connectable); g_return_if_fail(connectable_interface->remove_from_registry); connectable_interface->remove_from_registry(connectable); } gboolean ags_connectable_is_ready(AgsConnectable *connectable) { AgsConnectableInterface *connectable_interface; g_return_val_if_fail(AGS_IS_CONNECTABLE(connectable), FALSE); connectable_interface = AGS_CONNECTABLE_GET_INTERFACE(connectable); if(connectable_interface->is_ready == NULL) return(TRUE); return(connectable_interface->is_ready(connectable)); } gboolean ags_connectable_is_connected(AgsConnectable *connectable) { AgsConnectableInterface *connectable_interface; g_return_val_if_fail(AGS_IS_CONNECTABLE(connectable), FALSE); connectable_interface = AGS_CONNECTABLE_GET_INTERFACE(connectable); g_return_val_if_fail(connectable_interface->is_connected, FALSE); return(connectable_interface->is_connected(connectable)); } void ags_connectable_connect(AgsConnectable *connectable) { AgsConnectableInterface *connectable_interface; g_return_if_fail(AGS_IS_CONNECTABLE(connectable)); connectable_interface = AGS_CONNECTABLE_GET_INTERFACE(connectable); g_return_if_fail(connectable_interface->connect); // if(!ags_connectable_is_ready(connectable)){ // return; // } connectable_interface->connect(connectable); } void ags_connectable_disconnect(AgsConnectable *connectable) { AgsConnectableInterface *connectable_interface; g_return_if_fail(AGS_IS_CONNECTABLE(connectable)); connectable_interface = AGS_CONNECTABLE_GET_INTERFACE(connectable); g_return_if_fail(connectable_interface->disconnect); connectable_interface->disconnect(connectable); } gsequencer-0.6.37/missing0000755000175000017500000001533012621000377012270 00000000000000#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2013-10-28.13; # UTC # Copyright (C) 1996-2014 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=http://www.perl.org/ flex_URL=http://flex.sourceforge.net/ gnu_software_URL=http://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'autom4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: gsequencer-0.6.37/install-sh0000755000175000017500000003546312621245071012710 00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2014-09-12.12; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. tab=' ' nl=' ' IFS=" $tab$nl" # Set DOITPROG to "echo" to test this script. doit=${DOITPROG-} doit_exec=${doit:-exec} # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false is_target_a_directory=possibly usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) is_target_a_directory=always dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done # We allow the use of options -d and -T together, by making -d # take the precedence; this is for compatibility with GNU install. if test -n "$dir_arg"; then if test -n "$dst_arg"; then echo "$0: target directory not allowed when installing a directory." >&2 exit 1 fi fi if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then if test $# -gt 1 || test "$is_target_a_directory" = always; then if test ! -d "$dst_arg"; then echo "$0: $dst_arg: Is not a directory." >&2 exit 1 fi fi fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) # $RANDOM is not portable (e.g. dash); use it when possible to # lower collision chance tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0 # As "mkdir -p" follows symlinks and we work in /tmp possibly; so # create the $tmpdir first (and fail if unsuccessful) to make sure # that nobody tries to guess the $tmpdir name. if (umask $mkdir_umask && $mkdirprog $mkdir_mode "$tmpdir" && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. test_tmpdir="$tmpdir/a" ls_ld_tmpdir=`ls -ld "$test_tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac oIFS=$IFS IFS=/ set -f set fnord $dstdir shift set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: gsequencer-0.6.37/Makefile.in0000644000175000017500000340236212633221770012753 00000000000000# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : bin_PROGRAMS = gsequencer$(EXEEXT) midi2xml$(EXEEXT) subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ $(am__configure_deps) $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" \ "$(DESTDIR)$(appdatadir)" "$(DESTDIR)$(docdir)" PROGRAMS = $(bin_PROGRAMS) am__objects_1 = am_gsequencer_OBJECTS = $(am__objects_1) \ gsequencer-ags_audio.$(OBJEXT) \ gsequencer-ags_audio_signal.$(OBJEXT) \ gsequencer-ags_channel.$(OBJEXT) \ gsequencer-ags_channel_iter.$(OBJEXT) \ gsequencer-ags_config.$(OBJEXT) \ gsequencer-ags_devout.$(OBJEXT) \ gsequencer-ags_garbage_collector.$(OBJEXT) \ gsequencer-ags_input.$(OBJEXT) gsequencer-ags_libao.$(OBJEXT) \ gsequencer-ags_notation.$(OBJEXT) \ gsequencer-ags_note.$(OBJEXT) gsequencer-ags_output.$(OBJEXT) \ gsequencer-ags_pattern.$(OBJEXT) gsequencer-ags_port.$(OBJEXT) \ gsequencer-ags_recall_audio.$(OBJEXT) \ gsequencer-ags_recall_audio_run.$(OBJEXT) \ gsequencer-ags_recall_audio_signal.$(OBJEXT) \ gsequencer-ags_recall.$(OBJEXT) \ gsequencer-ags_recall_channel.$(OBJEXT) \ gsequencer-ags_recall_channel_run.$(OBJEXT) \ gsequencer-ags_recall_channel_run_dummy.$(OBJEXT) \ gsequencer-ags_recall_container.$(OBJEXT) \ gsequencer-ags_recall_dependency.$(OBJEXT) \ gsequencer-ags_recall_factory.$(OBJEXT) \ gsequencer-ags_recall_id.$(OBJEXT) \ gsequencer-ags_recall_ladspa.$(OBJEXT) \ gsequencer-ags_recall_ladspa_run.$(OBJEXT) \ gsequencer-ags_recall_recycling.$(OBJEXT) \ gsequencer-ags_recall_recycling_dummy.$(OBJEXT) \ gsequencer-ags_recycling.$(OBJEXT) \ gsequencer-ags_recycling_container.$(OBJEXT) \ gsequencer-ags_synths.$(OBJEXT) gsequencer-ags_task.$(OBJEXT) \ gsequencer-ags_timestamp.$(OBJEXT) \ gsequencer-ags_timestamp_factory.$(OBJEXT) \ gsequencer-ags_audio_file.$(OBJEXT) \ gsequencer-ags_audio_file_xml.$(OBJEXT) \ gsequencer-ags_ipatch.$(OBJEXT) \ gsequencer-ags_ipatch_sf2_reader.$(OBJEXT) \ gsequencer-ags_sndfile.$(OBJEXT) \ gsequencer-ags_amplifier.$(OBJEXT) \ gsequencer-ags_buffer_audio_signal.$(OBJEXT) \ gsequencer-ags_buffer_channel.$(OBJEXT) \ gsequencer-ags_buffer_channel_run.$(OBJEXT) \ gsequencer-ags_buffer_recycling.$(OBJEXT) \ gsequencer-ags_clone_channel.$(OBJEXT) \ gsequencer-ags_clone_channel_run.$(OBJEXT) \ gsequencer-ags_copy_audio_signal.$(OBJEXT) \ gsequencer-ags_copy_channel.$(OBJEXT) \ gsequencer-ags_copy_channel_run.$(OBJEXT) \ gsequencer-ags_copy_notation_audio.$(OBJEXT) \ gsequencer-ags_copy_notation_audio_run.$(OBJEXT) \ gsequencer-ags_copy_pattern_audio.$(OBJEXT) \ gsequencer-ags_copy_pattern_audio_run.$(OBJEXT) \ gsequencer-ags_copy_pattern_channel.$(OBJEXT) \ gsequencer-ags_copy_pattern_channel_run.$(OBJEXT) \ gsequencer-ags_copy_recycling.$(OBJEXT) \ gsequencer-ags_count_beats_audio.$(OBJEXT) \ gsequencer-ags_count_beats_audio_run.$(OBJEXT) \ gsequencer-ags_delay_audio.$(OBJEXT) \ gsequencer-ags_delay_audio_run.$(OBJEXT) \ gsequencer-ags_echo.$(OBJEXT) \ gsequencer-ags_envelope_audio_signal.$(OBJEXT) \ gsequencer-ags_envelope_channel.$(OBJEXT) \ gsequencer-ags_envelope_channel_run.$(OBJEXT) \ gsequencer-ags_envelope_recycling.$(OBJEXT) \ gsequencer-ags_loop_channel.$(OBJEXT) \ gsequencer-ags_loop_channel_run.$(OBJEXT) \ gsequencer-ags_mute_audio.$(OBJEXT) \ gsequencer-ags_mute_audio_run.$(OBJEXT) \ gsequencer-ags_mute_audio_signal.$(OBJEXT) \ gsequencer-ags_mute_channel.$(OBJEXT) \ gsequencer-ags_mute_channel_run.$(OBJEXT) \ gsequencer-ags_mute_recycling.$(OBJEXT) \ gsequencer-ags_peak_audio_signal.$(OBJEXT) \ gsequencer-ags_peak_channel.$(OBJEXT) \ gsequencer-ags_peak_channel_run.$(OBJEXT) \ gsequencer-ags_peak_recycling.$(OBJEXT) \ gsequencer-ags_play_audio.$(OBJEXT) \ gsequencer-ags_play_audio_file.$(OBJEXT) \ gsequencer-ags_play_audio_signal.$(OBJEXT) \ gsequencer-ags_play_channel.$(OBJEXT) \ gsequencer-ags_play_channel_run.$(OBJEXT) \ gsequencer-ags_play_channel_run_master.$(OBJEXT) \ gsequencer-ags_play_notation_audio.$(OBJEXT) \ gsequencer-ags_play_notation_audio_run.$(OBJEXT) \ gsequencer-ags_play_note.$(OBJEXT) \ gsequencer-ags_play_pattern.$(OBJEXT) \ gsequencer-ags_play_recycling.$(OBJEXT) \ gsequencer-ags_stream_audio_signal.$(OBJEXT) \ gsequencer-ags_stream.$(OBJEXT) \ gsequencer-ags_stream_channel.$(OBJEXT) \ gsequencer-ags_stream_channel_run.$(OBJEXT) \ gsequencer-ags_stream_recycling.$(OBJEXT) \ gsequencer-ags_volume_audio_signal.$(OBJEXT) \ gsequencer-ags_volume_channel.$(OBJEXT) \ gsequencer-ags_volume_channel_run.$(OBJEXT) \ gsequencer-ags_volume_recycling.$(OBJEXT) \ gsequencer-ags_add_audio.$(OBJEXT) \ gsequencer-ags_add_audio_signal.$(OBJEXT) \ gsequencer-ags_add_line_member.$(OBJEXT) \ gsequencer-ags_add_note.$(OBJEXT) \ gsequencer-ags_add_point_to_selection.$(OBJEXT) \ gsequencer-ags_add_recall.$(OBJEXT) \ gsequencer-ags_add_recall_container.$(OBJEXT) \ gsequencer-ags_add_region_to_selection.$(OBJEXT) \ gsequencer-ags_append_audio.$(OBJEXT) \ gsequencer-ags_append_audio_threaded.$(OBJEXT) \ gsequencer-ags_append_channel.$(OBJEXT) \ gsequencer-ags_append_recall.$(OBJEXT) \ gsequencer-ags_apply_synth.$(OBJEXT) \ gsequencer-ags_apply_wavetable.$(OBJEXT) \ gsequencer-ags_audio_set_recycling.$(OBJEXT) \ gsequencer-ags_blink_cell_pattern_cursor.$(OBJEXT) \ gsequencer-ags_cancel_audio.$(OBJEXT) \ gsequencer-ags_cancel_channel.$(OBJEXT) \ gsequencer-ags_cancel_recall.$(OBJEXT) \ gsequencer-ags_change_indicator.$(OBJEXT) \ gsequencer-ags_change_tact.$(OBJEXT) \ gsequencer-ags_channel_set_recycling.$(OBJEXT) \ gsequencer-ags_display_tact.$(OBJEXT) \ gsequencer-ags_export_output.$(OBJEXT) \ gsequencer-ags_free_selection.$(OBJEXT) \ gsequencer-ags_init_audio.$(OBJEXT) \ gsequencer-ags_init_channel.$(OBJEXT) \ gsequencer-ags_link_channel.$(OBJEXT) \ gsequencer-ags_open_file.$(OBJEXT) \ gsequencer-ags_open_single_file.$(OBJEXT) \ gsequencer-ags_remove_audio.$(OBJEXT) \ gsequencer-ags_remove_audio_signal.$(OBJEXT) \ gsequencer-ags_remove_note.$(OBJEXT) \ gsequencer-ags_remove_point_from_selection.$(OBJEXT) \ gsequencer-ags_remove_recall.$(OBJEXT) \ gsequencer-ags_remove_recall_container.$(OBJEXT) \ gsequencer-ags_remove_region_from_selection.$(OBJEXT) \ gsequencer-ags_resize_audio.$(OBJEXT) \ gsequencer-ags_save_file.$(OBJEXT) \ gsequencer-ags_scroll_on_play.$(OBJEXT) \ gsequencer-ags_seek_devout.$(OBJEXT) \ gsequencer-ags_set_audio_channels.$(OBJEXT) \ gsequencer-ags_set_buffer_size.$(OBJEXT) \ gsequencer-ags_set_devout_play_flags.$(OBJEXT) \ gsequencer-ags_set_output_device.$(OBJEXT) \ gsequencer-ags_set_samplerate.$(OBJEXT) \ gsequencer-ags_start_devout.$(OBJEXT) \ gsequencer-ags_start_read_file.$(OBJEXT) \ gsequencer-ags_toggle_led.$(OBJEXT) \ gsequencer-ags_toggle_pattern_bit.$(OBJEXT) \ gsequencer-ags_unref_audio_signal.$(OBJEXT) \ gsequencer-ags_apply_bpm.$(OBJEXT) \ gsequencer-ags_apply_sequencer_length.$(OBJEXT) \ gsequencer-ags_apply_tact.$(OBJEXT) \ gsequencer-ags_set_muted.$(OBJEXT) \ gsequencer-ags_file.$(OBJEXT) \ gsequencer-ags_file_gui.$(OBJEXT) \ gsequencer-ags_file_id_ref.$(OBJEXT) \ gsequencer-ags_file_launch.$(OBJEXT) \ gsequencer-ags_file_link.$(OBJEXT) \ gsequencer-ags_file_lookup.$(OBJEXT) \ gsequencer-ags_file_sound.$(OBJEXT) \ gsequencer-ags_file_thread.$(OBJEXT) \ gsequencer-ags_file_util.$(OBJEXT) \ gsequencer-ags_connectable.$(OBJEXT) \ gsequencer-ags_combo_box_text.$(OBJEXT) \ gsequencer-ags_container.$(OBJEXT) \ gsequencer-ags_list.$(OBJEXT) gsequencer-ags_log.$(OBJEXT) \ gsequencer-ags_parameter.$(OBJEXT) gsequencer-main.$(OBJEXT) \ gsequencer-ags_applicable.$(OBJEXT) \ gsequencer-ags_async_queue.$(OBJEXT) \ gsequencer-ags_countable.$(OBJEXT) \ gsequencer-ags_concurrent_tree.$(OBJEXT) \ gsequencer-ags_dynamic_connectable.$(OBJEXT) \ gsequencer-ags_effect.$(OBJEXT) \ gsequencer-ags_main_loop.$(OBJEXT) \ gsequencer-ags_marshal.$(OBJEXT) \ gsequencer-ags_mutable.$(OBJEXT) \ gsequencer-ags_packable.$(OBJEXT) \ gsequencer-ags_persistable.$(OBJEXT) \ gsequencer-ags_playable.$(OBJEXT) \ gsequencer-ags_plugin.$(OBJEXT) \ gsequencer-ags_portlet.$(OBJEXT) \ gsequencer-ags_runnable.$(OBJEXT) \ gsequencer-ags_seekable.$(OBJEXT) \ gsequencer-ags_soundcard.$(OBJEXT) \ gsequencer-ags_stackable.$(OBJEXT) \ gsequencer-ags_tactable.$(OBJEXT) \ gsequencer-ags_tree_iterator.$(OBJEXT) \ gsequencer-ags_ladspa_manager.$(OBJEXT) \ gsequencer-ags_plugin_factory.$(OBJEXT) \ gsequencer-ags_registry.$(OBJEXT) \ gsequencer-ags_remote_task.$(OBJEXT) \ gsequencer-ags_server.$(OBJEXT) \ gsequencer-ags_audio_loop.$(OBJEXT) \ gsequencer-ags_audio_thread.$(OBJEXT) \ gsequencer-ags_autosave_thread.$(OBJEXT) \ gsequencer-ags_channel_thread.$(OBJEXT) \ gsequencer-ags_devout_thread.$(OBJEXT) \ gsequencer-ags_export_thread.$(OBJEXT) \ gsequencer-ags_gui_thread.$(OBJEXT) \ gsequencer-ags_history.$(OBJEXT) \ gsequencer-ags_iterator_thread.$(OBJEXT) \ gsequencer-ags_mutex_manager.$(OBJEXT) \ gsequencer-ags_record_thread.$(OBJEXT) \ gsequencer-ags_recycling_thread.$(OBJEXT) \ gsequencer-ags_recycling_thread_callbacks.$(OBJEXT) \ gsequencer-ags_returnable_thread.$(OBJEXT) \ gsequencer-ags_single_thread.$(OBJEXT) \ gsequencer-ags_task_completion.$(OBJEXT) \ gsequencer-ags_task_thread.$(OBJEXT) \ gsequencer-ags_thread_pool.$(OBJEXT) \ gsequencer-ags_thread-posix.$(OBJEXT) \ gsequencer-ags_timestamp_thread.$(OBJEXT) \ gsequencer-ags_id_generator.$(OBJEXT) \ gsequencer-ags_cartesian.$(OBJEXT) \ gsequencer-ags_dial.$(OBJEXT) \ gsequencer-ags_expander.$(OBJEXT) \ gsequencer-ags_expander_set.$(OBJEXT) \ gsequencer-ags_hindicator.$(OBJEXT) \ gsequencer-ags_htimebar.$(OBJEXT) \ gsequencer-ags_indicator.$(OBJEXT) \ gsequencer-ags_led.$(OBJEXT) gsequencer-ags_menu.$(OBJEXT) \ gsequencer-ags_menu_item.$(OBJEXT) \ gsequencer-ags_option_menu.$(OBJEXT) \ gsequencer-ags_ruler.$(OBJEXT) \ gsequencer-ags_segment.$(OBJEXT) \ gsequencer-ags_table.$(OBJEXT) \ gsequencer-ags_timebar.$(OBJEXT) \ gsequencer-ags_vindicator.$(OBJEXT) \ gsequencer-ags_waveform.$(OBJEXT) \ gsequencer-ags_audio_preferences.$(OBJEXT) \ gsequencer-ags_audio_preferences_callbacks.$(OBJEXT) \ gsequencer-ags_editor.$(OBJEXT) \ gsequencer-ags_editor_callbacks.$(OBJEXT) \ gsequencer-ags_export_window.$(OBJEXT) \ gsequencer-ags_export_window_callbacks.$(OBJEXT) \ gsequencer-ags_generic_preferences.$(OBJEXT) \ gsequencer-ags_generic_preferences_callbacks.$(OBJEXT) \ gsequencer-ags_ladspa_browser.$(OBJEXT) \ gsequencer-ags_ladspa_browser_callbacks.$(OBJEXT) \ gsequencer-ags_line.$(OBJEXT) \ gsequencer-ags_line_callbacks.$(OBJEXT) \ gsequencer-ags_line_editor.$(OBJEXT) \ gsequencer-ags_line_editor_callbacks.$(OBJEXT) \ gsequencer-ags_line_member.$(OBJEXT) \ gsequencer-ags_line_member_callbacks.$(OBJEXT) \ gsequencer-ags_line_member_editor.$(OBJEXT) \ gsequencer-ags_line_member_editor_callbacks.$(OBJEXT) \ gsequencer-ags_link_collection_editor.$(OBJEXT) \ gsequencer-ags_link_collection_editor_callbacks.$(OBJEXT) \ gsequencer-ags_link_editor.$(OBJEXT) \ gsequencer-ags_link_editor_callbacks.$(OBJEXT) \ gsequencer-ags_listing_editor.$(OBJEXT) \ gsequencer-ags_listing_editor_callbacks.$(OBJEXT) \ gsequencer-ags_machine.$(OBJEXT) \ gsequencer-ags_machine_callbacks.$(OBJEXT) \ gsequencer-ags_machine_editor.$(OBJEXT) \ gsequencer-ags_machine_editor_callbacks.$(OBJEXT) \ gsequencer-ags_menu_bar.$(OBJEXT) \ gsequencer-ags_menu_bar_callbacks.$(OBJEXT) \ gsequencer-ags_navigation.$(OBJEXT) \ gsequencer-ags_navigation_callbacks.$(OBJEXT) \ gsequencer-ags_pad.$(OBJEXT) \ gsequencer-ags_pad_callbacks.$(OBJEXT) \ gsequencer-ags_pad_editor.$(OBJEXT) \ gsequencer-ags_pad_editor_callbacks.$(OBJEXT) \ gsequencer-ags_performance_preferences.$(OBJEXT) \ gsequencer-ags_performance_preferences_callbacks.$(OBJEXT) \ gsequencer-ags_plugin_preferences.$(OBJEXT) \ gsequencer-ags_plugin_preferences_callbacks.$(OBJEXT) \ gsequencer-ags_preferences.$(OBJEXT) \ gsequencer-ags_preferences_callbacks.$(OBJEXT) \ gsequencer-ags_property_collection_editor.$(OBJEXT) \ gsequencer-ags_property_collection_editor_callbacks.$(OBJEXT) \ gsequencer-ags_property_editor.$(OBJEXT) \ gsequencer-ags_property_editor_callbacks.$(OBJEXT) \ gsequencer-ags_property_listing_editor.$(OBJEXT) \ gsequencer-ags_resize_editor.$(OBJEXT) \ gsequencer-ags_server_preferences.$(OBJEXT) \ gsequencer-ags_server_preferences_callbacks.$(OBJEXT) \ gsequencer-ags_window.$(OBJEXT) \ gsequencer-ags_window_callbacks.$(OBJEXT) \ gsequencer-ags_file_selection.$(OBJEXT) \ gsequencer-ags_file_selection_callbacks.$(OBJEXT) \ gsequencer-ags_inline_player.$(OBJEXT) \ gsequencer-ags_inline_player_callbacks.$(OBJEXT) \ gsequencer-ags_machine_radio_button.$(OBJEXT) \ gsequencer-ags_machine_selection.$(OBJEXT) \ gsequencer-ags_machine_selector.$(OBJEXT) \ gsequencer-ags_machine_selector_callbacks.$(OBJEXT) \ gsequencer-ags_meter.$(OBJEXT) \ gsequencer-ags_meter_callbacks.$(OBJEXT) \ gsequencer-ags_notebook.$(OBJEXT) \ gsequencer-ags_notebook_callbacks.$(OBJEXT) \ gsequencer-ags_note_edit.$(OBJEXT) \ gsequencer-ags_note_edit_callbacks.$(OBJEXT) \ gsequencer-ags_pattern_edit.$(OBJEXT) \ gsequencer-ags_pattern_edit_callbacks.$(OBJEXT) \ gsequencer-ags_sf2_chooser.$(OBJEXT) \ gsequencer-ags_sf2_chooser_callbacks.$(OBJEXT) \ gsequencer-ags_toolbar.$(OBJEXT) \ gsequencer-ags_toolbar_callbacks.$(OBJEXT) \ gsequencer-ags_cell_pattern.$(OBJEXT) \ gsequencer-ags_cell_pattern_callbacks.$(OBJEXT) \ gsequencer-ags_drum.$(OBJEXT) \ gsequencer-ags_drum_callbacks.$(OBJEXT) \ gsequencer-ags_drum_input_line.$(OBJEXT) \ gsequencer-ags_drum_input_line_callbacks.$(OBJEXT) \ gsequencer-ags_drum_input_pad.$(OBJEXT) \ gsequencer-ags_drum_input_pad_callbacks.$(OBJEXT) \ gsequencer-ags_drum_output_line.$(OBJEXT) \ gsequencer-ags_drum_output_line_callbacks.$(OBJEXT) \ gsequencer-ags_drum_output_pad.$(OBJEXT) \ gsequencer-ags_drum_output_pad_callbacks.$(OBJEXT) \ gsequencer-ags_ffplayer.$(OBJEXT) \ gsequencer-ags_ffplayer_callbacks.$(OBJEXT) \ gsequencer-ags_matrix.$(OBJEXT) \ gsequencer-ags_matrix_callbacks.$(OBJEXT) \ gsequencer-ags_mixer.$(OBJEXT) \ gsequencer-ags_mixer_callbacks.$(OBJEXT) \ gsequencer-ags_mixer_input_line.$(OBJEXT) \ gsequencer-ags_mixer_input_pad.$(OBJEXT) \ gsequencer-ags_oscillator.$(OBJEXT) \ gsequencer-ags_oscillator_callbacks.$(OBJEXT) \ gsequencer-ags_panel.$(OBJEXT) \ gsequencer-ags_panel_callbacks.$(OBJEXT) \ gsequencer-ags_panel_input_line.$(OBJEXT) \ gsequencer-ags_panel_input_pad.$(OBJEXT) \ gsequencer-ags_pattern_box_callbacks.$(OBJEXT) \ gsequencer-ags_pattern_box.$(OBJEXT) \ gsequencer-ags_synth.$(OBJEXT) \ gsequencer-ags_synth_callbacks.$(OBJEXT) \ gsequencer-ags_synth_input_line.$(OBJEXT) \ gsequencer-ags_synth_input_pad.$(OBJEXT) gsequencer_OBJECTS = $(am_gsequencer_OBJECTS) gsequencer_DEPENDENCIES = gsequencer_LINK = $(CCLD) $(gsequencer_CFLAGS) $(CFLAGS) \ $(gsequencer_LDFLAGS) $(LDFLAGS) -o $@ am_midi2xml_OBJECTS = midi2xml-main.$(OBJEXT) \ midi2xml-ags_midi_parser.$(OBJEXT) \ midi2xml-ags_marshal.$(OBJEXT) midi2xml_OBJECTS = $(am_midi2xml_OBJECTS) midi2xml_LDADD = $(LDADD) midi2xml_LINK = $(CCLD) $(midi2xml_CFLAGS) $(CFLAGS) \ $(midi2xml_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(gsequencer_SOURCES) $(midi2xml_SOURCES) DIST_SOURCES = $(gsequencer_SOURCES) $(midi2xml_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } man1dir = $(mandir)/man1 NROFF = nroff MANS = $(man1_MANS) DATA = $(appdata_DATA) $(doc_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ $(LISP)config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags CSCOPE = cscope AM_RECURSIVE_TARGETS = cscope am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in AUTHORS \ COPYING ChangeLog INSTALL NEWS README compile config.guess \ config.rpath config.sub depcomp install-sh missing DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best DIST_TARGETS = dist-gzip distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CAIRO_CFLAGS = @CAIRO_CFLAGS@ CAIRO_LIBS = @CAIRO_LIBS@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ # what flags you want to pass to the C compiler & linker CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@ FONTCONFIG_LIBS = @FONTCONFIG_LIBS@ GDKPIXBUF_CFLAGS = @GDKPIXBUF_CFLAGS@ GDKPIXBUF_LIBS = @GDKPIXBUF_LIBS@ GOBJECT_CFLAGS = @GOBJECT_CFLAGS@ GOBJECT_LIBS = @GOBJECT_LIBS@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBAO_CFLAGS = @LIBAO_CFLAGS@ LIBAO_LIBS = @LIBAO_LIBS@ LIBASOUND2_CFLAGS = @LIBASOUND2_CFLAGS@ LIBASOUND2_LIBS = @LIBASOUND2_LIBS@ LIBINSTPATCH_CFLAGS = @LIBINSTPATCH_CFLAGS@ LIBINSTPATCH_LIBS = @LIBINSTPATCH_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBXML2_CFLAGS = @LIBXML2_CFLAGS@ LIBXML2_LIBS = @LIBXML2_LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_CFLAGS = @SNDFILE_CFLAGS@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ UUID_CFLAGS = @UUID_CFLAGS@ UUID_LIBS = @UUID_LIBS@ VERSION = @VERSION@ XMKMF = @XMKMF@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = $(datadir)/doc/gsequencer dvidir = @dvidir@ exec_prefix = @exec_prefix@ host_alias = @host_alias@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = foreign # SUBDIRS = src doc AM_CPPFLAGS = -I$(top_srcdir)/src -DDESTDIR=\"$(DESTDIR)$(datadir)\" -DPACKAGE_VERSION=\"$(PACKAGE_VERSION)\" -D_FORTIFY_SOURCE=2 # this lists the binaries to produce, the (non-PHONY, binary) targets in # the previous manual Makefile noinst_LIBRARIES = EXTRA_DIST = gsequencer.share acsite.m4 gsequencer.1 midi2xml.1 README \ gsequencer-documentation gsequencer.desktop.in $(userdoc) \ $(userdocimages) $(top_srcdir)/src/ags/file/ags_file.dtd \ $(top_srcdir)/ags.xsl CLEANFILES = $(appdata_DATA) man1_MANS = gsequencer.1 midi2xml.1 appdatadir = $(datadir)/applications appdata_DATA = gsequencer.desktop doc_DATA = README # documentation userdoc = \ doc/usersBook.xml \ doc/appa.xml \ doc/usersBook/appb.xml \ doc/usersBook/chap1.xml \ doc/usersBook/chap2.xml \ doc/usersBook/chap3.xml \ doc/usersBook/chap4.xml \ doc/usersBook/preface.xml userdocimages = \ $(top_srcdir)/doc/images/ags_export_window.png \ $(top_srcdir)/doc/images/ags_machine_properties-input.png \ $(top_srcdir)/doc/images/ags_machine_properties-resize_channels.png \ $(top_srcdir)/doc/images/ags_navigation.png \ $(top_srcdir)/doc/images/ags_synth.png \ $(top_srcdir)/doc/images/ags_audio_preferences.png \ $(top_srcdir)/doc/images/ags_ffplayer.png \ $(top_srcdir)/doc/images/ags_ladspa_browser.png \ $(top_srcdir)/doc/images/ags_machine_properties-link_input.png \ $(top_srcdir)/doc/images/ags_matrix.png \ $(top_srcdir)/doc/images/ags_panel.png \ $(top_srcdir)/doc/images/ags-toolbar.png \ $(top_srcdir)/doc/images/ags_drum.png \ $(top_srcdir)/doc/images/ags_generic_preferences.png \ $(top_srcdir)/doc/images/ags_machine_properties-output.png \ $(top_srcdir)/doc/images/ags_mixer.png \ $(top_srcdir)/doc/images/ags_performance_preferences.png \ $(top_srcdir)/doc/images/ags_server_preferences.png # library libags_a_CFLAGS = $(GOBJECT_CFLAGS) $(LIBXML2_CFLAGS) libags_a_SOURCES = # application gsequencer_CFLAGS = $(CFLAGS) $(UUID_CFLAGS) $(LIBASOUND2_CFLAGS) $(LIBAO_CFLAGS) $(LIBXML2_CFLAGS) $(OPENSSL_CFLAGS) $(SNDFILE_CFLAGS) $(LIBINSTPATCH_CFLAGS) $(GOBJECT_CFLAGS) $(FONTCONFIG_CFLAGS) $(GDKPIXBUF_CFLAGS) $(CAIRO_CFLAGS) $(GTK_CFLAGS) $(XMLRPC_CFLAGS) $(XMLRPC_UTIL_CFLAGS) $(XMLRPC_SERVER_ABYSS_CFLAGS) $(XMLRPC_SERVER_CGI_CFLAGS) $(XMLRPC_SERVER_CFLAGS) $(PTH_FLAGS) gsequencer_LDFLAGS = -ldl $(LDFLAGS) $(UUID_LIBS) $(LIBASOUND2_LIBS) $(LIBAO_LIBS) $(LIBXML2_LIBS) $(OPENSSL_LIBS) $(SNDFILE_LIBS) $(LIBINSTPATCH_LIBS) $(GOBJECT_LIBS) $(FONTCONFIG_LIBS) $(GDKPIXBUF_LIBS) $(CAIRO_LIBS) $(GTK_LIBS) $(XMLRPC_LIBS) $(XMLRPC_UTIL_LIBS) $(XMLRPC_SERVER_ABYSS_LIBS) $(XMLRPC_SERVER_CGI_LIBS) $(XMLRPC_SERVER_LIBS) -lm -lrt -pthread gsequencer_LDADD = gsequencerheaders = \ src/ags/audio/ags_audio.h \ src/ags/audio/ags_audio_signal.h \ src/ags/audio/ags_channel.h \ src/ags/audio/ags_channel_iter.h \ src/ags/audio/ags_config.h \ src/ags/audio/ags_devout.h \ src/ags/audio/ags_effect.h \ src/ags/audio/ags_garbage_collector.h \ src/ags/audio/ags_input.h \ src/ags/audio/ags_libao.h \ src/ags/audio/ags_notation.h \ src/ags/audio/ags_note.h \ src/ags/audio/ags_output.h \ src/ags/audio/ags_pattern.h \ src/ags/audio/ags_port.h \ src/ags/audio/ags_recall_audio.h \ src/ags/audio/ags_recall_audio_run.h \ src/ags/audio/ags_recall_audio_signal.h \ src/ags/audio/ags_recall_channel.h \ src/ags/audio/ags_recall_channel_run_dummy.h \ src/ags/audio/ags_recall_channel_run.h \ src/ags/audio/ags_recall_container.h \ src/ags/audio/ags_recall_dependency.h \ src/ags/audio/ags_recall_factory.h \ src/ags/audio/ags_recall.h \ src/ags/audio/ags_recall_id.h \ src/ags/audio/ags_recall_ladspa.h \ src/ags/audio/ags_recall_ladspa_run.h \ src/ags/audio/ags_recall_recycling_dummy.h \ src/ags/audio/ags_recall_recycling.h \ src/ags/audio/ags_recycling_container.h \ src/ags/audio/ags_recycling.h \ src/ags/audio/ags_synths.h \ src/ags/audio/ags_task.h \ src/ags/audio/ags_timestamp_factory.h \ src/ags/audio/ags_timestamp.h \ src/ags/audio/file/ags_audio_file.h \ src/ags/audio/file/ags_audio_file_xml.h \ src/ags/audio/file/ags_ipatch.h \ src/ags/audio/file/ags_ipatch_sf2_reader.h \ src/ags/audio/file/ags_sndfile.h \ src/ags/audio/recall/ags_amplifier.h \ src/ags/audio/recall/ags_buffer_audio_signal.h \ src/ags/audio/recall/ags_buffer_channel.h \ src/ags/audio/recall/ags_buffer_channel_run.h \ src/ags/audio/recall/ags_buffer_recycling.h \ src/ags/audio/recall/ags_clone_channel.h \ src/ags/audio/recall/ags_clone_channel_run.h \ src/ags/audio/recall/ags_copy_audio_signal.h \ src/ags/audio/recall/ags_copy_channel.h \ src/ags/audio/recall/ags_copy_channel_run.h \ src/ags/audio/recall/ags_copy_notation_audio.h \ src/ags/audio/recall/ags_copy_notation_audio_run.h \ src/ags/audio/recall/ags_copy_pattern_audio.h \ src/ags/audio/recall/ags_copy_pattern_audio_run.h \ src/ags/audio/recall/ags_copy_pattern_channel.h \ src/ags/audio/recall/ags_copy_pattern_channel_run.h \ src/ags/audio/recall/ags_copy_recycling.h \ src/ags/audio/recall/ags_count_beats_audio.h \ src/ags/audio/recall/ags_count_beats_audio_run.h \ src/ags/audio/recall/ags_delay_audio.h \ src/ags/audio/recall/ags_delay_audio_run.h \ src/ags/audio/recall/ags_down_mix.h \ src/ags/audio/recall/ags_echo.h \ src/ags/audio/recall/ags_envelope_audio_signal.h \ src/ags/audio/recall/ags_envelope_channel.h \ src/ags/audio/recall/ags_envelope_channel_run.h \ src/ags/audio/recall/ags_envelope_recycling.h \ src/ags/audio/recall/ags_loop_channel.h \ src/ags/audio/recall/ags_loop_channel_run.h \ src/ags/audio/recall/ags_mute_audio.h \ src/ags/audio/recall/ags_mute_audio_run.h \ src/ags/audio/recall/ags_mute_audio_signal.h \ src/ags/audio/recall/ags_mute_channel.h \ src/ags/audio/recall/ags_mute_channel_run.h \ src/ags/audio/recall/ags_mute_recycling.h \ src/ags/audio/recall/ags_peak_audio_signal.h \ src/ags/audio/recall/ags_peak_channel.h \ src/ags/audio/recall/ags_peak_channel_run.h \ src/ags/audio/recall/ags_peak_recycling.h \ src/ags/audio/recall/ags_play_audio_file.h \ src/ags/audio/recall/ags_play_audio.h \ src/ags/audio/recall/ags_play_audio_signal.h \ src/ags/audio/recall/ags_play_channel.h \ src/ags/audio/recall/ags_play_channel_run.h \ src/ags/audio/recall/ags_play_channel_run_master.h \ src/ags/audio/recall/ags_play_notation_audio.h \ src/ags/audio/recall/ags_play_notation_audio_run.h \ src/ags/audio/recall/ags_play_note.h \ src/ags/audio/recall/ags_play_pattern.h \ src/ags/audio/recall/ags_play_recycling.h \ src/ags/audio/recall/ags_stream_audio_signal.h \ src/ags/audio/recall/ags_stream_channel.h \ src/ags/audio/recall/ags_stream_channel_run.h \ src/ags/audio/recall/ags_stream.h \ src/ags/audio/recall/ags_stream_recycling.h \ src/ags/audio/recall/ags_synths.h \ src/ags/audio/recall/ags_volume_audio_signal.h \ src/ags/audio/recall/ags_volume_channel.h \ src/ags/audio/recall/ags_volume_channel_run.h \ src/ags/audio/recall/ags_volume_recycling.h \ src/ags/audio/task/ags_add_audio.h \ src/ags/audio/task/ags_add_audio_signal.h \ src/ags/audio/task/ags_add_line_member.h \ src/ags/audio/task/ags_add_note.h \ src/ags/audio/task/ags_add_point_to_selection.h \ src/ags/audio/task/ags_add_recall_container.h \ src/ags/audio/task/ags_add_recall.h \ src/ags/audio/task/ags_add_region_to_selection.h \ src/ags/audio/task/ags_append_audio.h \ src/ags/audio/task/ags_append_audio_threaded.h \ src/ags/audio/task/ags_append_channel.h \ src/ags/audio/task/ags_append_recall.h \ src/ags/audio/task/ags_apply_synth.h \ src/ags/audio/task/ags_apply_wavetable.h \ src/ags/audio/task/ags_audio_set_recycling.h \ src/ags/audio/task/ags_blink_cell_pattern_cursor.h \ src/ags/audio/task/ags_cancel_audio.h \ src/ags/audio/task/ags_cancel_channel.h \ src/ags/audio/task/ags_cancel_recall.h \ src/ags/audio/task/ags_change_indicator.h \ src/ags/audio/task/ags_change_tact.h \ src/ags/audio/task/ags_channel_set_recycling.h \ src/ags/audio/task/ags_display_tact.h \ src/ags/audio/task/ags_export_output.h \ src/ags/audio/task/ags_free_selection.h \ src/ags/audio/task/ags_init_audio.h \ src/ags/audio/task/ags_init_channel.h \ src/ags/audio/task/ags_link_channel.h \ src/ags/audio/task/ags_open_file.h \ src/ags/audio/task/ags_open_single_file.h \ src/ags/audio/task/ags_remove_audio.h \ src/ags/audio/task/ags_remove_audio_signal.h \ src/ags/audio/task/ags_remove_note.h \ src/ags/audio/task/ags_remove_point_from_selection.h \ src/ags/audio/task/ags_remove_recall_container.h \ src/ags/audio/task/ags_remove_recall.h \ src/ags/audio/task/ags_remove_region_from_selection.h \ src/ags/audio/task/ags_resize_audio.h \ src/ags/audio/task/ags_save_file.h \ src/ags/audio/task/ags_scroll_on_play.h \ src/ags/audio/task/ags_seek_devout.h \ src/ags/audio/task/ags_set_audio_channels.h \ src/ags/audio/task/ags_set_buffer_size.h \ src/ags/audio/task/ags_set_devout_play_flags.h \ src/ags/audio/task/ags_set_output_device.h \ src/ags/audio/task/ags_set_samplerate.h \ src/ags/audio/task/ags_start_devout.h \ src/ags/audio/task/ags_start_read_file.h \ src/ags/audio/task/ags_toggle_led.h \ src/ags/audio/task/ags_toggle_pattern_bit.h \ src/ags/audio/task/ags_unref_audio_signal.h \ src/ags/audio/task/recall/ags_apply_bpm.h \ src/ags/audio/task/recall/ags_apply_sequencer_length.h \ src/ags/audio/task/recall/ags_apply_tact.h \ src/ags/audio/task/recall/ags_set_muted.h \ src/ags/file/ags_file_gui.h \ src/ags/file/ags_file.h \ src/ags/file/ags_file_id_ref.h \ src/ags/file/ags_file_launch.h \ src/ags/file/ags_file_link.h \ src/ags/file/ags_file_lookup.h \ src/ags/file/ags_file_read.h \ src/ags/file/ags_file_sound.h \ src/ags/file/ags_file_stock.h \ src/ags/file/ags_file_thread.h \ src/ags/file/ags_file_util.h \ src/ags/file/ags_file_write.h \ src/ags-lib/object/ags_connectable.h \ src/ags/lib/ags_combo_box_text.h \ src/ags/lib/ags_container.h \ src/ags/lib/ags_list.h \ src/ags/lib/ags_log.h \ src/ags/lib/ags_parameter.h \ src/ags/main.h \ src/ags/object/ags_applicable.h \ src/ags/object/ags_async_queue.h \ src/ags/object/ags_countable.h \ src/ags/object/ags_concurrent_tree.h \ src/ags/object/ags_dynamic_connectable.h \ src/ags/object/ags_effect.h \ src/ags/object/ags_main_loop.h \ src/ags/object/ags_marshal.h \ src/ags/object/ags_mutable.h \ src/ags/object/ags_packable.h \ src/ags/object/ags_persistable.h \ src/ags/object/ags_playable.h \ src/ags/object/ags_plugin.h \ src/ags/object/ags_portlet.h \ src/ags/object/ags_runnable.h \ src/ags/object/ags_seekable.h \ src/ags/object/ags_soundcard.h \ src/ags/object/ags_stackable.h \ src/ags/object/ags_tactable.h \ src/ags/object/ags_tree_iterator.h \ src/ags/plugin/ags_ladspa_manager.h \ src/ags/plugin/ags_plugin_factory.h \ src/ags/plugin/ags_plugin_stock.h \ src/ags/server/ags_registry.h \ src/ags/server/ags_remote_task.h \ src/ags/server/ags_server.h \ src/ags/thread/ags_audio_loop.h \ src/ags/thread/ags_audio_thread.h \ src/ags/thread/ags_autosave_thread.h \ src/ags/thread/ags_channel_thread.h \ src/ags/thread/ags_devout_thread.h \ src/ags/thread/ags_export_thread.h \ src/ags/thread/ags_gui_thread.h \ src/ags/thread/ags_history.h \ src/ags/thread/ags_iterator_thread.h \ src/ags/thread/ags_mutex_manager.h \ src/ags/thread/ags_record_thread.h \ src/ags/thread/ags_recycling_thread_callbacks.h \ src/ags/thread/ags_recycling_thread.h \ src/ags/thread/ags_returnable_thread.h \ src/ags/thread/ags_single_thread.h \ src/ags/thread/ags_task_completion.h \ src/ags/thread/ags_task_thread.h \ src/ags/thread/ags_thread_pool.h \ src/ags/thread/ags_thread-posix.h \ src/ags/thread/ags_timestamp_thread.h \ src/ags/util/ags_id_generator.h \ src/ags/widget/ags_cartesian.h \ src/ags/widget/ags_dial.h \ src/ags/widget/ags_expander.h \ src/ags/widget/ags_expander_set.h \ src/ags/widget/ags_hindicator.h \ src/ags/widget/ags_htimebar.h \ src/ags/widget/ags_indicator.h \ src/ags/widget/ags_led.h \ src/ags/widget/ags_menu.h \ src/ags/widget/ags_menu_item.h \ src/ags/widget/ags_option_menu.h \ src/ags/widget/ags_ruler.h \ src/ags/widget/ags_segment.h \ src/ags/widget/ags_table.h \ src/ags/widget/ags_timebar.h \ src/ags/widget/ags_vindicator.h \ src/ags/widget/ags_waveform.h \ src/ags/X/ags_audio_preferences_callbacks.h \ src/ags/X/ags_audio_preferences.h \ src/ags/X/ags_editor_callbacks.h \ src/ags/X/ags_editor.h \ src/ags/X/ags_export_window_callbacks.h \ src/ags/X/ags_export_window.h \ src/ags/X/ags_generic_preferences_callbacks.h \ src/ags/X/ags_generic_preferences.h \ src/ags/X/ags_ladspa_browser_callbacks.h \ src/ags/X/ags_ladspa_browser.h \ src/ags/X/ags_line_callbacks.h \ src/ags/X/ags_line_editor_callbacks.h \ src/ags/X/ags_line_editor.h \ src/ags/X/ags_line.h \ src/ags/X/ags_line_member_callbacks.h \ src/ags/X/ags_line_member_editor_callbacks.h \ src/ags/X/ags_line_member_editor.h \ src/ags/X/ags_line_member.h \ src/ags/X/ags_link_collection_editor_callbacks.h \ src/ags/X/ags_link_collection_editor.h \ src/ags/X/ags_link_editor_callbacks.h \ src/ags/X/ags_link_editor.h \ src/ags/X/ags_listing_editor_callbacks.h \ src/ags/X/ags_listing_editor.h \ src/ags/X/ags_machine_callbacks.h \ src/ags/X/ags_machine_editor_callbacks.h \ src/ags/X/ags_machine_editor.h \ src/ags/X/ags_machine.h \ src/ags/X/ags_menu_bar_callbacks.h \ src/ags/X/ags_menu_bar.h \ src/ags/X/ags_navigation_callbacks.h \ src/ags/X/ags_navigation.h \ src/ags/X/ags_pad_callbacks.h \ src/ags/X/ags_pad_editor_callbacks.h \ src/ags/X/ags_pad_editor.h \ src/ags/X/ags_pad.h \ src/ags/X/ags_performance_preferences_callbacks.h \ src/ags/X/ags_performance_preferences.h \ src/ags/X/ags_plugin_preferences_callbacks.h \ src/ags/X/ags_plugin_preferences.h \ src/ags/X/ags_preferences_callbacks.h \ src/ags/X/ags_preferences.h \ src/ags/X/ags_property_collection_editor_callbacks.h \ src/ags/X/ags_property_collection_editor.h \ src/ags/X/ags_property_editor_callbacks.h \ src/ags/X/ags_property_editor.h \ src/ags/X/ags_property_listing_editor.h \ src/ags/X/ags_resize_editor.h \ src/ags/X/ags_server_preferences_callbacks.h \ src/ags/X/ags_server_preferences.h \ src/ags/X/ags_window_callbacks.h \ src/ags/X/ags_window.h \ src/ags/X/editor/ags_file_selection_callbacks.h \ src/ags/X/editor/ags_file_selection.h \ src/ags/X/editor/ags_inline_player_callbacks.h \ src/ags/X/editor/ags_inline_player.h \ src/ags/X/editor/ags_machine_radio_button.h \ src/ags/X/editor/ags_machine_selection.h \ src/ags/X/editor/ags_machine_selector_callbacks.h \ src/ags/X/editor/ags_machine_selector.h \ src/ags/X/editor/ags_meter_callbacks.h \ src/ags/X/editor/ags_meter.h \ src/ags/X/editor/ags_notebook_callbacks.h \ src/ags/X/editor/ags_notebook.h \ src/ags/X/editor/ags_note_edit_callbacks.h \ src/ags/X/editor/ags_note_edit.h \ src/ags/X/editor/ags_pattern_edit_callbacks.h \ src/ags/X/editor/ags_pattern_edit.h \ src/ags/X/editor/ags_sf2_chooser_callbacks.h \ src/ags/X/editor/ags_sf2_chooser.h \ src/ags/X/editor/ags_toolbar_callbacks.h \ src/ags/X/editor/ags_toolbar.h \ src/ags/X/editor/ags_toolbar_mode_stock.h \ src/ags/X/machine/ags_cell_pattern_callbacks.h \ src/ags/X/machine/ags_cell_pattern.h \ src/ags/X/machine/ags_drum_callbacks.h \ src/ags/X/machine/ags_drum.h \ src/ags/X/machine/ags_drum_input_line_callbacks.h \ src/ags/X/machine/ags_drum_input_line.h \ src/ags/X/machine/ags_drum_input_pad_callbacks.h \ src/ags/X/machine/ags_drum_input_pad.h \ src/ags/X/machine/ags_drum_output_line_callbacks.h \ src/ags/X/machine/ags_drum_output_line.h \ src/ags/X/machine/ags_drum_output_pad_callbacks.h \ src/ags/X/machine/ags_drum_output_pad.h \ src/ags/X/machine/ags_ffplayer_callbacks.h \ src/ags/X/machine/ags_ffplayer.h \ src/ags/X/machine/ags_matrix_callbacks.h \ src/ags/X/machine/ags_matrix.h \ src/ags/X/machine/ags_mixer_callbacks.h \ src/ags/X/machine/ags_mixer.h \ src/ags/X/machine/ags_mixer_input_line.h \ src/ags/X/machine/ags_mixer_input_pad.h \ src/ags/X/machine/ags_oscillator_callbacks.h \ src/ags/X/machine/ags_oscillator.h \ src/ags/X/machine/ags_panel_callbacks.h \ src/ags/X/machine/ags_panel.h \ src/ags/X/machine/ags_panel_input_line.h \ src/ags/X/machine/ags_panel_input_pad.h \ src/ags/X/machine/ags_pattern_box_callbacks.h \ src/ags/X/machine/ags_pattern_box.h \ src/ags/X/machine/ags_synth_callbacks.h \ src/ags/X/machine/ags_synth.h \ src/ags/X/machine/ags_synth_input_line.h \ src/ags/X/machine/ags_synth_input_pad.h gsequencer_SOURCES = \ $(gsequencerheaders) \ src/ags/audio/ags_audio.c \ src/ags/audio/ags_audio_signal.c \ src/ags/audio/ags_channel.c \ src/ags/audio/ags_channel_iter.c \ src/ags/audio/ags_config.c \ src/ags/audio/ags_devout.c \ src/ags/audio/ags_garbage_collector.c \ src/ags/audio/ags_input.c \ src/ags/audio/ags_libao.c \ src/ags/audio/ags_notation.c \ src/ags/audio/ags_note.c \ src/ags/audio/ags_output.c \ src/ags/audio/ags_pattern.c \ src/ags/audio/ags_port.c \ src/ags/audio/ags_recall_audio.c \ src/ags/audio/ags_recall_audio_run.c \ src/ags/audio/ags_recall_audio_signal.c \ src/ags/audio/ags_recall.c \ src/ags/audio/ags_recall_channel.c \ src/ags/audio/ags_recall_channel_run.c \ src/ags/audio/ags_recall_channel_run_dummy.c \ src/ags/audio/ags_recall_container.c \ src/ags/audio/ags_recall_dependency.c \ src/ags/audio/ags_recall_factory.c \ src/ags/audio/ags_recall_id.c \ src/ags/audio/ags_recall_ladspa.c \ src/ags/audio/ags_recall_ladspa_run.c \ src/ags/audio/ags_recall_recycling.c \ src/ags/audio/ags_recall_recycling_dummy.c \ src/ags/audio/ags_recycling.c \ src/ags/audio/ags_recycling_container.c \ src/ags/audio/ags_synths.c \ src/ags/audio/ags_task.c \ src/ags/audio/ags_timestamp.c \ src/ags/audio/ags_timestamp_factory.c \ src/ags/audio/file/ags_audio_file.c \ src/ags/audio/file/ags_audio_file_xml.c \ src/ags/audio/file/ags_ipatch.c \ src/ags/audio/file/ags_ipatch_sf2_reader.c \ src/ags/audio/file/ags_sndfile.c \ src/ags/audio/recall/ags_amplifier.c \ src/ags/audio/recall/ags_buffer_audio_signal.c \ src/ags/audio/recall/ags_buffer_channel.c \ src/ags/audio/recall/ags_buffer_channel_run.c \ src/ags/audio/recall/ags_buffer_recycling.c \ src/ags/audio/recall/ags_clone_channel.c \ src/ags/audio/recall/ags_clone_channel_run.c \ src/ags/audio/recall/ags_copy_audio_signal.c \ src/ags/audio/recall/ags_copy_channel.c \ src/ags/audio/recall/ags_copy_channel_run.c \ src/ags/audio/recall/ags_copy_notation_audio.c \ src/ags/audio/recall/ags_copy_notation_audio_run.c \ src/ags/audio/recall/ags_copy_pattern_audio.c \ src/ags/audio/recall/ags_copy_pattern_audio_run.c \ src/ags/audio/recall/ags_copy_pattern_channel.c \ src/ags/audio/recall/ags_copy_pattern_channel_run.c \ src/ags/audio/recall/ags_copy_recycling.c \ src/ags/audio/recall/ags_count_beats_audio.c \ src/ags/audio/recall/ags_count_beats_audio_run.c \ src/ags/audio/recall/ags_delay_audio.c \ src/ags/audio/recall/ags_delay_audio_run.c \ src/ags/audio/recall/ags_echo.c \ src/ags/audio/recall/ags_envelope_audio_signal.c \ src/ags/audio/recall/ags_envelope_channel.c \ src/ags/audio/recall/ags_envelope_channel_run.c \ src/ags/audio/recall/ags_envelope_recycling.c \ src/ags/audio/recall/ags_loop_channel.c \ src/ags/audio/recall/ags_loop_channel_run.c \ src/ags/audio/recall/ags_mute_audio.c \ src/ags/audio/recall/ags_mute_audio_run.c \ src/ags/audio/recall/ags_mute_audio_signal.c \ src/ags/audio/recall/ags_mute_channel.c \ src/ags/audio/recall/ags_mute_channel_run.c \ src/ags/audio/recall/ags_mute_recycling.c \ src/ags/audio/recall/ags_peak_audio_signal.c \ src/ags/audio/recall/ags_peak_channel.c \ src/ags/audio/recall/ags_peak_channel_run.c \ src/ags/audio/recall/ags_peak_recycling.c \ src/ags/audio/recall/ags_play_audio.c \ src/ags/audio/recall/ags_play_audio_file.c \ src/ags/audio/recall/ags_play_audio_signal.c \ src/ags/audio/recall/ags_play_channel.c \ src/ags/audio/recall/ags_play_channel_run.c \ src/ags/audio/recall/ags_play_channel_run_master.c \ src/ags/audio/recall/ags_play_notation_audio.c \ src/ags/audio/recall/ags_play_notation_audio_run.c \ src/ags/audio/recall/ags_play_note.c \ src/ags/audio/recall/ags_play_pattern.c \ src/ags/audio/recall/ags_play_recycling.c \ src/ags/audio/recall/ags_stream_audio_signal.c \ src/ags/audio/recall/ags_stream.c \ src/ags/audio/recall/ags_stream_channel.c \ src/ags/audio/recall/ags_stream_channel_run.c \ src/ags/audio/recall/ags_stream_recycling.c \ src/ags/audio/recall/ags_volume_audio_signal.c \ src/ags/audio/recall/ags_volume_channel.c \ src/ags/audio/recall/ags_volume_channel_run.c \ src/ags/audio/recall/ags_volume_recycling.c \ src/ags/audio/task/ags_add_audio.c \ src/ags/audio/task/ags_add_audio_signal.c \ src/ags/audio/task/ags_add_line_member.c \ src/ags/audio/task/ags_add_note.c \ src/ags/audio/task/ags_add_point_to_selection.c \ src/ags/audio/task/ags_add_recall.c \ src/ags/audio/task/ags_add_recall_container.c \ src/ags/audio/task/ags_add_region_to_selection.c \ src/ags/audio/task/ags_append_audio.c \ src/ags/audio/task/ags_append_audio_threaded.c \ src/ags/audio/task/ags_append_channel.c \ src/ags/audio/task/ags_append_recall.c \ src/ags/audio/task/ags_apply_synth.c \ src/ags/audio/task/ags_apply_wavetable.c \ src/ags/audio/task/ags_audio_set_recycling.c \ src/ags/audio/task/ags_blink_cell_pattern_cursor.c \ src/ags/audio/task/ags_cancel_audio.c \ src/ags/audio/task/ags_cancel_channel.c \ src/ags/audio/task/ags_cancel_recall.c \ src/ags/audio/task/ags_change_indicator.c \ src/ags/audio/task/ags_change_tact.c \ src/ags/audio/task/ags_channel_set_recycling.c \ src/ags/audio/task/ags_display_tact.c \ src/ags/audio/task/ags_export_output.c \ src/ags/audio/task/ags_free_selection.c \ src/ags/audio/task/ags_init_audio.c \ src/ags/audio/task/ags_init_channel.c \ src/ags/audio/task/ags_link_channel.c \ src/ags/audio/task/ags_open_file.c \ src/ags/audio/task/ags_open_single_file.c \ src/ags/audio/task/ags_remove_audio.c \ src/ags/audio/task/ags_remove_audio_signal.c \ src/ags/audio/task/ags_remove_note.c \ src/ags/audio/task/ags_remove_point_from_selection.c \ src/ags/audio/task/ags_remove_recall.c \ src/ags/audio/task/ags_remove_recall_container.c \ src/ags/audio/task/ags_remove_region_from_selection.c \ src/ags/audio/task/ags_resize_audio.c \ src/ags/audio/task/ags_save_file.c \ src/ags/audio/task/ags_scroll_on_play.c \ src/ags/audio/task/ags_seek_devout.c \ src/ags/audio/task/ags_set_audio_channels.c \ src/ags/audio/task/ags_set_buffer_size.c \ src/ags/audio/task/ags_set_devout_play_flags.c \ src/ags/audio/task/ags_set_output_device.c \ src/ags/audio/task/ags_set_samplerate.c \ src/ags/audio/task/ags_start_devout.c \ src/ags/audio/task/ags_start_read_file.c \ src/ags/audio/task/ags_toggle_led.c \ src/ags/audio/task/ags_toggle_pattern_bit.c \ src/ags/audio/task/ags_unref_audio_signal.c \ src/ags/audio/task/recall/ags_apply_bpm.c \ src/ags/audio/task/recall/ags_apply_sequencer_length.c \ src/ags/audio/task/recall/ags_apply_tact.c \ src/ags/audio/task/recall/ags_set_muted.c \ src/ags/file/ags_file.c \ src/ags/file/ags_file_gui.c \ src/ags/file/ags_file_id_ref.c \ src/ags/file/ags_file_launch.c \ src/ags/file/ags_file_link.c \ src/ags/file/ags_file_lookup.c \ src/ags/file/ags_file_sound.c \ src/ags/file/ags_file_thread.c \ src/ags/file/ags_file_util.c \ src/ags-lib/object/ags_connectable.c \ src/ags/lib/ags_combo_box_text.c \ src/ags/lib/ags_container.c \ src/ags/lib/ags_list.c \ src/ags/lib/ags_log.c \ src/ags/lib/ags_parameter.c \ src/ags/main.c \ src/ags/object/ags_applicable.c \ src/ags/object/ags_async_queue.c \ src/ags/object/ags_countable.c \ src/ags/object/ags_concurrent_tree.c \ src/ags/object/ags_dynamic_connectable.c \ src/ags/object/ags_effect.c \ src/ags/object/ags_main_loop.c \ src/ags/object/ags_marshal.c \ src/ags/object/ags_mutable.c \ src/ags/object/ags_packable.c \ src/ags/object/ags_persistable.c \ src/ags/object/ags_playable.c \ src/ags/object/ags_plugin.c \ src/ags/object/ags_portlet.c \ src/ags/object/ags_runnable.c \ src/ags/object/ags_seekable.c \ src/ags/object/ags_soundcard.c \ src/ags/object/ags_stackable.c \ src/ags/object/ags_tactable.c \ src/ags/object/ags_tree_iterator.c \ src/ags/plugin/ags_ladspa_manager.c \ src/ags/plugin/ags_plugin_factory.c \ src/ags/server/ags_registry.c \ src/ags/server/ags_remote_task.c \ src/ags/server/ags_server.c \ src/ags/thread/ags_audio_loop.c \ src/ags/thread/ags_audio_thread.c \ src/ags/thread/ags_autosave_thread.c \ src/ags/thread/ags_channel_thread.c \ src/ags/thread/ags_devout_thread.c \ src/ags/thread/ags_export_thread.c \ src/ags/thread/ags_gui_thread.c \ src/ags/thread/ags_history.c \ src/ags/thread/ags_iterator_thread.c \ src/ags/thread/ags_mutex_manager.c \ src/ags/thread/ags_record_thread.c \ src/ags/thread/ags_recycling_thread.c \ src/ags/thread/ags_recycling_thread_callbacks.c \ src/ags/thread/ags_returnable_thread.c \ src/ags/thread/ags_single_thread.c \ src/ags/thread/ags_task_completion.c \ src/ags/thread/ags_task_thread.c \ src/ags/thread/ags_thread_pool.c \ src/ags/thread/ags_thread-posix.c \ src/ags/thread/ags_timestamp_thread.c \ src/ags/util/ags_id_generator.c \ src/ags/widget/ags_cartesian.c \ src/ags/widget/ags_dial.c \ src/ags/widget/ags_expander.c \ src/ags/widget/ags_expander_set.c \ src/ags/widget/ags_hindicator.c \ src/ags/widget/ags_htimebar.c \ src/ags/widget/ags_indicator.c \ src/ags/widget/ags_led.c \ src/ags/widget/ags_menu.c \ src/ags/widget/ags_menu_item.c \ src/ags/widget/ags_option_menu.c \ src/ags/widget/ags_ruler.c \ src/ags/widget/ags_segment.c \ src/ags/widget/ags_table.c \ src/ags/widget/ags_timebar.c \ src/ags/widget/ags_vindicator.c \ src/ags/widget/ags_waveform.c \ src/ags/X/ags_audio_preferences.c \ src/ags/X/ags_audio_preferences_callbacks.c \ src/ags/X/ags_editor.c \ src/ags/X/ags_editor_callbacks.c \ src/ags/X/ags_export_window.c \ src/ags/X/ags_export_window_callbacks.c \ src/ags/X/ags_generic_preferences.c \ src/ags/X/ags_generic_preferences_callbacks.c \ src/ags/X/ags_ladspa_browser.c \ src/ags/X/ags_ladspa_browser_callbacks.c \ src/ags/X/ags_line.c \ src/ags/X/ags_line_callbacks.c \ src/ags/X/ags_line_editor.c \ src/ags/X/ags_line_editor_callbacks.c \ src/ags/X/ags_line_member.c \ src/ags/X/ags_line_member_callbacks.c \ src/ags/X/ags_line_member_editor.c \ src/ags/X/ags_line_member_editor_callbacks.c \ src/ags/X/ags_link_collection_editor.c \ src/ags/X/ags_link_collection_editor_callbacks.c \ src/ags/X/ags_link_editor.c \ src/ags/X/ags_link_editor_callbacks.c \ src/ags/X/ags_listing_editor.c \ src/ags/X/ags_listing_editor_callbacks.c \ src/ags/X/ags_machine.c \ src/ags/X/ags_machine_callbacks.c \ src/ags/X/ags_machine_editor.c \ src/ags/X/ags_machine_editor_callbacks.c \ src/ags/X/ags_menu_bar.c \ src/ags/X/ags_menu_bar_callbacks.c \ src/ags/X/ags_navigation.c \ src/ags/X/ags_navigation_callbacks.c \ src/ags/X/ags_pad.c \ src/ags/X/ags_pad_callbacks.c \ src/ags/X/ags_pad_editor.c \ src/ags/X/ags_pad_editor_callbacks.c \ src/ags/X/ags_performance_preferences.c \ src/ags/X/ags_performance_preferences_callbacks.c \ src/ags/X/ags_plugin_preferences.c \ src/ags/X/ags_plugin_preferences_callbacks.c \ src/ags/X/ags_preferences.c \ src/ags/X/ags_preferences_callbacks.c \ src/ags/X/ags_property_collection_editor.c \ src/ags/X/ags_property_collection_editor_callbacks.c \ src/ags/X/ags_property_editor.c \ src/ags/X/ags_property_editor_callbacks.c \ src/ags/X/ags_property_listing_editor.c \ src/ags/X/ags_resize_editor.c \ src/ags/X/ags_server_preferences.c \ src/ags/X/ags_server_preferences_callbacks.c \ src/ags/X/ags_window.c \ src/ags/X/ags_window_callbacks.c \ src/ags/X/editor/ags_file_selection.c \ src/ags/X/editor/ags_file_selection_callbacks.c \ src/ags/X/editor/ags_inline_player.c \ src/ags/X/editor/ags_inline_player_callbacks.c \ src/ags/X/editor/ags_machine_radio_button.c \ src/ags/X/editor/ags_machine_selection.c \ src/ags/X/editor/ags_machine_selector.c \ src/ags/X/editor/ags_machine_selector_callbacks.c \ src/ags/X/editor/ags_meter.c \ src/ags/X/editor/ags_meter_callbacks.c \ src/ags/X/editor/ags_notebook.c \ src/ags/X/editor/ags_notebook_callbacks.c \ src/ags/X/editor/ags_note_edit.c \ src/ags/X/editor/ags_note_edit_callbacks.c \ src/ags/X/editor/ags_pattern_edit.c \ src/ags/X/editor/ags_pattern_edit_callbacks.c \ src/ags/X/editor/ags_sf2_chooser.c \ src/ags/X/editor/ags_sf2_chooser_callbacks.c \ src/ags/X/editor/ags_toolbar.c \ src/ags/X/editor/ags_toolbar_callbacks.c \ src/ags/X/machine/ags_cell_pattern.c \ src/ags/X/machine/ags_cell_pattern_callbacks.c \ src/ags/X/machine/ags_drum.c \ src/ags/X/machine/ags_drum_callbacks.c \ src/ags/X/machine/ags_drum_input_line.c \ src/ags/X/machine/ags_drum_input_line_callbacks.c \ src/ags/X/machine/ags_drum_input_pad.c \ src/ags/X/machine/ags_drum_input_pad_callbacks.c \ src/ags/X/machine/ags_drum_output_line.c \ src/ags/X/machine/ags_drum_output_line_callbacks.c \ src/ags/X/machine/ags_drum_output_pad.c \ src/ags/X/machine/ags_drum_output_pad_callbacks.c \ src/ags/X/machine/ags_ffplayer.c \ src/ags/X/machine/ags_ffplayer_callbacks.c \ src/ags/X/machine/ags_matrix.c \ src/ags/X/machine/ags_matrix_callbacks.c \ src/ags/X/machine/ags_mixer.c \ src/ags/X/machine/ags_mixer_callbacks.c \ src/ags/X/machine/ags_mixer_input_line.c \ src/ags/X/machine/ags_mixer_input_pad.c \ src/ags/X/machine/ags_oscillator.c \ src/ags/X/machine/ags_oscillator_callbacks.c \ src/ags/X/machine/ags_panel.c \ src/ags/X/machine/ags_panel_callbacks.c \ src/ags/X/machine/ags_panel_input_line.c \ src/ags/X/machine/ags_panel_input_pad.c \ src/ags/X/machine/ags_pattern_box_callbacks.c \ src/ags/X/machine/ags_pattern_box.c \ src/ags/X/machine/ags_synth.c \ src/ags/X/machine/ags_synth_callbacks.c \ src/ags/X/machine/ags_synth_input_line.c \ src/ags/X/machine/ags_synth_input_pad.c midi2xml_CFLAGS = $(CFLAGS) $(LIBXML2_CFLAGS) $(GOBJECT_CFLAGS) midi2xml_LDFLAGS = -ldl $(LDFLAGS) $(LIBXML2_LIBS) $(GOBJECT_LIBS) midi2xml_SOURCES = src/midi2ags/main.c src/midi2ags/midi/ags_midi_parser.c src/midi2ags/midi/ags_midi_parser.h src/midi2ags/object/ags_marshal.c src/midi2ags/object/ags_marshal.h all: config.h $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .c .o .obj am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @test -f $@ || rm -f stamp-h1 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) gsequencer$(EXEEXT): $(gsequencer_OBJECTS) $(gsequencer_DEPENDENCIES) $(EXTRA_gsequencer_DEPENDENCIES) @rm -f gsequencer$(EXEEXT) $(AM_V_CCLD)$(gsequencer_LINK) $(gsequencer_OBJECTS) $(gsequencer_LDADD) $(LIBS) midi2xml$(EXEEXT): $(midi2xml_OBJECTS) $(midi2xml_DEPENDENCIES) $(EXTRA_midi2xml_DEPENDENCIES) @rm -f midi2xml$(EXEEXT) $(AM_V_CCLD)$(midi2xml_LINK) $(midi2xml_OBJECTS) $(midi2xml_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_add_audio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_add_audio_signal.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_add_line_member.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_add_note.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_add_point_to_selection.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_add_recall.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_add_recall_container.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_add_region_to_selection.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_amplifier.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_append_audio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_append_audio_threaded.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_append_channel.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_append_recall.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_applicable.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_apply_bpm.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_apply_sequencer_length.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_apply_synth.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_apply_tact.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_apply_wavetable.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_async_queue.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_audio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_audio_file.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_audio_file_xml.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_audio_loop.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_audio_preferences.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_audio_preferences_callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_audio_set_recycling.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_audio_signal.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_audio_thread.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_autosave_thread.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_blink_cell_pattern_cursor.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_buffer_audio_signal.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_buffer_channel.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_buffer_channel_run.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_buffer_recycling.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_cancel_audio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_cancel_channel.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_cancel_recall.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_cartesian.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_cell_pattern.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_cell_pattern_callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_change_indicator.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_change_tact.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_channel.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_channel_iter.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_channel_set_recycling.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_channel_thread.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_clone_channel.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_clone_channel_run.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_combo_box_text.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_concurrent_tree.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_config.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_connectable.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_container.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_copy_audio_signal.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_copy_channel.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_copy_channel_run.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_copy_notation_audio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_copy_notation_audio_run.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_copy_pattern_audio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_copy_pattern_audio_run.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_copy_pattern_channel.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_copy_pattern_channel_run.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_copy_recycling.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_count_beats_audio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_count_beats_audio_run.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_countable.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_delay_audio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_delay_audio_run.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_devout.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_devout_thread.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_dial.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_display_tact.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_drum.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_drum_callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_drum_input_line.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_drum_input_line_callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_drum_input_pad.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_drum_input_pad_callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_drum_output_line.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_drum_output_line_callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_drum_output_pad.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_drum_output_pad_callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_dynamic_connectable.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_echo.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_editor.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_editor_callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_effect.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_envelope_audio_signal.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_envelope_channel.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_envelope_channel_run.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_envelope_recycling.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_expander.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_expander_set.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_export_output.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_export_thread.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_export_window.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_export_window_callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_ffplayer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_ffplayer_callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_file.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_file_gui.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_file_id_ref.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_file_launch.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_file_link.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_file_lookup.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_file_selection.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_file_selection_callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_file_sound.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_file_thread.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_file_util.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_free_selection.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_garbage_collector.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_generic_preferences.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_generic_preferences_callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_gui_thread.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_hindicator.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_history.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_htimebar.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_id_generator.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_indicator.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_init_audio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_init_channel.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_inline_player.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_inline_player_callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_input.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_ipatch.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_ipatch_sf2_reader.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_iterator_thread.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_ladspa_browser.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_ladspa_browser_callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_ladspa_manager.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_led.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_libao.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_line.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_line_callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_line_editor.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_line_editor_callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_line_member.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_line_member_callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_line_member_editor.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_line_member_editor_callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_link_channel.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_link_collection_editor.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_link_collection_editor_callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_link_editor.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_link_editor_callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_list.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_listing_editor.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_listing_editor_callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_log.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_loop_channel.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_loop_channel_run.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_machine.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_machine_callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_machine_editor.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_machine_editor_callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_machine_radio_button.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_machine_selection.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_machine_selector.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_machine_selector_callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_main_loop.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_marshal.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_matrix.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_matrix_callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_menu.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_menu_bar.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_menu_bar_callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_menu_item.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_meter.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_meter_callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_mixer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_mixer_callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_mixer_input_line.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_mixer_input_pad.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_mutable.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_mute_audio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_mute_audio_run.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_mute_audio_signal.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_mute_channel.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_mute_channel_run.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_mute_recycling.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_mutex_manager.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_navigation.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_navigation_callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_notation.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_note.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_note_edit.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_note_edit_callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_notebook.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_notebook_callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_open_file.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_open_single_file.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_option_menu.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_oscillator.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_oscillator_callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_output.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_packable.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_pad.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_pad_callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_pad_editor.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_pad_editor_callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_panel.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_panel_callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_panel_input_line.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_panel_input_pad.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_parameter.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_pattern.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_pattern_box.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_pattern_box_callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_pattern_edit.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_pattern_edit_callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_peak_audio_signal.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_peak_channel.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_peak_channel_run.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_peak_recycling.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_performance_preferences.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_performance_preferences_callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_persistable.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_play_audio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_play_audio_file.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_play_audio_signal.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_play_channel.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_play_channel_run.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_play_channel_run_master.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_play_notation_audio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_play_notation_audio_run.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_play_note.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_play_pattern.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_play_recycling.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_playable.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_plugin.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_plugin_factory.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_plugin_preferences.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_plugin_preferences_callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_port.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_portlet.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_preferences.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_preferences_callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_property_collection_editor.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_property_collection_editor_callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_property_editor.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_property_editor_callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_property_listing_editor.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_recall.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_recall_audio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_recall_audio_run.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_recall_audio_signal.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_recall_channel.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_recall_channel_run.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_recall_channel_run_dummy.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_recall_container.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_recall_dependency.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_recall_factory.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_recall_id.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_recall_ladspa.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_recall_ladspa_run.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_recall_recycling.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_recall_recycling_dummy.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_record_thread.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_recycling.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_recycling_container.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_recycling_thread.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_recycling_thread_callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_registry.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_remote_task.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_remove_audio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_remove_audio_signal.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_remove_note.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_remove_point_from_selection.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_remove_recall.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_remove_recall_container.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_remove_region_from_selection.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_resize_audio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_resize_editor.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_returnable_thread.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_ruler.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_runnable.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_save_file.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_scroll_on_play.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_seek_devout.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_seekable.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_segment.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_server.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_server_preferences.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_server_preferences_callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_set_audio_channels.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_set_buffer_size.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_set_devout_play_flags.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_set_muted.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_set_output_device.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_set_samplerate.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_sf2_chooser.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_sf2_chooser_callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_single_thread.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_sndfile.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_soundcard.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_stackable.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_start_devout.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_start_read_file.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_stream.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_stream_audio_signal.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_stream_channel.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_stream_channel_run.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_stream_recycling.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_synth.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_synth_callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_synth_input_line.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_synth_input_pad.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_synths.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_table.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_tactable.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_task.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_task_completion.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_task_thread.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_thread-posix.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_thread_pool.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_timebar.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_timestamp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_timestamp_factory.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_timestamp_thread.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_toggle_led.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_toggle_pattern_bit.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_toolbar.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_toolbar_callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_tree_iterator.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_unref_audio_signal.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_vindicator.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_volume_audio_signal.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_volume_channel.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_volume_channel_run.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_volume_recycling.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_waveform.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_window.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-ags_window_callbacks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsequencer-main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/midi2xml-ags_marshal.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/midi2xml-ags_midi_parser.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/midi2xml-main.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` gsequencer-ags_audio.o: src/ags/audio/ags_audio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_audio.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_audio.Tpo -c -o gsequencer-ags_audio.o `test -f 'src/ags/audio/ags_audio.c' || echo '$(srcdir)/'`src/ags/audio/ags_audio.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_audio.Tpo $(DEPDIR)/gsequencer-ags_audio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_audio.c' object='gsequencer-ags_audio.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_audio.o `test -f 'src/ags/audio/ags_audio.c' || echo '$(srcdir)/'`src/ags/audio/ags_audio.c gsequencer-ags_audio.obj: src/ags/audio/ags_audio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_audio.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_audio.Tpo -c -o gsequencer-ags_audio.obj `if test -f 'src/ags/audio/ags_audio.c'; then $(CYGPATH_W) 'src/ags/audio/ags_audio.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_audio.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_audio.Tpo $(DEPDIR)/gsequencer-ags_audio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_audio.c' object='gsequencer-ags_audio.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_audio.obj `if test -f 'src/ags/audio/ags_audio.c'; then $(CYGPATH_W) 'src/ags/audio/ags_audio.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_audio.c'; fi` gsequencer-ags_audio_signal.o: src/ags/audio/ags_audio_signal.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_audio_signal.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_audio_signal.Tpo -c -o gsequencer-ags_audio_signal.o `test -f 'src/ags/audio/ags_audio_signal.c' || echo '$(srcdir)/'`src/ags/audio/ags_audio_signal.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_audio_signal.Tpo $(DEPDIR)/gsequencer-ags_audio_signal.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_audio_signal.c' object='gsequencer-ags_audio_signal.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_audio_signal.o `test -f 'src/ags/audio/ags_audio_signal.c' || echo '$(srcdir)/'`src/ags/audio/ags_audio_signal.c gsequencer-ags_audio_signal.obj: src/ags/audio/ags_audio_signal.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_audio_signal.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_audio_signal.Tpo -c -o gsequencer-ags_audio_signal.obj `if test -f 'src/ags/audio/ags_audio_signal.c'; then $(CYGPATH_W) 'src/ags/audio/ags_audio_signal.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_audio_signal.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_audio_signal.Tpo $(DEPDIR)/gsequencer-ags_audio_signal.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_audio_signal.c' object='gsequencer-ags_audio_signal.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_audio_signal.obj `if test -f 'src/ags/audio/ags_audio_signal.c'; then $(CYGPATH_W) 'src/ags/audio/ags_audio_signal.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_audio_signal.c'; fi` gsequencer-ags_channel.o: src/ags/audio/ags_channel.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_channel.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_channel.Tpo -c -o gsequencer-ags_channel.o `test -f 'src/ags/audio/ags_channel.c' || echo '$(srcdir)/'`src/ags/audio/ags_channel.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_channel.Tpo $(DEPDIR)/gsequencer-ags_channel.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_channel.c' object='gsequencer-ags_channel.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_channel.o `test -f 'src/ags/audio/ags_channel.c' || echo '$(srcdir)/'`src/ags/audio/ags_channel.c gsequencer-ags_channel.obj: src/ags/audio/ags_channel.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_channel.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_channel.Tpo -c -o gsequencer-ags_channel.obj `if test -f 'src/ags/audio/ags_channel.c'; then $(CYGPATH_W) 'src/ags/audio/ags_channel.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_channel.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_channel.Tpo $(DEPDIR)/gsequencer-ags_channel.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_channel.c' object='gsequencer-ags_channel.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_channel.obj `if test -f 'src/ags/audio/ags_channel.c'; then $(CYGPATH_W) 'src/ags/audio/ags_channel.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_channel.c'; fi` gsequencer-ags_channel_iter.o: src/ags/audio/ags_channel_iter.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_channel_iter.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_channel_iter.Tpo -c -o gsequencer-ags_channel_iter.o `test -f 'src/ags/audio/ags_channel_iter.c' || echo '$(srcdir)/'`src/ags/audio/ags_channel_iter.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_channel_iter.Tpo $(DEPDIR)/gsequencer-ags_channel_iter.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_channel_iter.c' object='gsequencer-ags_channel_iter.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_channel_iter.o `test -f 'src/ags/audio/ags_channel_iter.c' || echo '$(srcdir)/'`src/ags/audio/ags_channel_iter.c gsequencer-ags_channel_iter.obj: src/ags/audio/ags_channel_iter.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_channel_iter.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_channel_iter.Tpo -c -o gsequencer-ags_channel_iter.obj `if test -f 'src/ags/audio/ags_channel_iter.c'; then $(CYGPATH_W) 'src/ags/audio/ags_channel_iter.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_channel_iter.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_channel_iter.Tpo $(DEPDIR)/gsequencer-ags_channel_iter.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_channel_iter.c' object='gsequencer-ags_channel_iter.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_channel_iter.obj `if test -f 'src/ags/audio/ags_channel_iter.c'; then $(CYGPATH_W) 'src/ags/audio/ags_channel_iter.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_channel_iter.c'; fi` gsequencer-ags_config.o: src/ags/audio/ags_config.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_config.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_config.Tpo -c -o gsequencer-ags_config.o `test -f 'src/ags/audio/ags_config.c' || echo '$(srcdir)/'`src/ags/audio/ags_config.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_config.Tpo $(DEPDIR)/gsequencer-ags_config.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_config.c' object='gsequencer-ags_config.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_config.o `test -f 'src/ags/audio/ags_config.c' || echo '$(srcdir)/'`src/ags/audio/ags_config.c gsequencer-ags_config.obj: src/ags/audio/ags_config.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_config.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_config.Tpo -c -o gsequencer-ags_config.obj `if test -f 'src/ags/audio/ags_config.c'; then $(CYGPATH_W) 'src/ags/audio/ags_config.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_config.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_config.Tpo $(DEPDIR)/gsequencer-ags_config.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_config.c' object='gsequencer-ags_config.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_config.obj `if test -f 'src/ags/audio/ags_config.c'; then $(CYGPATH_W) 'src/ags/audio/ags_config.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_config.c'; fi` gsequencer-ags_devout.o: src/ags/audio/ags_devout.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_devout.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_devout.Tpo -c -o gsequencer-ags_devout.o `test -f 'src/ags/audio/ags_devout.c' || echo '$(srcdir)/'`src/ags/audio/ags_devout.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_devout.Tpo $(DEPDIR)/gsequencer-ags_devout.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_devout.c' object='gsequencer-ags_devout.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_devout.o `test -f 'src/ags/audio/ags_devout.c' || echo '$(srcdir)/'`src/ags/audio/ags_devout.c gsequencer-ags_devout.obj: src/ags/audio/ags_devout.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_devout.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_devout.Tpo -c -o gsequencer-ags_devout.obj `if test -f 'src/ags/audio/ags_devout.c'; then $(CYGPATH_W) 'src/ags/audio/ags_devout.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_devout.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_devout.Tpo $(DEPDIR)/gsequencer-ags_devout.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_devout.c' object='gsequencer-ags_devout.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_devout.obj `if test -f 'src/ags/audio/ags_devout.c'; then $(CYGPATH_W) 'src/ags/audio/ags_devout.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_devout.c'; fi` gsequencer-ags_garbage_collector.o: src/ags/audio/ags_garbage_collector.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_garbage_collector.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_garbage_collector.Tpo -c -o gsequencer-ags_garbage_collector.o `test -f 'src/ags/audio/ags_garbage_collector.c' || echo '$(srcdir)/'`src/ags/audio/ags_garbage_collector.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_garbage_collector.Tpo $(DEPDIR)/gsequencer-ags_garbage_collector.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_garbage_collector.c' object='gsequencer-ags_garbage_collector.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_garbage_collector.o `test -f 'src/ags/audio/ags_garbage_collector.c' || echo '$(srcdir)/'`src/ags/audio/ags_garbage_collector.c gsequencer-ags_garbage_collector.obj: src/ags/audio/ags_garbage_collector.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_garbage_collector.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_garbage_collector.Tpo -c -o gsequencer-ags_garbage_collector.obj `if test -f 'src/ags/audio/ags_garbage_collector.c'; then $(CYGPATH_W) 'src/ags/audio/ags_garbage_collector.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_garbage_collector.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_garbage_collector.Tpo $(DEPDIR)/gsequencer-ags_garbage_collector.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_garbage_collector.c' object='gsequencer-ags_garbage_collector.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_garbage_collector.obj `if test -f 'src/ags/audio/ags_garbage_collector.c'; then $(CYGPATH_W) 'src/ags/audio/ags_garbage_collector.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_garbage_collector.c'; fi` gsequencer-ags_input.o: src/ags/audio/ags_input.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_input.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_input.Tpo -c -o gsequencer-ags_input.o `test -f 'src/ags/audio/ags_input.c' || echo '$(srcdir)/'`src/ags/audio/ags_input.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_input.Tpo $(DEPDIR)/gsequencer-ags_input.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_input.c' object='gsequencer-ags_input.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_input.o `test -f 'src/ags/audio/ags_input.c' || echo '$(srcdir)/'`src/ags/audio/ags_input.c gsequencer-ags_input.obj: src/ags/audio/ags_input.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_input.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_input.Tpo -c -o gsequencer-ags_input.obj `if test -f 'src/ags/audio/ags_input.c'; then $(CYGPATH_W) 'src/ags/audio/ags_input.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_input.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_input.Tpo $(DEPDIR)/gsequencer-ags_input.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_input.c' object='gsequencer-ags_input.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_input.obj `if test -f 'src/ags/audio/ags_input.c'; then $(CYGPATH_W) 'src/ags/audio/ags_input.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_input.c'; fi` gsequencer-ags_libao.o: src/ags/audio/ags_libao.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_libao.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_libao.Tpo -c -o gsequencer-ags_libao.o `test -f 'src/ags/audio/ags_libao.c' || echo '$(srcdir)/'`src/ags/audio/ags_libao.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_libao.Tpo $(DEPDIR)/gsequencer-ags_libao.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_libao.c' object='gsequencer-ags_libao.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_libao.o `test -f 'src/ags/audio/ags_libao.c' || echo '$(srcdir)/'`src/ags/audio/ags_libao.c gsequencer-ags_libao.obj: src/ags/audio/ags_libao.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_libao.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_libao.Tpo -c -o gsequencer-ags_libao.obj `if test -f 'src/ags/audio/ags_libao.c'; then $(CYGPATH_W) 'src/ags/audio/ags_libao.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_libao.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_libao.Tpo $(DEPDIR)/gsequencer-ags_libao.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_libao.c' object='gsequencer-ags_libao.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_libao.obj `if test -f 'src/ags/audio/ags_libao.c'; then $(CYGPATH_W) 'src/ags/audio/ags_libao.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_libao.c'; fi` gsequencer-ags_notation.o: src/ags/audio/ags_notation.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_notation.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_notation.Tpo -c -o gsequencer-ags_notation.o `test -f 'src/ags/audio/ags_notation.c' || echo '$(srcdir)/'`src/ags/audio/ags_notation.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_notation.Tpo $(DEPDIR)/gsequencer-ags_notation.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_notation.c' object='gsequencer-ags_notation.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_notation.o `test -f 'src/ags/audio/ags_notation.c' || echo '$(srcdir)/'`src/ags/audio/ags_notation.c gsequencer-ags_notation.obj: src/ags/audio/ags_notation.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_notation.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_notation.Tpo -c -o gsequencer-ags_notation.obj `if test -f 'src/ags/audio/ags_notation.c'; then $(CYGPATH_W) 'src/ags/audio/ags_notation.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_notation.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_notation.Tpo $(DEPDIR)/gsequencer-ags_notation.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_notation.c' object='gsequencer-ags_notation.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_notation.obj `if test -f 'src/ags/audio/ags_notation.c'; then $(CYGPATH_W) 'src/ags/audio/ags_notation.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_notation.c'; fi` gsequencer-ags_note.o: src/ags/audio/ags_note.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_note.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_note.Tpo -c -o gsequencer-ags_note.o `test -f 'src/ags/audio/ags_note.c' || echo '$(srcdir)/'`src/ags/audio/ags_note.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_note.Tpo $(DEPDIR)/gsequencer-ags_note.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_note.c' object='gsequencer-ags_note.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_note.o `test -f 'src/ags/audio/ags_note.c' || echo '$(srcdir)/'`src/ags/audio/ags_note.c gsequencer-ags_note.obj: src/ags/audio/ags_note.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_note.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_note.Tpo -c -o gsequencer-ags_note.obj `if test -f 'src/ags/audio/ags_note.c'; then $(CYGPATH_W) 'src/ags/audio/ags_note.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_note.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_note.Tpo $(DEPDIR)/gsequencer-ags_note.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_note.c' object='gsequencer-ags_note.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_note.obj `if test -f 'src/ags/audio/ags_note.c'; then $(CYGPATH_W) 'src/ags/audio/ags_note.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_note.c'; fi` gsequencer-ags_output.o: src/ags/audio/ags_output.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_output.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_output.Tpo -c -o gsequencer-ags_output.o `test -f 'src/ags/audio/ags_output.c' || echo '$(srcdir)/'`src/ags/audio/ags_output.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_output.Tpo $(DEPDIR)/gsequencer-ags_output.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_output.c' object='gsequencer-ags_output.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_output.o `test -f 'src/ags/audio/ags_output.c' || echo '$(srcdir)/'`src/ags/audio/ags_output.c gsequencer-ags_output.obj: src/ags/audio/ags_output.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_output.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_output.Tpo -c -o gsequencer-ags_output.obj `if test -f 'src/ags/audio/ags_output.c'; then $(CYGPATH_W) 'src/ags/audio/ags_output.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_output.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_output.Tpo $(DEPDIR)/gsequencer-ags_output.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_output.c' object='gsequencer-ags_output.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_output.obj `if test -f 'src/ags/audio/ags_output.c'; then $(CYGPATH_W) 'src/ags/audio/ags_output.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_output.c'; fi` gsequencer-ags_pattern.o: src/ags/audio/ags_pattern.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_pattern.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_pattern.Tpo -c -o gsequencer-ags_pattern.o `test -f 'src/ags/audio/ags_pattern.c' || echo '$(srcdir)/'`src/ags/audio/ags_pattern.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_pattern.Tpo $(DEPDIR)/gsequencer-ags_pattern.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_pattern.c' object='gsequencer-ags_pattern.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_pattern.o `test -f 'src/ags/audio/ags_pattern.c' || echo '$(srcdir)/'`src/ags/audio/ags_pattern.c gsequencer-ags_pattern.obj: src/ags/audio/ags_pattern.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_pattern.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_pattern.Tpo -c -o gsequencer-ags_pattern.obj `if test -f 'src/ags/audio/ags_pattern.c'; then $(CYGPATH_W) 'src/ags/audio/ags_pattern.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_pattern.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_pattern.Tpo $(DEPDIR)/gsequencer-ags_pattern.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_pattern.c' object='gsequencer-ags_pattern.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_pattern.obj `if test -f 'src/ags/audio/ags_pattern.c'; then $(CYGPATH_W) 'src/ags/audio/ags_pattern.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_pattern.c'; fi` gsequencer-ags_port.o: src/ags/audio/ags_port.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_port.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_port.Tpo -c -o gsequencer-ags_port.o `test -f 'src/ags/audio/ags_port.c' || echo '$(srcdir)/'`src/ags/audio/ags_port.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_port.Tpo $(DEPDIR)/gsequencer-ags_port.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_port.c' object='gsequencer-ags_port.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_port.o `test -f 'src/ags/audio/ags_port.c' || echo '$(srcdir)/'`src/ags/audio/ags_port.c gsequencer-ags_port.obj: src/ags/audio/ags_port.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_port.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_port.Tpo -c -o gsequencer-ags_port.obj `if test -f 'src/ags/audio/ags_port.c'; then $(CYGPATH_W) 'src/ags/audio/ags_port.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_port.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_port.Tpo $(DEPDIR)/gsequencer-ags_port.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_port.c' object='gsequencer-ags_port.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_port.obj `if test -f 'src/ags/audio/ags_port.c'; then $(CYGPATH_W) 'src/ags/audio/ags_port.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_port.c'; fi` gsequencer-ags_recall_audio.o: src/ags/audio/ags_recall_audio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_recall_audio.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_recall_audio.Tpo -c -o gsequencer-ags_recall_audio.o `test -f 'src/ags/audio/ags_recall_audio.c' || echo '$(srcdir)/'`src/ags/audio/ags_recall_audio.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_recall_audio.Tpo $(DEPDIR)/gsequencer-ags_recall_audio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_recall_audio.c' object='gsequencer-ags_recall_audio.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_recall_audio.o `test -f 'src/ags/audio/ags_recall_audio.c' || echo '$(srcdir)/'`src/ags/audio/ags_recall_audio.c gsequencer-ags_recall_audio.obj: src/ags/audio/ags_recall_audio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_recall_audio.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_recall_audio.Tpo -c -o gsequencer-ags_recall_audio.obj `if test -f 'src/ags/audio/ags_recall_audio.c'; then $(CYGPATH_W) 'src/ags/audio/ags_recall_audio.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_recall_audio.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_recall_audio.Tpo $(DEPDIR)/gsequencer-ags_recall_audio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_recall_audio.c' object='gsequencer-ags_recall_audio.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_recall_audio.obj `if test -f 'src/ags/audio/ags_recall_audio.c'; then $(CYGPATH_W) 'src/ags/audio/ags_recall_audio.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_recall_audio.c'; fi` gsequencer-ags_recall_audio_run.o: src/ags/audio/ags_recall_audio_run.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_recall_audio_run.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_recall_audio_run.Tpo -c -o gsequencer-ags_recall_audio_run.o `test -f 'src/ags/audio/ags_recall_audio_run.c' || echo '$(srcdir)/'`src/ags/audio/ags_recall_audio_run.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_recall_audio_run.Tpo $(DEPDIR)/gsequencer-ags_recall_audio_run.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_recall_audio_run.c' object='gsequencer-ags_recall_audio_run.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_recall_audio_run.o `test -f 'src/ags/audio/ags_recall_audio_run.c' || echo '$(srcdir)/'`src/ags/audio/ags_recall_audio_run.c gsequencer-ags_recall_audio_run.obj: src/ags/audio/ags_recall_audio_run.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_recall_audio_run.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_recall_audio_run.Tpo -c -o gsequencer-ags_recall_audio_run.obj `if test -f 'src/ags/audio/ags_recall_audio_run.c'; then $(CYGPATH_W) 'src/ags/audio/ags_recall_audio_run.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_recall_audio_run.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_recall_audio_run.Tpo $(DEPDIR)/gsequencer-ags_recall_audio_run.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_recall_audio_run.c' object='gsequencer-ags_recall_audio_run.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_recall_audio_run.obj `if test -f 'src/ags/audio/ags_recall_audio_run.c'; then $(CYGPATH_W) 'src/ags/audio/ags_recall_audio_run.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_recall_audio_run.c'; fi` gsequencer-ags_recall_audio_signal.o: src/ags/audio/ags_recall_audio_signal.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_recall_audio_signal.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_recall_audio_signal.Tpo -c -o gsequencer-ags_recall_audio_signal.o `test -f 'src/ags/audio/ags_recall_audio_signal.c' || echo '$(srcdir)/'`src/ags/audio/ags_recall_audio_signal.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_recall_audio_signal.Tpo $(DEPDIR)/gsequencer-ags_recall_audio_signal.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_recall_audio_signal.c' object='gsequencer-ags_recall_audio_signal.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_recall_audio_signal.o `test -f 'src/ags/audio/ags_recall_audio_signal.c' || echo '$(srcdir)/'`src/ags/audio/ags_recall_audio_signal.c gsequencer-ags_recall_audio_signal.obj: src/ags/audio/ags_recall_audio_signal.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_recall_audio_signal.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_recall_audio_signal.Tpo -c -o gsequencer-ags_recall_audio_signal.obj `if test -f 'src/ags/audio/ags_recall_audio_signal.c'; then $(CYGPATH_W) 'src/ags/audio/ags_recall_audio_signal.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_recall_audio_signal.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_recall_audio_signal.Tpo $(DEPDIR)/gsequencer-ags_recall_audio_signal.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_recall_audio_signal.c' object='gsequencer-ags_recall_audio_signal.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_recall_audio_signal.obj `if test -f 'src/ags/audio/ags_recall_audio_signal.c'; then $(CYGPATH_W) 'src/ags/audio/ags_recall_audio_signal.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_recall_audio_signal.c'; fi` gsequencer-ags_recall.o: src/ags/audio/ags_recall.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_recall.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_recall.Tpo -c -o gsequencer-ags_recall.o `test -f 'src/ags/audio/ags_recall.c' || echo '$(srcdir)/'`src/ags/audio/ags_recall.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_recall.Tpo $(DEPDIR)/gsequencer-ags_recall.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_recall.c' object='gsequencer-ags_recall.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_recall.o `test -f 'src/ags/audio/ags_recall.c' || echo '$(srcdir)/'`src/ags/audio/ags_recall.c gsequencer-ags_recall.obj: src/ags/audio/ags_recall.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_recall.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_recall.Tpo -c -o gsequencer-ags_recall.obj `if test -f 'src/ags/audio/ags_recall.c'; then $(CYGPATH_W) 'src/ags/audio/ags_recall.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_recall.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_recall.Tpo $(DEPDIR)/gsequencer-ags_recall.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_recall.c' object='gsequencer-ags_recall.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_recall.obj `if test -f 'src/ags/audio/ags_recall.c'; then $(CYGPATH_W) 'src/ags/audio/ags_recall.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_recall.c'; fi` gsequencer-ags_recall_channel.o: src/ags/audio/ags_recall_channel.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_recall_channel.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_recall_channel.Tpo -c -o gsequencer-ags_recall_channel.o `test -f 'src/ags/audio/ags_recall_channel.c' || echo '$(srcdir)/'`src/ags/audio/ags_recall_channel.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_recall_channel.Tpo $(DEPDIR)/gsequencer-ags_recall_channel.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_recall_channel.c' object='gsequencer-ags_recall_channel.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_recall_channel.o `test -f 'src/ags/audio/ags_recall_channel.c' || echo '$(srcdir)/'`src/ags/audio/ags_recall_channel.c gsequencer-ags_recall_channel.obj: src/ags/audio/ags_recall_channel.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_recall_channel.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_recall_channel.Tpo -c -o gsequencer-ags_recall_channel.obj `if test -f 'src/ags/audio/ags_recall_channel.c'; then $(CYGPATH_W) 'src/ags/audio/ags_recall_channel.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_recall_channel.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_recall_channel.Tpo $(DEPDIR)/gsequencer-ags_recall_channel.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_recall_channel.c' object='gsequencer-ags_recall_channel.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_recall_channel.obj `if test -f 'src/ags/audio/ags_recall_channel.c'; then $(CYGPATH_W) 'src/ags/audio/ags_recall_channel.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_recall_channel.c'; fi` gsequencer-ags_recall_channel_run.o: src/ags/audio/ags_recall_channel_run.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_recall_channel_run.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_recall_channel_run.Tpo -c -o gsequencer-ags_recall_channel_run.o `test -f 'src/ags/audio/ags_recall_channel_run.c' || echo '$(srcdir)/'`src/ags/audio/ags_recall_channel_run.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_recall_channel_run.Tpo $(DEPDIR)/gsequencer-ags_recall_channel_run.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_recall_channel_run.c' object='gsequencer-ags_recall_channel_run.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_recall_channel_run.o `test -f 'src/ags/audio/ags_recall_channel_run.c' || echo '$(srcdir)/'`src/ags/audio/ags_recall_channel_run.c gsequencer-ags_recall_channel_run.obj: src/ags/audio/ags_recall_channel_run.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_recall_channel_run.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_recall_channel_run.Tpo -c -o gsequencer-ags_recall_channel_run.obj `if test -f 'src/ags/audio/ags_recall_channel_run.c'; then $(CYGPATH_W) 'src/ags/audio/ags_recall_channel_run.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_recall_channel_run.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_recall_channel_run.Tpo $(DEPDIR)/gsequencer-ags_recall_channel_run.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_recall_channel_run.c' object='gsequencer-ags_recall_channel_run.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_recall_channel_run.obj `if test -f 'src/ags/audio/ags_recall_channel_run.c'; then $(CYGPATH_W) 'src/ags/audio/ags_recall_channel_run.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_recall_channel_run.c'; fi` gsequencer-ags_recall_channel_run_dummy.o: src/ags/audio/ags_recall_channel_run_dummy.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_recall_channel_run_dummy.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_recall_channel_run_dummy.Tpo -c -o gsequencer-ags_recall_channel_run_dummy.o `test -f 'src/ags/audio/ags_recall_channel_run_dummy.c' || echo '$(srcdir)/'`src/ags/audio/ags_recall_channel_run_dummy.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_recall_channel_run_dummy.Tpo $(DEPDIR)/gsequencer-ags_recall_channel_run_dummy.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_recall_channel_run_dummy.c' object='gsequencer-ags_recall_channel_run_dummy.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_recall_channel_run_dummy.o `test -f 'src/ags/audio/ags_recall_channel_run_dummy.c' || echo '$(srcdir)/'`src/ags/audio/ags_recall_channel_run_dummy.c gsequencer-ags_recall_channel_run_dummy.obj: src/ags/audio/ags_recall_channel_run_dummy.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_recall_channel_run_dummy.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_recall_channel_run_dummy.Tpo -c -o gsequencer-ags_recall_channel_run_dummy.obj `if test -f 'src/ags/audio/ags_recall_channel_run_dummy.c'; then $(CYGPATH_W) 'src/ags/audio/ags_recall_channel_run_dummy.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_recall_channel_run_dummy.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_recall_channel_run_dummy.Tpo $(DEPDIR)/gsequencer-ags_recall_channel_run_dummy.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_recall_channel_run_dummy.c' object='gsequencer-ags_recall_channel_run_dummy.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_recall_channel_run_dummy.obj `if test -f 'src/ags/audio/ags_recall_channel_run_dummy.c'; then $(CYGPATH_W) 'src/ags/audio/ags_recall_channel_run_dummy.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_recall_channel_run_dummy.c'; fi` gsequencer-ags_recall_container.o: src/ags/audio/ags_recall_container.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_recall_container.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_recall_container.Tpo -c -o gsequencer-ags_recall_container.o `test -f 'src/ags/audio/ags_recall_container.c' || echo '$(srcdir)/'`src/ags/audio/ags_recall_container.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_recall_container.Tpo $(DEPDIR)/gsequencer-ags_recall_container.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_recall_container.c' object='gsequencer-ags_recall_container.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_recall_container.o `test -f 'src/ags/audio/ags_recall_container.c' || echo '$(srcdir)/'`src/ags/audio/ags_recall_container.c gsequencer-ags_recall_container.obj: src/ags/audio/ags_recall_container.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_recall_container.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_recall_container.Tpo -c -o gsequencer-ags_recall_container.obj `if test -f 'src/ags/audio/ags_recall_container.c'; then $(CYGPATH_W) 'src/ags/audio/ags_recall_container.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_recall_container.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_recall_container.Tpo $(DEPDIR)/gsequencer-ags_recall_container.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_recall_container.c' object='gsequencer-ags_recall_container.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_recall_container.obj `if test -f 'src/ags/audio/ags_recall_container.c'; then $(CYGPATH_W) 'src/ags/audio/ags_recall_container.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_recall_container.c'; fi` gsequencer-ags_recall_dependency.o: src/ags/audio/ags_recall_dependency.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_recall_dependency.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_recall_dependency.Tpo -c -o gsequencer-ags_recall_dependency.o `test -f 'src/ags/audio/ags_recall_dependency.c' || echo '$(srcdir)/'`src/ags/audio/ags_recall_dependency.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_recall_dependency.Tpo $(DEPDIR)/gsequencer-ags_recall_dependency.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_recall_dependency.c' object='gsequencer-ags_recall_dependency.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_recall_dependency.o `test -f 'src/ags/audio/ags_recall_dependency.c' || echo '$(srcdir)/'`src/ags/audio/ags_recall_dependency.c gsequencer-ags_recall_dependency.obj: src/ags/audio/ags_recall_dependency.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_recall_dependency.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_recall_dependency.Tpo -c -o gsequencer-ags_recall_dependency.obj `if test -f 'src/ags/audio/ags_recall_dependency.c'; then $(CYGPATH_W) 'src/ags/audio/ags_recall_dependency.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_recall_dependency.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_recall_dependency.Tpo $(DEPDIR)/gsequencer-ags_recall_dependency.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_recall_dependency.c' object='gsequencer-ags_recall_dependency.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_recall_dependency.obj `if test -f 'src/ags/audio/ags_recall_dependency.c'; then $(CYGPATH_W) 'src/ags/audio/ags_recall_dependency.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_recall_dependency.c'; fi` gsequencer-ags_recall_factory.o: src/ags/audio/ags_recall_factory.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_recall_factory.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_recall_factory.Tpo -c -o gsequencer-ags_recall_factory.o `test -f 'src/ags/audio/ags_recall_factory.c' || echo '$(srcdir)/'`src/ags/audio/ags_recall_factory.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_recall_factory.Tpo $(DEPDIR)/gsequencer-ags_recall_factory.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_recall_factory.c' object='gsequencer-ags_recall_factory.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_recall_factory.o `test -f 'src/ags/audio/ags_recall_factory.c' || echo '$(srcdir)/'`src/ags/audio/ags_recall_factory.c gsequencer-ags_recall_factory.obj: src/ags/audio/ags_recall_factory.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_recall_factory.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_recall_factory.Tpo -c -o gsequencer-ags_recall_factory.obj `if test -f 'src/ags/audio/ags_recall_factory.c'; then $(CYGPATH_W) 'src/ags/audio/ags_recall_factory.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_recall_factory.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_recall_factory.Tpo $(DEPDIR)/gsequencer-ags_recall_factory.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_recall_factory.c' object='gsequencer-ags_recall_factory.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_recall_factory.obj `if test -f 'src/ags/audio/ags_recall_factory.c'; then $(CYGPATH_W) 'src/ags/audio/ags_recall_factory.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_recall_factory.c'; fi` gsequencer-ags_recall_id.o: src/ags/audio/ags_recall_id.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_recall_id.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_recall_id.Tpo -c -o gsequencer-ags_recall_id.o `test -f 'src/ags/audio/ags_recall_id.c' || echo '$(srcdir)/'`src/ags/audio/ags_recall_id.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_recall_id.Tpo $(DEPDIR)/gsequencer-ags_recall_id.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_recall_id.c' object='gsequencer-ags_recall_id.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_recall_id.o `test -f 'src/ags/audio/ags_recall_id.c' || echo '$(srcdir)/'`src/ags/audio/ags_recall_id.c gsequencer-ags_recall_id.obj: src/ags/audio/ags_recall_id.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_recall_id.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_recall_id.Tpo -c -o gsequencer-ags_recall_id.obj `if test -f 'src/ags/audio/ags_recall_id.c'; then $(CYGPATH_W) 'src/ags/audio/ags_recall_id.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_recall_id.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_recall_id.Tpo $(DEPDIR)/gsequencer-ags_recall_id.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_recall_id.c' object='gsequencer-ags_recall_id.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_recall_id.obj `if test -f 'src/ags/audio/ags_recall_id.c'; then $(CYGPATH_W) 'src/ags/audio/ags_recall_id.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_recall_id.c'; fi` gsequencer-ags_recall_ladspa.o: src/ags/audio/ags_recall_ladspa.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_recall_ladspa.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_recall_ladspa.Tpo -c -o gsequencer-ags_recall_ladspa.o `test -f 'src/ags/audio/ags_recall_ladspa.c' || echo '$(srcdir)/'`src/ags/audio/ags_recall_ladspa.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_recall_ladspa.Tpo $(DEPDIR)/gsequencer-ags_recall_ladspa.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_recall_ladspa.c' object='gsequencer-ags_recall_ladspa.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_recall_ladspa.o `test -f 'src/ags/audio/ags_recall_ladspa.c' || echo '$(srcdir)/'`src/ags/audio/ags_recall_ladspa.c gsequencer-ags_recall_ladspa.obj: src/ags/audio/ags_recall_ladspa.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_recall_ladspa.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_recall_ladspa.Tpo -c -o gsequencer-ags_recall_ladspa.obj `if test -f 'src/ags/audio/ags_recall_ladspa.c'; then $(CYGPATH_W) 'src/ags/audio/ags_recall_ladspa.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_recall_ladspa.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_recall_ladspa.Tpo $(DEPDIR)/gsequencer-ags_recall_ladspa.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_recall_ladspa.c' object='gsequencer-ags_recall_ladspa.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_recall_ladspa.obj `if test -f 'src/ags/audio/ags_recall_ladspa.c'; then $(CYGPATH_W) 'src/ags/audio/ags_recall_ladspa.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_recall_ladspa.c'; fi` gsequencer-ags_recall_ladspa_run.o: src/ags/audio/ags_recall_ladspa_run.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_recall_ladspa_run.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_recall_ladspa_run.Tpo -c -o gsequencer-ags_recall_ladspa_run.o `test -f 'src/ags/audio/ags_recall_ladspa_run.c' || echo '$(srcdir)/'`src/ags/audio/ags_recall_ladspa_run.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_recall_ladspa_run.Tpo $(DEPDIR)/gsequencer-ags_recall_ladspa_run.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_recall_ladspa_run.c' object='gsequencer-ags_recall_ladspa_run.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_recall_ladspa_run.o `test -f 'src/ags/audio/ags_recall_ladspa_run.c' || echo '$(srcdir)/'`src/ags/audio/ags_recall_ladspa_run.c gsequencer-ags_recall_ladspa_run.obj: src/ags/audio/ags_recall_ladspa_run.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_recall_ladspa_run.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_recall_ladspa_run.Tpo -c -o gsequencer-ags_recall_ladspa_run.obj `if test -f 'src/ags/audio/ags_recall_ladspa_run.c'; then $(CYGPATH_W) 'src/ags/audio/ags_recall_ladspa_run.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_recall_ladspa_run.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_recall_ladspa_run.Tpo $(DEPDIR)/gsequencer-ags_recall_ladspa_run.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_recall_ladspa_run.c' object='gsequencer-ags_recall_ladspa_run.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_recall_ladspa_run.obj `if test -f 'src/ags/audio/ags_recall_ladspa_run.c'; then $(CYGPATH_W) 'src/ags/audio/ags_recall_ladspa_run.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_recall_ladspa_run.c'; fi` gsequencer-ags_recall_recycling.o: src/ags/audio/ags_recall_recycling.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_recall_recycling.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_recall_recycling.Tpo -c -o gsequencer-ags_recall_recycling.o `test -f 'src/ags/audio/ags_recall_recycling.c' || echo '$(srcdir)/'`src/ags/audio/ags_recall_recycling.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_recall_recycling.Tpo $(DEPDIR)/gsequencer-ags_recall_recycling.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_recall_recycling.c' object='gsequencer-ags_recall_recycling.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_recall_recycling.o `test -f 'src/ags/audio/ags_recall_recycling.c' || echo '$(srcdir)/'`src/ags/audio/ags_recall_recycling.c gsequencer-ags_recall_recycling.obj: src/ags/audio/ags_recall_recycling.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_recall_recycling.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_recall_recycling.Tpo -c -o gsequencer-ags_recall_recycling.obj `if test -f 'src/ags/audio/ags_recall_recycling.c'; then $(CYGPATH_W) 'src/ags/audio/ags_recall_recycling.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_recall_recycling.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_recall_recycling.Tpo $(DEPDIR)/gsequencer-ags_recall_recycling.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_recall_recycling.c' object='gsequencer-ags_recall_recycling.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_recall_recycling.obj `if test -f 'src/ags/audio/ags_recall_recycling.c'; then $(CYGPATH_W) 'src/ags/audio/ags_recall_recycling.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_recall_recycling.c'; fi` gsequencer-ags_recall_recycling_dummy.o: src/ags/audio/ags_recall_recycling_dummy.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_recall_recycling_dummy.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_recall_recycling_dummy.Tpo -c -o gsequencer-ags_recall_recycling_dummy.o `test -f 'src/ags/audio/ags_recall_recycling_dummy.c' || echo '$(srcdir)/'`src/ags/audio/ags_recall_recycling_dummy.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_recall_recycling_dummy.Tpo $(DEPDIR)/gsequencer-ags_recall_recycling_dummy.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_recall_recycling_dummy.c' object='gsequencer-ags_recall_recycling_dummy.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_recall_recycling_dummy.o `test -f 'src/ags/audio/ags_recall_recycling_dummy.c' || echo '$(srcdir)/'`src/ags/audio/ags_recall_recycling_dummy.c gsequencer-ags_recall_recycling_dummy.obj: src/ags/audio/ags_recall_recycling_dummy.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_recall_recycling_dummy.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_recall_recycling_dummy.Tpo -c -o gsequencer-ags_recall_recycling_dummy.obj `if test -f 'src/ags/audio/ags_recall_recycling_dummy.c'; then $(CYGPATH_W) 'src/ags/audio/ags_recall_recycling_dummy.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_recall_recycling_dummy.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_recall_recycling_dummy.Tpo $(DEPDIR)/gsequencer-ags_recall_recycling_dummy.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_recall_recycling_dummy.c' object='gsequencer-ags_recall_recycling_dummy.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_recall_recycling_dummy.obj `if test -f 'src/ags/audio/ags_recall_recycling_dummy.c'; then $(CYGPATH_W) 'src/ags/audio/ags_recall_recycling_dummy.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_recall_recycling_dummy.c'; fi` gsequencer-ags_recycling.o: src/ags/audio/ags_recycling.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_recycling.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_recycling.Tpo -c -o gsequencer-ags_recycling.o `test -f 'src/ags/audio/ags_recycling.c' || echo '$(srcdir)/'`src/ags/audio/ags_recycling.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_recycling.Tpo $(DEPDIR)/gsequencer-ags_recycling.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_recycling.c' object='gsequencer-ags_recycling.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_recycling.o `test -f 'src/ags/audio/ags_recycling.c' || echo '$(srcdir)/'`src/ags/audio/ags_recycling.c gsequencer-ags_recycling.obj: src/ags/audio/ags_recycling.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_recycling.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_recycling.Tpo -c -o gsequencer-ags_recycling.obj `if test -f 'src/ags/audio/ags_recycling.c'; then $(CYGPATH_W) 'src/ags/audio/ags_recycling.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_recycling.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_recycling.Tpo $(DEPDIR)/gsequencer-ags_recycling.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_recycling.c' object='gsequencer-ags_recycling.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_recycling.obj `if test -f 'src/ags/audio/ags_recycling.c'; then $(CYGPATH_W) 'src/ags/audio/ags_recycling.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_recycling.c'; fi` gsequencer-ags_recycling_container.o: src/ags/audio/ags_recycling_container.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_recycling_container.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_recycling_container.Tpo -c -o gsequencer-ags_recycling_container.o `test -f 'src/ags/audio/ags_recycling_container.c' || echo '$(srcdir)/'`src/ags/audio/ags_recycling_container.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_recycling_container.Tpo $(DEPDIR)/gsequencer-ags_recycling_container.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_recycling_container.c' object='gsequencer-ags_recycling_container.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_recycling_container.o `test -f 'src/ags/audio/ags_recycling_container.c' || echo '$(srcdir)/'`src/ags/audio/ags_recycling_container.c gsequencer-ags_recycling_container.obj: src/ags/audio/ags_recycling_container.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_recycling_container.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_recycling_container.Tpo -c -o gsequencer-ags_recycling_container.obj `if test -f 'src/ags/audio/ags_recycling_container.c'; then $(CYGPATH_W) 'src/ags/audio/ags_recycling_container.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_recycling_container.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_recycling_container.Tpo $(DEPDIR)/gsequencer-ags_recycling_container.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_recycling_container.c' object='gsequencer-ags_recycling_container.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_recycling_container.obj `if test -f 'src/ags/audio/ags_recycling_container.c'; then $(CYGPATH_W) 'src/ags/audio/ags_recycling_container.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_recycling_container.c'; fi` gsequencer-ags_synths.o: src/ags/audio/ags_synths.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_synths.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_synths.Tpo -c -o gsequencer-ags_synths.o `test -f 'src/ags/audio/ags_synths.c' || echo '$(srcdir)/'`src/ags/audio/ags_synths.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_synths.Tpo $(DEPDIR)/gsequencer-ags_synths.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_synths.c' object='gsequencer-ags_synths.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_synths.o `test -f 'src/ags/audio/ags_synths.c' || echo '$(srcdir)/'`src/ags/audio/ags_synths.c gsequencer-ags_synths.obj: src/ags/audio/ags_synths.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_synths.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_synths.Tpo -c -o gsequencer-ags_synths.obj `if test -f 'src/ags/audio/ags_synths.c'; then $(CYGPATH_W) 'src/ags/audio/ags_synths.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_synths.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_synths.Tpo $(DEPDIR)/gsequencer-ags_synths.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_synths.c' object='gsequencer-ags_synths.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_synths.obj `if test -f 'src/ags/audio/ags_synths.c'; then $(CYGPATH_W) 'src/ags/audio/ags_synths.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_synths.c'; fi` gsequencer-ags_task.o: src/ags/audio/ags_task.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_task.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_task.Tpo -c -o gsequencer-ags_task.o `test -f 'src/ags/audio/ags_task.c' || echo '$(srcdir)/'`src/ags/audio/ags_task.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_task.Tpo $(DEPDIR)/gsequencer-ags_task.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_task.c' object='gsequencer-ags_task.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_task.o `test -f 'src/ags/audio/ags_task.c' || echo '$(srcdir)/'`src/ags/audio/ags_task.c gsequencer-ags_task.obj: src/ags/audio/ags_task.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_task.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_task.Tpo -c -o gsequencer-ags_task.obj `if test -f 'src/ags/audio/ags_task.c'; then $(CYGPATH_W) 'src/ags/audio/ags_task.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_task.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_task.Tpo $(DEPDIR)/gsequencer-ags_task.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_task.c' object='gsequencer-ags_task.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_task.obj `if test -f 'src/ags/audio/ags_task.c'; then $(CYGPATH_W) 'src/ags/audio/ags_task.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_task.c'; fi` gsequencer-ags_timestamp.o: src/ags/audio/ags_timestamp.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_timestamp.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_timestamp.Tpo -c -o gsequencer-ags_timestamp.o `test -f 'src/ags/audio/ags_timestamp.c' || echo '$(srcdir)/'`src/ags/audio/ags_timestamp.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_timestamp.Tpo $(DEPDIR)/gsequencer-ags_timestamp.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_timestamp.c' object='gsequencer-ags_timestamp.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_timestamp.o `test -f 'src/ags/audio/ags_timestamp.c' || echo '$(srcdir)/'`src/ags/audio/ags_timestamp.c gsequencer-ags_timestamp.obj: src/ags/audio/ags_timestamp.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_timestamp.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_timestamp.Tpo -c -o gsequencer-ags_timestamp.obj `if test -f 'src/ags/audio/ags_timestamp.c'; then $(CYGPATH_W) 'src/ags/audio/ags_timestamp.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_timestamp.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_timestamp.Tpo $(DEPDIR)/gsequencer-ags_timestamp.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_timestamp.c' object='gsequencer-ags_timestamp.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_timestamp.obj `if test -f 'src/ags/audio/ags_timestamp.c'; then $(CYGPATH_W) 'src/ags/audio/ags_timestamp.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_timestamp.c'; fi` gsequencer-ags_timestamp_factory.o: src/ags/audio/ags_timestamp_factory.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_timestamp_factory.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_timestamp_factory.Tpo -c -o gsequencer-ags_timestamp_factory.o `test -f 'src/ags/audio/ags_timestamp_factory.c' || echo '$(srcdir)/'`src/ags/audio/ags_timestamp_factory.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_timestamp_factory.Tpo $(DEPDIR)/gsequencer-ags_timestamp_factory.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_timestamp_factory.c' object='gsequencer-ags_timestamp_factory.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_timestamp_factory.o `test -f 'src/ags/audio/ags_timestamp_factory.c' || echo '$(srcdir)/'`src/ags/audio/ags_timestamp_factory.c gsequencer-ags_timestamp_factory.obj: src/ags/audio/ags_timestamp_factory.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_timestamp_factory.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_timestamp_factory.Tpo -c -o gsequencer-ags_timestamp_factory.obj `if test -f 'src/ags/audio/ags_timestamp_factory.c'; then $(CYGPATH_W) 'src/ags/audio/ags_timestamp_factory.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_timestamp_factory.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_timestamp_factory.Tpo $(DEPDIR)/gsequencer-ags_timestamp_factory.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/ags_timestamp_factory.c' object='gsequencer-ags_timestamp_factory.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_timestamp_factory.obj `if test -f 'src/ags/audio/ags_timestamp_factory.c'; then $(CYGPATH_W) 'src/ags/audio/ags_timestamp_factory.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/ags_timestamp_factory.c'; fi` gsequencer-ags_audio_file.o: src/ags/audio/file/ags_audio_file.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_audio_file.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_audio_file.Tpo -c -o gsequencer-ags_audio_file.o `test -f 'src/ags/audio/file/ags_audio_file.c' || echo '$(srcdir)/'`src/ags/audio/file/ags_audio_file.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_audio_file.Tpo $(DEPDIR)/gsequencer-ags_audio_file.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/file/ags_audio_file.c' object='gsequencer-ags_audio_file.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_audio_file.o `test -f 'src/ags/audio/file/ags_audio_file.c' || echo '$(srcdir)/'`src/ags/audio/file/ags_audio_file.c gsequencer-ags_audio_file.obj: src/ags/audio/file/ags_audio_file.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_audio_file.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_audio_file.Tpo -c -o gsequencer-ags_audio_file.obj `if test -f 'src/ags/audio/file/ags_audio_file.c'; then $(CYGPATH_W) 'src/ags/audio/file/ags_audio_file.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/file/ags_audio_file.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_audio_file.Tpo $(DEPDIR)/gsequencer-ags_audio_file.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/file/ags_audio_file.c' object='gsequencer-ags_audio_file.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_audio_file.obj `if test -f 'src/ags/audio/file/ags_audio_file.c'; then $(CYGPATH_W) 'src/ags/audio/file/ags_audio_file.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/file/ags_audio_file.c'; fi` gsequencer-ags_audio_file_xml.o: src/ags/audio/file/ags_audio_file_xml.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_audio_file_xml.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_audio_file_xml.Tpo -c -o gsequencer-ags_audio_file_xml.o `test -f 'src/ags/audio/file/ags_audio_file_xml.c' || echo '$(srcdir)/'`src/ags/audio/file/ags_audio_file_xml.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_audio_file_xml.Tpo $(DEPDIR)/gsequencer-ags_audio_file_xml.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/file/ags_audio_file_xml.c' object='gsequencer-ags_audio_file_xml.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_audio_file_xml.o `test -f 'src/ags/audio/file/ags_audio_file_xml.c' || echo '$(srcdir)/'`src/ags/audio/file/ags_audio_file_xml.c gsequencer-ags_audio_file_xml.obj: src/ags/audio/file/ags_audio_file_xml.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_audio_file_xml.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_audio_file_xml.Tpo -c -o gsequencer-ags_audio_file_xml.obj `if test -f 'src/ags/audio/file/ags_audio_file_xml.c'; then $(CYGPATH_W) 'src/ags/audio/file/ags_audio_file_xml.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/file/ags_audio_file_xml.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_audio_file_xml.Tpo $(DEPDIR)/gsequencer-ags_audio_file_xml.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/file/ags_audio_file_xml.c' object='gsequencer-ags_audio_file_xml.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_audio_file_xml.obj `if test -f 'src/ags/audio/file/ags_audio_file_xml.c'; then $(CYGPATH_W) 'src/ags/audio/file/ags_audio_file_xml.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/file/ags_audio_file_xml.c'; fi` gsequencer-ags_ipatch.o: src/ags/audio/file/ags_ipatch.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_ipatch.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_ipatch.Tpo -c -o gsequencer-ags_ipatch.o `test -f 'src/ags/audio/file/ags_ipatch.c' || echo '$(srcdir)/'`src/ags/audio/file/ags_ipatch.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_ipatch.Tpo $(DEPDIR)/gsequencer-ags_ipatch.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/file/ags_ipatch.c' object='gsequencer-ags_ipatch.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_ipatch.o `test -f 'src/ags/audio/file/ags_ipatch.c' || echo '$(srcdir)/'`src/ags/audio/file/ags_ipatch.c gsequencer-ags_ipatch.obj: src/ags/audio/file/ags_ipatch.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_ipatch.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_ipatch.Tpo -c -o gsequencer-ags_ipatch.obj `if test -f 'src/ags/audio/file/ags_ipatch.c'; then $(CYGPATH_W) 'src/ags/audio/file/ags_ipatch.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/file/ags_ipatch.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_ipatch.Tpo $(DEPDIR)/gsequencer-ags_ipatch.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/file/ags_ipatch.c' object='gsequencer-ags_ipatch.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_ipatch.obj `if test -f 'src/ags/audio/file/ags_ipatch.c'; then $(CYGPATH_W) 'src/ags/audio/file/ags_ipatch.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/file/ags_ipatch.c'; fi` gsequencer-ags_ipatch_sf2_reader.o: src/ags/audio/file/ags_ipatch_sf2_reader.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_ipatch_sf2_reader.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_ipatch_sf2_reader.Tpo -c -o gsequencer-ags_ipatch_sf2_reader.o `test -f 'src/ags/audio/file/ags_ipatch_sf2_reader.c' || echo '$(srcdir)/'`src/ags/audio/file/ags_ipatch_sf2_reader.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_ipatch_sf2_reader.Tpo $(DEPDIR)/gsequencer-ags_ipatch_sf2_reader.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/file/ags_ipatch_sf2_reader.c' object='gsequencer-ags_ipatch_sf2_reader.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_ipatch_sf2_reader.o `test -f 'src/ags/audio/file/ags_ipatch_sf2_reader.c' || echo '$(srcdir)/'`src/ags/audio/file/ags_ipatch_sf2_reader.c gsequencer-ags_ipatch_sf2_reader.obj: src/ags/audio/file/ags_ipatch_sf2_reader.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_ipatch_sf2_reader.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_ipatch_sf2_reader.Tpo -c -o gsequencer-ags_ipatch_sf2_reader.obj `if test -f 'src/ags/audio/file/ags_ipatch_sf2_reader.c'; then $(CYGPATH_W) 'src/ags/audio/file/ags_ipatch_sf2_reader.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/file/ags_ipatch_sf2_reader.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_ipatch_sf2_reader.Tpo $(DEPDIR)/gsequencer-ags_ipatch_sf2_reader.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/file/ags_ipatch_sf2_reader.c' object='gsequencer-ags_ipatch_sf2_reader.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_ipatch_sf2_reader.obj `if test -f 'src/ags/audio/file/ags_ipatch_sf2_reader.c'; then $(CYGPATH_W) 'src/ags/audio/file/ags_ipatch_sf2_reader.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/file/ags_ipatch_sf2_reader.c'; fi` gsequencer-ags_sndfile.o: src/ags/audio/file/ags_sndfile.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_sndfile.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_sndfile.Tpo -c -o gsequencer-ags_sndfile.o `test -f 'src/ags/audio/file/ags_sndfile.c' || echo '$(srcdir)/'`src/ags/audio/file/ags_sndfile.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_sndfile.Tpo $(DEPDIR)/gsequencer-ags_sndfile.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/file/ags_sndfile.c' object='gsequencer-ags_sndfile.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_sndfile.o `test -f 'src/ags/audio/file/ags_sndfile.c' || echo '$(srcdir)/'`src/ags/audio/file/ags_sndfile.c gsequencer-ags_sndfile.obj: src/ags/audio/file/ags_sndfile.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_sndfile.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_sndfile.Tpo -c -o gsequencer-ags_sndfile.obj `if test -f 'src/ags/audio/file/ags_sndfile.c'; then $(CYGPATH_W) 'src/ags/audio/file/ags_sndfile.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/file/ags_sndfile.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_sndfile.Tpo $(DEPDIR)/gsequencer-ags_sndfile.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/file/ags_sndfile.c' object='gsequencer-ags_sndfile.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_sndfile.obj `if test -f 'src/ags/audio/file/ags_sndfile.c'; then $(CYGPATH_W) 'src/ags/audio/file/ags_sndfile.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/file/ags_sndfile.c'; fi` gsequencer-ags_amplifier.o: src/ags/audio/recall/ags_amplifier.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_amplifier.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_amplifier.Tpo -c -o gsequencer-ags_amplifier.o `test -f 'src/ags/audio/recall/ags_amplifier.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_amplifier.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_amplifier.Tpo $(DEPDIR)/gsequencer-ags_amplifier.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_amplifier.c' object='gsequencer-ags_amplifier.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_amplifier.o `test -f 'src/ags/audio/recall/ags_amplifier.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_amplifier.c gsequencer-ags_amplifier.obj: src/ags/audio/recall/ags_amplifier.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_amplifier.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_amplifier.Tpo -c -o gsequencer-ags_amplifier.obj `if test -f 'src/ags/audio/recall/ags_amplifier.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_amplifier.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_amplifier.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_amplifier.Tpo $(DEPDIR)/gsequencer-ags_amplifier.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_amplifier.c' object='gsequencer-ags_amplifier.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_amplifier.obj `if test -f 'src/ags/audio/recall/ags_amplifier.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_amplifier.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_amplifier.c'; fi` gsequencer-ags_buffer_audio_signal.o: src/ags/audio/recall/ags_buffer_audio_signal.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_buffer_audio_signal.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_buffer_audio_signal.Tpo -c -o gsequencer-ags_buffer_audio_signal.o `test -f 'src/ags/audio/recall/ags_buffer_audio_signal.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_buffer_audio_signal.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_buffer_audio_signal.Tpo $(DEPDIR)/gsequencer-ags_buffer_audio_signal.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_buffer_audio_signal.c' object='gsequencer-ags_buffer_audio_signal.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_buffer_audio_signal.o `test -f 'src/ags/audio/recall/ags_buffer_audio_signal.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_buffer_audio_signal.c gsequencer-ags_buffer_audio_signal.obj: src/ags/audio/recall/ags_buffer_audio_signal.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_buffer_audio_signal.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_buffer_audio_signal.Tpo -c -o gsequencer-ags_buffer_audio_signal.obj `if test -f 'src/ags/audio/recall/ags_buffer_audio_signal.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_buffer_audio_signal.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_buffer_audio_signal.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_buffer_audio_signal.Tpo $(DEPDIR)/gsequencer-ags_buffer_audio_signal.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_buffer_audio_signal.c' object='gsequencer-ags_buffer_audio_signal.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_buffer_audio_signal.obj `if test -f 'src/ags/audio/recall/ags_buffer_audio_signal.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_buffer_audio_signal.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_buffer_audio_signal.c'; fi` gsequencer-ags_buffer_channel.o: src/ags/audio/recall/ags_buffer_channel.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_buffer_channel.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_buffer_channel.Tpo -c -o gsequencer-ags_buffer_channel.o `test -f 'src/ags/audio/recall/ags_buffer_channel.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_buffer_channel.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_buffer_channel.Tpo $(DEPDIR)/gsequencer-ags_buffer_channel.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_buffer_channel.c' object='gsequencer-ags_buffer_channel.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_buffer_channel.o `test -f 'src/ags/audio/recall/ags_buffer_channel.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_buffer_channel.c gsequencer-ags_buffer_channel.obj: src/ags/audio/recall/ags_buffer_channel.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_buffer_channel.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_buffer_channel.Tpo -c -o gsequencer-ags_buffer_channel.obj `if test -f 'src/ags/audio/recall/ags_buffer_channel.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_buffer_channel.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_buffer_channel.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_buffer_channel.Tpo $(DEPDIR)/gsequencer-ags_buffer_channel.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_buffer_channel.c' object='gsequencer-ags_buffer_channel.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_buffer_channel.obj `if test -f 'src/ags/audio/recall/ags_buffer_channel.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_buffer_channel.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_buffer_channel.c'; fi` gsequencer-ags_buffer_channel_run.o: src/ags/audio/recall/ags_buffer_channel_run.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_buffer_channel_run.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_buffer_channel_run.Tpo -c -o gsequencer-ags_buffer_channel_run.o `test -f 'src/ags/audio/recall/ags_buffer_channel_run.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_buffer_channel_run.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_buffer_channel_run.Tpo $(DEPDIR)/gsequencer-ags_buffer_channel_run.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_buffer_channel_run.c' object='gsequencer-ags_buffer_channel_run.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_buffer_channel_run.o `test -f 'src/ags/audio/recall/ags_buffer_channel_run.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_buffer_channel_run.c gsequencer-ags_buffer_channel_run.obj: src/ags/audio/recall/ags_buffer_channel_run.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_buffer_channel_run.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_buffer_channel_run.Tpo -c -o gsequencer-ags_buffer_channel_run.obj `if test -f 'src/ags/audio/recall/ags_buffer_channel_run.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_buffer_channel_run.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_buffer_channel_run.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_buffer_channel_run.Tpo $(DEPDIR)/gsequencer-ags_buffer_channel_run.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_buffer_channel_run.c' object='gsequencer-ags_buffer_channel_run.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_buffer_channel_run.obj `if test -f 'src/ags/audio/recall/ags_buffer_channel_run.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_buffer_channel_run.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_buffer_channel_run.c'; fi` gsequencer-ags_buffer_recycling.o: src/ags/audio/recall/ags_buffer_recycling.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_buffer_recycling.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_buffer_recycling.Tpo -c -o gsequencer-ags_buffer_recycling.o `test -f 'src/ags/audio/recall/ags_buffer_recycling.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_buffer_recycling.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_buffer_recycling.Tpo $(DEPDIR)/gsequencer-ags_buffer_recycling.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_buffer_recycling.c' object='gsequencer-ags_buffer_recycling.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_buffer_recycling.o `test -f 'src/ags/audio/recall/ags_buffer_recycling.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_buffer_recycling.c gsequencer-ags_buffer_recycling.obj: src/ags/audio/recall/ags_buffer_recycling.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_buffer_recycling.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_buffer_recycling.Tpo -c -o gsequencer-ags_buffer_recycling.obj `if test -f 'src/ags/audio/recall/ags_buffer_recycling.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_buffer_recycling.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_buffer_recycling.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_buffer_recycling.Tpo $(DEPDIR)/gsequencer-ags_buffer_recycling.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_buffer_recycling.c' object='gsequencer-ags_buffer_recycling.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_buffer_recycling.obj `if test -f 'src/ags/audio/recall/ags_buffer_recycling.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_buffer_recycling.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_buffer_recycling.c'; fi` gsequencer-ags_clone_channel.o: src/ags/audio/recall/ags_clone_channel.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_clone_channel.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_clone_channel.Tpo -c -o gsequencer-ags_clone_channel.o `test -f 'src/ags/audio/recall/ags_clone_channel.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_clone_channel.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_clone_channel.Tpo $(DEPDIR)/gsequencer-ags_clone_channel.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_clone_channel.c' object='gsequencer-ags_clone_channel.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_clone_channel.o `test -f 'src/ags/audio/recall/ags_clone_channel.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_clone_channel.c gsequencer-ags_clone_channel.obj: src/ags/audio/recall/ags_clone_channel.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_clone_channel.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_clone_channel.Tpo -c -o gsequencer-ags_clone_channel.obj `if test -f 'src/ags/audio/recall/ags_clone_channel.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_clone_channel.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_clone_channel.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_clone_channel.Tpo $(DEPDIR)/gsequencer-ags_clone_channel.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_clone_channel.c' object='gsequencer-ags_clone_channel.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_clone_channel.obj `if test -f 'src/ags/audio/recall/ags_clone_channel.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_clone_channel.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_clone_channel.c'; fi` gsequencer-ags_clone_channel_run.o: src/ags/audio/recall/ags_clone_channel_run.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_clone_channel_run.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_clone_channel_run.Tpo -c -o gsequencer-ags_clone_channel_run.o `test -f 'src/ags/audio/recall/ags_clone_channel_run.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_clone_channel_run.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_clone_channel_run.Tpo $(DEPDIR)/gsequencer-ags_clone_channel_run.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_clone_channel_run.c' object='gsequencer-ags_clone_channel_run.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_clone_channel_run.o `test -f 'src/ags/audio/recall/ags_clone_channel_run.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_clone_channel_run.c gsequencer-ags_clone_channel_run.obj: src/ags/audio/recall/ags_clone_channel_run.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_clone_channel_run.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_clone_channel_run.Tpo -c -o gsequencer-ags_clone_channel_run.obj `if test -f 'src/ags/audio/recall/ags_clone_channel_run.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_clone_channel_run.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_clone_channel_run.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_clone_channel_run.Tpo $(DEPDIR)/gsequencer-ags_clone_channel_run.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_clone_channel_run.c' object='gsequencer-ags_clone_channel_run.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_clone_channel_run.obj `if test -f 'src/ags/audio/recall/ags_clone_channel_run.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_clone_channel_run.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_clone_channel_run.c'; fi` gsequencer-ags_copy_audio_signal.o: src/ags/audio/recall/ags_copy_audio_signal.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_copy_audio_signal.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_copy_audio_signal.Tpo -c -o gsequencer-ags_copy_audio_signal.o `test -f 'src/ags/audio/recall/ags_copy_audio_signal.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_copy_audio_signal.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_copy_audio_signal.Tpo $(DEPDIR)/gsequencer-ags_copy_audio_signal.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_copy_audio_signal.c' object='gsequencer-ags_copy_audio_signal.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_copy_audio_signal.o `test -f 'src/ags/audio/recall/ags_copy_audio_signal.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_copy_audio_signal.c gsequencer-ags_copy_audio_signal.obj: src/ags/audio/recall/ags_copy_audio_signal.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_copy_audio_signal.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_copy_audio_signal.Tpo -c -o gsequencer-ags_copy_audio_signal.obj `if test -f 'src/ags/audio/recall/ags_copy_audio_signal.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_copy_audio_signal.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_copy_audio_signal.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_copy_audio_signal.Tpo $(DEPDIR)/gsequencer-ags_copy_audio_signal.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_copy_audio_signal.c' object='gsequencer-ags_copy_audio_signal.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_copy_audio_signal.obj `if test -f 'src/ags/audio/recall/ags_copy_audio_signal.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_copy_audio_signal.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_copy_audio_signal.c'; fi` gsequencer-ags_copy_channel.o: src/ags/audio/recall/ags_copy_channel.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_copy_channel.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_copy_channel.Tpo -c -o gsequencer-ags_copy_channel.o `test -f 'src/ags/audio/recall/ags_copy_channel.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_copy_channel.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_copy_channel.Tpo $(DEPDIR)/gsequencer-ags_copy_channel.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_copy_channel.c' object='gsequencer-ags_copy_channel.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_copy_channel.o `test -f 'src/ags/audio/recall/ags_copy_channel.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_copy_channel.c gsequencer-ags_copy_channel.obj: src/ags/audio/recall/ags_copy_channel.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_copy_channel.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_copy_channel.Tpo -c -o gsequencer-ags_copy_channel.obj `if test -f 'src/ags/audio/recall/ags_copy_channel.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_copy_channel.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_copy_channel.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_copy_channel.Tpo $(DEPDIR)/gsequencer-ags_copy_channel.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_copy_channel.c' object='gsequencer-ags_copy_channel.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_copy_channel.obj `if test -f 'src/ags/audio/recall/ags_copy_channel.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_copy_channel.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_copy_channel.c'; fi` gsequencer-ags_copy_channel_run.o: src/ags/audio/recall/ags_copy_channel_run.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_copy_channel_run.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_copy_channel_run.Tpo -c -o gsequencer-ags_copy_channel_run.o `test -f 'src/ags/audio/recall/ags_copy_channel_run.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_copy_channel_run.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_copy_channel_run.Tpo $(DEPDIR)/gsequencer-ags_copy_channel_run.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_copy_channel_run.c' object='gsequencer-ags_copy_channel_run.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_copy_channel_run.o `test -f 'src/ags/audio/recall/ags_copy_channel_run.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_copy_channel_run.c gsequencer-ags_copy_channel_run.obj: src/ags/audio/recall/ags_copy_channel_run.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_copy_channel_run.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_copy_channel_run.Tpo -c -o gsequencer-ags_copy_channel_run.obj `if test -f 'src/ags/audio/recall/ags_copy_channel_run.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_copy_channel_run.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_copy_channel_run.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_copy_channel_run.Tpo $(DEPDIR)/gsequencer-ags_copy_channel_run.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_copy_channel_run.c' object='gsequencer-ags_copy_channel_run.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_copy_channel_run.obj `if test -f 'src/ags/audio/recall/ags_copy_channel_run.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_copy_channel_run.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_copy_channel_run.c'; fi` gsequencer-ags_copy_notation_audio.o: src/ags/audio/recall/ags_copy_notation_audio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_copy_notation_audio.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_copy_notation_audio.Tpo -c -o gsequencer-ags_copy_notation_audio.o `test -f 'src/ags/audio/recall/ags_copy_notation_audio.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_copy_notation_audio.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_copy_notation_audio.Tpo $(DEPDIR)/gsequencer-ags_copy_notation_audio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_copy_notation_audio.c' object='gsequencer-ags_copy_notation_audio.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_copy_notation_audio.o `test -f 'src/ags/audio/recall/ags_copy_notation_audio.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_copy_notation_audio.c gsequencer-ags_copy_notation_audio.obj: src/ags/audio/recall/ags_copy_notation_audio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_copy_notation_audio.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_copy_notation_audio.Tpo -c -o gsequencer-ags_copy_notation_audio.obj `if test -f 'src/ags/audio/recall/ags_copy_notation_audio.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_copy_notation_audio.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_copy_notation_audio.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_copy_notation_audio.Tpo $(DEPDIR)/gsequencer-ags_copy_notation_audio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_copy_notation_audio.c' object='gsequencer-ags_copy_notation_audio.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_copy_notation_audio.obj `if test -f 'src/ags/audio/recall/ags_copy_notation_audio.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_copy_notation_audio.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_copy_notation_audio.c'; fi` gsequencer-ags_copy_notation_audio_run.o: src/ags/audio/recall/ags_copy_notation_audio_run.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_copy_notation_audio_run.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_copy_notation_audio_run.Tpo -c -o gsequencer-ags_copy_notation_audio_run.o `test -f 'src/ags/audio/recall/ags_copy_notation_audio_run.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_copy_notation_audio_run.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_copy_notation_audio_run.Tpo $(DEPDIR)/gsequencer-ags_copy_notation_audio_run.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_copy_notation_audio_run.c' object='gsequencer-ags_copy_notation_audio_run.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_copy_notation_audio_run.o `test -f 'src/ags/audio/recall/ags_copy_notation_audio_run.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_copy_notation_audio_run.c gsequencer-ags_copy_notation_audio_run.obj: src/ags/audio/recall/ags_copy_notation_audio_run.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_copy_notation_audio_run.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_copy_notation_audio_run.Tpo -c -o gsequencer-ags_copy_notation_audio_run.obj `if test -f 'src/ags/audio/recall/ags_copy_notation_audio_run.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_copy_notation_audio_run.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_copy_notation_audio_run.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_copy_notation_audio_run.Tpo $(DEPDIR)/gsequencer-ags_copy_notation_audio_run.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_copy_notation_audio_run.c' object='gsequencer-ags_copy_notation_audio_run.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_copy_notation_audio_run.obj `if test -f 'src/ags/audio/recall/ags_copy_notation_audio_run.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_copy_notation_audio_run.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_copy_notation_audio_run.c'; fi` gsequencer-ags_copy_pattern_audio.o: src/ags/audio/recall/ags_copy_pattern_audio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_copy_pattern_audio.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_copy_pattern_audio.Tpo -c -o gsequencer-ags_copy_pattern_audio.o `test -f 'src/ags/audio/recall/ags_copy_pattern_audio.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_copy_pattern_audio.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_copy_pattern_audio.Tpo $(DEPDIR)/gsequencer-ags_copy_pattern_audio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_copy_pattern_audio.c' object='gsequencer-ags_copy_pattern_audio.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_copy_pattern_audio.o `test -f 'src/ags/audio/recall/ags_copy_pattern_audio.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_copy_pattern_audio.c gsequencer-ags_copy_pattern_audio.obj: src/ags/audio/recall/ags_copy_pattern_audio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_copy_pattern_audio.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_copy_pattern_audio.Tpo -c -o gsequencer-ags_copy_pattern_audio.obj `if test -f 'src/ags/audio/recall/ags_copy_pattern_audio.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_copy_pattern_audio.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_copy_pattern_audio.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_copy_pattern_audio.Tpo $(DEPDIR)/gsequencer-ags_copy_pattern_audio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_copy_pattern_audio.c' object='gsequencer-ags_copy_pattern_audio.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_copy_pattern_audio.obj `if test -f 'src/ags/audio/recall/ags_copy_pattern_audio.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_copy_pattern_audio.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_copy_pattern_audio.c'; fi` gsequencer-ags_copy_pattern_audio_run.o: src/ags/audio/recall/ags_copy_pattern_audio_run.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_copy_pattern_audio_run.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_copy_pattern_audio_run.Tpo -c -o gsequencer-ags_copy_pattern_audio_run.o `test -f 'src/ags/audio/recall/ags_copy_pattern_audio_run.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_copy_pattern_audio_run.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_copy_pattern_audio_run.Tpo $(DEPDIR)/gsequencer-ags_copy_pattern_audio_run.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_copy_pattern_audio_run.c' object='gsequencer-ags_copy_pattern_audio_run.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_copy_pattern_audio_run.o `test -f 'src/ags/audio/recall/ags_copy_pattern_audio_run.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_copy_pattern_audio_run.c gsequencer-ags_copy_pattern_audio_run.obj: src/ags/audio/recall/ags_copy_pattern_audio_run.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_copy_pattern_audio_run.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_copy_pattern_audio_run.Tpo -c -o gsequencer-ags_copy_pattern_audio_run.obj `if test -f 'src/ags/audio/recall/ags_copy_pattern_audio_run.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_copy_pattern_audio_run.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_copy_pattern_audio_run.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_copy_pattern_audio_run.Tpo $(DEPDIR)/gsequencer-ags_copy_pattern_audio_run.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_copy_pattern_audio_run.c' object='gsequencer-ags_copy_pattern_audio_run.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_copy_pattern_audio_run.obj `if test -f 'src/ags/audio/recall/ags_copy_pattern_audio_run.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_copy_pattern_audio_run.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_copy_pattern_audio_run.c'; fi` gsequencer-ags_copy_pattern_channel.o: src/ags/audio/recall/ags_copy_pattern_channel.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_copy_pattern_channel.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_copy_pattern_channel.Tpo -c -o gsequencer-ags_copy_pattern_channel.o `test -f 'src/ags/audio/recall/ags_copy_pattern_channel.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_copy_pattern_channel.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_copy_pattern_channel.Tpo $(DEPDIR)/gsequencer-ags_copy_pattern_channel.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_copy_pattern_channel.c' object='gsequencer-ags_copy_pattern_channel.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_copy_pattern_channel.o `test -f 'src/ags/audio/recall/ags_copy_pattern_channel.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_copy_pattern_channel.c gsequencer-ags_copy_pattern_channel.obj: src/ags/audio/recall/ags_copy_pattern_channel.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_copy_pattern_channel.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_copy_pattern_channel.Tpo -c -o gsequencer-ags_copy_pattern_channel.obj `if test -f 'src/ags/audio/recall/ags_copy_pattern_channel.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_copy_pattern_channel.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_copy_pattern_channel.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_copy_pattern_channel.Tpo $(DEPDIR)/gsequencer-ags_copy_pattern_channel.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_copy_pattern_channel.c' object='gsequencer-ags_copy_pattern_channel.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_copy_pattern_channel.obj `if test -f 'src/ags/audio/recall/ags_copy_pattern_channel.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_copy_pattern_channel.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_copy_pattern_channel.c'; fi` gsequencer-ags_copy_pattern_channel_run.o: src/ags/audio/recall/ags_copy_pattern_channel_run.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_copy_pattern_channel_run.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_copy_pattern_channel_run.Tpo -c -o gsequencer-ags_copy_pattern_channel_run.o `test -f 'src/ags/audio/recall/ags_copy_pattern_channel_run.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_copy_pattern_channel_run.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_copy_pattern_channel_run.Tpo $(DEPDIR)/gsequencer-ags_copy_pattern_channel_run.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_copy_pattern_channel_run.c' object='gsequencer-ags_copy_pattern_channel_run.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_copy_pattern_channel_run.o `test -f 'src/ags/audio/recall/ags_copy_pattern_channel_run.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_copy_pattern_channel_run.c gsequencer-ags_copy_pattern_channel_run.obj: src/ags/audio/recall/ags_copy_pattern_channel_run.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_copy_pattern_channel_run.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_copy_pattern_channel_run.Tpo -c -o gsequencer-ags_copy_pattern_channel_run.obj `if test -f 'src/ags/audio/recall/ags_copy_pattern_channel_run.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_copy_pattern_channel_run.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_copy_pattern_channel_run.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_copy_pattern_channel_run.Tpo $(DEPDIR)/gsequencer-ags_copy_pattern_channel_run.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_copy_pattern_channel_run.c' object='gsequencer-ags_copy_pattern_channel_run.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_copy_pattern_channel_run.obj `if test -f 'src/ags/audio/recall/ags_copy_pattern_channel_run.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_copy_pattern_channel_run.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_copy_pattern_channel_run.c'; fi` gsequencer-ags_copy_recycling.o: src/ags/audio/recall/ags_copy_recycling.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_copy_recycling.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_copy_recycling.Tpo -c -o gsequencer-ags_copy_recycling.o `test -f 'src/ags/audio/recall/ags_copy_recycling.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_copy_recycling.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_copy_recycling.Tpo $(DEPDIR)/gsequencer-ags_copy_recycling.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_copy_recycling.c' object='gsequencer-ags_copy_recycling.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_copy_recycling.o `test -f 'src/ags/audio/recall/ags_copy_recycling.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_copy_recycling.c gsequencer-ags_copy_recycling.obj: src/ags/audio/recall/ags_copy_recycling.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_copy_recycling.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_copy_recycling.Tpo -c -o gsequencer-ags_copy_recycling.obj `if test -f 'src/ags/audio/recall/ags_copy_recycling.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_copy_recycling.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_copy_recycling.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_copy_recycling.Tpo $(DEPDIR)/gsequencer-ags_copy_recycling.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_copy_recycling.c' object='gsequencer-ags_copy_recycling.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_copy_recycling.obj `if test -f 'src/ags/audio/recall/ags_copy_recycling.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_copy_recycling.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_copy_recycling.c'; fi` gsequencer-ags_count_beats_audio.o: src/ags/audio/recall/ags_count_beats_audio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_count_beats_audio.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_count_beats_audio.Tpo -c -o gsequencer-ags_count_beats_audio.o `test -f 'src/ags/audio/recall/ags_count_beats_audio.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_count_beats_audio.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_count_beats_audio.Tpo $(DEPDIR)/gsequencer-ags_count_beats_audio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_count_beats_audio.c' object='gsequencer-ags_count_beats_audio.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_count_beats_audio.o `test -f 'src/ags/audio/recall/ags_count_beats_audio.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_count_beats_audio.c gsequencer-ags_count_beats_audio.obj: src/ags/audio/recall/ags_count_beats_audio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_count_beats_audio.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_count_beats_audio.Tpo -c -o gsequencer-ags_count_beats_audio.obj `if test -f 'src/ags/audio/recall/ags_count_beats_audio.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_count_beats_audio.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_count_beats_audio.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_count_beats_audio.Tpo $(DEPDIR)/gsequencer-ags_count_beats_audio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_count_beats_audio.c' object='gsequencer-ags_count_beats_audio.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_count_beats_audio.obj `if test -f 'src/ags/audio/recall/ags_count_beats_audio.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_count_beats_audio.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_count_beats_audio.c'; fi` gsequencer-ags_count_beats_audio_run.o: src/ags/audio/recall/ags_count_beats_audio_run.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_count_beats_audio_run.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_count_beats_audio_run.Tpo -c -o gsequencer-ags_count_beats_audio_run.o `test -f 'src/ags/audio/recall/ags_count_beats_audio_run.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_count_beats_audio_run.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_count_beats_audio_run.Tpo $(DEPDIR)/gsequencer-ags_count_beats_audio_run.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_count_beats_audio_run.c' object='gsequencer-ags_count_beats_audio_run.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_count_beats_audio_run.o `test -f 'src/ags/audio/recall/ags_count_beats_audio_run.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_count_beats_audio_run.c gsequencer-ags_count_beats_audio_run.obj: src/ags/audio/recall/ags_count_beats_audio_run.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_count_beats_audio_run.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_count_beats_audio_run.Tpo -c -o gsequencer-ags_count_beats_audio_run.obj `if test -f 'src/ags/audio/recall/ags_count_beats_audio_run.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_count_beats_audio_run.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_count_beats_audio_run.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_count_beats_audio_run.Tpo $(DEPDIR)/gsequencer-ags_count_beats_audio_run.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_count_beats_audio_run.c' object='gsequencer-ags_count_beats_audio_run.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_count_beats_audio_run.obj `if test -f 'src/ags/audio/recall/ags_count_beats_audio_run.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_count_beats_audio_run.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_count_beats_audio_run.c'; fi` gsequencer-ags_delay_audio.o: src/ags/audio/recall/ags_delay_audio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_delay_audio.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_delay_audio.Tpo -c -o gsequencer-ags_delay_audio.o `test -f 'src/ags/audio/recall/ags_delay_audio.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_delay_audio.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_delay_audio.Tpo $(DEPDIR)/gsequencer-ags_delay_audio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_delay_audio.c' object='gsequencer-ags_delay_audio.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_delay_audio.o `test -f 'src/ags/audio/recall/ags_delay_audio.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_delay_audio.c gsequencer-ags_delay_audio.obj: src/ags/audio/recall/ags_delay_audio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_delay_audio.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_delay_audio.Tpo -c -o gsequencer-ags_delay_audio.obj `if test -f 'src/ags/audio/recall/ags_delay_audio.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_delay_audio.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_delay_audio.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_delay_audio.Tpo $(DEPDIR)/gsequencer-ags_delay_audio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_delay_audio.c' object='gsequencer-ags_delay_audio.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_delay_audio.obj `if test -f 'src/ags/audio/recall/ags_delay_audio.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_delay_audio.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_delay_audio.c'; fi` gsequencer-ags_delay_audio_run.o: src/ags/audio/recall/ags_delay_audio_run.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_delay_audio_run.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_delay_audio_run.Tpo -c -o gsequencer-ags_delay_audio_run.o `test -f 'src/ags/audio/recall/ags_delay_audio_run.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_delay_audio_run.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_delay_audio_run.Tpo $(DEPDIR)/gsequencer-ags_delay_audio_run.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_delay_audio_run.c' object='gsequencer-ags_delay_audio_run.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_delay_audio_run.o `test -f 'src/ags/audio/recall/ags_delay_audio_run.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_delay_audio_run.c gsequencer-ags_delay_audio_run.obj: src/ags/audio/recall/ags_delay_audio_run.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_delay_audio_run.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_delay_audio_run.Tpo -c -o gsequencer-ags_delay_audio_run.obj `if test -f 'src/ags/audio/recall/ags_delay_audio_run.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_delay_audio_run.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_delay_audio_run.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_delay_audio_run.Tpo $(DEPDIR)/gsequencer-ags_delay_audio_run.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_delay_audio_run.c' object='gsequencer-ags_delay_audio_run.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_delay_audio_run.obj `if test -f 'src/ags/audio/recall/ags_delay_audio_run.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_delay_audio_run.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_delay_audio_run.c'; fi` gsequencer-ags_echo.o: src/ags/audio/recall/ags_echo.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_echo.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_echo.Tpo -c -o gsequencer-ags_echo.o `test -f 'src/ags/audio/recall/ags_echo.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_echo.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_echo.Tpo $(DEPDIR)/gsequencer-ags_echo.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_echo.c' object='gsequencer-ags_echo.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_echo.o `test -f 'src/ags/audio/recall/ags_echo.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_echo.c gsequencer-ags_echo.obj: src/ags/audio/recall/ags_echo.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_echo.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_echo.Tpo -c -o gsequencer-ags_echo.obj `if test -f 'src/ags/audio/recall/ags_echo.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_echo.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_echo.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_echo.Tpo $(DEPDIR)/gsequencer-ags_echo.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_echo.c' object='gsequencer-ags_echo.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_echo.obj `if test -f 'src/ags/audio/recall/ags_echo.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_echo.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_echo.c'; fi` gsequencer-ags_envelope_audio_signal.o: src/ags/audio/recall/ags_envelope_audio_signal.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_envelope_audio_signal.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_envelope_audio_signal.Tpo -c -o gsequencer-ags_envelope_audio_signal.o `test -f 'src/ags/audio/recall/ags_envelope_audio_signal.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_envelope_audio_signal.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_envelope_audio_signal.Tpo $(DEPDIR)/gsequencer-ags_envelope_audio_signal.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_envelope_audio_signal.c' object='gsequencer-ags_envelope_audio_signal.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_envelope_audio_signal.o `test -f 'src/ags/audio/recall/ags_envelope_audio_signal.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_envelope_audio_signal.c gsequencer-ags_envelope_audio_signal.obj: src/ags/audio/recall/ags_envelope_audio_signal.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_envelope_audio_signal.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_envelope_audio_signal.Tpo -c -o gsequencer-ags_envelope_audio_signal.obj `if test -f 'src/ags/audio/recall/ags_envelope_audio_signal.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_envelope_audio_signal.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_envelope_audio_signal.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_envelope_audio_signal.Tpo $(DEPDIR)/gsequencer-ags_envelope_audio_signal.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_envelope_audio_signal.c' object='gsequencer-ags_envelope_audio_signal.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_envelope_audio_signal.obj `if test -f 'src/ags/audio/recall/ags_envelope_audio_signal.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_envelope_audio_signal.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_envelope_audio_signal.c'; fi` gsequencer-ags_envelope_channel.o: src/ags/audio/recall/ags_envelope_channel.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_envelope_channel.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_envelope_channel.Tpo -c -o gsequencer-ags_envelope_channel.o `test -f 'src/ags/audio/recall/ags_envelope_channel.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_envelope_channel.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_envelope_channel.Tpo $(DEPDIR)/gsequencer-ags_envelope_channel.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_envelope_channel.c' object='gsequencer-ags_envelope_channel.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_envelope_channel.o `test -f 'src/ags/audio/recall/ags_envelope_channel.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_envelope_channel.c gsequencer-ags_envelope_channel.obj: src/ags/audio/recall/ags_envelope_channel.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_envelope_channel.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_envelope_channel.Tpo -c -o gsequencer-ags_envelope_channel.obj `if test -f 'src/ags/audio/recall/ags_envelope_channel.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_envelope_channel.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_envelope_channel.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_envelope_channel.Tpo $(DEPDIR)/gsequencer-ags_envelope_channel.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_envelope_channel.c' object='gsequencer-ags_envelope_channel.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_envelope_channel.obj `if test -f 'src/ags/audio/recall/ags_envelope_channel.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_envelope_channel.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_envelope_channel.c'; fi` gsequencer-ags_envelope_channel_run.o: src/ags/audio/recall/ags_envelope_channel_run.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_envelope_channel_run.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_envelope_channel_run.Tpo -c -o gsequencer-ags_envelope_channel_run.o `test -f 'src/ags/audio/recall/ags_envelope_channel_run.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_envelope_channel_run.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_envelope_channel_run.Tpo $(DEPDIR)/gsequencer-ags_envelope_channel_run.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_envelope_channel_run.c' object='gsequencer-ags_envelope_channel_run.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_envelope_channel_run.o `test -f 'src/ags/audio/recall/ags_envelope_channel_run.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_envelope_channel_run.c gsequencer-ags_envelope_channel_run.obj: src/ags/audio/recall/ags_envelope_channel_run.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_envelope_channel_run.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_envelope_channel_run.Tpo -c -o gsequencer-ags_envelope_channel_run.obj `if test -f 'src/ags/audio/recall/ags_envelope_channel_run.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_envelope_channel_run.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_envelope_channel_run.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_envelope_channel_run.Tpo $(DEPDIR)/gsequencer-ags_envelope_channel_run.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_envelope_channel_run.c' object='gsequencer-ags_envelope_channel_run.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_envelope_channel_run.obj `if test -f 'src/ags/audio/recall/ags_envelope_channel_run.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_envelope_channel_run.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_envelope_channel_run.c'; fi` gsequencer-ags_envelope_recycling.o: src/ags/audio/recall/ags_envelope_recycling.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_envelope_recycling.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_envelope_recycling.Tpo -c -o gsequencer-ags_envelope_recycling.o `test -f 'src/ags/audio/recall/ags_envelope_recycling.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_envelope_recycling.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_envelope_recycling.Tpo $(DEPDIR)/gsequencer-ags_envelope_recycling.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_envelope_recycling.c' object='gsequencer-ags_envelope_recycling.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_envelope_recycling.o `test -f 'src/ags/audio/recall/ags_envelope_recycling.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_envelope_recycling.c gsequencer-ags_envelope_recycling.obj: src/ags/audio/recall/ags_envelope_recycling.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_envelope_recycling.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_envelope_recycling.Tpo -c -o gsequencer-ags_envelope_recycling.obj `if test -f 'src/ags/audio/recall/ags_envelope_recycling.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_envelope_recycling.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_envelope_recycling.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_envelope_recycling.Tpo $(DEPDIR)/gsequencer-ags_envelope_recycling.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_envelope_recycling.c' object='gsequencer-ags_envelope_recycling.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_envelope_recycling.obj `if test -f 'src/ags/audio/recall/ags_envelope_recycling.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_envelope_recycling.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_envelope_recycling.c'; fi` gsequencer-ags_loop_channel.o: src/ags/audio/recall/ags_loop_channel.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_loop_channel.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_loop_channel.Tpo -c -o gsequencer-ags_loop_channel.o `test -f 'src/ags/audio/recall/ags_loop_channel.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_loop_channel.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_loop_channel.Tpo $(DEPDIR)/gsequencer-ags_loop_channel.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_loop_channel.c' object='gsequencer-ags_loop_channel.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_loop_channel.o `test -f 'src/ags/audio/recall/ags_loop_channel.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_loop_channel.c gsequencer-ags_loop_channel.obj: src/ags/audio/recall/ags_loop_channel.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_loop_channel.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_loop_channel.Tpo -c -o gsequencer-ags_loop_channel.obj `if test -f 'src/ags/audio/recall/ags_loop_channel.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_loop_channel.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_loop_channel.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_loop_channel.Tpo $(DEPDIR)/gsequencer-ags_loop_channel.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_loop_channel.c' object='gsequencer-ags_loop_channel.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_loop_channel.obj `if test -f 'src/ags/audio/recall/ags_loop_channel.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_loop_channel.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_loop_channel.c'; fi` gsequencer-ags_loop_channel_run.o: src/ags/audio/recall/ags_loop_channel_run.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_loop_channel_run.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_loop_channel_run.Tpo -c -o gsequencer-ags_loop_channel_run.o `test -f 'src/ags/audio/recall/ags_loop_channel_run.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_loop_channel_run.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_loop_channel_run.Tpo $(DEPDIR)/gsequencer-ags_loop_channel_run.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_loop_channel_run.c' object='gsequencer-ags_loop_channel_run.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_loop_channel_run.o `test -f 'src/ags/audio/recall/ags_loop_channel_run.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_loop_channel_run.c gsequencer-ags_loop_channel_run.obj: src/ags/audio/recall/ags_loop_channel_run.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_loop_channel_run.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_loop_channel_run.Tpo -c -o gsequencer-ags_loop_channel_run.obj `if test -f 'src/ags/audio/recall/ags_loop_channel_run.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_loop_channel_run.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_loop_channel_run.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_loop_channel_run.Tpo $(DEPDIR)/gsequencer-ags_loop_channel_run.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_loop_channel_run.c' object='gsequencer-ags_loop_channel_run.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_loop_channel_run.obj `if test -f 'src/ags/audio/recall/ags_loop_channel_run.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_loop_channel_run.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_loop_channel_run.c'; fi` gsequencer-ags_mute_audio.o: src/ags/audio/recall/ags_mute_audio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_mute_audio.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_mute_audio.Tpo -c -o gsequencer-ags_mute_audio.o `test -f 'src/ags/audio/recall/ags_mute_audio.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_mute_audio.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_mute_audio.Tpo $(DEPDIR)/gsequencer-ags_mute_audio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_mute_audio.c' object='gsequencer-ags_mute_audio.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_mute_audio.o `test -f 'src/ags/audio/recall/ags_mute_audio.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_mute_audio.c gsequencer-ags_mute_audio.obj: src/ags/audio/recall/ags_mute_audio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_mute_audio.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_mute_audio.Tpo -c -o gsequencer-ags_mute_audio.obj `if test -f 'src/ags/audio/recall/ags_mute_audio.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_mute_audio.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_mute_audio.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_mute_audio.Tpo $(DEPDIR)/gsequencer-ags_mute_audio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_mute_audio.c' object='gsequencer-ags_mute_audio.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_mute_audio.obj `if test -f 'src/ags/audio/recall/ags_mute_audio.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_mute_audio.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_mute_audio.c'; fi` gsequencer-ags_mute_audio_run.o: src/ags/audio/recall/ags_mute_audio_run.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_mute_audio_run.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_mute_audio_run.Tpo -c -o gsequencer-ags_mute_audio_run.o `test -f 'src/ags/audio/recall/ags_mute_audio_run.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_mute_audio_run.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_mute_audio_run.Tpo $(DEPDIR)/gsequencer-ags_mute_audio_run.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_mute_audio_run.c' object='gsequencer-ags_mute_audio_run.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_mute_audio_run.o `test -f 'src/ags/audio/recall/ags_mute_audio_run.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_mute_audio_run.c gsequencer-ags_mute_audio_run.obj: src/ags/audio/recall/ags_mute_audio_run.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_mute_audio_run.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_mute_audio_run.Tpo -c -o gsequencer-ags_mute_audio_run.obj `if test -f 'src/ags/audio/recall/ags_mute_audio_run.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_mute_audio_run.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_mute_audio_run.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_mute_audio_run.Tpo $(DEPDIR)/gsequencer-ags_mute_audio_run.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_mute_audio_run.c' object='gsequencer-ags_mute_audio_run.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_mute_audio_run.obj `if test -f 'src/ags/audio/recall/ags_mute_audio_run.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_mute_audio_run.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_mute_audio_run.c'; fi` gsequencer-ags_mute_audio_signal.o: src/ags/audio/recall/ags_mute_audio_signal.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_mute_audio_signal.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_mute_audio_signal.Tpo -c -o gsequencer-ags_mute_audio_signal.o `test -f 'src/ags/audio/recall/ags_mute_audio_signal.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_mute_audio_signal.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_mute_audio_signal.Tpo $(DEPDIR)/gsequencer-ags_mute_audio_signal.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_mute_audio_signal.c' object='gsequencer-ags_mute_audio_signal.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_mute_audio_signal.o `test -f 'src/ags/audio/recall/ags_mute_audio_signal.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_mute_audio_signal.c gsequencer-ags_mute_audio_signal.obj: src/ags/audio/recall/ags_mute_audio_signal.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_mute_audio_signal.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_mute_audio_signal.Tpo -c -o gsequencer-ags_mute_audio_signal.obj `if test -f 'src/ags/audio/recall/ags_mute_audio_signal.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_mute_audio_signal.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_mute_audio_signal.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_mute_audio_signal.Tpo $(DEPDIR)/gsequencer-ags_mute_audio_signal.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_mute_audio_signal.c' object='gsequencer-ags_mute_audio_signal.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_mute_audio_signal.obj `if test -f 'src/ags/audio/recall/ags_mute_audio_signal.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_mute_audio_signal.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_mute_audio_signal.c'; fi` gsequencer-ags_mute_channel.o: src/ags/audio/recall/ags_mute_channel.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_mute_channel.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_mute_channel.Tpo -c -o gsequencer-ags_mute_channel.o `test -f 'src/ags/audio/recall/ags_mute_channel.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_mute_channel.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_mute_channel.Tpo $(DEPDIR)/gsequencer-ags_mute_channel.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_mute_channel.c' object='gsequencer-ags_mute_channel.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_mute_channel.o `test -f 'src/ags/audio/recall/ags_mute_channel.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_mute_channel.c gsequencer-ags_mute_channel.obj: src/ags/audio/recall/ags_mute_channel.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_mute_channel.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_mute_channel.Tpo -c -o gsequencer-ags_mute_channel.obj `if test -f 'src/ags/audio/recall/ags_mute_channel.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_mute_channel.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_mute_channel.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_mute_channel.Tpo $(DEPDIR)/gsequencer-ags_mute_channel.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_mute_channel.c' object='gsequencer-ags_mute_channel.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_mute_channel.obj `if test -f 'src/ags/audio/recall/ags_mute_channel.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_mute_channel.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_mute_channel.c'; fi` gsequencer-ags_mute_channel_run.o: src/ags/audio/recall/ags_mute_channel_run.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_mute_channel_run.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_mute_channel_run.Tpo -c -o gsequencer-ags_mute_channel_run.o `test -f 'src/ags/audio/recall/ags_mute_channel_run.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_mute_channel_run.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_mute_channel_run.Tpo $(DEPDIR)/gsequencer-ags_mute_channel_run.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_mute_channel_run.c' object='gsequencer-ags_mute_channel_run.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_mute_channel_run.o `test -f 'src/ags/audio/recall/ags_mute_channel_run.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_mute_channel_run.c gsequencer-ags_mute_channel_run.obj: src/ags/audio/recall/ags_mute_channel_run.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_mute_channel_run.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_mute_channel_run.Tpo -c -o gsequencer-ags_mute_channel_run.obj `if test -f 'src/ags/audio/recall/ags_mute_channel_run.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_mute_channel_run.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_mute_channel_run.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_mute_channel_run.Tpo $(DEPDIR)/gsequencer-ags_mute_channel_run.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_mute_channel_run.c' object='gsequencer-ags_mute_channel_run.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_mute_channel_run.obj `if test -f 'src/ags/audio/recall/ags_mute_channel_run.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_mute_channel_run.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_mute_channel_run.c'; fi` gsequencer-ags_mute_recycling.o: src/ags/audio/recall/ags_mute_recycling.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_mute_recycling.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_mute_recycling.Tpo -c -o gsequencer-ags_mute_recycling.o `test -f 'src/ags/audio/recall/ags_mute_recycling.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_mute_recycling.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_mute_recycling.Tpo $(DEPDIR)/gsequencer-ags_mute_recycling.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_mute_recycling.c' object='gsequencer-ags_mute_recycling.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_mute_recycling.o `test -f 'src/ags/audio/recall/ags_mute_recycling.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_mute_recycling.c gsequencer-ags_mute_recycling.obj: src/ags/audio/recall/ags_mute_recycling.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_mute_recycling.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_mute_recycling.Tpo -c -o gsequencer-ags_mute_recycling.obj `if test -f 'src/ags/audio/recall/ags_mute_recycling.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_mute_recycling.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_mute_recycling.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_mute_recycling.Tpo $(DEPDIR)/gsequencer-ags_mute_recycling.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_mute_recycling.c' object='gsequencer-ags_mute_recycling.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_mute_recycling.obj `if test -f 'src/ags/audio/recall/ags_mute_recycling.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_mute_recycling.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_mute_recycling.c'; fi` gsequencer-ags_peak_audio_signal.o: src/ags/audio/recall/ags_peak_audio_signal.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_peak_audio_signal.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_peak_audio_signal.Tpo -c -o gsequencer-ags_peak_audio_signal.o `test -f 'src/ags/audio/recall/ags_peak_audio_signal.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_peak_audio_signal.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_peak_audio_signal.Tpo $(DEPDIR)/gsequencer-ags_peak_audio_signal.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_peak_audio_signal.c' object='gsequencer-ags_peak_audio_signal.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_peak_audio_signal.o `test -f 'src/ags/audio/recall/ags_peak_audio_signal.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_peak_audio_signal.c gsequencer-ags_peak_audio_signal.obj: src/ags/audio/recall/ags_peak_audio_signal.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_peak_audio_signal.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_peak_audio_signal.Tpo -c -o gsequencer-ags_peak_audio_signal.obj `if test -f 'src/ags/audio/recall/ags_peak_audio_signal.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_peak_audio_signal.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_peak_audio_signal.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_peak_audio_signal.Tpo $(DEPDIR)/gsequencer-ags_peak_audio_signal.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_peak_audio_signal.c' object='gsequencer-ags_peak_audio_signal.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_peak_audio_signal.obj `if test -f 'src/ags/audio/recall/ags_peak_audio_signal.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_peak_audio_signal.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_peak_audio_signal.c'; fi` gsequencer-ags_peak_channel.o: src/ags/audio/recall/ags_peak_channel.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_peak_channel.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_peak_channel.Tpo -c -o gsequencer-ags_peak_channel.o `test -f 'src/ags/audio/recall/ags_peak_channel.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_peak_channel.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_peak_channel.Tpo $(DEPDIR)/gsequencer-ags_peak_channel.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_peak_channel.c' object='gsequencer-ags_peak_channel.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_peak_channel.o `test -f 'src/ags/audio/recall/ags_peak_channel.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_peak_channel.c gsequencer-ags_peak_channel.obj: src/ags/audio/recall/ags_peak_channel.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_peak_channel.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_peak_channel.Tpo -c -o gsequencer-ags_peak_channel.obj `if test -f 'src/ags/audio/recall/ags_peak_channel.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_peak_channel.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_peak_channel.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_peak_channel.Tpo $(DEPDIR)/gsequencer-ags_peak_channel.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_peak_channel.c' object='gsequencer-ags_peak_channel.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_peak_channel.obj `if test -f 'src/ags/audio/recall/ags_peak_channel.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_peak_channel.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_peak_channel.c'; fi` gsequencer-ags_peak_channel_run.o: src/ags/audio/recall/ags_peak_channel_run.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_peak_channel_run.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_peak_channel_run.Tpo -c -o gsequencer-ags_peak_channel_run.o `test -f 'src/ags/audio/recall/ags_peak_channel_run.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_peak_channel_run.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_peak_channel_run.Tpo $(DEPDIR)/gsequencer-ags_peak_channel_run.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_peak_channel_run.c' object='gsequencer-ags_peak_channel_run.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_peak_channel_run.o `test -f 'src/ags/audio/recall/ags_peak_channel_run.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_peak_channel_run.c gsequencer-ags_peak_channel_run.obj: src/ags/audio/recall/ags_peak_channel_run.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_peak_channel_run.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_peak_channel_run.Tpo -c -o gsequencer-ags_peak_channel_run.obj `if test -f 'src/ags/audio/recall/ags_peak_channel_run.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_peak_channel_run.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_peak_channel_run.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_peak_channel_run.Tpo $(DEPDIR)/gsequencer-ags_peak_channel_run.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_peak_channel_run.c' object='gsequencer-ags_peak_channel_run.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_peak_channel_run.obj `if test -f 'src/ags/audio/recall/ags_peak_channel_run.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_peak_channel_run.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_peak_channel_run.c'; fi` gsequencer-ags_peak_recycling.o: src/ags/audio/recall/ags_peak_recycling.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_peak_recycling.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_peak_recycling.Tpo -c -o gsequencer-ags_peak_recycling.o `test -f 'src/ags/audio/recall/ags_peak_recycling.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_peak_recycling.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_peak_recycling.Tpo $(DEPDIR)/gsequencer-ags_peak_recycling.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_peak_recycling.c' object='gsequencer-ags_peak_recycling.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_peak_recycling.o `test -f 'src/ags/audio/recall/ags_peak_recycling.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_peak_recycling.c gsequencer-ags_peak_recycling.obj: src/ags/audio/recall/ags_peak_recycling.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_peak_recycling.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_peak_recycling.Tpo -c -o gsequencer-ags_peak_recycling.obj `if test -f 'src/ags/audio/recall/ags_peak_recycling.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_peak_recycling.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_peak_recycling.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_peak_recycling.Tpo $(DEPDIR)/gsequencer-ags_peak_recycling.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_peak_recycling.c' object='gsequencer-ags_peak_recycling.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_peak_recycling.obj `if test -f 'src/ags/audio/recall/ags_peak_recycling.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_peak_recycling.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_peak_recycling.c'; fi` gsequencer-ags_play_audio.o: src/ags/audio/recall/ags_play_audio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_play_audio.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_play_audio.Tpo -c -o gsequencer-ags_play_audio.o `test -f 'src/ags/audio/recall/ags_play_audio.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_play_audio.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_play_audio.Tpo $(DEPDIR)/gsequencer-ags_play_audio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_play_audio.c' object='gsequencer-ags_play_audio.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_play_audio.o `test -f 'src/ags/audio/recall/ags_play_audio.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_play_audio.c gsequencer-ags_play_audio.obj: src/ags/audio/recall/ags_play_audio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_play_audio.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_play_audio.Tpo -c -o gsequencer-ags_play_audio.obj `if test -f 'src/ags/audio/recall/ags_play_audio.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_play_audio.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_play_audio.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_play_audio.Tpo $(DEPDIR)/gsequencer-ags_play_audio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_play_audio.c' object='gsequencer-ags_play_audio.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_play_audio.obj `if test -f 'src/ags/audio/recall/ags_play_audio.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_play_audio.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_play_audio.c'; fi` gsequencer-ags_play_audio_file.o: src/ags/audio/recall/ags_play_audio_file.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_play_audio_file.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_play_audio_file.Tpo -c -o gsequencer-ags_play_audio_file.o `test -f 'src/ags/audio/recall/ags_play_audio_file.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_play_audio_file.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_play_audio_file.Tpo $(DEPDIR)/gsequencer-ags_play_audio_file.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_play_audio_file.c' object='gsequencer-ags_play_audio_file.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_play_audio_file.o `test -f 'src/ags/audio/recall/ags_play_audio_file.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_play_audio_file.c gsequencer-ags_play_audio_file.obj: src/ags/audio/recall/ags_play_audio_file.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_play_audio_file.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_play_audio_file.Tpo -c -o gsequencer-ags_play_audio_file.obj `if test -f 'src/ags/audio/recall/ags_play_audio_file.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_play_audio_file.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_play_audio_file.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_play_audio_file.Tpo $(DEPDIR)/gsequencer-ags_play_audio_file.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_play_audio_file.c' object='gsequencer-ags_play_audio_file.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_play_audio_file.obj `if test -f 'src/ags/audio/recall/ags_play_audio_file.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_play_audio_file.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_play_audio_file.c'; fi` gsequencer-ags_play_audio_signal.o: src/ags/audio/recall/ags_play_audio_signal.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_play_audio_signal.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_play_audio_signal.Tpo -c -o gsequencer-ags_play_audio_signal.o `test -f 'src/ags/audio/recall/ags_play_audio_signal.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_play_audio_signal.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_play_audio_signal.Tpo $(DEPDIR)/gsequencer-ags_play_audio_signal.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_play_audio_signal.c' object='gsequencer-ags_play_audio_signal.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_play_audio_signal.o `test -f 'src/ags/audio/recall/ags_play_audio_signal.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_play_audio_signal.c gsequencer-ags_play_audio_signal.obj: src/ags/audio/recall/ags_play_audio_signal.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_play_audio_signal.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_play_audio_signal.Tpo -c -o gsequencer-ags_play_audio_signal.obj `if test -f 'src/ags/audio/recall/ags_play_audio_signal.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_play_audio_signal.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_play_audio_signal.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_play_audio_signal.Tpo $(DEPDIR)/gsequencer-ags_play_audio_signal.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_play_audio_signal.c' object='gsequencer-ags_play_audio_signal.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_play_audio_signal.obj `if test -f 'src/ags/audio/recall/ags_play_audio_signal.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_play_audio_signal.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_play_audio_signal.c'; fi` gsequencer-ags_play_channel.o: src/ags/audio/recall/ags_play_channel.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_play_channel.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_play_channel.Tpo -c -o gsequencer-ags_play_channel.o `test -f 'src/ags/audio/recall/ags_play_channel.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_play_channel.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_play_channel.Tpo $(DEPDIR)/gsequencer-ags_play_channel.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_play_channel.c' object='gsequencer-ags_play_channel.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_play_channel.o `test -f 'src/ags/audio/recall/ags_play_channel.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_play_channel.c gsequencer-ags_play_channel.obj: src/ags/audio/recall/ags_play_channel.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_play_channel.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_play_channel.Tpo -c -o gsequencer-ags_play_channel.obj `if test -f 'src/ags/audio/recall/ags_play_channel.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_play_channel.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_play_channel.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_play_channel.Tpo $(DEPDIR)/gsequencer-ags_play_channel.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_play_channel.c' object='gsequencer-ags_play_channel.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_play_channel.obj `if test -f 'src/ags/audio/recall/ags_play_channel.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_play_channel.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_play_channel.c'; fi` gsequencer-ags_play_channel_run.o: src/ags/audio/recall/ags_play_channel_run.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_play_channel_run.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_play_channel_run.Tpo -c -o gsequencer-ags_play_channel_run.o `test -f 'src/ags/audio/recall/ags_play_channel_run.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_play_channel_run.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_play_channel_run.Tpo $(DEPDIR)/gsequencer-ags_play_channel_run.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_play_channel_run.c' object='gsequencer-ags_play_channel_run.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_play_channel_run.o `test -f 'src/ags/audio/recall/ags_play_channel_run.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_play_channel_run.c gsequencer-ags_play_channel_run.obj: src/ags/audio/recall/ags_play_channel_run.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_play_channel_run.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_play_channel_run.Tpo -c -o gsequencer-ags_play_channel_run.obj `if test -f 'src/ags/audio/recall/ags_play_channel_run.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_play_channel_run.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_play_channel_run.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_play_channel_run.Tpo $(DEPDIR)/gsequencer-ags_play_channel_run.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_play_channel_run.c' object='gsequencer-ags_play_channel_run.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_play_channel_run.obj `if test -f 'src/ags/audio/recall/ags_play_channel_run.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_play_channel_run.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_play_channel_run.c'; fi` gsequencer-ags_play_channel_run_master.o: src/ags/audio/recall/ags_play_channel_run_master.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_play_channel_run_master.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_play_channel_run_master.Tpo -c -o gsequencer-ags_play_channel_run_master.o `test -f 'src/ags/audio/recall/ags_play_channel_run_master.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_play_channel_run_master.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_play_channel_run_master.Tpo $(DEPDIR)/gsequencer-ags_play_channel_run_master.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_play_channel_run_master.c' object='gsequencer-ags_play_channel_run_master.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_play_channel_run_master.o `test -f 'src/ags/audio/recall/ags_play_channel_run_master.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_play_channel_run_master.c gsequencer-ags_play_channel_run_master.obj: src/ags/audio/recall/ags_play_channel_run_master.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_play_channel_run_master.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_play_channel_run_master.Tpo -c -o gsequencer-ags_play_channel_run_master.obj `if test -f 'src/ags/audio/recall/ags_play_channel_run_master.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_play_channel_run_master.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_play_channel_run_master.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_play_channel_run_master.Tpo $(DEPDIR)/gsequencer-ags_play_channel_run_master.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_play_channel_run_master.c' object='gsequencer-ags_play_channel_run_master.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_play_channel_run_master.obj `if test -f 'src/ags/audio/recall/ags_play_channel_run_master.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_play_channel_run_master.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_play_channel_run_master.c'; fi` gsequencer-ags_play_notation_audio.o: src/ags/audio/recall/ags_play_notation_audio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_play_notation_audio.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_play_notation_audio.Tpo -c -o gsequencer-ags_play_notation_audio.o `test -f 'src/ags/audio/recall/ags_play_notation_audio.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_play_notation_audio.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_play_notation_audio.Tpo $(DEPDIR)/gsequencer-ags_play_notation_audio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_play_notation_audio.c' object='gsequencer-ags_play_notation_audio.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_play_notation_audio.o `test -f 'src/ags/audio/recall/ags_play_notation_audio.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_play_notation_audio.c gsequencer-ags_play_notation_audio.obj: src/ags/audio/recall/ags_play_notation_audio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_play_notation_audio.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_play_notation_audio.Tpo -c -o gsequencer-ags_play_notation_audio.obj `if test -f 'src/ags/audio/recall/ags_play_notation_audio.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_play_notation_audio.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_play_notation_audio.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_play_notation_audio.Tpo $(DEPDIR)/gsequencer-ags_play_notation_audio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_play_notation_audio.c' object='gsequencer-ags_play_notation_audio.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_play_notation_audio.obj `if test -f 'src/ags/audio/recall/ags_play_notation_audio.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_play_notation_audio.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_play_notation_audio.c'; fi` gsequencer-ags_play_notation_audio_run.o: src/ags/audio/recall/ags_play_notation_audio_run.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_play_notation_audio_run.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_play_notation_audio_run.Tpo -c -o gsequencer-ags_play_notation_audio_run.o `test -f 'src/ags/audio/recall/ags_play_notation_audio_run.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_play_notation_audio_run.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_play_notation_audio_run.Tpo $(DEPDIR)/gsequencer-ags_play_notation_audio_run.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_play_notation_audio_run.c' object='gsequencer-ags_play_notation_audio_run.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_play_notation_audio_run.o `test -f 'src/ags/audio/recall/ags_play_notation_audio_run.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_play_notation_audio_run.c gsequencer-ags_play_notation_audio_run.obj: src/ags/audio/recall/ags_play_notation_audio_run.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_play_notation_audio_run.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_play_notation_audio_run.Tpo -c -o gsequencer-ags_play_notation_audio_run.obj `if test -f 'src/ags/audio/recall/ags_play_notation_audio_run.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_play_notation_audio_run.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_play_notation_audio_run.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_play_notation_audio_run.Tpo $(DEPDIR)/gsequencer-ags_play_notation_audio_run.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_play_notation_audio_run.c' object='gsequencer-ags_play_notation_audio_run.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_play_notation_audio_run.obj `if test -f 'src/ags/audio/recall/ags_play_notation_audio_run.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_play_notation_audio_run.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_play_notation_audio_run.c'; fi` gsequencer-ags_play_note.o: src/ags/audio/recall/ags_play_note.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_play_note.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_play_note.Tpo -c -o gsequencer-ags_play_note.o `test -f 'src/ags/audio/recall/ags_play_note.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_play_note.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_play_note.Tpo $(DEPDIR)/gsequencer-ags_play_note.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_play_note.c' object='gsequencer-ags_play_note.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_play_note.o `test -f 'src/ags/audio/recall/ags_play_note.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_play_note.c gsequencer-ags_play_note.obj: src/ags/audio/recall/ags_play_note.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_play_note.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_play_note.Tpo -c -o gsequencer-ags_play_note.obj `if test -f 'src/ags/audio/recall/ags_play_note.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_play_note.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_play_note.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_play_note.Tpo $(DEPDIR)/gsequencer-ags_play_note.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_play_note.c' object='gsequencer-ags_play_note.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_play_note.obj `if test -f 'src/ags/audio/recall/ags_play_note.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_play_note.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_play_note.c'; fi` gsequencer-ags_play_pattern.o: src/ags/audio/recall/ags_play_pattern.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_play_pattern.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_play_pattern.Tpo -c -o gsequencer-ags_play_pattern.o `test -f 'src/ags/audio/recall/ags_play_pattern.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_play_pattern.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_play_pattern.Tpo $(DEPDIR)/gsequencer-ags_play_pattern.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_play_pattern.c' object='gsequencer-ags_play_pattern.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_play_pattern.o `test -f 'src/ags/audio/recall/ags_play_pattern.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_play_pattern.c gsequencer-ags_play_pattern.obj: src/ags/audio/recall/ags_play_pattern.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_play_pattern.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_play_pattern.Tpo -c -o gsequencer-ags_play_pattern.obj `if test -f 'src/ags/audio/recall/ags_play_pattern.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_play_pattern.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_play_pattern.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_play_pattern.Tpo $(DEPDIR)/gsequencer-ags_play_pattern.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_play_pattern.c' object='gsequencer-ags_play_pattern.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_play_pattern.obj `if test -f 'src/ags/audio/recall/ags_play_pattern.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_play_pattern.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_play_pattern.c'; fi` gsequencer-ags_play_recycling.o: src/ags/audio/recall/ags_play_recycling.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_play_recycling.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_play_recycling.Tpo -c -o gsequencer-ags_play_recycling.o `test -f 'src/ags/audio/recall/ags_play_recycling.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_play_recycling.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_play_recycling.Tpo $(DEPDIR)/gsequencer-ags_play_recycling.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_play_recycling.c' object='gsequencer-ags_play_recycling.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_play_recycling.o `test -f 'src/ags/audio/recall/ags_play_recycling.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_play_recycling.c gsequencer-ags_play_recycling.obj: src/ags/audio/recall/ags_play_recycling.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_play_recycling.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_play_recycling.Tpo -c -o gsequencer-ags_play_recycling.obj `if test -f 'src/ags/audio/recall/ags_play_recycling.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_play_recycling.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_play_recycling.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_play_recycling.Tpo $(DEPDIR)/gsequencer-ags_play_recycling.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_play_recycling.c' object='gsequencer-ags_play_recycling.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_play_recycling.obj `if test -f 'src/ags/audio/recall/ags_play_recycling.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_play_recycling.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_play_recycling.c'; fi` gsequencer-ags_stream_audio_signal.o: src/ags/audio/recall/ags_stream_audio_signal.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_stream_audio_signal.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_stream_audio_signal.Tpo -c -o gsequencer-ags_stream_audio_signal.o `test -f 'src/ags/audio/recall/ags_stream_audio_signal.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_stream_audio_signal.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_stream_audio_signal.Tpo $(DEPDIR)/gsequencer-ags_stream_audio_signal.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_stream_audio_signal.c' object='gsequencer-ags_stream_audio_signal.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_stream_audio_signal.o `test -f 'src/ags/audio/recall/ags_stream_audio_signal.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_stream_audio_signal.c gsequencer-ags_stream_audio_signal.obj: src/ags/audio/recall/ags_stream_audio_signal.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_stream_audio_signal.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_stream_audio_signal.Tpo -c -o gsequencer-ags_stream_audio_signal.obj `if test -f 'src/ags/audio/recall/ags_stream_audio_signal.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_stream_audio_signal.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_stream_audio_signal.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_stream_audio_signal.Tpo $(DEPDIR)/gsequencer-ags_stream_audio_signal.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_stream_audio_signal.c' object='gsequencer-ags_stream_audio_signal.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_stream_audio_signal.obj `if test -f 'src/ags/audio/recall/ags_stream_audio_signal.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_stream_audio_signal.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_stream_audio_signal.c'; fi` gsequencer-ags_stream.o: src/ags/audio/recall/ags_stream.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_stream.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_stream.Tpo -c -o gsequencer-ags_stream.o `test -f 'src/ags/audio/recall/ags_stream.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_stream.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_stream.Tpo $(DEPDIR)/gsequencer-ags_stream.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_stream.c' object='gsequencer-ags_stream.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_stream.o `test -f 'src/ags/audio/recall/ags_stream.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_stream.c gsequencer-ags_stream.obj: src/ags/audio/recall/ags_stream.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_stream.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_stream.Tpo -c -o gsequencer-ags_stream.obj `if test -f 'src/ags/audio/recall/ags_stream.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_stream.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_stream.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_stream.Tpo $(DEPDIR)/gsequencer-ags_stream.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_stream.c' object='gsequencer-ags_stream.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_stream.obj `if test -f 'src/ags/audio/recall/ags_stream.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_stream.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_stream.c'; fi` gsequencer-ags_stream_channel.o: src/ags/audio/recall/ags_stream_channel.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_stream_channel.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_stream_channel.Tpo -c -o gsequencer-ags_stream_channel.o `test -f 'src/ags/audio/recall/ags_stream_channel.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_stream_channel.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_stream_channel.Tpo $(DEPDIR)/gsequencer-ags_stream_channel.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_stream_channel.c' object='gsequencer-ags_stream_channel.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_stream_channel.o `test -f 'src/ags/audio/recall/ags_stream_channel.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_stream_channel.c gsequencer-ags_stream_channel.obj: src/ags/audio/recall/ags_stream_channel.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_stream_channel.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_stream_channel.Tpo -c -o gsequencer-ags_stream_channel.obj `if test -f 'src/ags/audio/recall/ags_stream_channel.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_stream_channel.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_stream_channel.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_stream_channel.Tpo $(DEPDIR)/gsequencer-ags_stream_channel.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_stream_channel.c' object='gsequencer-ags_stream_channel.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_stream_channel.obj `if test -f 'src/ags/audio/recall/ags_stream_channel.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_stream_channel.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_stream_channel.c'; fi` gsequencer-ags_stream_channel_run.o: src/ags/audio/recall/ags_stream_channel_run.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_stream_channel_run.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_stream_channel_run.Tpo -c -o gsequencer-ags_stream_channel_run.o `test -f 'src/ags/audio/recall/ags_stream_channel_run.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_stream_channel_run.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_stream_channel_run.Tpo $(DEPDIR)/gsequencer-ags_stream_channel_run.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_stream_channel_run.c' object='gsequencer-ags_stream_channel_run.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_stream_channel_run.o `test -f 'src/ags/audio/recall/ags_stream_channel_run.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_stream_channel_run.c gsequencer-ags_stream_channel_run.obj: src/ags/audio/recall/ags_stream_channel_run.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_stream_channel_run.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_stream_channel_run.Tpo -c -o gsequencer-ags_stream_channel_run.obj `if test -f 'src/ags/audio/recall/ags_stream_channel_run.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_stream_channel_run.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_stream_channel_run.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_stream_channel_run.Tpo $(DEPDIR)/gsequencer-ags_stream_channel_run.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_stream_channel_run.c' object='gsequencer-ags_stream_channel_run.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_stream_channel_run.obj `if test -f 'src/ags/audio/recall/ags_stream_channel_run.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_stream_channel_run.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_stream_channel_run.c'; fi` gsequencer-ags_stream_recycling.o: src/ags/audio/recall/ags_stream_recycling.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_stream_recycling.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_stream_recycling.Tpo -c -o gsequencer-ags_stream_recycling.o `test -f 'src/ags/audio/recall/ags_stream_recycling.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_stream_recycling.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_stream_recycling.Tpo $(DEPDIR)/gsequencer-ags_stream_recycling.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_stream_recycling.c' object='gsequencer-ags_stream_recycling.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_stream_recycling.o `test -f 'src/ags/audio/recall/ags_stream_recycling.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_stream_recycling.c gsequencer-ags_stream_recycling.obj: src/ags/audio/recall/ags_stream_recycling.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_stream_recycling.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_stream_recycling.Tpo -c -o gsequencer-ags_stream_recycling.obj `if test -f 'src/ags/audio/recall/ags_stream_recycling.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_stream_recycling.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_stream_recycling.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_stream_recycling.Tpo $(DEPDIR)/gsequencer-ags_stream_recycling.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_stream_recycling.c' object='gsequencer-ags_stream_recycling.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_stream_recycling.obj `if test -f 'src/ags/audio/recall/ags_stream_recycling.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_stream_recycling.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_stream_recycling.c'; fi` gsequencer-ags_volume_audio_signal.o: src/ags/audio/recall/ags_volume_audio_signal.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_volume_audio_signal.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_volume_audio_signal.Tpo -c -o gsequencer-ags_volume_audio_signal.o `test -f 'src/ags/audio/recall/ags_volume_audio_signal.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_volume_audio_signal.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_volume_audio_signal.Tpo $(DEPDIR)/gsequencer-ags_volume_audio_signal.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_volume_audio_signal.c' object='gsequencer-ags_volume_audio_signal.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_volume_audio_signal.o `test -f 'src/ags/audio/recall/ags_volume_audio_signal.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_volume_audio_signal.c gsequencer-ags_volume_audio_signal.obj: src/ags/audio/recall/ags_volume_audio_signal.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_volume_audio_signal.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_volume_audio_signal.Tpo -c -o gsequencer-ags_volume_audio_signal.obj `if test -f 'src/ags/audio/recall/ags_volume_audio_signal.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_volume_audio_signal.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_volume_audio_signal.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_volume_audio_signal.Tpo $(DEPDIR)/gsequencer-ags_volume_audio_signal.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_volume_audio_signal.c' object='gsequencer-ags_volume_audio_signal.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_volume_audio_signal.obj `if test -f 'src/ags/audio/recall/ags_volume_audio_signal.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_volume_audio_signal.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_volume_audio_signal.c'; fi` gsequencer-ags_volume_channel.o: src/ags/audio/recall/ags_volume_channel.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_volume_channel.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_volume_channel.Tpo -c -o gsequencer-ags_volume_channel.o `test -f 'src/ags/audio/recall/ags_volume_channel.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_volume_channel.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_volume_channel.Tpo $(DEPDIR)/gsequencer-ags_volume_channel.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_volume_channel.c' object='gsequencer-ags_volume_channel.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_volume_channel.o `test -f 'src/ags/audio/recall/ags_volume_channel.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_volume_channel.c gsequencer-ags_volume_channel.obj: src/ags/audio/recall/ags_volume_channel.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_volume_channel.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_volume_channel.Tpo -c -o gsequencer-ags_volume_channel.obj `if test -f 'src/ags/audio/recall/ags_volume_channel.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_volume_channel.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_volume_channel.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_volume_channel.Tpo $(DEPDIR)/gsequencer-ags_volume_channel.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_volume_channel.c' object='gsequencer-ags_volume_channel.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_volume_channel.obj `if test -f 'src/ags/audio/recall/ags_volume_channel.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_volume_channel.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_volume_channel.c'; fi` gsequencer-ags_volume_channel_run.o: src/ags/audio/recall/ags_volume_channel_run.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_volume_channel_run.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_volume_channel_run.Tpo -c -o gsequencer-ags_volume_channel_run.o `test -f 'src/ags/audio/recall/ags_volume_channel_run.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_volume_channel_run.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_volume_channel_run.Tpo $(DEPDIR)/gsequencer-ags_volume_channel_run.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_volume_channel_run.c' object='gsequencer-ags_volume_channel_run.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_volume_channel_run.o `test -f 'src/ags/audio/recall/ags_volume_channel_run.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_volume_channel_run.c gsequencer-ags_volume_channel_run.obj: src/ags/audio/recall/ags_volume_channel_run.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_volume_channel_run.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_volume_channel_run.Tpo -c -o gsequencer-ags_volume_channel_run.obj `if test -f 'src/ags/audio/recall/ags_volume_channel_run.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_volume_channel_run.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_volume_channel_run.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_volume_channel_run.Tpo $(DEPDIR)/gsequencer-ags_volume_channel_run.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_volume_channel_run.c' object='gsequencer-ags_volume_channel_run.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_volume_channel_run.obj `if test -f 'src/ags/audio/recall/ags_volume_channel_run.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_volume_channel_run.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_volume_channel_run.c'; fi` gsequencer-ags_volume_recycling.o: src/ags/audio/recall/ags_volume_recycling.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_volume_recycling.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_volume_recycling.Tpo -c -o gsequencer-ags_volume_recycling.o `test -f 'src/ags/audio/recall/ags_volume_recycling.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_volume_recycling.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_volume_recycling.Tpo $(DEPDIR)/gsequencer-ags_volume_recycling.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_volume_recycling.c' object='gsequencer-ags_volume_recycling.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_volume_recycling.o `test -f 'src/ags/audio/recall/ags_volume_recycling.c' || echo '$(srcdir)/'`src/ags/audio/recall/ags_volume_recycling.c gsequencer-ags_volume_recycling.obj: src/ags/audio/recall/ags_volume_recycling.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_volume_recycling.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_volume_recycling.Tpo -c -o gsequencer-ags_volume_recycling.obj `if test -f 'src/ags/audio/recall/ags_volume_recycling.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_volume_recycling.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_volume_recycling.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_volume_recycling.Tpo $(DEPDIR)/gsequencer-ags_volume_recycling.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/recall/ags_volume_recycling.c' object='gsequencer-ags_volume_recycling.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_volume_recycling.obj `if test -f 'src/ags/audio/recall/ags_volume_recycling.c'; then $(CYGPATH_W) 'src/ags/audio/recall/ags_volume_recycling.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/recall/ags_volume_recycling.c'; fi` gsequencer-ags_add_audio.o: src/ags/audio/task/ags_add_audio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_add_audio.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_add_audio.Tpo -c -o gsequencer-ags_add_audio.o `test -f 'src/ags/audio/task/ags_add_audio.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_add_audio.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_add_audio.Tpo $(DEPDIR)/gsequencer-ags_add_audio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_add_audio.c' object='gsequencer-ags_add_audio.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_add_audio.o `test -f 'src/ags/audio/task/ags_add_audio.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_add_audio.c gsequencer-ags_add_audio.obj: src/ags/audio/task/ags_add_audio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_add_audio.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_add_audio.Tpo -c -o gsequencer-ags_add_audio.obj `if test -f 'src/ags/audio/task/ags_add_audio.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_add_audio.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_add_audio.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_add_audio.Tpo $(DEPDIR)/gsequencer-ags_add_audio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_add_audio.c' object='gsequencer-ags_add_audio.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_add_audio.obj `if test -f 'src/ags/audio/task/ags_add_audio.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_add_audio.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_add_audio.c'; fi` gsequencer-ags_add_audio_signal.o: src/ags/audio/task/ags_add_audio_signal.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_add_audio_signal.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_add_audio_signal.Tpo -c -o gsequencer-ags_add_audio_signal.o `test -f 'src/ags/audio/task/ags_add_audio_signal.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_add_audio_signal.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_add_audio_signal.Tpo $(DEPDIR)/gsequencer-ags_add_audio_signal.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_add_audio_signal.c' object='gsequencer-ags_add_audio_signal.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_add_audio_signal.o `test -f 'src/ags/audio/task/ags_add_audio_signal.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_add_audio_signal.c gsequencer-ags_add_audio_signal.obj: src/ags/audio/task/ags_add_audio_signal.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_add_audio_signal.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_add_audio_signal.Tpo -c -o gsequencer-ags_add_audio_signal.obj `if test -f 'src/ags/audio/task/ags_add_audio_signal.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_add_audio_signal.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_add_audio_signal.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_add_audio_signal.Tpo $(DEPDIR)/gsequencer-ags_add_audio_signal.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_add_audio_signal.c' object='gsequencer-ags_add_audio_signal.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_add_audio_signal.obj `if test -f 'src/ags/audio/task/ags_add_audio_signal.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_add_audio_signal.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_add_audio_signal.c'; fi` gsequencer-ags_add_line_member.o: src/ags/audio/task/ags_add_line_member.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_add_line_member.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_add_line_member.Tpo -c -o gsequencer-ags_add_line_member.o `test -f 'src/ags/audio/task/ags_add_line_member.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_add_line_member.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_add_line_member.Tpo $(DEPDIR)/gsequencer-ags_add_line_member.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_add_line_member.c' object='gsequencer-ags_add_line_member.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_add_line_member.o `test -f 'src/ags/audio/task/ags_add_line_member.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_add_line_member.c gsequencer-ags_add_line_member.obj: src/ags/audio/task/ags_add_line_member.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_add_line_member.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_add_line_member.Tpo -c -o gsequencer-ags_add_line_member.obj `if test -f 'src/ags/audio/task/ags_add_line_member.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_add_line_member.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_add_line_member.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_add_line_member.Tpo $(DEPDIR)/gsequencer-ags_add_line_member.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_add_line_member.c' object='gsequencer-ags_add_line_member.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_add_line_member.obj `if test -f 'src/ags/audio/task/ags_add_line_member.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_add_line_member.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_add_line_member.c'; fi` gsequencer-ags_add_note.o: src/ags/audio/task/ags_add_note.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_add_note.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_add_note.Tpo -c -o gsequencer-ags_add_note.o `test -f 'src/ags/audio/task/ags_add_note.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_add_note.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_add_note.Tpo $(DEPDIR)/gsequencer-ags_add_note.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_add_note.c' object='gsequencer-ags_add_note.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_add_note.o `test -f 'src/ags/audio/task/ags_add_note.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_add_note.c gsequencer-ags_add_note.obj: src/ags/audio/task/ags_add_note.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_add_note.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_add_note.Tpo -c -o gsequencer-ags_add_note.obj `if test -f 'src/ags/audio/task/ags_add_note.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_add_note.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_add_note.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_add_note.Tpo $(DEPDIR)/gsequencer-ags_add_note.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_add_note.c' object='gsequencer-ags_add_note.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_add_note.obj `if test -f 'src/ags/audio/task/ags_add_note.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_add_note.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_add_note.c'; fi` gsequencer-ags_add_point_to_selection.o: src/ags/audio/task/ags_add_point_to_selection.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_add_point_to_selection.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_add_point_to_selection.Tpo -c -o gsequencer-ags_add_point_to_selection.o `test -f 'src/ags/audio/task/ags_add_point_to_selection.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_add_point_to_selection.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_add_point_to_selection.Tpo $(DEPDIR)/gsequencer-ags_add_point_to_selection.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_add_point_to_selection.c' object='gsequencer-ags_add_point_to_selection.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_add_point_to_selection.o `test -f 'src/ags/audio/task/ags_add_point_to_selection.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_add_point_to_selection.c gsequencer-ags_add_point_to_selection.obj: src/ags/audio/task/ags_add_point_to_selection.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_add_point_to_selection.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_add_point_to_selection.Tpo -c -o gsequencer-ags_add_point_to_selection.obj `if test -f 'src/ags/audio/task/ags_add_point_to_selection.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_add_point_to_selection.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_add_point_to_selection.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_add_point_to_selection.Tpo $(DEPDIR)/gsequencer-ags_add_point_to_selection.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_add_point_to_selection.c' object='gsequencer-ags_add_point_to_selection.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_add_point_to_selection.obj `if test -f 'src/ags/audio/task/ags_add_point_to_selection.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_add_point_to_selection.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_add_point_to_selection.c'; fi` gsequencer-ags_add_recall.o: src/ags/audio/task/ags_add_recall.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_add_recall.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_add_recall.Tpo -c -o gsequencer-ags_add_recall.o `test -f 'src/ags/audio/task/ags_add_recall.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_add_recall.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_add_recall.Tpo $(DEPDIR)/gsequencer-ags_add_recall.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_add_recall.c' object='gsequencer-ags_add_recall.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_add_recall.o `test -f 'src/ags/audio/task/ags_add_recall.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_add_recall.c gsequencer-ags_add_recall.obj: src/ags/audio/task/ags_add_recall.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_add_recall.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_add_recall.Tpo -c -o gsequencer-ags_add_recall.obj `if test -f 'src/ags/audio/task/ags_add_recall.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_add_recall.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_add_recall.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_add_recall.Tpo $(DEPDIR)/gsequencer-ags_add_recall.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_add_recall.c' object='gsequencer-ags_add_recall.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_add_recall.obj `if test -f 'src/ags/audio/task/ags_add_recall.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_add_recall.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_add_recall.c'; fi` gsequencer-ags_add_recall_container.o: src/ags/audio/task/ags_add_recall_container.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_add_recall_container.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_add_recall_container.Tpo -c -o gsequencer-ags_add_recall_container.o `test -f 'src/ags/audio/task/ags_add_recall_container.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_add_recall_container.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_add_recall_container.Tpo $(DEPDIR)/gsequencer-ags_add_recall_container.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_add_recall_container.c' object='gsequencer-ags_add_recall_container.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_add_recall_container.o `test -f 'src/ags/audio/task/ags_add_recall_container.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_add_recall_container.c gsequencer-ags_add_recall_container.obj: src/ags/audio/task/ags_add_recall_container.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_add_recall_container.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_add_recall_container.Tpo -c -o gsequencer-ags_add_recall_container.obj `if test -f 'src/ags/audio/task/ags_add_recall_container.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_add_recall_container.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_add_recall_container.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_add_recall_container.Tpo $(DEPDIR)/gsequencer-ags_add_recall_container.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_add_recall_container.c' object='gsequencer-ags_add_recall_container.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_add_recall_container.obj `if test -f 'src/ags/audio/task/ags_add_recall_container.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_add_recall_container.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_add_recall_container.c'; fi` gsequencer-ags_add_region_to_selection.o: src/ags/audio/task/ags_add_region_to_selection.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_add_region_to_selection.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_add_region_to_selection.Tpo -c -o gsequencer-ags_add_region_to_selection.o `test -f 'src/ags/audio/task/ags_add_region_to_selection.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_add_region_to_selection.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_add_region_to_selection.Tpo $(DEPDIR)/gsequencer-ags_add_region_to_selection.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_add_region_to_selection.c' object='gsequencer-ags_add_region_to_selection.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_add_region_to_selection.o `test -f 'src/ags/audio/task/ags_add_region_to_selection.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_add_region_to_selection.c gsequencer-ags_add_region_to_selection.obj: src/ags/audio/task/ags_add_region_to_selection.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_add_region_to_selection.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_add_region_to_selection.Tpo -c -o gsequencer-ags_add_region_to_selection.obj `if test -f 'src/ags/audio/task/ags_add_region_to_selection.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_add_region_to_selection.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_add_region_to_selection.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_add_region_to_selection.Tpo $(DEPDIR)/gsequencer-ags_add_region_to_selection.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_add_region_to_selection.c' object='gsequencer-ags_add_region_to_selection.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_add_region_to_selection.obj `if test -f 'src/ags/audio/task/ags_add_region_to_selection.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_add_region_to_selection.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_add_region_to_selection.c'; fi` gsequencer-ags_append_audio.o: src/ags/audio/task/ags_append_audio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_append_audio.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_append_audio.Tpo -c -o gsequencer-ags_append_audio.o `test -f 'src/ags/audio/task/ags_append_audio.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_append_audio.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_append_audio.Tpo $(DEPDIR)/gsequencer-ags_append_audio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_append_audio.c' object='gsequencer-ags_append_audio.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_append_audio.o `test -f 'src/ags/audio/task/ags_append_audio.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_append_audio.c gsequencer-ags_append_audio.obj: src/ags/audio/task/ags_append_audio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_append_audio.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_append_audio.Tpo -c -o gsequencer-ags_append_audio.obj `if test -f 'src/ags/audio/task/ags_append_audio.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_append_audio.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_append_audio.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_append_audio.Tpo $(DEPDIR)/gsequencer-ags_append_audio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_append_audio.c' object='gsequencer-ags_append_audio.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_append_audio.obj `if test -f 'src/ags/audio/task/ags_append_audio.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_append_audio.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_append_audio.c'; fi` gsequencer-ags_append_audio_threaded.o: src/ags/audio/task/ags_append_audio_threaded.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_append_audio_threaded.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_append_audio_threaded.Tpo -c -o gsequencer-ags_append_audio_threaded.o `test -f 'src/ags/audio/task/ags_append_audio_threaded.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_append_audio_threaded.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_append_audio_threaded.Tpo $(DEPDIR)/gsequencer-ags_append_audio_threaded.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_append_audio_threaded.c' object='gsequencer-ags_append_audio_threaded.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_append_audio_threaded.o `test -f 'src/ags/audio/task/ags_append_audio_threaded.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_append_audio_threaded.c gsequencer-ags_append_audio_threaded.obj: src/ags/audio/task/ags_append_audio_threaded.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_append_audio_threaded.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_append_audio_threaded.Tpo -c -o gsequencer-ags_append_audio_threaded.obj `if test -f 'src/ags/audio/task/ags_append_audio_threaded.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_append_audio_threaded.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_append_audio_threaded.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_append_audio_threaded.Tpo $(DEPDIR)/gsequencer-ags_append_audio_threaded.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_append_audio_threaded.c' object='gsequencer-ags_append_audio_threaded.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_append_audio_threaded.obj `if test -f 'src/ags/audio/task/ags_append_audio_threaded.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_append_audio_threaded.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_append_audio_threaded.c'; fi` gsequencer-ags_append_channel.o: src/ags/audio/task/ags_append_channel.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_append_channel.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_append_channel.Tpo -c -o gsequencer-ags_append_channel.o `test -f 'src/ags/audio/task/ags_append_channel.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_append_channel.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_append_channel.Tpo $(DEPDIR)/gsequencer-ags_append_channel.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_append_channel.c' object='gsequencer-ags_append_channel.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_append_channel.o `test -f 'src/ags/audio/task/ags_append_channel.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_append_channel.c gsequencer-ags_append_channel.obj: src/ags/audio/task/ags_append_channel.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_append_channel.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_append_channel.Tpo -c -o gsequencer-ags_append_channel.obj `if test -f 'src/ags/audio/task/ags_append_channel.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_append_channel.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_append_channel.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_append_channel.Tpo $(DEPDIR)/gsequencer-ags_append_channel.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_append_channel.c' object='gsequencer-ags_append_channel.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_append_channel.obj `if test -f 'src/ags/audio/task/ags_append_channel.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_append_channel.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_append_channel.c'; fi` gsequencer-ags_append_recall.o: src/ags/audio/task/ags_append_recall.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_append_recall.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_append_recall.Tpo -c -o gsequencer-ags_append_recall.o `test -f 'src/ags/audio/task/ags_append_recall.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_append_recall.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_append_recall.Tpo $(DEPDIR)/gsequencer-ags_append_recall.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_append_recall.c' object='gsequencer-ags_append_recall.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_append_recall.o `test -f 'src/ags/audio/task/ags_append_recall.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_append_recall.c gsequencer-ags_append_recall.obj: src/ags/audio/task/ags_append_recall.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_append_recall.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_append_recall.Tpo -c -o gsequencer-ags_append_recall.obj `if test -f 'src/ags/audio/task/ags_append_recall.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_append_recall.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_append_recall.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_append_recall.Tpo $(DEPDIR)/gsequencer-ags_append_recall.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_append_recall.c' object='gsequencer-ags_append_recall.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_append_recall.obj `if test -f 'src/ags/audio/task/ags_append_recall.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_append_recall.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_append_recall.c'; fi` gsequencer-ags_apply_synth.o: src/ags/audio/task/ags_apply_synth.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_apply_synth.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_apply_synth.Tpo -c -o gsequencer-ags_apply_synth.o `test -f 'src/ags/audio/task/ags_apply_synth.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_apply_synth.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_apply_synth.Tpo $(DEPDIR)/gsequencer-ags_apply_synth.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_apply_synth.c' object='gsequencer-ags_apply_synth.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_apply_synth.o `test -f 'src/ags/audio/task/ags_apply_synth.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_apply_synth.c gsequencer-ags_apply_synth.obj: src/ags/audio/task/ags_apply_synth.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_apply_synth.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_apply_synth.Tpo -c -o gsequencer-ags_apply_synth.obj `if test -f 'src/ags/audio/task/ags_apply_synth.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_apply_synth.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_apply_synth.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_apply_synth.Tpo $(DEPDIR)/gsequencer-ags_apply_synth.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_apply_synth.c' object='gsequencer-ags_apply_synth.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_apply_synth.obj `if test -f 'src/ags/audio/task/ags_apply_synth.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_apply_synth.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_apply_synth.c'; fi` gsequencer-ags_apply_wavetable.o: src/ags/audio/task/ags_apply_wavetable.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_apply_wavetable.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_apply_wavetable.Tpo -c -o gsequencer-ags_apply_wavetable.o `test -f 'src/ags/audio/task/ags_apply_wavetable.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_apply_wavetable.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_apply_wavetable.Tpo $(DEPDIR)/gsequencer-ags_apply_wavetable.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_apply_wavetable.c' object='gsequencer-ags_apply_wavetable.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_apply_wavetable.o `test -f 'src/ags/audio/task/ags_apply_wavetable.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_apply_wavetable.c gsequencer-ags_apply_wavetable.obj: src/ags/audio/task/ags_apply_wavetable.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_apply_wavetable.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_apply_wavetable.Tpo -c -o gsequencer-ags_apply_wavetable.obj `if test -f 'src/ags/audio/task/ags_apply_wavetable.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_apply_wavetable.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_apply_wavetable.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_apply_wavetable.Tpo $(DEPDIR)/gsequencer-ags_apply_wavetable.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_apply_wavetable.c' object='gsequencer-ags_apply_wavetable.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_apply_wavetable.obj `if test -f 'src/ags/audio/task/ags_apply_wavetable.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_apply_wavetable.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_apply_wavetable.c'; fi` gsequencer-ags_audio_set_recycling.o: src/ags/audio/task/ags_audio_set_recycling.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_audio_set_recycling.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_audio_set_recycling.Tpo -c -o gsequencer-ags_audio_set_recycling.o `test -f 'src/ags/audio/task/ags_audio_set_recycling.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_audio_set_recycling.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_audio_set_recycling.Tpo $(DEPDIR)/gsequencer-ags_audio_set_recycling.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_audio_set_recycling.c' object='gsequencer-ags_audio_set_recycling.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_audio_set_recycling.o `test -f 'src/ags/audio/task/ags_audio_set_recycling.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_audio_set_recycling.c gsequencer-ags_audio_set_recycling.obj: src/ags/audio/task/ags_audio_set_recycling.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_audio_set_recycling.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_audio_set_recycling.Tpo -c -o gsequencer-ags_audio_set_recycling.obj `if test -f 'src/ags/audio/task/ags_audio_set_recycling.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_audio_set_recycling.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_audio_set_recycling.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_audio_set_recycling.Tpo $(DEPDIR)/gsequencer-ags_audio_set_recycling.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_audio_set_recycling.c' object='gsequencer-ags_audio_set_recycling.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_audio_set_recycling.obj `if test -f 'src/ags/audio/task/ags_audio_set_recycling.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_audio_set_recycling.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_audio_set_recycling.c'; fi` gsequencer-ags_blink_cell_pattern_cursor.o: src/ags/audio/task/ags_blink_cell_pattern_cursor.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_blink_cell_pattern_cursor.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_blink_cell_pattern_cursor.Tpo -c -o gsequencer-ags_blink_cell_pattern_cursor.o `test -f 'src/ags/audio/task/ags_blink_cell_pattern_cursor.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_blink_cell_pattern_cursor.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_blink_cell_pattern_cursor.Tpo $(DEPDIR)/gsequencer-ags_blink_cell_pattern_cursor.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_blink_cell_pattern_cursor.c' object='gsequencer-ags_blink_cell_pattern_cursor.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_blink_cell_pattern_cursor.o `test -f 'src/ags/audio/task/ags_blink_cell_pattern_cursor.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_blink_cell_pattern_cursor.c gsequencer-ags_blink_cell_pattern_cursor.obj: src/ags/audio/task/ags_blink_cell_pattern_cursor.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_blink_cell_pattern_cursor.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_blink_cell_pattern_cursor.Tpo -c -o gsequencer-ags_blink_cell_pattern_cursor.obj `if test -f 'src/ags/audio/task/ags_blink_cell_pattern_cursor.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_blink_cell_pattern_cursor.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_blink_cell_pattern_cursor.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_blink_cell_pattern_cursor.Tpo $(DEPDIR)/gsequencer-ags_blink_cell_pattern_cursor.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_blink_cell_pattern_cursor.c' object='gsequencer-ags_blink_cell_pattern_cursor.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_blink_cell_pattern_cursor.obj `if test -f 'src/ags/audio/task/ags_blink_cell_pattern_cursor.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_blink_cell_pattern_cursor.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_blink_cell_pattern_cursor.c'; fi` gsequencer-ags_cancel_audio.o: src/ags/audio/task/ags_cancel_audio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_cancel_audio.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_cancel_audio.Tpo -c -o gsequencer-ags_cancel_audio.o `test -f 'src/ags/audio/task/ags_cancel_audio.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_cancel_audio.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_cancel_audio.Tpo $(DEPDIR)/gsequencer-ags_cancel_audio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_cancel_audio.c' object='gsequencer-ags_cancel_audio.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_cancel_audio.o `test -f 'src/ags/audio/task/ags_cancel_audio.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_cancel_audio.c gsequencer-ags_cancel_audio.obj: src/ags/audio/task/ags_cancel_audio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_cancel_audio.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_cancel_audio.Tpo -c -o gsequencer-ags_cancel_audio.obj `if test -f 'src/ags/audio/task/ags_cancel_audio.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_cancel_audio.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_cancel_audio.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_cancel_audio.Tpo $(DEPDIR)/gsequencer-ags_cancel_audio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_cancel_audio.c' object='gsequencer-ags_cancel_audio.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_cancel_audio.obj `if test -f 'src/ags/audio/task/ags_cancel_audio.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_cancel_audio.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_cancel_audio.c'; fi` gsequencer-ags_cancel_channel.o: src/ags/audio/task/ags_cancel_channel.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_cancel_channel.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_cancel_channel.Tpo -c -o gsequencer-ags_cancel_channel.o `test -f 'src/ags/audio/task/ags_cancel_channel.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_cancel_channel.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_cancel_channel.Tpo $(DEPDIR)/gsequencer-ags_cancel_channel.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_cancel_channel.c' object='gsequencer-ags_cancel_channel.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_cancel_channel.o `test -f 'src/ags/audio/task/ags_cancel_channel.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_cancel_channel.c gsequencer-ags_cancel_channel.obj: src/ags/audio/task/ags_cancel_channel.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_cancel_channel.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_cancel_channel.Tpo -c -o gsequencer-ags_cancel_channel.obj `if test -f 'src/ags/audio/task/ags_cancel_channel.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_cancel_channel.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_cancel_channel.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_cancel_channel.Tpo $(DEPDIR)/gsequencer-ags_cancel_channel.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_cancel_channel.c' object='gsequencer-ags_cancel_channel.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_cancel_channel.obj `if test -f 'src/ags/audio/task/ags_cancel_channel.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_cancel_channel.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_cancel_channel.c'; fi` gsequencer-ags_cancel_recall.o: src/ags/audio/task/ags_cancel_recall.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_cancel_recall.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_cancel_recall.Tpo -c -o gsequencer-ags_cancel_recall.o `test -f 'src/ags/audio/task/ags_cancel_recall.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_cancel_recall.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_cancel_recall.Tpo $(DEPDIR)/gsequencer-ags_cancel_recall.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_cancel_recall.c' object='gsequencer-ags_cancel_recall.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_cancel_recall.o `test -f 'src/ags/audio/task/ags_cancel_recall.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_cancel_recall.c gsequencer-ags_cancel_recall.obj: src/ags/audio/task/ags_cancel_recall.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_cancel_recall.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_cancel_recall.Tpo -c -o gsequencer-ags_cancel_recall.obj `if test -f 'src/ags/audio/task/ags_cancel_recall.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_cancel_recall.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_cancel_recall.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_cancel_recall.Tpo $(DEPDIR)/gsequencer-ags_cancel_recall.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_cancel_recall.c' object='gsequencer-ags_cancel_recall.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_cancel_recall.obj `if test -f 'src/ags/audio/task/ags_cancel_recall.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_cancel_recall.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_cancel_recall.c'; fi` gsequencer-ags_change_indicator.o: src/ags/audio/task/ags_change_indicator.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_change_indicator.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_change_indicator.Tpo -c -o gsequencer-ags_change_indicator.o `test -f 'src/ags/audio/task/ags_change_indicator.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_change_indicator.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_change_indicator.Tpo $(DEPDIR)/gsequencer-ags_change_indicator.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_change_indicator.c' object='gsequencer-ags_change_indicator.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_change_indicator.o `test -f 'src/ags/audio/task/ags_change_indicator.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_change_indicator.c gsequencer-ags_change_indicator.obj: src/ags/audio/task/ags_change_indicator.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_change_indicator.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_change_indicator.Tpo -c -o gsequencer-ags_change_indicator.obj `if test -f 'src/ags/audio/task/ags_change_indicator.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_change_indicator.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_change_indicator.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_change_indicator.Tpo $(DEPDIR)/gsequencer-ags_change_indicator.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_change_indicator.c' object='gsequencer-ags_change_indicator.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_change_indicator.obj `if test -f 'src/ags/audio/task/ags_change_indicator.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_change_indicator.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_change_indicator.c'; fi` gsequencer-ags_change_tact.o: src/ags/audio/task/ags_change_tact.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_change_tact.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_change_tact.Tpo -c -o gsequencer-ags_change_tact.o `test -f 'src/ags/audio/task/ags_change_tact.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_change_tact.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_change_tact.Tpo $(DEPDIR)/gsequencer-ags_change_tact.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_change_tact.c' object='gsequencer-ags_change_tact.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_change_tact.o `test -f 'src/ags/audio/task/ags_change_tact.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_change_tact.c gsequencer-ags_change_tact.obj: src/ags/audio/task/ags_change_tact.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_change_tact.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_change_tact.Tpo -c -o gsequencer-ags_change_tact.obj `if test -f 'src/ags/audio/task/ags_change_tact.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_change_tact.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_change_tact.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_change_tact.Tpo $(DEPDIR)/gsequencer-ags_change_tact.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_change_tact.c' object='gsequencer-ags_change_tact.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_change_tact.obj `if test -f 'src/ags/audio/task/ags_change_tact.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_change_tact.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_change_tact.c'; fi` gsequencer-ags_channel_set_recycling.o: src/ags/audio/task/ags_channel_set_recycling.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_channel_set_recycling.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_channel_set_recycling.Tpo -c -o gsequencer-ags_channel_set_recycling.o `test -f 'src/ags/audio/task/ags_channel_set_recycling.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_channel_set_recycling.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_channel_set_recycling.Tpo $(DEPDIR)/gsequencer-ags_channel_set_recycling.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_channel_set_recycling.c' object='gsequencer-ags_channel_set_recycling.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_channel_set_recycling.o `test -f 'src/ags/audio/task/ags_channel_set_recycling.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_channel_set_recycling.c gsequencer-ags_channel_set_recycling.obj: src/ags/audio/task/ags_channel_set_recycling.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_channel_set_recycling.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_channel_set_recycling.Tpo -c -o gsequencer-ags_channel_set_recycling.obj `if test -f 'src/ags/audio/task/ags_channel_set_recycling.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_channel_set_recycling.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_channel_set_recycling.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_channel_set_recycling.Tpo $(DEPDIR)/gsequencer-ags_channel_set_recycling.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_channel_set_recycling.c' object='gsequencer-ags_channel_set_recycling.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_channel_set_recycling.obj `if test -f 'src/ags/audio/task/ags_channel_set_recycling.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_channel_set_recycling.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_channel_set_recycling.c'; fi` gsequencer-ags_display_tact.o: src/ags/audio/task/ags_display_tact.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_display_tact.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_display_tact.Tpo -c -o gsequencer-ags_display_tact.o `test -f 'src/ags/audio/task/ags_display_tact.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_display_tact.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_display_tact.Tpo $(DEPDIR)/gsequencer-ags_display_tact.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_display_tact.c' object='gsequencer-ags_display_tact.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_display_tact.o `test -f 'src/ags/audio/task/ags_display_tact.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_display_tact.c gsequencer-ags_display_tact.obj: src/ags/audio/task/ags_display_tact.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_display_tact.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_display_tact.Tpo -c -o gsequencer-ags_display_tact.obj `if test -f 'src/ags/audio/task/ags_display_tact.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_display_tact.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_display_tact.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_display_tact.Tpo $(DEPDIR)/gsequencer-ags_display_tact.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_display_tact.c' object='gsequencer-ags_display_tact.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_display_tact.obj `if test -f 'src/ags/audio/task/ags_display_tact.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_display_tact.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_display_tact.c'; fi` gsequencer-ags_export_output.o: src/ags/audio/task/ags_export_output.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_export_output.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_export_output.Tpo -c -o gsequencer-ags_export_output.o `test -f 'src/ags/audio/task/ags_export_output.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_export_output.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_export_output.Tpo $(DEPDIR)/gsequencer-ags_export_output.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_export_output.c' object='gsequencer-ags_export_output.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_export_output.o `test -f 'src/ags/audio/task/ags_export_output.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_export_output.c gsequencer-ags_export_output.obj: src/ags/audio/task/ags_export_output.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_export_output.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_export_output.Tpo -c -o gsequencer-ags_export_output.obj `if test -f 'src/ags/audio/task/ags_export_output.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_export_output.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_export_output.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_export_output.Tpo $(DEPDIR)/gsequencer-ags_export_output.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_export_output.c' object='gsequencer-ags_export_output.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_export_output.obj `if test -f 'src/ags/audio/task/ags_export_output.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_export_output.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_export_output.c'; fi` gsequencer-ags_free_selection.o: src/ags/audio/task/ags_free_selection.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_free_selection.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_free_selection.Tpo -c -o gsequencer-ags_free_selection.o `test -f 'src/ags/audio/task/ags_free_selection.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_free_selection.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_free_selection.Tpo $(DEPDIR)/gsequencer-ags_free_selection.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_free_selection.c' object='gsequencer-ags_free_selection.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_free_selection.o `test -f 'src/ags/audio/task/ags_free_selection.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_free_selection.c gsequencer-ags_free_selection.obj: src/ags/audio/task/ags_free_selection.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_free_selection.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_free_selection.Tpo -c -o gsequencer-ags_free_selection.obj `if test -f 'src/ags/audio/task/ags_free_selection.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_free_selection.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_free_selection.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_free_selection.Tpo $(DEPDIR)/gsequencer-ags_free_selection.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_free_selection.c' object='gsequencer-ags_free_selection.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_free_selection.obj `if test -f 'src/ags/audio/task/ags_free_selection.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_free_selection.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_free_selection.c'; fi` gsequencer-ags_init_audio.o: src/ags/audio/task/ags_init_audio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_init_audio.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_init_audio.Tpo -c -o gsequencer-ags_init_audio.o `test -f 'src/ags/audio/task/ags_init_audio.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_init_audio.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_init_audio.Tpo $(DEPDIR)/gsequencer-ags_init_audio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_init_audio.c' object='gsequencer-ags_init_audio.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_init_audio.o `test -f 'src/ags/audio/task/ags_init_audio.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_init_audio.c gsequencer-ags_init_audio.obj: src/ags/audio/task/ags_init_audio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_init_audio.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_init_audio.Tpo -c -o gsequencer-ags_init_audio.obj `if test -f 'src/ags/audio/task/ags_init_audio.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_init_audio.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_init_audio.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_init_audio.Tpo $(DEPDIR)/gsequencer-ags_init_audio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_init_audio.c' object='gsequencer-ags_init_audio.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_init_audio.obj `if test -f 'src/ags/audio/task/ags_init_audio.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_init_audio.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_init_audio.c'; fi` gsequencer-ags_init_channel.o: src/ags/audio/task/ags_init_channel.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_init_channel.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_init_channel.Tpo -c -o gsequencer-ags_init_channel.o `test -f 'src/ags/audio/task/ags_init_channel.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_init_channel.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_init_channel.Tpo $(DEPDIR)/gsequencer-ags_init_channel.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_init_channel.c' object='gsequencer-ags_init_channel.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_init_channel.o `test -f 'src/ags/audio/task/ags_init_channel.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_init_channel.c gsequencer-ags_init_channel.obj: src/ags/audio/task/ags_init_channel.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_init_channel.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_init_channel.Tpo -c -o gsequencer-ags_init_channel.obj `if test -f 'src/ags/audio/task/ags_init_channel.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_init_channel.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_init_channel.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_init_channel.Tpo $(DEPDIR)/gsequencer-ags_init_channel.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_init_channel.c' object='gsequencer-ags_init_channel.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_init_channel.obj `if test -f 'src/ags/audio/task/ags_init_channel.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_init_channel.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_init_channel.c'; fi` gsequencer-ags_link_channel.o: src/ags/audio/task/ags_link_channel.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_link_channel.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_link_channel.Tpo -c -o gsequencer-ags_link_channel.o `test -f 'src/ags/audio/task/ags_link_channel.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_link_channel.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_link_channel.Tpo $(DEPDIR)/gsequencer-ags_link_channel.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_link_channel.c' object='gsequencer-ags_link_channel.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_link_channel.o `test -f 'src/ags/audio/task/ags_link_channel.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_link_channel.c gsequencer-ags_link_channel.obj: src/ags/audio/task/ags_link_channel.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_link_channel.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_link_channel.Tpo -c -o gsequencer-ags_link_channel.obj `if test -f 'src/ags/audio/task/ags_link_channel.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_link_channel.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_link_channel.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_link_channel.Tpo $(DEPDIR)/gsequencer-ags_link_channel.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_link_channel.c' object='gsequencer-ags_link_channel.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_link_channel.obj `if test -f 'src/ags/audio/task/ags_link_channel.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_link_channel.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_link_channel.c'; fi` gsequencer-ags_open_file.o: src/ags/audio/task/ags_open_file.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_open_file.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_open_file.Tpo -c -o gsequencer-ags_open_file.o `test -f 'src/ags/audio/task/ags_open_file.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_open_file.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_open_file.Tpo $(DEPDIR)/gsequencer-ags_open_file.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_open_file.c' object='gsequencer-ags_open_file.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_open_file.o `test -f 'src/ags/audio/task/ags_open_file.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_open_file.c gsequencer-ags_open_file.obj: src/ags/audio/task/ags_open_file.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_open_file.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_open_file.Tpo -c -o gsequencer-ags_open_file.obj `if test -f 'src/ags/audio/task/ags_open_file.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_open_file.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_open_file.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_open_file.Tpo $(DEPDIR)/gsequencer-ags_open_file.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_open_file.c' object='gsequencer-ags_open_file.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_open_file.obj `if test -f 'src/ags/audio/task/ags_open_file.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_open_file.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_open_file.c'; fi` gsequencer-ags_open_single_file.o: src/ags/audio/task/ags_open_single_file.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_open_single_file.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_open_single_file.Tpo -c -o gsequencer-ags_open_single_file.o `test -f 'src/ags/audio/task/ags_open_single_file.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_open_single_file.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_open_single_file.Tpo $(DEPDIR)/gsequencer-ags_open_single_file.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_open_single_file.c' object='gsequencer-ags_open_single_file.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_open_single_file.o `test -f 'src/ags/audio/task/ags_open_single_file.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_open_single_file.c gsequencer-ags_open_single_file.obj: src/ags/audio/task/ags_open_single_file.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_open_single_file.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_open_single_file.Tpo -c -o gsequencer-ags_open_single_file.obj `if test -f 'src/ags/audio/task/ags_open_single_file.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_open_single_file.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_open_single_file.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_open_single_file.Tpo $(DEPDIR)/gsequencer-ags_open_single_file.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_open_single_file.c' object='gsequencer-ags_open_single_file.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_open_single_file.obj `if test -f 'src/ags/audio/task/ags_open_single_file.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_open_single_file.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_open_single_file.c'; fi` gsequencer-ags_remove_audio.o: src/ags/audio/task/ags_remove_audio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_remove_audio.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_remove_audio.Tpo -c -o gsequencer-ags_remove_audio.o `test -f 'src/ags/audio/task/ags_remove_audio.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_remove_audio.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_remove_audio.Tpo $(DEPDIR)/gsequencer-ags_remove_audio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_remove_audio.c' object='gsequencer-ags_remove_audio.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_remove_audio.o `test -f 'src/ags/audio/task/ags_remove_audio.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_remove_audio.c gsequencer-ags_remove_audio.obj: src/ags/audio/task/ags_remove_audio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_remove_audio.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_remove_audio.Tpo -c -o gsequencer-ags_remove_audio.obj `if test -f 'src/ags/audio/task/ags_remove_audio.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_remove_audio.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_remove_audio.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_remove_audio.Tpo $(DEPDIR)/gsequencer-ags_remove_audio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_remove_audio.c' object='gsequencer-ags_remove_audio.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_remove_audio.obj `if test -f 'src/ags/audio/task/ags_remove_audio.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_remove_audio.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_remove_audio.c'; fi` gsequencer-ags_remove_audio_signal.o: src/ags/audio/task/ags_remove_audio_signal.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_remove_audio_signal.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_remove_audio_signal.Tpo -c -o gsequencer-ags_remove_audio_signal.o `test -f 'src/ags/audio/task/ags_remove_audio_signal.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_remove_audio_signal.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_remove_audio_signal.Tpo $(DEPDIR)/gsequencer-ags_remove_audio_signal.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_remove_audio_signal.c' object='gsequencer-ags_remove_audio_signal.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_remove_audio_signal.o `test -f 'src/ags/audio/task/ags_remove_audio_signal.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_remove_audio_signal.c gsequencer-ags_remove_audio_signal.obj: src/ags/audio/task/ags_remove_audio_signal.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_remove_audio_signal.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_remove_audio_signal.Tpo -c -o gsequencer-ags_remove_audio_signal.obj `if test -f 'src/ags/audio/task/ags_remove_audio_signal.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_remove_audio_signal.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_remove_audio_signal.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_remove_audio_signal.Tpo $(DEPDIR)/gsequencer-ags_remove_audio_signal.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_remove_audio_signal.c' object='gsequencer-ags_remove_audio_signal.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_remove_audio_signal.obj `if test -f 'src/ags/audio/task/ags_remove_audio_signal.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_remove_audio_signal.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_remove_audio_signal.c'; fi` gsequencer-ags_remove_note.o: src/ags/audio/task/ags_remove_note.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_remove_note.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_remove_note.Tpo -c -o gsequencer-ags_remove_note.o `test -f 'src/ags/audio/task/ags_remove_note.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_remove_note.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_remove_note.Tpo $(DEPDIR)/gsequencer-ags_remove_note.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_remove_note.c' object='gsequencer-ags_remove_note.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_remove_note.o `test -f 'src/ags/audio/task/ags_remove_note.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_remove_note.c gsequencer-ags_remove_note.obj: src/ags/audio/task/ags_remove_note.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_remove_note.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_remove_note.Tpo -c -o gsequencer-ags_remove_note.obj `if test -f 'src/ags/audio/task/ags_remove_note.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_remove_note.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_remove_note.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_remove_note.Tpo $(DEPDIR)/gsequencer-ags_remove_note.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_remove_note.c' object='gsequencer-ags_remove_note.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_remove_note.obj `if test -f 'src/ags/audio/task/ags_remove_note.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_remove_note.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_remove_note.c'; fi` gsequencer-ags_remove_point_from_selection.o: src/ags/audio/task/ags_remove_point_from_selection.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_remove_point_from_selection.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_remove_point_from_selection.Tpo -c -o gsequencer-ags_remove_point_from_selection.o `test -f 'src/ags/audio/task/ags_remove_point_from_selection.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_remove_point_from_selection.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_remove_point_from_selection.Tpo $(DEPDIR)/gsequencer-ags_remove_point_from_selection.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_remove_point_from_selection.c' object='gsequencer-ags_remove_point_from_selection.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_remove_point_from_selection.o `test -f 'src/ags/audio/task/ags_remove_point_from_selection.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_remove_point_from_selection.c gsequencer-ags_remove_point_from_selection.obj: src/ags/audio/task/ags_remove_point_from_selection.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_remove_point_from_selection.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_remove_point_from_selection.Tpo -c -o gsequencer-ags_remove_point_from_selection.obj `if test -f 'src/ags/audio/task/ags_remove_point_from_selection.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_remove_point_from_selection.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_remove_point_from_selection.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_remove_point_from_selection.Tpo $(DEPDIR)/gsequencer-ags_remove_point_from_selection.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_remove_point_from_selection.c' object='gsequencer-ags_remove_point_from_selection.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_remove_point_from_selection.obj `if test -f 'src/ags/audio/task/ags_remove_point_from_selection.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_remove_point_from_selection.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_remove_point_from_selection.c'; fi` gsequencer-ags_remove_recall.o: src/ags/audio/task/ags_remove_recall.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_remove_recall.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_remove_recall.Tpo -c -o gsequencer-ags_remove_recall.o `test -f 'src/ags/audio/task/ags_remove_recall.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_remove_recall.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_remove_recall.Tpo $(DEPDIR)/gsequencer-ags_remove_recall.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_remove_recall.c' object='gsequencer-ags_remove_recall.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_remove_recall.o `test -f 'src/ags/audio/task/ags_remove_recall.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_remove_recall.c gsequencer-ags_remove_recall.obj: src/ags/audio/task/ags_remove_recall.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_remove_recall.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_remove_recall.Tpo -c -o gsequencer-ags_remove_recall.obj `if test -f 'src/ags/audio/task/ags_remove_recall.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_remove_recall.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_remove_recall.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_remove_recall.Tpo $(DEPDIR)/gsequencer-ags_remove_recall.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_remove_recall.c' object='gsequencer-ags_remove_recall.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_remove_recall.obj `if test -f 'src/ags/audio/task/ags_remove_recall.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_remove_recall.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_remove_recall.c'; fi` gsequencer-ags_remove_recall_container.o: src/ags/audio/task/ags_remove_recall_container.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_remove_recall_container.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_remove_recall_container.Tpo -c -o gsequencer-ags_remove_recall_container.o `test -f 'src/ags/audio/task/ags_remove_recall_container.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_remove_recall_container.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_remove_recall_container.Tpo $(DEPDIR)/gsequencer-ags_remove_recall_container.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_remove_recall_container.c' object='gsequencer-ags_remove_recall_container.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_remove_recall_container.o `test -f 'src/ags/audio/task/ags_remove_recall_container.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_remove_recall_container.c gsequencer-ags_remove_recall_container.obj: src/ags/audio/task/ags_remove_recall_container.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_remove_recall_container.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_remove_recall_container.Tpo -c -o gsequencer-ags_remove_recall_container.obj `if test -f 'src/ags/audio/task/ags_remove_recall_container.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_remove_recall_container.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_remove_recall_container.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_remove_recall_container.Tpo $(DEPDIR)/gsequencer-ags_remove_recall_container.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_remove_recall_container.c' object='gsequencer-ags_remove_recall_container.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_remove_recall_container.obj `if test -f 'src/ags/audio/task/ags_remove_recall_container.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_remove_recall_container.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_remove_recall_container.c'; fi` gsequencer-ags_remove_region_from_selection.o: src/ags/audio/task/ags_remove_region_from_selection.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_remove_region_from_selection.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_remove_region_from_selection.Tpo -c -o gsequencer-ags_remove_region_from_selection.o `test -f 'src/ags/audio/task/ags_remove_region_from_selection.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_remove_region_from_selection.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_remove_region_from_selection.Tpo $(DEPDIR)/gsequencer-ags_remove_region_from_selection.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_remove_region_from_selection.c' object='gsequencer-ags_remove_region_from_selection.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_remove_region_from_selection.o `test -f 'src/ags/audio/task/ags_remove_region_from_selection.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_remove_region_from_selection.c gsequencer-ags_remove_region_from_selection.obj: src/ags/audio/task/ags_remove_region_from_selection.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_remove_region_from_selection.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_remove_region_from_selection.Tpo -c -o gsequencer-ags_remove_region_from_selection.obj `if test -f 'src/ags/audio/task/ags_remove_region_from_selection.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_remove_region_from_selection.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_remove_region_from_selection.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_remove_region_from_selection.Tpo $(DEPDIR)/gsequencer-ags_remove_region_from_selection.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_remove_region_from_selection.c' object='gsequencer-ags_remove_region_from_selection.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_remove_region_from_selection.obj `if test -f 'src/ags/audio/task/ags_remove_region_from_selection.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_remove_region_from_selection.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_remove_region_from_selection.c'; fi` gsequencer-ags_resize_audio.o: src/ags/audio/task/ags_resize_audio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_resize_audio.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_resize_audio.Tpo -c -o gsequencer-ags_resize_audio.o `test -f 'src/ags/audio/task/ags_resize_audio.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_resize_audio.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_resize_audio.Tpo $(DEPDIR)/gsequencer-ags_resize_audio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_resize_audio.c' object='gsequencer-ags_resize_audio.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_resize_audio.o `test -f 'src/ags/audio/task/ags_resize_audio.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_resize_audio.c gsequencer-ags_resize_audio.obj: src/ags/audio/task/ags_resize_audio.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_resize_audio.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_resize_audio.Tpo -c -o gsequencer-ags_resize_audio.obj `if test -f 'src/ags/audio/task/ags_resize_audio.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_resize_audio.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_resize_audio.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_resize_audio.Tpo $(DEPDIR)/gsequencer-ags_resize_audio.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_resize_audio.c' object='gsequencer-ags_resize_audio.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_resize_audio.obj `if test -f 'src/ags/audio/task/ags_resize_audio.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_resize_audio.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_resize_audio.c'; fi` gsequencer-ags_save_file.o: src/ags/audio/task/ags_save_file.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_save_file.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_save_file.Tpo -c -o gsequencer-ags_save_file.o `test -f 'src/ags/audio/task/ags_save_file.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_save_file.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_save_file.Tpo $(DEPDIR)/gsequencer-ags_save_file.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_save_file.c' object='gsequencer-ags_save_file.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_save_file.o `test -f 'src/ags/audio/task/ags_save_file.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_save_file.c gsequencer-ags_save_file.obj: src/ags/audio/task/ags_save_file.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_save_file.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_save_file.Tpo -c -o gsequencer-ags_save_file.obj `if test -f 'src/ags/audio/task/ags_save_file.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_save_file.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_save_file.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_save_file.Tpo $(DEPDIR)/gsequencer-ags_save_file.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_save_file.c' object='gsequencer-ags_save_file.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_save_file.obj `if test -f 'src/ags/audio/task/ags_save_file.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_save_file.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_save_file.c'; fi` gsequencer-ags_scroll_on_play.o: src/ags/audio/task/ags_scroll_on_play.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_scroll_on_play.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_scroll_on_play.Tpo -c -o gsequencer-ags_scroll_on_play.o `test -f 'src/ags/audio/task/ags_scroll_on_play.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_scroll_on_play.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_scroll_on_play.Tpo $(DEPDIR)/gsequencer-ags_scroll_on_play.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_scroll_on_play.c' object='gsequencer-ags_scroll_on_play.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_scroll_on_play.o `test -f 'src/ags/audio/task/ags_scroll_on_play.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_scroll_on_play.c gsequencer-ags_scroll_on_play.obj: src/ags/audio/task/ags_scroll_on_play.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_scroll_on_play.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_scroll_on_play.Tpo -c -o gsequencer-ags_scroll_on_play.obj `if test -f 'src/ags/audio/task/ags_scroll_on_play.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_scroll_on_play.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_scroll_on_play.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_scroll_on_play.Tpo $(DEPDIR)/gsequencer-ags_scroll_on_play.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_scroll_on_play.c' object='gsequencer-ags_scroll_on_play.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_scroll_on_play.obj `if test -f 'src/ags/audio/task/ags_scroll_on_play.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_scroll_on_play.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_scroll_on_play.c'; fi` gsequencer-ags_seek_devout.o: src/ags/audio/task/ags_seek_devout.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_seek_devout.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_seek_devout.Tpo -c -o gsequencer-ags_seek_devout.o `test -f 'src/ags/audio/task/ags_seek_devout.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_seek_devout.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_seek_devout.Tpo $(DEPDIR)/gsequencer-ags_seek_devout.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_seek_devout.c' object='gsequencer-ags_seek_devout.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_seek_devout.o `test -f 'src/ags/audio/task/ags_seek_devout.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_seek_devout.c gsequencer-ags_seek_devout.obj: src/ags/audio/task/ags_seek_devout.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_seek_devout.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_seek_devout.Tpo -c -o gsequencer-ags_seek_devout.obj `if test -f 'src/ags/audio/task/ags_seek_devout.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_seek_devout.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_seek_devout.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_seek_devout.Tpo $(DEPDIR)/gsequencer-ags_seek_devout.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_seek_devout.c' object='gsequencer-ags_seek_devout.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_seek_devout.obj `if test -f 'src/ags/audio/task/ags_seek_devout.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_seek_devout.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_seek_devout.c'; fi` gsequencer-ags_set_audio_channels.o: src/ags/audio/task/ags_set_audio_channels.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_set_audio_channels.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_set_audio_channels.Tpo -c -o gsequencer-ags_set_audio_channels.o `test -f 'src/ags/audio/task/ags_set_audio_channels.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_set_audio_channels.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_set_audio_channels.Tpo $(DEPDIR)/gsequencer-ags_set_audio_channels.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_set_audio_channels.c' object='gsequencer-ags_set_audio_channels.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_set_audio_channels.o `test -f 'src/ags/audio/task/ags_set_audio_channels.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_set_audio_channels.c gsequencer-ags_set_audio_channels.obj: src/ags/audio/task/ags_set_audio_channels.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_set_audio_channels.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_set_audio_channels.Tpo -c -o gsequencer-ags_set_audio_channels.obj `if test -f 'src/ags/audio/task/ags_set_audio_channels.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_set_audio_channels.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_set_audio_channels.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_set_audio_channels.Tpo $(DEPDIR)/gsequencer-ags_set_audio_channels.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_set_audio_channels.c' object='gsequencer-ags_set_audio_channels.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_set_audio_channels.obj `if test -f 'src/ags/audio/task/ags_set_audio_channels.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_set_audio_channels.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_set_audio_channels.c'; fi` gsequencer-ags_set_buffer_size.o: src/ags/audio/task/ags_set_buffer_size.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_set_buffer_size.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_set_buffer_size.Tpo -c -o gsequencer-ags_set_buffer_size.o `test -f 'src/ags/audio/task/ags_set_buffer_size.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_set_buffer_size.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_set_buffer_size.Tpo $(DEPDIR)/gsequencer-ags_set_buffer_size.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_set_buffer_size.c' object='gsequencer-ags_set_buffer_size.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_set_buffer_size.o `test -f 'src/ags/audio/task/ags_set_buffer_size.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_set_buffer_size.c gsequencer-ags_set_buffer_size.obj: src/ags/audio/task/ags_set_buffer_size.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_set_buffer_size.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_set_buffer_size.Tpo -c -o gsequencer-ags_set_buffer_size.obj `if test -f 'src/ags/audio/task/ags_set_buffer_size.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_set_buffer_size.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_set_buffer_size.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_set_buffer_size.Tpo $(DEPDIR)/gsequencer-ags_set_buffer_size.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_set_buffer_size.c' object='gsequencer-ags_set_buffer_size.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_set_buffer_size.obj `if test -f 'src/ags/audio/task/ags_set_buffer_size.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_set_buffer_size.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_set_buffer_size.c'; fi` gsequencer-ags_set_devout_play_flags.o: src/ags/audio/task/ags_set_devout_play_flags.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_set_devout_play_flags.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_set_devout_play_flags.Tpo -c -o gsequencer-ags_set_devout_play_flags.o `test -f 'src/ags/audio/task/ags_set_devout_play_flags.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_set_devout_play_flags.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_set_devout_play_flags.Tpo $(DEPDIR)/gsequencer-ags_set_devout_play_flags.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_set_devout_play_flags.c' object='gsequencer-ags_set_devout_play_flags.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_set_devout_play_flags.o `test -f 'src/ags/audio/task/ags_set_devout_play_flags.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_set_devout_play_flags.c gsequencer-ags_set_devout_play_flags.obj: src/ags/audio/task/ags_set_devout_play_flags.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_set_devout_play_flags.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_set_devout_play_flags.Tpo -c -o gsequencer-ags_set_devout_play_flags.obj `if test -f 'src/ags/audio/task/ags_set_devout_play_flags.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_set_devout_play_flags.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_set_devout_play_flags.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_set_devout_play_flags.Tpo $(DEPDIR)/gsequencer-ags_set_devout_play_flags.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_set_devout_play_flags.c' object='gsequencer-ags_set_devout_play_flags.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_set_devout_play_flags.obj `if test -f 'src/ags/audio/task/ags_set_devout_play_flags.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_set_devout_play_flags.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_set_devout_play_flags.c'; fi` gsequencer-ags_set_output_device.o: src/ags/audio/task/ags_set_output_device.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_set_output_device.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_set_output_device.Tpo -c -o gsequencer-ags_set_output_device.o `test -f 'src/ags/audio/task/ags_set_output_device.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_set_output_device.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_set_output_device.Tpo $(DEPDIR)/gsequencer-ags_set_output_device.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_set_output_device.c' object='gsequencer-ags_set_output_device.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_set_output_device.o `test -f 'src/ags/audio/task/ags_set_output_device.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_set_output_device.c gsequencer-ags_set_output_device.obj: src/ags/audio/task/ags_set_output_device.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_set_output_device.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_set_output_device.Tpo -c -o gsequencer-ags_set_output_device.obj `if test -f 'src/ags/audio/task/ags_set_output_device.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_set_output_device.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_set_output_device.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_set_output_device.Tpo $(DEPDIR)/gsequencer-ags_set_output_device.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_set_output_device.c' object='gsequencer-ags_set_output_device.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_set_output_device.obj `if test -f 'src/ags/audio/task/ags_set_output_device.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_set_output_device.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_set_output_device.c'; fi` gsequencer-ags_set_samplerate.o: src/ags/audio/task/ags_set_samplerate.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_set_samplerate.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_set_samplerate.Tpo -c -o gsequencer-ags_set_samplerate.o `test -f 'src/ags/audio/task/ags_set_samplerate.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_set_samplerate.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_set_samplerate.Tpo $(DEPDIR)/gsequencer-ags_set_samplerate.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_set_samplerate.c' object='gsequencer-ags_set_samplerate.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_set_samplerate.o `test -f 'src/ags/audio/task/ags_set_samplerate.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_set_samplerate.c gsequencer-ags_set_samplerate.obj: src/ags/audio/task/ags_set_samplerate.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_set_samplerate.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_set_samplerate.Tpo -c -o gsequencer-ags_set_samplerate.obj `if test -f 'src/ags/audio/task/ags_set_samplerate.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_set_samplerate.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_set_samplerate.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_set_samplerate.Tpo $(DEPDIR)/gsequencer-ags_set_samplerate.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_set_samplerate.c' object='gsequencer-ags_set_samplerate.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_set_samplerate.obj `if test -f 'src/ags/audio/task/ags_set_samplerate.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_set_samplerate.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_set_samplerate.c'; fi` gsequencer-ags_start_devout.o: src/ags/audio/task/ags_start_devout.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_start_devout.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_start_devout.Tpo -c -o gsequencer-ags_start_devout.o `test -f 'src/ags/audio/task/ags_start_devout.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_start_devout.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_start_devout.Tpo $(DEPDIR)/gsequencer-ags_start_devout.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_start_devout.c' object='gsequencer-ags_start_devout.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_start_devout.o `test -f 'src/ags/audio/task/ags_start_devout.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_start_devout.c gsequencer-ags_start_devout.obj: src/ags/audio/task/ags_start_devout.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_start_devout.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_start_devout.Tpo -c -o gsequencer-ags_start_devout.obj `if test -f 'src/ags/audio/task/ags_start_devout.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_start_devout.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_start_devout.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_start_devout.Tpo $(DEPDIR)/gsequencer-ags_start_devout.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_start_devout.c' object='gsequencer-ags_start_devout.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_start_devout.obj `if test -f 'src/ags/audio/task/ags_start_devout.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_start_devout.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_start_devout.c'; fi` gsequencer-ags_start_read_file.o: src/ags/audio/task/ags_start_read_file.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_start_read_file.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_start_read_file.Tpo -c -o gsequencer-ags_start_read_file.o `test -f 'src/ags/audio/task/ags_start_read_file.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_start_read_file.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_start_read_file.Tpo $(DEPDIR)/gsequencer-ags_start_read_file.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_start_read_file.c' object='gsequencer-ags_start_read_file.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_start_read_file.o `test -f 'src/ags/audio/task/ags_start_read_file.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_start_read_file.c gsequencer-ags_start_read_file.obj: src/ags/audio/task/ags_start_read_file.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_start_read_file.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_start_read_file.Tpo -c -o gsequencer-ags_start_read_file.obj `if test -f 'src/ags/audio/task/ags_start_read_file.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_start_read_file.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_start_read_file.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_start_read_file.Tpo $(DEPDIR)/gsequencer-ags_start_read_file.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_start_read_file.c' object='gsequencer-ags_start_read_file.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_start_read_file.obj `if test -f 'src/ags/audio/task/ags_start_read_file.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_start_read_file.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_start_read_file.c'; fi` gsequencer-ags_toggle_led.o: src/ags/audio/task/ags_toggle_led.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_toggle_led.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_toggle_led.Tpo -c -o gsequencer-ags_toggle_led.o `test -f 'src/ags/audio/task/ags_toggle_led.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_toggle_led.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_toggle_led.Tpo $(DEPDIR)/gsequencer-ags_toggle_led.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_toggle_led.c' object='gsequencer-ags_toggle_led.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_toggle_led.o `test -f 'src/ags/audio/task/ags_toggle_led.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_toggle_led.c gsequencer-ags_toggle_led.obj: src/ags/audio/task/ags_toggle_led.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_toggle_led.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_toggle_led.Tpo -c -o gsequencer-ags_toggle_led.obj `if test -f 'src/ags/audio/task/ags_toggle_led.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_toggle_led.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_toggle_led.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_toggle_led.Tpo $(DEPDIR)/gsequencer-ags_toggle_led.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_toggle_led.c' object='gsequencer-ags_toggle_led.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_toggle_led.obj `if test -f 'src/ags/audio/task/ags_toggle_led.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_toggle_led.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_toggle_led.c'; fi` gsequencer-ags_toggle_pattern_bit.o: src/ags/audio/task/ags_toggle_pattern_bit.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_toggle_pattern_bit.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_toggle_pattern_bit.Tpo -c -o gsequencer-ags_toggle_pattern_bit.o `test -f 'src/ags/audio/task/ags_toggle_pattern_bit.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_toggle_pattern_bit.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_toggle_pattern_bit.Tpo $(DEPDIR)/gsequencer-ags_toggle_pattern_bit.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_toggle_pattern_bit.c' object='gsequencer-ags_toggle_pattern_bit.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_toggle_pattern_bit.o `test -f 'src/ags/audio/task/ags_toggle_pattern_bit.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_toggle_pattern_bit.c gsequencer-ags_toggle_pattern_bit.obj: src/ags/audio/task/ags_toggle_pattern_bit.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_toggle_pattern_bit.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_toggle_pattern_bit.Tpo -c -o gsequencer-ags_toggle_pattern_bit.obj `if test -f 'src/ags/audio/task/ags_toggle_pattern_bit.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_toggle_pattern_bit.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_toggle_pattern_bit.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_toggle_pattern_bit.Tpo $(DEPDIR)/gsequencer-ags_toggle_pattern_bit.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_toggle_pattern_bit.c' object='gsequencer-ags_toggle_pattern_bit.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_toggle_pattern_bit.obj `if test -f 'src/ags/audio/task/ags_toggle_pattern_bit.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_toggle_pattern_bit.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_toggle_pattern_bit.c'; fi` gsequencer-ags_unref_audio_signal.o: src/ags/audio/task/ags_unref_audio_signal.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_unref_audio_signal.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_unref_audio_signal.Tpo -c -o gsequencer-ags_unref_audio_signal.o `test -f 'src/ags/audio/task/ags_unref_audio_signal.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_unref_audio_signal.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_unref_audio_signal.Tpo $(DEPDIR)/gsequencer-ags_unref_audio_signal.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_unref_audio_signal.c' object='gsequencer-ags_unref_audio_signal.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_unref_audio_signal.o `test -f 'src/ags/audio/task/ags_unref_audio_signal.c' || echo '$(srcdir)/'`src/ags/audio/task/ags_unref_audio_signal.c gsequencer-ags_unref_audio_signal.obj: src/ags/audio/task/ags_unref_audio_signal.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_unref_audio_signal.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_unref_audio_signal.Tpo -c -o gsequencer-ags_unref_audio_signal.obj `if test -f 'src/ags/audio/task/ags_unref_audio_signal.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_unref_audio_signal.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_unref_audio_signal.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_unref_audio_signal.Tpo $(DEPDIR)/gsequencer-ags_unref_audio_signal.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/ags_unref_audio_signal.c' object='gsequencer-ags_unref_audio_signal.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_unref_audio_signal.obj `if test -f 'src/ags/audio/task/ags_unref_audio_signal.c'; then $(CYGPATH_W) 'src/ags/audio/task/ags_unref_audio_signal.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/ags_unref_audio_signal.c'; fi` gsequencer-ags_apply_bpm.o: src/ags/audio/task/recall/ags_apply_bpm.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_apply_bpm.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_apply_bpm.Tpo -c -o gsequencer-ags_apply_bpm.o `test -f 'src/ags/audio/task/recall/ags_apply_bpm.c' || echo '$(srcdir)/'`src/ags/audio/task/recall/ags_apply_bpm.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_apply_bpm.Tpo $(DEPDIR)/gsequencer-ags_apply_bpm.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/recall/ags_apply_bpm.c' object='gsequencer-ags_apply_bpm.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_apply_bpm.o `test -f 'src/ags/audio/task/recall/ags_apply_bpm.c' || echo '$(srcdir)/'`src/ags/audio/task/recall/ags_apply_bpm.c gsequencer-ags_apply_bpm.obj: src/ags/audio/task/recall/ags_apply_bpm.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_apply_bpm.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_apply_bpm.Tpo -c -o gsequencer-ags_apply_bpm.obj `if test -f 'src/ags/audio/task/recall/ags_apply_bpm.c'; then $(CYGPATH_W) 'src/ags/audio/task/recall/ags_apply_bpm.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/recall/ags_apply_bpm.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_apply_bpm.Tpo $(DEPDIR)/gsequencer-ags_apply_bpm.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/recall/ags_apply_bpm.c' object='gsequencer-ags_apply_bpm.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_apply_bpm.obj `if test -f 'src/ags/audio/task/recall/ags_apply_bpm.c'; then $(CYGPATH_W) 'src/ags/audio/task/recall/ags_apply_bpm.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/recall/ags_apply_bpm.c'; fi` gsequencer-ags_apply_sequencer_length.o: src/ags/audio/task/recall/ags_apply_sequencer_length.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_apply_sequencer_length.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_apply_sequencer_length.Tpo -c -o gsequencer-ags_apply_sequencer_length.o `test -f 'src/ags/audio/task/recall/ags_apply_sequencer_length.c' || echo '$(srcdir)/'`src/ags/audio/task/recall/ags_apply_sequencer_length.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_apply_sequencer_length.Tpo $(DEPDIR)/gsequencer-ags_apply_sequencer_length.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/recall/ags_apply_sequencer_length.c' object='gsequencer-ags_apply_sequencer_length.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_apply_sequencer_length.o `test -f 'src/ags/audio/task/recall/ags_apply_sequencer_length.c' || echo '$(srcdir)/'`src/ags/audio/task/recall/ags_apply_sequencer_length.c gsequencer-ags_apply_sequencer_length.obj: src/ags/audio/task/recall/ags_apply_sequencer_length.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_apply_sequencer_length.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_apply_sequencer_length.Tpo -c -o gsequencer-ags_apply_sequencer_length.obj `if test -f 'src/ags/audio/task/recall/ags_apply_sequencer_length.c'; then $(CYGPATH_W) 'src/ags/audio/task/recall/ags_apply_sequencer_length.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/recall/ags_apply_sequencer_length.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_apply_sequencer_length.Tpo $(DEPDIR)/gsequencer-ags_apply_sequencer_length.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/recall/ags_apply_sequencer_length.c' object='gsequencer-ags_apply_sequencer_length.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_apply_sequencer_length.obj `if test -f 'src/ags/audio/task/recall/ags_apply_sequencer_length.c'; then $(CYGPATH_W) 'src/ags/audio/task/recall/ags_apply_sequencer_length.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/recall/ags_apply_sequencer_length.c'; fi` gsequencer-ags_apply_tact.o: src/ags/audio/task/recall/ags_apply_tact.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_apply_tact.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_apply_tact.Tpo -c -o gsequencer-ags_apply_tact.o `test -f 'src/ags/audio/task/recall/ags_apply_tact.c' || echo '$(srcdir)/'`src/ags/audio/task/recall/ags_apply_tact.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_apply_tact.Tpo $(DEPDIR)/gsequencer-ags_apply_tact.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/recall/ags_apply_tact.c' object='gsequencer-ags_apply_tact.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_apply_tact.o `test -f 'src/ags/audio/task/recall/ags_apply_tact.c' || echo '$(srcdir)/'`src/ags/audio/task/recall/ags_apply_tact.c gsequencer-ags_apply_tact.obj: src/ags/audio/task/recall/ags_apply_tact.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_apply_tact.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_apply_tact.Tpo -c -o gsequencer-ags_apply_tact.obj `if test -f 'src/ags/audio/task/recall/ags_apply_tact.c'; then $(CYGPATH_W) 'src/ags/audio/task/recall/ags_apply_tact.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/recall/ags_apply_tact.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_apply_tact.Tpo $(DEPDIR)/gsequencer-ags_apply_tact.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/recall/ags_apply_tact.c' object='gsequencer-ags_apply_tact.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_apply_tact.obj `if test -f 'src/ags/audio/task/recall/ags_apply_tact.c'; then $(CYGPATH_W) 'src/ags/audio/task/recall/ags_apply_tact.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/recall/ags_apply_tact.c'; fi` gsequencer-ags_set_muted.o: src/ags/audio/task/recall/ags_set_muted.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_set_muted.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_set_muted.Tpo -c -o gsequencer-ags_set_muted.o `test -f 'src/ags/audio/task/recall/ags_set_muted.c' || echo '$(srcdir)/'`src/ags/audio/task/recall/ags_set_muted.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_set_muted.Tpo $(DEPDIR)/gsequencer-ags_set_muted.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/recall/ags_set_muted.c' object='gsequencer-ags_set_muted.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_set_muted.o `test -f 'src/ags/audio/task/recall/ags_set_muted.c' || echo '$(srcdir)/'`src/ags/audio/task/recall/ags_set_muted.c gsequencer-ags_set_muted.obj: src/ags/audio/task/recall/ags_set_muted.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_set_muted.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_set_muted.Tpo -c -o gsequencer-ags_set_muted.obj `if test -f 'src/ags/audio/task/recall/ags_set_muted.c'; then $(CYGPATH_W) 'src/ags/audio/task/recall/ags_set_muted.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/recall/ags_set_muted.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_set_muted.Tpo $(DEPDIR)/gsequencer-ags_set_muted.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/audio/task/recall/ags_set_muted.c' object='gsequencer-ags_set_muted.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_set_muted.obj `if test -f 'src/ags/audio/task/recall/ags_set_muted.c'; then $(CYGPATH_W) 'src/ags/audio/task/recall/ags_set_muted.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/audio/task/recall/ags_set_muted.c'; fi` gsequencer-ags_file.o: src/ags/file/ags_file.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_file.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_file.Tpo -c -o gsequencer-ags_file.o `test -f 'src/ags/file/ags_file.c' || echo '$(srcdir)/'`src/ags/file/ags_file.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_file.Tpo $(DEPDIR)/gsequencer-ags_file.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/file/ags_file.c' object='gsequencer-ags_file.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_file.o `test -f 'src/ags/file/ags_file.c' || echo '$(srcdir)/'`src/ags/file/ags_file.c gsequencer-ags_file.obj: src/ags/file/ags_file.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_file.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_file.Tpo -c -o gsequencer-ags_file.obj `if test -f 'src/ags/file/ags_file.c'; then $(CYGPATH_W) 'src/ags/file/ags_file.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/file/ags_file.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_file.Tpo $(DEPDIR)/gsequencer-ags_file.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/file/ags_file.c' object='gsequencer-ags_file.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_file.obj `if test -f 'src/ags/file/ags_file.c'; then $(CYGPATH_W) 'src/ags/file/ags_file.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/file/ags_file.c'; fi` gsequencer-ags_file_gui.o: src/ags/file/ags_file_gui.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_file_gui.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_file_gui.Tpo -c -o gsequencer-ags_file_gui.o `test -f 'src/ags/file/ags_file_gui.c' || echo '$(srcdir)/'`src/ags/file/ags_file_gui.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_file_gui.Tpo $(DEPDIR)/gsequencer-ags_file_gui.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/file/ags_file_gui.c' object='gsequencer-ags_file_gui.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_file_gui.o `test -f 'src/ags/file/ags_file_gui.c' || echo '$(srcdir)/'`src/ags/file/ags_file_gui.c gsequencer-ags_file_gui.obj: src/ags/file/ags_file_gui.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_file_gui.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_file_gui.Tpo -c -o gsequencer-ags_file_gui.obj `if test -f 'src/ags/file/ags_file_gui.c'; then $(CYGPATH_W) 'src/ags/file/ags_file_gui.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/file/ags_file_gui.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_file_gui.Tpo $(DEPDIR)/gsequencer-ags_file_gui.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/file/ags_file_gui.c' object='gsequencer-ags_file_gui.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_file_gui.obj `if test -f 'src/ags/file/ags_file_gui.c'; then $(CYGPATH_W) 'src/ags/file/ags_file_gui.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/file/ags_file_gui.c'; fi` gsequencer-ags_file_id_ref.o: src/ags/file/ags_file_id_ref.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_file_id_ref.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_file_id_ref.Tpo -c -o gsequencer-ags_file_id_ref.o `test -f 'src/ags/file/ags_file_id_ref.c' || echo '$(srcdir)/'`src/ags/file/ags_file_id_ref.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_file_id_ref.Tpo $(DEPDIR)/gsequencer-ags_file_id_ref.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/file/ags_file_id_ref.c' object='gsequencer-ags_file_id_ref.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_file_id_ref.o `test -f 'src/ags/file/ags_file_id_ref.c' || echo '$(srcdir)/'`src/ags/file/ags_file_id_ref.c gsequencer-ags_file_id_ref.obj: src/ags/file/ags_file_id_ref.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_file_id_ref.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_file_id_ref.Tpo -c -o gsequencer-ags_file_id_ref.obj `if test -f 'src/ags/file/ags_file_id_ref.c'; then $(CYGPATH_W) 'src/ags/file/ags_file_id_ref.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/file/ags_file_id_ref.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_file_id_ref.Tpo $(DEPDIR)/gsequencer-ags_file_id_ref.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/file/ags_file_id_ref.c' object='gsequencer-ags_file_id_ref.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_file_id_ref.obj `if test -f 'src/ags/file/ags_file_id_ref.c'; then $(CYGPATH_W) 'src/ags/file/ags_file_id_ref.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/file/ags_file_id_ref.c'; fi` gsequencer-ags_file_launch.o: src/ags/file/ags_file_launch.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_file_launch.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_file_launch.Tpo -c -o gsequencer-ags_file_launch.o `test -f 'src/ags/file/ags_file_launch.c' || echo '$(srcdir)/'`src/ags/file/ags_file_launch.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_file_launch.Tpo $(DEPDIR)/gsequencer-ags_file_launch.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/file/ags_file_launch.c' object='gsequencer-ags_file_launch.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_file_launch.o `test -f 'src/ags/file/ags_file_launch.c' || echo '$(srcdir)/'`src/ags/file/ags_file_launch.c gsequencer-ags_file_launch.obj: src/ags/file/ags_file_launch.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_file_launch.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_file_launch.Tpo -c -o gsequencer-ags_file_launch.obj `if test -f 'src/ags/file/ags_file_launch.c'; then $(CYGPATH_W) 'src/ags/file/ags_file_launch.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/file/ags_file_launch.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_file_launch.Tpo $(DEPDIR)/gsequencer-ags_file_launch.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/file/ags_file_launch.c' object='gsequencer-ags_file_launch.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_file_launch.obj `if test -f 'src/ags/file/ags_file_launch.c'; then $(CYGPATH_W) 'src/ags/file/ags_file_launch.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/file/ags_file_launch.c'; fi` gsequencer-ags_file_link.o: src/ags/file/ags_file_link.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_file_link.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_file_link.Tpo -c -o gsequencer-ags_file_link.o `test -f 'src/ags/file/ags_file_link.c' || echo '$(srcdir)/'`src/ags/file/ags_file_link.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_file_link.Tpo $(DEPDIR)/gsequencer-ags_file_link.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/file/ags_file_link.c' object='gsequencer-ags_file_link.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_file_link.o `test -f 'src/ags/file/ags_file_link.c' || echo '$(srcdir)/'`src/ags/file/ags_file_link.c gsequencer-ags_file_link.obj: src/ags/file/ags_file_link.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_file_link.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_file_link.Tpo -c -o gsequencer-ags_file_link.obj `if test -f 'src/ags/file/ags_file_link.c'; then $(CYGPATH_W) 'src/ags/file/ags_file_link.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/file/ags_file_link.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_file_link.Tpo $(DEPDIR)/gsequencer-ags_file_link.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/file/ags_file_link.c' object='gsequencer-ags_file_link.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_file_link.obj `if test -f 'src/ags/file/ags_file_link.c'; then $(CYGPATH_W) 'src/ags/file/ags_file_link.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/file/ags_file_link.c'; fi` gsequencer-ags_file_lookup.o: src/ags/file/ags_file_lookup.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_file_lookup.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_file_lookup.Tpo -c -o gsequencer-ags_file_lookup.o `test -f 'src/ags/file/ags_file_lookup.c' || echo '$(srcdir)/'`src/ags/file/ags_file_lookup.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_file_lookup.Tpo $(DEPDIR)/gsequencer-ags_file_lookup.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/file/ags_file_lookup.c' object='gsequencer-ags_file_lookup.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_file_lookup.o `test -f 'src/ags/file/ags_file_lookup.c' || echo '$(srcdir)/'`src/ags/file/ags_file_lookup.c gsequencer-ags_file_lookup.obj: src/ags/file/ags_file_lookup.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_file_lookup.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_file_lookup.Tpo -c -o gsequencer-ags_file_lookup.obj `if test -f 'src/ags/file/ags_file_lookup.c'; then $(CYGPATH_W) 'src/ags/file/ags_file_lookup.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/file/ags_file_lookup.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_file_lookup.Tpo $(DEPDIR)/gsequencer-ags_file_lookup.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/file/ags_file_lookup.c' object='gsequencer-ags_file_lookup.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_file_lookup.obj `if test -f 'src/ags/file/ags_file_lookup.c'; then $(CYGPATH_W) 'src/ags/file/ags_file_lookup.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/file/ags_file_lookup.c'; fi` gsequencer-ags_file_sound.o: src/ags/file/ags_file_sound.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_file_sound.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_file_sound.Tpo -c -o gsequencer-ags_file_sound.o `test -f 'src/ags/file/ags_file_sound.c' || echo '$(srcdir)/'`src/ags/file/ags_file_sound.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_file_sound.Tpo $(DEPDIR)/gsequencer-ags_file_sound.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/file/ags_file_sound.c' object='gsequencer-ags_file_sound.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_file_sound.o `test -f 'src/ags/file/ags_file_sound.c' || echo '$(srcdir)/'`src/ags/file/ags_file_sound.c gsequencer-ags_file_sound.obj: src/ags/file/ags_file_sound.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_file_sound.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_file_sound.Tpo -c -o gsequencer-ags_file_sound.obj `if test -f 'src/ags/file/ags_file_sound.c'; then $(CYGPATH_W) 'src/ags/file/ags_file_sound.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/file/ags_file_sound.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_file_sound.Tpo $(DEPDIR)/gsequencer-ags_file_sound.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/file/ags_file_sound.c' object='gsequencer-ags_file_sound.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_file_sound.obj `if test -f 'src/ags/file/ags_file_sound.c'; then $(CYGPATH_W) 'src/ags/file/ags_file_sound.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/file/ags_file_sound.c'; fi` gsequencer-ags_file_thread.o: src/ags/file/ags_file_thread.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_file_thread.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_file_thread.Tpo -c -o gsequencer-ags_file_thread.o `test -f 'src/ags/file/ags_file_thread.c' || echo '$(srcdir)/'`src/ags/file/ags_file_thread.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_file_thread.Tpo $(DEPDIR)/gsequencer-ags_file_thread.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/file/ags_file_thread.c' object='gsequencer-ags_file_thread.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_file_thread.o `test -f 'src/ags/file/ags_file_thread.c' || echo '$(srcdir)/'`src/ags/file/ags_file_thread.c gsequencer-ags_file_thread.obj: src/ags/file/ags_file_thread.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_file_thread.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_file_thread.Tpo -c -o gsequencer-ags_file_thread.obj `if test -f 'src/ags/file/ags_file_thread.c'; then $(CYGPATH_W) 'src/ags/file/ags_file_thread.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/file/ags_file_thread.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_file_thread.Tpo $(DEPDIR)/gsequencer-ags_file_thread.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/file/ags_file_thread.c' object='gsequencer-ags_file_thread.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_file_thread.obj `if test -f 'src/ags/file/ags_file_thread.c'; then $(CYGPATH_W) 'src/ags/file/ags_file_thread.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/file/ags_file_thread.c'; fi` gsequencer-ags_file_util.o: src/ags/file/ags_file_util.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_file_util.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_file_util.Tpo -c -o gsequencer-ags_file_util.o `test -f 'src/ags/file/ags_file_util.c' || echo '$(srcdir)/'`src/ags/file/ags_file_util.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_file_util.Tpo $(DEPDIR)/gsequencer-ags_file_util.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/file/ags_file_util.c' object='gsequencer-ags_file_util.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_file_util.o `test -f 'src/ags/file/ags_file_util.c' || echo '$(srcdir)/'`src/ags/file/ags_file_util.c gsequencer-ags_file_util.obj: src/ags/file/ags_file_util.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_file_util.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_file_util.Tpo -c -o gsequencer-ags_file_util.obj `if test -f 'src/ags/file/ags_file_util.c'; then $(CYGPATH_W) 'src/ags/file/ags_file_util.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/file/ags_file_util.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_file_util.Tpo $(DEPDIR)/gsequencer-ags_file_util.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/file/ags_file_util.c' object='gsequencer-ags_file_util.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_file_util.obj `if test -f 'src/ags/file/ags_file_util.c'; then $(CYGPATH_W) 'src/ags/file/ags_file_util.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/file/ags_file_util.c'; fi` gsequencer-ags_connectable.o: src/ags-lib/object/ags_connectable.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_connectable.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_connectable.Tpo -c -o gsequencer-ags_connectable.o `test -f 'src/ags-lib/object/ags_connectable.c' || echo '$(srcdir)/'`src/ags-lib/object/ags_connectable.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_connectable.Tpo $(DEPDIR)/gsequencer-ags_connectable.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags-lib/object/ags_connectable.c' object='gsequencer-ags_connectable.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_connectable.o `test -f 'src/ags-lib/object/ags_connectable.c' || echo '$(srcdir)/'`src/ags-lib/object/ags_connectable.c gsequencer-ags_connectable.obj: src/ags-lib/object/ags_connectable.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_connectable.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_connectable.Tpo -c -o gsequencer-ags_connectable.obj `if test -f 'src/ags-lib/object/ags_connectable.c'; then $(CYGPATH_W) 'src/ags-lib/object/ags_connectable.c'; else $(CYGPATH_W) '$(srcdir)/src/ags-lib/object/ags_connectable.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_connectable.Tpo $(DEPDIR)/gsequencer-ags_connectable.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags-lib/object/ags_connectable.c' object='gsequencer-ags_connectable.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_connectable.obj `if test -f 'src/ags-lib/object/ags_connectable.c'; then $(CYGPATH_W) 'src/ags-lib/object/ags_connectable.c'; else $(CYGPATH_W) '$(srcdir)/src/ags-lib/object/ags_connectable.c'; fi` gsequencer-ags_combo_box_text.o: src/ags/lib/ags_combo_box_text.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_combo_box_text.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_combo_box_text.Tpo -c -o gsequencer-ags_combo_box_text.o `test -f 'src/ags/lib/ags_combo_box_text.c' || echo '$(srcdir)/'`src/ags/lib/ags_combo_box_text.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_combo_box_text.Tpo $(DEPDIR)/gsequencer-ags_combo_box_text.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/lib/ags_combo_box_text.c' object='gsequencer-ags_combo_box_text.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_combo_box_text.o `test -f 'src/ags/lib/ags_combo_box_text.c' || echo '$(srcdir)/'`src/ags/lib/ags_combo_box_text.c gsequencer-ags_combo_box_text.obj: src/ags/lib/ags_combo_box_text.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_combo_box_text.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_combo_box_text.Tpo -c -o gsequencer-ags_combo_box_text.obj `if test -f 'src/ags/lib/ags_combo_box_text.c'; then $(CYGPATH_W) 'src/ags/lib/ags_combo_box_text.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/lib/ags_combo_box_text.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_combo_box_text.Tpo $(DEPDIR)/gsequencer-ags_combo_box_text.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/lib/ags_combo_box_text.c' object='gsequencer-ags_combo_box_text.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_combo_box_text.obj `if test -f 'src/ags/lib/ags_combo_box_text.c'; then $(CYGPATH_W) 'src/ags/lib/ags_combo_box_text.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/lib/ags_combo_box_text.c'; fi` gsequencer-ags_container.o: src/ags/lib/ags_container.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_container.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_container.Tpo -c -o gsequencer-ags_container.o `test -f 'src/ags/lib/ags_container.c' || echo '$(srcdir)/'`src/ags/lib/ags_container.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_container.Tpo $(DEPDIR)/gsequencer-ags_container.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/lib/ags_container.c' object='gsequencer-ags_container.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_container.o `test -f 'src/ags/lib/ags_container.c' || echo '$(srcdir)/'`src/ags/lib/ags_container.c gsequencer-ags_container.obj: src/ags/lib/ags_container.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_container.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_container.Tpo -c -o gsequencer-ags_container.obj `if test -f 'src/ags/lib/ags_container.c'; then $(CYGPATH_W) 'src/ags/lib/ags_container.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/lib/ags_container.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_container.Tpo $(DEPDIR)/gsequencer-ags_container.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/lib/ags_container.c' object='gsequencer-ags_container.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_container.obj `if test -f 'src/ags/lib/ags_container.c'; then $(CYGPATH_W) 'src/ags/lib/ags_container.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/lib/ags_container.c'; fi` gsequencer-ags_list.o: src/ags/lib/ags_list.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_list.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_list.Tpo -c -o gsequencer-ags_list.o `test -f 'src/ags/lib/ags_list.c' || echo '$(srcdir)/'`src/ags/lib/ags_list.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_list.Tpo $(DEPDIR)/gsequencer-ags_list.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/lib/ags_list.c' object='gsequencer-ags_list.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_list.o `test -f 'src/ags/lib/ags_list.c' || echo '$(srcdir)/'`src/ags/lib/ags_list.c gsequencer-ags_list.obj: src/ags/lib/ags_list.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_list.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_list.Tpo -c -o gsequencer-ags_list.obj `if test -f 'src/ags/lib/ags_list.c'; then $(CYGPATH_W) 'src/ags/lib/ags_list.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/lib/ags_list.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_list.Tpo $(DEPDIR)/gsequencer-ags_list.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/lib/ags_list.c' object='gsequencer-ags_list.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_list.obj `if test -f 'src/ags/lib/ags_list.c'; then $(CYGPATH_W) 'src/ags/lib/ags_list.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/lib/ags_list.c'; fi` gsequencer-ags_log.o: src/ags/lib/ags_log.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_log.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_log.Tpo -c -o gsequencer-ags_log.o `test -f 'src/ags/lib/ags_log.c' || echo '$(srcdir)/'`src/ags/lib/ags_log.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_log.Tpo $(DEPDIR)/gsequencer-ags_log.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/lib/ags_log.c' object='gsequencer-ags_log.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_log.o `test -f 'src/ags/lib/ags_log.c' || echo '$(srcdir)/'`src/ags/lib/ags_log.c gsequencer-ags_log.obj: src/ags/lib/ags_log.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_log.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_log.Tpo -c -o gsequencer-ags_log.obj `if test -f 'src/ags/lib/ags_log.c'; then $(CYGPATH_W) 'src/ags/lib/ags_log.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/lib/ags_log.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_log.Tpo $(DEPDIR)/gsequencer-ags_log.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/lib/ags_log.c' object='gsequencer-ags_log.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_log.obj `if test -f 'src/ags/lib/ags_log.c'; then $(CYGPATH_W) 'src/ags/lib/ags_log.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/lib/ags_log.c'; fi` gsequencer-ags_parameter.o: src/ags/lib/ags_parameter.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_parameter.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_parameter.Tpo -c -o gsequencer-ags_parameter.o `test -f 'src/ags/lib/ags_parameter.c' || echo '$(srcdir)/'`src/ags/lib/ags_parameter.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_parameter.Tpo $(DEPDIR)/gsequencer-ags_parameter.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/lib/ags_parameter.c' object='gsequencer-ags_parameter.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_parameter.o `test -f 'src/ags/lib/ags_parameter.c' || echo '$(srcdir)/'`src/ags/lib/ags_parameter.c gsequencer-ags_parameter.obj: src/ags/lib/ags_parameter.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_parameter.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_parameter.Tpo -c -o gsequencer-ags_parameter.obj `if test -f 'src/ags/lib/ags_parameter.c'; then $(CYGPATH_W) 'src/ags/lib/ags_parameter.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/lib/ags_parameter.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_parameter.Tpo $(DEPDIR)/gsequencer-ags_parameter.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/lib/ags_parameter.c' object='gsequencer-ags_parameter.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_parameter.obj `if test -f 'src/ags/lib/ags_parameter.c'; then $(CYGPATH_W) 'src/ags/lib/ags_parameter.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/lib/ags_parameter.c'; fi` gsequencer-main.o: src/ags/main.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-main.o -MD -MP -MF $(DEPDIR)/gsequencer-main.Tpo -c -o gsequencer-main.o `test -f 'src/ags/main.c' || echo '$(srcdir)/'`src/ags/main.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-main.Tpo $(DEPDIR)/gsequencer-main.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/main.c' object='gsequencer-main.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-main.o `test -f 'src/ags/main.c' || echo '$(srcdir)/'`src/ags/main.c gsequencer-main.obj: src/ags/main.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-main.obj -MD -MP -MF $(DEPDIR)/gsequencer-main.Tpo -c -o gsequencer-main.obj `if test -f 'src/ags/main.c'; then $(CYGPATH_W) 'src/ags/main.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/main.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-main.Tpo $(DEPDIR)/gsequencer-main.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/main.c' object='gsequencer-main.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-main.obj `if test -f 'src/ags/main.c'; then $(CYGPATH_W) 'src/ags/main.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/main.c'; fi` gsequencer-ags_applicable.o: src/ags/object/ags_applicable.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_applicable.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_applicable.Tpo -c -o gsequencer-ags_applicable.o `test -f 'src/ags/object/ags_applicable.c' || echo '$(srcdir)/'`src/ags/object/ags_applicable.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_applicable.Tpo $(DEPDIR)/gsequencer-ags_applicable.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/object/ags_applicable.c' object='gsequencer-ags_applicable.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_applicable.o `test -f 'src/ags/object/ags_applicable.c' || echo '$(srcdir)/'`src/ags/object/ags_applicable.c gsequencer-ags_applicable.obj: src/ags/object/ags_applicable.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_applicable.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_applicable.Tpo -c -o gsequencer-ags_applicable.obj `if test -f 'src/ags/object/ags_applicable.c'; then $(CYGPATH_W) 'src/ags/object/ags_applicable.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/object/ags_applicable.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_applicable.Tpo $(DEPDIR)/gsequencer-ags_applicable.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/object/ags_applicable.c' object='gsequencer-ags_applicable.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_applicable.obj `if test -f 'src/ags/object/ags_applicable.c'; then $(CYGPATH_W) 'src/ags/object/ags_applicable.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/object/ags_applicable.c'; fi` gsequencer-ags_async_queue.o: src/ags/object/ags_async_queue.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_async_queue.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_async_queue.Tpo -c -o gsequencer-ags_async_queue.o `test -f 'src/ags/object/ags_async_queue.c' || echo '$(srcdir)/'`src/ags/object/ags_async_queue.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_async_queue.Tpo $(DEPDIR)/gsequencer-ags_async_queue.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/object/ags_async_queue.c' object='gsequencer-ags_async_queue.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_async_queue.o `test -f 'src/ags/object/ags_async_queue.c' || echo '$(srcdir)/'`src/ags/object/ags_async_queue.c gsequencer-ags_async_queue.obj: src/ags/object/ags_async_queue.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_async_queue.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_async_queue.Tpo -c -o gsequencer-ags_async_queue.obj `if test -f 'src/ags/object/ags_async_queue.c'; then $(CYGPATH_W) 'src/ags/object/ags_async_queue.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/object/ags_async_queue.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_async_queue.Tpo $(DEPDIR)/gsequencer-ags_async_queue.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/object/ags_async_queue.c' object='gsequencer-ags_async_queue.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_async_queue.obj `if test -f 'src/ags/object/ags_async_queue.c'; then $(CYGPATH_W) 'src/ags/object/ags_async_queue.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/object/ags_async_queue.c'; fi` gsequencer-ags_countable.o: src/ags/object/ags_countable.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_countable.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_countable.Tpo -c -o gsequencer-ags_countable.o `test -f 'src/ags/object/ags_countable.c' || echo '$(srcdir)/'`src/ags/object/ags_countable.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_countable.Tpo $(DEPDIR)/gsequencer-ags_countable.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/object/ags_countable.c' object='gsequencer-ags_countable.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_countable.o `test -f 'src/ags/object/ags_countable.c' || echo '$(srcdir)/'`src/ags/object/ags_countable.c gsequencer-ags_countable.obj: src/ags/object/ags_countable.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_countable.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_countable.Tpo -c -o gsequencer-ags_countable.obj `if test -f 'src/ags/object/ags_countable.c'; then $(CYGPATH_W) 'src/ags/object/ags_countable.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/object/ags_countable.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_countable.Tpo $(DEPDIR)/gsequencer-ags_countable.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/object/ags_countable.c' object='gsequencer-ags_countable.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_countable.obj `if test -f 'src/ags/object/ags_countable.c'; then $(CYGPATH_W) 'src/ags/object/ags_countable.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/object/ags_countable.c'; fi` gsequencer-ags_concurrent_tree.o: src/ags/object/ags_concurrent_tree.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_concurrent_tree.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_concurrent_tree.Tpo -c -o gsequencer-ags_concurrent_tree.o `test -f 'src/ags/object/ags_concurrent_tree.c' || echo '$(srcdir)/'`src/ags/object/ags_concurrent_tree.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_concurrent_tree.Tpo $(DEPDIR)/gsequencer-ags_concurrent_tree.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/object/ags_concurrent_tree.c' object='gsequencer-ags_concurrent_tree.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_concurrent_tree.o `test -f 'src/ags/object/ags_concurrent_tree.c' || echo '$(srcdir)/'`src/ags/object/ags_concurrent_tree.c gsequencer-ags_concurrent_tree.obj: src/ags/object/ags_concurrent_tree.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_concurrent_tree.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_concurrent_tree.Tpo -c -o gsequencer-ags_concurrent_tree.obj `if test -f 'src/ags/object/ags_concurrent_tree.c'; then $(CYGPATH_W) 'src/ags/object/ags_concurrent_tree.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/object/ags_concurrent_tree.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_concurrent_tree.Tpo $(DEPDIR)/gsequencer-ags_concurrent_tree.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/object/ags_concurrent_tree.c' object='gsequencer-ags_concurrent_tree.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_concurrent_tree.obj `if test -f 'src/ags/object/ags_concurrent_tree.c'; then $(CYGPATH_W) 'src/ags/object/ags_concurrent_tree.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/object/ags_concurrent_tree.c'; fi` gsequencer-ags_dynamic_connectable.o: src/ags/object/ags_dynamic_connectable.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_dynamic_connectable.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_dynamic_connectable.Tpo -c -o gsequencer-ags_dynamic_connectable.o `test -f 'src/ags/object/ags_dynamic_connectable.c' || echo '$(srcdir)/'`src/ags/object/ags_dynamic_connectable.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_dynamic_connectable.Tpo $(DEPDIR)/gsequencer-ags_dynamic_connectable.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/object/ags_dynamic_connectable.c' object='gsequencer-ags_dynamic_connectable.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_dynamic_connectable.o `test -f 'src/ags/object/ags_dynamic_connectable.c' || echo '$(srcdir)/'`src/ags/object/ags_dynamic_connectable.c gsequencer-ags_dynamic_connectable.obj: src/ags/object/ags_dynamic_connectable.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_dynamic_connectable.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_dynamic_connectable.Tpo -c -o gsequencer-ags_dynamic_connectable.obj `if test -f 'src/ags/object/ags_dynamic_connectable.c'; then $(CYGPATH_W) 'src/ags/object/ags_dynamic_connectable.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/object/ags_dynamic_connectable.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_dynamic_connectable.Tpo $(DEPDIR)/gsequencer-ags_dynamic_connectable.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/object/ags_dynamic_connectable.c' object='gsequencer-ags_dynamic_connectable.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_dynamic_connectable.obj `if test -f 'src/ags/object/ags_dynamic_connectable.c'; then $(CYGPATH_W) 'src/ags/object/ags_dynamic_connectable.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/object/ags_dynamic_connectable.c'; fi` gsequencer-ags_effect.o: src/ags/object/ags_effect.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_effect.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_effect.Tpo -c -o gsequencer-ags_effect.o `test -f 'src/ags/object/ags_effect.c' || echo '$(srcdir)/'`src/ags/object/ags_effect.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_effect.Tpo $(DEPDIR)/gsequencer-ags_effect.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/object/ags_effect.c' object='gsequencer-ags_effect.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_effect.o `test -f 'src/ags/object/ags_effect.c' || echo '$(srcdir)/'`src/ags/object/ags_effect.c gsequencer-ags_effect.obj: src/ags/object/ags_effect.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_effect.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_effect.Tpo -c -o gsequencer-ags_effect.obj `if test -f 'src/ags/object/ags_effect.c'; then $(CYGPATH_W) 'src/ags/object/ags_effect.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/object/ags_effect.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_effect.Tpo $(DEPDIR)/gsequencer-ags_effect.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/object/ags_effect.c' object='gsequencer-ags_effect.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_effect.obj `if test -f 'src/ags/object/ags_effect.c'; then $(CYGPATH_W) 'src/ags/object/ags_effect.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/object/ags_effect.c'; fi` gsequencer-ags_main_loop.o: src/ags/object/ags_main_loop.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_main_loop.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_main_loop.Tpo -c -o gsequencer-ags_main_loop.o `test -f 'src/ags/object/ags_main_loop.c' || echo '$(srcdir)/'`src/ags/object/ags_main_loop.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_main_loop.Tpo $(DEPDIR)/gsequencer-ags_main_loop.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/object/ags_main_loop.c' object='gsequencer-ags_main_loop.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_main_loop.o `test -f 'src/ags/object/ags_main_loop.c' || echo '$(srcdir)/'`src/ags/object/ags_main_loop.c gsequencer-ags_main_loop.obj: src/ags/object/ags_main_loop.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_main_loop.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_main_loop.Tpo -c -o gsequencer-ags_main_loop.obj `if test -f 'src/ags/object/ags_main_loop.c'; then $(CYGPATH_W) 'src/ags/object/ags_main_loop.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/object/ags_main_loop.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_main_loop.Tpo $(DEPDIR)/gsequencer-ags_main_loop.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/object/ags_main_loop.c' object='gsequencer-ags_main_loop.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_main_loop.obj `if test -f 'src/ags/object/ags_main_loop.c'; then $(CYGPATH_W) 'src/ags/object/ags_main_loop.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/object/ags_main_loop.c'; fi` gsequencer-ags_marshal.o: src/ags/object/ags_marshal.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_marshal.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_marshal.Tpo -c -o gsequencer-ags_marshal.o `test -f 'src/ags/object/ags_marshal.c' || echo '$(srcdir)/'`src/ags/object/ags_marshal.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_marshal.Tpo $(DEPDIR)/gsequencer-ags_marshal.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/object/ags_marshal.c' object='gsequencer-ags_marshal.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_marshal.o `test -f 'src/ags/object/ags_marshal.c' || echo '$(srcdir)/'`src/ags/object/ags_marshal.c gsequencer-ags_marshal.obj: src/ags/object/ags_marshal.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_marshal.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_marshal.Tpo -c -o gsequencer-ags_marshal.obj `if test -f 'src/ags/object/ags_marshal.c'; then $(CYGPATH_W) 'src/ags/object/ags_marshal.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/object/ags_marshal.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_marshal.Tpo $(DEPDIR)/gsequencer-ags_marshal.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/object/ags_marshal.c' object='gsequencer-ags_marshal.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_marshal.obj `if test -f 'src/ags/object/ags_marshal.c'; then $(CYGPATH_W) 'src/ags/object/ags_marshal.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/object/ags_marshal.c'; fi` gsequencer-ags_mutable.o: src/ags/object/ags_mutable.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_mutable.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_mutable.Tpo -c -o gsequencer-ags_mutable.o `test -f 'src/ags/object/ags_mutable.c' || echo '$(srcdir)/'`src/ags/object/ags_mutable.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_mutable.Tpo $(DEPDIR)/gsequencer-ags_mutable.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/object/ags_mutable.c' object='gsequencer-ags_mutable.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_mutable.o `test -f 'src/ags/object/ags_mutable.c' || echo '$(srcdir)/'`src/ags/object/ags_mutable.c gsequencer-ags_mutable.obj: src/ags/object/ags_mutable.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_mutable.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_mutable.Tpo -c -o gsequencer-ags_mutable.obj `if test -f 'src/ags/object/ags_mutable.c'; then $(CYGPATH_W) 'src/ags/object/ags_mutable.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/object/ags_mutable.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_mutable.Tpo $(DEPDIR)/gsequencer-ags_mutable.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/object/ags_mutable.c' object='gsequencer-ags_mutable.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_mutable.obj `if test -f 'src/ags/object/ags_mutable.c'; then $(CYGPATH_W) 'src/ags/object/ags_mutable.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/object/ags_mutable.c'; fi` gsequencer-ags_packable.o: src/ags/object/ags_packable.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_packable.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_packable.Tpo -c -o gsequencer-ags_packable.o `test -f 'src/ags/object/ags_packable.c' || echo '$(srcdir)/'`src/ags/object/ags_packable.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_packable.Tpo $(DEPDIR)/gsequencer-ags_packable.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/object/ags_packable.c' object='gsequencer-ags_packable.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_packable.o `test -f 'src/ags/object/ags_packable.c' || echo '$(srcdir)/'`src/ags/object/ags_packable.c gsequencer-ags_packable.obj: src/ags/object/ags_packable.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_packable.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_packable.Tpo -c -o gsequencer-ags_packable.obj `if test -f 'src/ags/object/ags_packable.c'; then $(CYGPATH_W) 'src/ags/object/ags_packable.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/object/ags_packable.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_packable.Tpo $(DEPDIR)/gsequencer-ags_packable.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/object/ags_packable.c' object='gsequencer-ags_packable.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_packable.obj `if test -f 'src/ags/object/ags_packable.c'; then $(CYGPATH_W) 'src/ags/object/ags_packable.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/object/ags_packable.c'; fi` gsequencer-ags_persistable.o: src/ags/object/ags_persistable.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_persistable.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_persistable.Tpo -c -o gsequencer-ags_persistable.o `test -f 'src/ags/object/ags_persistable.c' || echo '$(srcdir)/'`src/ags/object/ags_persistable.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_persistable.Tpo $(DEPDIR)/gsequencer-ags_persistable.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/object/ags_persistable.c' object='gsequencer-ags_persistable.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_persistable.o `test -f 'src/ags/object/ags_persistable.c' || echo '$(srcdir)/'`src/ags/object/ags_persistable.c gsequencer-ags_persistable.obj: src/ags/object/ags_persistable.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_persistable.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_persistable.Tpo -c -o gsequencer-ags_persistable.obj `if test -f 'src/ags/object/ags_persistable.c'; then $(CYGPATH_W) 'src/ags/object/ags_persistable.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/object/ags_persistable.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_persistable.Tpo $(DEPDIR)/gsequencer-ags_persistable.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/object/ags_persistable.c' object='gsequencer-ags_persistable.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_persistable.obj `if test -f 'src/ags/object/ags_persistable.c'; then $(CYGPATH_W) 'src/ags/object/ags_persistable.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/object/ags_persistable.c'; fi` gsequencer-ags_playable.o: src/ags/object/ags_playable.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_playable.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_playable.Tpo -c -o gsequencer-ags_playable.o `test -f 'src/ags/object/ags_playable.c' || echo '$(srcdir)/'`src/ags/object/ags_playable.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_playable.Tpo $(DEPDIR)/gsequencer-ags_playable.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/object/ags_playable.c' object='gsequencer-ags_playable.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_playable.o `test -f 'src/ags/object/ags_playable.c' || echo '$(srcdir)/'`src/ags/object/ags_playable.c gsequencer-ags_playable.obj: src/ags/object/ags_playable.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_playable.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_playable.Tpo -c -o gsequencer-ags_playable.obj `if test -f 'src/ags/object/ags_playable.c'; then $(CYGPATH_W) 'src/ags/object/ags_playable.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/object/ags_playable.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_playable.Tpo $(DEPDIR)/gsequencer-ags_playable.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/object/ags_playable.c' object='gsequencer-ags_playable.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_playable.obj `if test -f 'src/ags/object/ags_playable.c'; then $(CYGPATH_W) 'src/ags/object/ags_playable.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/object/ags_playable.c'; fi` gsequencer-ags_plugin.o: src/ags/object/ags_plugin.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_plugin.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_plugin.Tpo -c -o gsequencer-ags_plugin.o `test -f 'src/ags/object/ags_plugin.c' || echo '$(srcdir)/'`src/ags/object/ags_plugin.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_plugin.Tpo $(DEPDIR)/gsequencer-ags_plugin.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/object/ags_plugin.c' object='gsequencer-ags_plugin.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_plugin.o `test -f 'src/ags/object/ags_plugin.c' || echo '$(srcdir)/'`src/ags/object/ags_plugin.c gsequencer-ags_plugin.obj: src/ags/object/ags_plugin.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_plugin.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_plugin.Tpo -c -o gsequencer-ags_plugin.obj `if test -f 'src/ags/object/ags_plugin.c'; then $(CYGPATH_W) 'src/ags/object/ags_plugin.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/object/ags_plugin.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_plugin.Tpo $(DEPDIR)/gsequencer-ags_plugin.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/object/ags_plugin.c' object='gsequencer-ags_plugin.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_plugin.obj `if test -f 'src/ags/object/ags_plugin.c'; then $(CYGPATH_W) 'src/ags/object/ags_plugin.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/object/ags_plugin.c'; fi` gsequencer-ags_portlet.o: src/ags/object/ags_portlet.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_portlet.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_portlet.Tpo -c -o gsequencer-ags_portlet.o `test -f 'src/ags/object/ags_portlet.c' || echo '$(srcdir)/'`src/ags/object/ags_portlet.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_portlet.Tpo $(DEPDIR)/gsequencer-ags_portlet.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/object/ags_portlet.c' object='gsequencer-ags_portlet.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_portlet.o `test -f 'src/ags/object/ags_portlet.c' || echo '$(srcdir)/'`src/ags/object/ags_portlet.c gsequencer-ags_portlet.obj: src/ags/object/ags_portlet.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_portlet.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_portlet.Tpo -c -o gsequencer-ags_portlet.obj `if test -f 'src/ags/object/ags_portlet.c'; then $(CYGPATH_W) 'src/ags/object/ags_portlet.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/object/ags_portlet.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_portlet.Tpo $(DEPDIR)/gsequencer-ags_portlet.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/object/ags_portlet.c' object='gsequencer-ags_portlet.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_portlet.obj `if test -f 'src/ags/object/ags_portlet.c'; then $(CYGPATH_W) 'src/ags/object/ags_portlet.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/object/ags_portlet.c'; fi` gsequencer-ags_runnable.o: src/ags/object/ags_runnable.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_runnable.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_runnable.Tpo -c -o gsequencer-ags_runnable.o `test -f 'src/ags/object/ags_runnable.c' || echo '$(srcdir)/'`src/ags/object/ags_runnable.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_runnable.Tpo $(DEPDIR)/gsequencer-ags_runnable.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/object/ags_runnable.c' object='gsequencer-ags_runnable.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_runnable.o `test -f 'src/ags/object/ags_runnable.c' || echo '$(srcdir)/'`src/ags/object/ags_runnable.c gsequencer-ags_runnable.obj: src/ags/object/ags_runnable.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_runnable.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_runnable.Tpo -c -o gsequencer-ags_runnable.obj `if test -f 'src/ags/object/ags_runnable.c'; then $(CYGPATH_W) 'src/ags/object/ags_runnable.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/object/ags_runnable.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_runnable.Tpo $(DEPDIR)/gsequencer-ags_runnable.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/object/ags_runnable.c' object='gsequencer-ags_runnable.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_runnable.obj `if test -f 'src/ags/object/ags_runnable.c'; then $(CYGPATH_W) 'src/ags/object/ags_runnable.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/object/ags_runnable.c'; fi` gsequencer-ags_seekable.o: src/ags/object/ags_seekable.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_seekable.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_seekable.Tpo -c -o gsequencer-ags_seekable.o `test -f 'src/ags/object/ags_seekable.c' || echo '$(srcdir)/'`src/ags/object/ags_seekable.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_seekable.Tpo $(DEPDIR)/gsequencer-ags_seekable.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/object/ags_seekable.c' object='gsequencer-ags_seekable.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_seekable.o `test -f 'src/ags/object/ags_seekable.c' || echo '$(srcdir)/'`src/ags/object/ags_seekable.c gsequencer-ags_seekable.obj: src/ags/object/ags_seekable.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_seekable.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_seekable.Tpo -c -o gsequencer-ags_seekable.obj `if test -f 'src/ags/object/ags_seekable.c'; then $(CYGPATH_W) 'src/ags/object/ags_seekable.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/object/ags_seekable.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_seekable.Tpo $(DEPDIR)/gsequencer-ags_seekable.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/object/ags_seekable.c' object='gsequencer-ags_seekable.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_seekable.obj `if test -f 'src/ags/object/ags_seekable.c'; then $(CYGPATH_W) 'src/ags/object/ags_seekable.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/object/ags_seekable.c'; fi` gsequencer-ags_soundcard.o: src/ags/object/ags_soundcard.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_soundcard.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_soundcard.Tpo -c -o gsequencer-ags_soundcard.o `test -f 'src/ags/object/ags_soundcard.c' || echo '$(srcdir)/'`src/ags/object/ags_soundcard.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_soundcard.Tpo $(DEPDIR)/gsequencer-ags_soundcard.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/object/ags_soundcard.c' object='gsequencer-ags_soundcard.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_soundcard.o `test -f 'src/ags/object/ags_soundcard.c' || echo '$(srcdir)/'`src/ags/object/ags_soundcard.c gsequencer-ags_soundcard.obj: src/ags/object/ags_soundcard.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_soundcard.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_soundcard.Tpo -c -o gsequencer-ags_soundcard.obj `if test -f 'src/ags/object/ags_soundcard.c'; then $(CYGPATH_W) 'src/ags/object/ags_soundcard.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/object/ags_soundcard.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_soundcard.Tpo $(DEPDIR)/gsequencer-ags_soundcard.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/object/ags_soundcard.c' object='gsequencer-ags_soundcard.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_soundcard.obj `if test -f 'src/ags/object/ags_soundcard.c'; then $(CYGPATH_W) 'src/ags/object/ags_soundcard.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/object/ags_soundcard.c'; fi` gsequencer-ags_stackable.o: src/ags/object/ags_stackable.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_stackable.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_stackable.Tpo -c -o gsequencer-ags_stackable.o `test -f 'src/ags/object/ags_stackable.c' || echo '$(srcdir)/'`src/ags/object/ags_stackable.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_stackable.Tpo $(DEPDIR)/gsequencer-ags_stackable.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/object/ags_stackable.c' object='gsequencer-ags_stackable.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_stackable.o `test -f 'src/ags/object/ags_stackable.c' || echo '$(srcdir)/'`src/ags/object/ags_stackable.c gsequencer-ags_stackable.obj: src/ags/object/ags_stackable.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_stackable.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_stackable.Tpo -c -o gsequencer-ags_stackable.obj `if test -f 'src/ags/object/ags_stackable.c'; then $(CYGPATH_W) 'src/ags/object/ags_stackable.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/object/ags_stackable.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_stackable.Tpo $(DEPDIR)/gsequencer-ags_stackable.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/object/ags_stackable.c' object='gsequencer-ags_stackable.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_stackable.obj `if test -f 'src/ags/object/ags_stackable.c'; then $(CYGPATH_W) 'src/ags/object/ags_stackable.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/object/ags_stackable.c'; fi` gsequencer-ags_tactable.o: src/ags/object/ags_tactable.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_tactable.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_tactable.Tpo -c -o gsequencer-ags_tactable.o `test -f 'src/ags/object/ags_tactable.c' || echo '$(srcdir)/'`src/ags/object/ags_tactable.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_tactable.Tpo $(DEPDIR)/gsequencer-ags_tactable.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/object/ags_tactable.c' object='gsequencer-ags_tactable.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_tactable.o `test -f 'src/ags/object/ags_tactable.c' || echo '$(srcdir)/'`src/ags/object/ags_tactable.c gsequencer-ags_tactable.obj: src/ags/object/ags_tactable.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_tactable.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_tactable.Tpo -c -o gsequencer-ags_tactable.obj `if test -f 'src/ags/object/ags_tactable.c'; then $(CYGPATH_W) 'src/ags/object/ags_tactable.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/object/ags_tactable.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_tactable.Tpo $(DEPDIR)/gsequencer-ags_tactable.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/object/ags_tactable.c' object='gsequencer-ags_tactable.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_tactable.obj `if test -f 'src/ags/object/ags_tactable.c'; then $(CYGPATH_W) 'src/ags/object/ags_tactable.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/object/ags_tactable.c'; fi` gsequencer-ags_tree_iterator.o: src/ags/object/ags_tree_iterator.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_tree_iterator.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_tree_iterator.Tpo -c -o gsequencer-ags_tree_iterator.o `test -f 'src/ags/object/ags_tree_iterator.c' || echo '$(srcdir)/'`src/ags/object/ags_tree_iterator.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_tree_iterator.Tpo $(DEPDIR)/gsequencer-ags_tree_iterator.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/object/ags_tree_iterator.c' object='gsequencer-ags_tree_iterator.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_tree_iterator.o `test -f 'src/ags/object/ags_tree_iterator.c' || echo '$(srcdir)/'`src/ags/object/ags_tree_iterator.c gsequencer-ags_tree_iterator.obj: src/ags/object/ags_tree_iterator.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_tree_iterator.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_tree_iterator.Tpo -c -o gsequencer-ags_tree_iterator.obj `if test -f 'src/ags/object/ags_tree_iterator.c'; then $(CYGPATH_W) 'src/ags/object/ags_tree_iterator.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/object/ags_tree_iterator.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_tree_iterator.Tpo $(DEPDIR)/gsequencer-ags_tree_iterator.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/object/ags_tree_iterator.c' object='gsequencer-ags_tree_iterator.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_tree_iterator.obj `if test -f 'src/ags/object/ags_tree_iterator.c'; then $(CYGPATH_W) 'src/ags/object/ags_tree_iterator.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/object/ags_tree_iterator.c'; fi` gsequencer-ags_ladspa_manager.o: src/ags/plugin/ags_ladspa_manager.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_ladspa_manager.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_ladspa_manager.Tpo -c -o gsequencer-ags_ladspa_manager.o `test -f 'src/ags/plugin/ags_ladspa_manager.c' || echo '$(srcdir)/'`src/ags/plugin/ags_ladspa_manager.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_ladspa_manager.Tpo $(DEPDIR)/gsequencer-ags_ladspa_manager.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/plugin/ags_ladspa_manager.c' object='gsequencer-ags_ladspa_manager.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_ladspa_manager.o `test -f 'src/ags/plugin/ags_ladspa_manager.c' || echo '$(srcdir)/'`src/ags/plugin/ags_ladspa_manager.c gsequencer-ags_ladspa_manager.obj: src/ags/plugin/ags_ladspa_manager.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_ladspa_manager.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_ladspa_manager.Tpo -c -o gsequencer-ags_ladspa_manager.obj `if test -f 'src/ags/plugin/ags_ladspa_manager.c'; then $(CYGPATH_W) 'src/ags/plugin/ags_ladspa_manager.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/plugin/ags_ladspa_manager.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_ladspa_manager.Tpo $(DEPDIR)/gsequencer-ags_ladspa_manager.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/plugin/ags_ladspa_manager.c' object='gsequencer-ags_ladspa_manager.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_ladspa_manager.obj `if test -f 'src/ags/plugin/ags_ladspa_manager.c'; then $(CYGPATH_W) 'src/ags/plugin/ags_ladspa_manager.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/plugin/ags_ladspa_manager.c'; fi` gsequencer-ags_plugin_factory.o: src/ags/plugin/ags_plugin_factory.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_plugin_factory.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_plugin_factory.Tpo -c -o gsequencer-ags_plugin_factory.o `test -f 'src/ags/plugin/ags_plugin_factory.c' || echo '$(srcdir)/'`src/ags/plugin/ags_plugin_factory.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_plugin_factory.Tpo $(DEPDIR)/gsequencer-ags_plugin_factory.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/plugin/ags_plugin_factory.c' object='gsequencer-ags_plugin_factory.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_plugin_factory.o `test -f 'src/ags/plugin/ags_plugin_factory.c' || echo '$(srcdir)/'`src/ags/plugin/ags_plugin_factory.c gsequencer-ags_plugin_factory.obj: src/ags/plugin/ags_plugin_factory.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_plugin_factory.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_plugin_factory.Tpo -c -o gsequencer-ags_plugin_factory.obj `if test -f 'src/ags/plugin/ags_plugin_factory.c'; then $(CYGPATH_W) 'src/ags/plugin/ags_plugin_factory.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/plugin/ags_plugin_factory.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_plugin_factory.Tpo $(DEPDIR)/gsequencer-ags_plugin_factory.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/plugin/ags_plugin_factory.c' object='gsequencer-ags_plugin_factory.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_plugin_factory.obj `if test -f 'src/ags/plugin/ags_plugin_factory.c'; then $(CYGPATH_W) 'src/ags/plugin/ags_plugin_factory.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/plugin/ags_plugin_factory.c'; fi` gsequencer-ags_registry.o: src/ags/server/ags_registry.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_registry.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_registry.Tpo -c -o gsequencer-ags_registry.o `test -f 'src/ags/server/ags_registry.c' || echo '$(srcdir)/'`src/ags/server/ags_registry.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_registry.Tpo $(DEPDIR)/gsequencer-ags_registry.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/server/ags_registry.c' object='gsequencer-ags_registry.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_registry.o `test -f 'src/ags/server/ags_registry.c' || echo '$(srcdir)/'`src/ags/server/ags_registry.c gsequencer-ags_registry.obj: src/ags/server/ags_registry.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_registry.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_registry.Tpo -c -o gsequencer-ags_registry.obj `if test -f 'src/ags/server/ags_registry.c'; then $(CYGPATH_W) 'src/ags/server/ags_registry.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/server/ags_registry.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_registry.Tpo $(DEPDIR)/gsequencer-ags_registry.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/server/ags_registry.c' object='gsequencer-ags_registry.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_registry.obj `if test -f 'src/ags/server/ags_registry.c'; then $(CYGPATH_W) 'src/ags/server/ags_registry.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/server/ags_registry.c'; fi` gsequencer-ags_remote_task.o: src/ags/server/ags_remote_task.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_remote_task.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_remote_task.Tpo -c -o gsequencer-ags_remote_task.o `test -f 'src/ags/server/ags_remote_task.c' || echo '$(srcdir)/'`src/ags/server/ags_remote_task.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_remote_task.Tpo $(DEPDIR)/gsequencer-ags_remote_task.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/server/ags_remote_task.c' object='gsequencer-ags_remote_task.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_remote_task.o `test -f 'src/ags/server/ags_remote_task.c' || echo '$(srcdir)/'`src/ags/server/ags_remote_task.c gsequencer-ags_remote_task.obj: src/ags/server/ags_remote_task.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_remote_task.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_remote_task.Tpo -c -o gsequencer-ags_remote_task.obj `if test -f 'src/ags/server/ags_remote_task.c'; then $(CYGPATH_W) 'src/ags/server/ags_remote_task.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/server/ags_remote_task.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_remote_task.Tpo $(DEPDIR)/gsequencer-ags_remote_task.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/server/ags_remote_task.c' object='gsequencer-ags_remote_task.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_remote_task.obj `if test -f 'src/ags/server/ags_remote_task.c'; then $(CYGPATH_W) 'src/ags/server/ags_remote_task.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/server/ags_remote_task.c'; fi` gsequencer-ags_server.o: src/ags/server/ags_server.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_server.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_server.Tpo -c -o gsequencer-ags_server.o `test -f 'src/ags/server/ags_server.c' || echo '$(srcdir)/'`src/ags/server/ags_server.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_server.Tpo $(DEPDIR)/gsequencer-ags_server.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/server/ags_server.c' object='gsequencer-ags_server.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_server.o `test -f 'src/ags/server/ags_server.c' || echo '$(srcdir)/'`src/ags/server/ags_server.c gsequencer-ags_server.obj: src/ags/server/ags_server.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_server.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_server.Tpo -c -o gsequencer-ags_server.obj `if test -f 'src/ags/server/ags_server.c'; then $(CYGPATH_W) 'src/ags/server/ags_server.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/server/ags_server.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_server.Tpo $(DEPDIR)/gsequencer-ags_server.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/server/ags_server.c' object='gsequencer-ags_server.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_server.obj `if test -f 'src/ags/server/ags_server.c'; then $(CYGPATH_W) 'src/ags/server/ags_server.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/server/ags_server.c'; fi` gsequencer-ags_audio_loop.o: src/ags/thread/ags_audio_loop.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_audio_loop.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_audio_loop.Tpo -c -o gsequencer-ags_audio_loop.o `test -f 'src/ags/thread/ags_audio_loop.c' || echo '$(srcdir)/'`src/ags/thread/ags_audio_loop.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_audio_loop.Tpo $(DEPDIR)/gsequencer-ags_audio_loop.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/thread/ags_audio_loop.c' object='gsequencer-ags_audio_loop.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_audio_loop.o `test -f 'src/ags/thread/ags_audio_loop.c' || echo '$(srcdir)/'`src/ags/thread/ags_audio_loop.c gsequencer-ags_audio_loop.obj: src/ags/thread/ags_audio_loop.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_audio_loop.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_audio_loop.Tpo -c -o gsequencer-ags_audio_loop.obj `if test -f 'src/ags/thread/ags_audio_loop.c'; then $(CYGPATH_W) 'src/ags/thread/ags_audio_loop.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/thread/ags_audio_loop.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_audio_loop.Tpo $(DEPDIR)/gsequencer-ags_audio_loop.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/thread/ags_audio_loop.c' object='gsequencer-ags_audio_loop.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_audio_loop.obj `if test -f 'src/ags/thread/ags_audio_loop.c'; then $(CYGPATH_W) 'src/ags/thread/ags_audio_loop.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/thread/ags_audio_loop.c'; fi` gsequencer-ags_audio_thread.o: src/ags/thread/ags_audio_thread.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_audio_thread.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_audio_thread.Tpo -c -o gsequencer-ags_audio_thread.o `test -f 'src/ags/thread/ags_audio_thread.c' || echo '$(srcdir)/'`src/ags/thread/ags_audio_thread.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_audio_thread.Tpo $(DEPDIR)/gsequencer-ags_audio_thread.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/thread/ags_audio_thread.c' object='gsequencer-ags_audio_thread.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_audio_thread.o `test -f 'src/ags/thread/ags_audio_thread.c' || echo '$(srcdir)/'`src/ags/thread/ags_audio_thread.c gsequencer-ags_audio_thread.obj: src/ags/thread/ags_audio_thread.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_audio_thread.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_audio_thread.Tpo -c -o gsequencer-ags_audio_thread.obj `if test -f 'src/ags/thread/ags_audio_thread.c'; then $(CYGPATH_W) 'src/ags/thread/ags_audio_thread.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/thread/ags_audio_thread.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_audio_thread.Tpo $(DEPDIR)/gsequencer-ags_audio_thread.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/thread/ags_audio_thread.c' object='gsequencer-ags_audio_thread.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_audio_thread.obj `if test -f 'src/ags/thread/ags_audio_thread.c'; then $(CYGPATH_W) 'src/ags/thread/ags_audio_thread.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/thread/ags_audio_thread.c'; fi` gsequencer-ags_autosave_thread.o: src/ags/thread/ags_autosave_thread.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_autosave_thread.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_autosave_thread.Tpo -c -o gsequencer-ags_autosave_thread.o `test -f 'src/ags/thread/ags_autosave_thread.c' || echo '$(srcdir)/'`src/ags/thread/ags_autosave_thread.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_autosave_thread.Tpo $(DEPDIR)/gsequencer-ags_autosave_thread.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/thread/ags_autosave_thread.c' object='gsequencer-ags_autosave_thread.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_autosave_thread.o `test -f 'src/ags/thread/ags_autosave_thread.c' || echo '$(srcdir)/'`src/ags/thread/ags_autosave_thread.c gsequencer-ags_autosave_thread.obj: src/ags/thread/ags_autosave_thread.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_autosave_thread.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_autosave_thread.Tpo -c -o gsequencer-ags_autosave_thread.obj `if test -f 'src/ags/thread/ags_autosave_thread.c'; then $(CYGPATH_W) 'src/ags/thread/ags_autosave_thread.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/thread/ags_autosave_thread.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_autosave_thread.Tpo $(DEPDIR)/gsequencer-ags_autosave_thread.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/thread/ags_autosave_thread.c' object='gsequencer-ags_autosave_thread.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_autosave_thread.obj `if test -f 'src/ags/thread/ags_autosave_thread.c'; then $(CYGPATH_W) 'src/ags/thread/ags_autosave_thread.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/thread/ags_autosave_thread.c'; fi` gsequencer-ags_channel_thread.o: src/ags/thread/ags_channel_thread.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_channel_thread.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_channel_thread.Tpo -c -o gsequencer-ags_channel_thread.o `test -f 'src/ags/thread/ags_channel_thread.c' || echo '$(srcdir)/'`src/ags/thread/ags_channel_thread.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_channel_thread.Tpo $(DEPDIR)/gsequencer-ags_channel_thread.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/thread/ags_channel_thread.c' object='gsequencer-ags_channel_thread.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_channel_thread.o `test -f 'src/ags/thread/ags_channel_thread.c' || echo '$(srcdir)/'`src/ags/thread/ags_channel_thread.c gsequencer-ags_channel_thread.obj: src/ags/thread/ags_channel_thread.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_channel_thread.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_channel_thread.Tpo -c -o gsequencer-ags_channel_thread.obj `if test -f 'src/ags/thread/ags_channel_thread.c'; then $(CYGPATH_W) 'src/ags/thread/ags_channel_thread.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/thread/ags_channel_thread.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_channel_thread.Tpo $(DEPDIR)/gsequencer-ags_channel_thread.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/thread/ags_channel_thread.c' object='gsequencer-ags_channel_thread.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_channel_thread.obj `if test -f 'src/ags/thread/ags_channel_thread.c'; then $(CYGPATH_W) 'src/ags/thread/ags_channel_thread.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/thread/ags_channel_thread.c'; fi` gsequencer-ags_devout_thread.o: src/ags/thread/ags_devout_thread.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_devout_thread.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_devout_thread.Tpo -c -o gsequencer-ags_devout_thread.o `test -f 'src/ags/thread/ags_devout_thread.c' || echo '$(srcdir)/'`src/ags/thread/ags_devout_thread.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_devout_thread.Tpo $(DEPDIR)/gsequencer-ags_devout_thread.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/thread/ags_devout_thread.c' object='gsequencer-ags_devout_thread.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_devout_thread.o `test -f 'src/ags/thread/ags_devout_thread.c' || echo '$(srcdir)/'`src/ags/thread/ags_devout_thread.c gsequencer-ags_devout_thread.obj: src/ags/thread/ags_devout_thread.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_devout_thread.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_devout_thread.Tpo -c -o gsequencer-ags_devout_thread.obj `if test -f 'src/ags/thread/ags_devout_thread.c'; then $(CYGPATH_W) 'src/ags/thread/ags_devout_thread.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/thread/ags_devout_thread.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_devout_thread.Tpo $(DEPDIR)/gsequencer-ags_devout_thread.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/thread/ags_devout_thread.c' object='gsequencer-ags_devout_thread.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_devout_thread.obj `if test -f 'src/ags/thread/ags_devout_thread.c'; then $(CYGPATH_W) 'src/ags/thread/ags_devout_thread.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/thread/ags_devout_thread.c'; fi` gsequencer-ags_export_thread.o: src/ags/thread/ags_export_thread.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_export_thread.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_export_thread.Tpo -c -o gsequencer-ags_export_thread.o `test -f 'src/ags/thread/ags_export_thread.c' || echo '$(srcdir)/'`src/ags/thread/ags_export_thread.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_export_thread.Tpo $(DEPDIR)/gsequencer-ags_export_thread.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/thread/ags_export_thread.c' object='gsequencer-ags_export_thread.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_export_thread.o `test -f 'src/ags/thread/ags_export_thread.c' || echo '$(srcdir)/'`src/ags/thread/ags_export_thread.c gsequencer-ags_export_thread.obj: src/ags/thread/ags_export_thread.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_export_thread.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_export_thread.Tpo -c -o gsequencer-ags_export_thread.obj `if test -f 'src/ags/thread/ags_export_thread.c'; then $(CYGPATH_W) 'src/ags/thread/ags_export_thread.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/thread/ags_export_thread.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_export_thread.Tpo $(DEPDIR)/gsequencer-ags_export_thread.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/thread/ags_export_thread.c' object='gsequencer-ags_export_thread.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_export_thread.obj `if test -f 'src/ags/thread/ags_export_thread.c'; then $(CYGPATH_W) 'src/ags/thread/ags_export_thread.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/thread/ags_export_thread.c'; fi` gsequencer-ags_gui_thread.o: src/ags/thread/ags_gui_thread.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_gui_thread.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_gui_thread.Tpo -c -o gsequencer-ags_gui_thread.o `test -f 'src/ags/thread/ags_gui_thread.c' || echo '$(srcdir)/'`src/ags/thread/ags_gui_thread.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_gui_thread.Tpo $(DEPDIR)/gsequencer-ags_gui_thread.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/thread/ags_gui_thread.c' object='gsequencer-ags_gui_thread.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_gui_thread.o `test -f 'src/ags/thread/ags_gui_thread.c' || echo '$(srcdir)/'`src/ags/thread/ags_gui_thread.c gsequencer-ags_gui_thread.obj: src/ags/thread/ags_gui_thread.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_gui_thread.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_gui_thread.Tpo -c -o gsequencer-ags_gui_thread.obj `if test -f 'src/ags/thread/ags_gui_thread.c'; then $(CYGPATH_W) 'src/ags/thread/ags_gui_thread.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/thread/ags_gui_thread.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_gui_thread.Tpo $(DEPDIR)/gsequencer-ags_gui_thread.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/thread/ags_gui_thread.c' object='gsequencer-ags_gui_thread.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_gui_thread.obj `if test -f 'src/ags/thread/ags_gui_thread.c'; then $(CYGPATH_W) 'src/ags/thread/ags_gui_thread.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/thread/ags_gui_thread.c'; fi` gsequencer-ags_history.o: src/ags/thread/ags_history.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_history.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_history.Tpo -c -o gsequencer-ags_history.o `test -f 'src/ags/thread/ags_history.c' || echo '$(srcdir)/'`src/ags/thread/ags_history.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_history.Tpo $(DEPDIR)/gsequencer-ags_history.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/thread/ags_history.c' object='gsequencer-ags_history.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_history.o `test -f 'src/ags/thread/ags_history.c' || echo '$(srcdir)/'`src/ags/thread/ags_history.c gsequencer-ags_history.obj: src/ags/thread/ags_history.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_history.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_history.Tpo -c -o gsequencer-ags_history.obj `if test -f 'src/ags/thread/ags_history.c'; then $(CYGPATH_W) 'src/ags/thread/ags_history.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/thread/ags_history.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_history.Tpo $(DEPDIR)/gsequencer-ags_history.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/thread/ags_history.c' object='gsequencer-ags_history.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_history.obj `if test -f 'src/ags/thread/ags_history.c'; then $(CYGPATH_W) 'src/ags/thread/ags_history.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/thread/ags_history.c'; fi` gsequencer-ags_iterator_thread.o: src/ags/thread/ags_iterator_thread.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_iterator_thread.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_iterator_thread.Tpo -c -o gsequencer-ags_iterator_thread.o `test -f 'src/ags/thread/ags_iterator_thread.c' || echo '$(srcdir)/'`src/ags/thread/ags_iterator_thread.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_iterator_thread.Tpo $(DEPDIR)/gsequencer-ags_iterator_thread.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/thread/ags_iterator_thread.c' object='gsequencer-ags_iterator_thread.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_iterator_thread.o `test -f 'src/ags/thread/ags_iterator_thread.c' || echo '$(srcdir)/'`src/ags/thread/ags_iterator_thread.c gsequencer-ags_iterator_thread.obj: src/ags/thread/ags_iterator_thread.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_iterator_thread.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_iterator_thread.Tpo -c -o gsequencer-ags_iterator_thread.obj `if test -f 'src/ags/thread/ags_iterator_thread.c'; then $(CYGPATH_W) 'src/ags/thread/ags_iterator_thread.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/thread/ags_iterator_thread.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_iterator_thread.Tpo $(DEPDIR)/gsequencer-ags_iterator_thread.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/thread/ags_iterator_thread.c' object='gsequencer-ags_iterator_thread.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_iterator_thread.obj `if test -f 'src/ags/thread/ags_iterator_thread.c'; then $(CYGPATH_W) 'src/ags/thread/ags_iterator_thread.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/thread/ags_iterator_thread.c'; fi` gsequencer-ags_mutex_manager.o: src/ags/thread/ags_mutex_manager.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_mutex_manager.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_mutex_manager.Tpo -c -o gsequencer-ags_mutex_manager.o `test -f 'src/ags/thread/ags_mutex_manager.c' || echo '$(srcdir)/'`src/ags/thread/ags_mutex_manager.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_mutex_manager.Tpo $(DEPDIR)/gsequencer-ags_mutex_manager.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/thread/ags_mutex_manager.c' object='gsequencer-ags_mutex_manager.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_mutex_manager.o `test -f 'src/ags/thread/ags_mutex_manager.c' || echo '$(srcdir)/'`src/ags/thread/ags_mutex_manager.c gsequencer-ags_mutex_manager.obj: src/ags/thread/ags_mutex_manager.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_mutex_manager.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_mutex_manager.Tpo -c -o gsequencer-ags_mutex_manager.obj `if test -f 'src/ags/thread/ags_mutex_manager.c'; then $(CYGPATH_W) 'src/ags/thread/ags_mutex_manager.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/thread/ags_mutex_manager.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_mutex_manager.Tpo $(DEPDIR)/gsequencer-ags_mutex_manager.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/thread/ags_mutex_manager.c' object='gsequencer-ags_mutex_manager.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_mutex_manager.obj `if test -f 'src/ags/thread/ags_mutex_manager.c'; then $(CYGPATH_W) 'src/ags/thread/ags_mutex_manager.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/thread/ags_mutex_manager.c'; fi` gsequencer-ags_record_thread.o: src/ags/thread/ags_record_thread.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_record_thread.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_record_thread.Tpo -c -o gsequencer-ags_record_thread.o `test -f 'src/ags/thread/ags_record_thread.c' || echo '$(srcdir)/'`src/ags/thread/ags_record_thread.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_record_thread.Tpo $(DEPDIR)/gsequencer-ags_record_thread.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/thread/ags_record_thread.c' object='gsequencer-ags_record_thread.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_record_thread.o `test -f 'src/ags/thread/ags_record_thread.c' || echo '$(srcdir)/'`src/ags/thread/ags_record_thread.c gsequencer-ags_record_thread.obj: src/ags/thread/ags_record_thread.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_record_thread.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_record_thread.Tpo -c -o gsequencer-ags_record_thread.obj `if test -f 'src/ags/thread/ags_record_thread.c'; then $(CYGPATH_W) 'src/ags/thread/ags_record_thread.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/thread/ags_record_thread.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_record_thread.Tpo $(DEPDIR)/gsequencer-ags_record_thread.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/thread/ags_record_thread.c' object='gsequencer-ags_record_thread.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_record_thread.obj `if test -f 'src/ags/thread/ags_record_thread.c'; then $(CYGPATH_W) 'src/ags/thread/ags_record_thread.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/thread/ags_record_thread.c'; fi` gsequencer-ags_recycling_thread.o: src/ags/thread/ags_recycling_thread.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_recycling_thread.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_recycling_thread.Tpo -c -o gsequencer-ags_recycling_thread.o `test -f 'src/ags/thread/ags_recycling_thread.c' || echo '$(srcdir)/'`src/ags/thread/ags_recycling_thread.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_recycling_thread.Tpo $(DEPDIR)/gsequencer-ags_recycling_thread.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/thread/ags_recycling_thread.c' object='gsequencer-ags_recycling_thread.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_recycling_thread.o `test -f 'src/ags/thread/ags_recycling_thread.c' || echo '$(srcdir)/'`src/ags/thread/ags_recycling_thread.c gsequencer-ags_recycling_thread.obj: src/ags/thread/ags_recycling_thread.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_recycling_thread.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_recycling_thread.Tpo -c -o gsequencer-ags_recycling_thread.obj `if test -f 'src/ags/thread/ags_recycling_thread.c'; then $(CYGPATH_W) 'src/ags/thread/ags_recycling_thread.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/thread/ags_recycling_thread.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_recycling_thread.Tpo $(DEPDIR)/gsequencer-ags_recycling_thread.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/thread/ags_recycling_thread.c' object='gsequencer-ags_recycling_thread.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_recycling_thread.obj `if test -f 'src/ags/thread/ags_recycling_thread.c'; then $(CYGPATH_W) 'src/ags/thread/ags_recycling_thread.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/thread/ags_recycling_thread.c'; fi` gsequencer-ags_recycling_thread_callbacks.o: src/ags/thread/ags_recycling_thread_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_recycling_thread_callbacks.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_recycling_thread_callbacks.Tpo -c -o gsequencer-ags_recycling_thread_callbacks.o `test -f 'src/ags/thread/ags_recycling_thread_callbacks.c' || echo '$(srcdir)/'`src/ags/thread/ags_recycling_thread_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_recycling_thread_callbacks.Tpo $(DEPDIR)/gsequencer-ags_recycling_thread_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/thread/ags_recycling_thread_callbacks.c' object='gsequencer-ags_recycling_thread_callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_recycling_thread_callbacks.o `test -f 'src/ags/thread/ags_recycling_thread_callbacks.c' || echo '$(srcdir)/'`src/ags/thread/ags_recycling_thread_callbacks.c gsequencer-ags_recycling_thread_callbacks.obj: src/ags/thread/ags_recycling_thread_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_recycling_thread_callbacks.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_recycling_thread_callbacks.Tpo -c -o gsequencer-ags_recycling_thread_callbacks.obj `if test -f 'src/ags/thread/ags_recycling_thread_callbacks.c'; then $(CYGPATH_W) 'src/ags/thread/ags_recycling_thread_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/thread/ags_recycling_thread_callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_recycling_thread_callbacks.Tpo $(DEPDIR)/gsequencer-ags_recycling_thread_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/thread/ags_recycling_thread_callbacks.c' object='gsequencer-ags_recycling_thread_callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_recycling_thread_callbacks.obj `if test -f 'src/ags/thread/ags_recycling_thread_callbacks.c'; then $(CYGPATH_W) 'src/ags/thread/ags_recycling_thread_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/thread/ags_recycling_thread_callbacks.c'; fi` gsequencer-ags_returnable_thread.o: src/ags/thread/ags_returnable_thread.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_returnable_thread.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_returnable_thread.Tpo -c -o gsequencer-ags_returnable_thread.o `test -f 'src/ags/thread/ags_returnable_thread.c' || echo '$(srcdir)/'`src/ags/thread/ags_returnable_thread.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_returnable_thread.Tpo $(DEPDIR)/gsequencer-ags_returnable_thread.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/thread/ags_returnable_thread.c' object='gsequencer-ags_returnable_thread.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_returnable_thread.o `test -f 'src/ags/thread/ags_returnable_thread.c' || echo '$(srcdir)/'`src/ags/thread/ags_returnable_thread.c gsequencer-ags_returnable_thread.obj: src/ags/thread/ags_returnable_thread.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_returnable_thread.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_returnable_thread.Tpo -c -o gsequencer-ags_returnable_thread.obj `if test -f 'src/ags/thread/ags_returnable_thread.c'; then $(CYGPATH_W) 'src/ags/thread/ags_returnable_thread.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/thread/ags_returnable_thread.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_returnable_thread.Tpo $(DEPDIR)/gsequencer-ags_returnable_thread.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/thread/ags_returnable_thread.c' object='gsequencer-ags_returnable_thread.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_returnable_thread.obj `if test -f 'src/ags/thread/ags_returnable_thread.c'; then $(CYGPATH_W) 'src/ags/thread/ags_returnable_thread.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/thread/ags_returnable_thread.c'; fi` gsequencer-ags_single_thread.o: src/ags/thread/ags_single_thread.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_single_thread.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_single_thread.Tpo -c -o gsequencer-ags_single_thread.o `test -f 'src/ags/thread/ags_single_thread.c' || echo '$(srcdir)/'`src/ags/thread/ags_single_thread.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_single_thread.Tpo $(DEPDIR)/gsequencer-ags_single_thread.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/thread/ags_single_thread.c' object='gsequencer-ags_single_thread.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_single_thread.o `test -f 'src/ags/thread/ags_single_thread.c' || echo '$(srcdir)/'`src/ags/thread/ags_single_thread.c gsequencer-ags_single_thread.obj: src/ags/thread/ags_single_thread.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_single_thread.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_single_thread.Tpo -c -o gsequencer-ags_single_thread.obj `if test -f 'src/ags/thread/ags_single_thread.c'; then $(CYGPATH_W) 'src/ags/thread/ags_single_thread.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/thread/ags_single_thread.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_single_thread.Tpo $(DEPDIR)/gsequencer-ags_single_thread.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/thread/ags_single_thread.c' object='gsequencer-ags_single_thread.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_single_thread.obj `if test -f 'src/ags/thread/ags_single_thread.c'; then $(CYGPATH_W) 'src/ags/thread/ags_single_thread.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/thread/ags_single_thread.c'; fi` gsequencer-ags_task_completion.o: src/ags/thread/ags_task_completion.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_task_completion.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_task_completion.Tpo -c -o gsequencer-ags_task_completion.o `test -f 'src/ags/thread/ags_task_completion.c' || echo '$(srcdir)/'`src/ags/thread/ags_task_completion.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_task_completion.Tpo $(DEPDIR)/gsequencer-ags_task_completion.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/thread/ags_task_completion.c' object='gsequencer-ags_task_completion.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_task_completion.o `test -f 'src/ags/thread/ags_task_completion.c' || echo '$(srcdir)/'`src/ags/thread/ags_task_completion.c gsequencer-ags_task_completion.obj: src/ags/thread/ags_task_completion.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_task_completion.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_task_completion.Tpo -c -o gsequencer-ags_task_completion.obj `if test -f 'src/ags/thread/ags_task_completion.c'; then $(CYGPATH_W) 'src/ags/thread/ags_task_completion.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/thread/ags_task_completion.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_task_completion.Tpo $(DEPDIR)/gsequencer-ags_task_completion.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/thread/ags_task_completion.c' object='gsequencer-ags_task_completion.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_task_completion.obj `if test -f 'src/ags/thread/ags_task_completion.c'; then $(CYGPATH_W) 'src/ags/thread/ags_task_completion.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/thread/ags_task_completion.c'; fi` gsequencer-ags_task_thread.o: src/ags/thread/ags_task_thread.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_task_thread.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_task_thread.Tpo -c -o gsequencer-ags_task_thread.o `test -f 'src/ags/thread/ags_task_thread.c' || echo '$(srcdir)/'`src/ags/thread/ags_task_thread.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_task_thread.Tpo $(DEPDIR)/gsequencer-ags_task_thread.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/thread/ags_task_thread.c' object='gsequencer-ags_task_thread.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_task_thread.o `test -f 'src/ags/thread/ags_task_thread.c' || echo '$(srcdir)/'`src/ags/thread/ags_task_thread.c gsequencer-ags_task_thread.obj: src/ags/thread/ags_task_thread.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_task_thread.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_task_thread.Tpo -c -o gsequencer-ags_task_thread.obj `if test -f 'src/ags/thread/ags_task_thread.c'; then $(CYGPATH_W) 'src/ags/thread/ags_task_thread.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/thread/ags_task_thread.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_task_thread.Tpo $(DEPDIR)/gsequencer-ags_task_thread.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/thread/ags_task_thread.c' object='gsequencer-ags_task_thread.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_task_thread.obj `if test -f 'src/ags/thread/ags_task_thread.c'; then $(CYGPATH_W) 'src/ags/thread/ags_task_thread.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/thread/ags_task_thread.c'; fi` gsequencer-ags_thread_pool.o: src/ags/thread/ags_thread_pool.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_thread_pool.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_thread_pool.Tpo -c -o gsequencer-ags_thread_pool.o `test -f 'src/ags/thread/ags_thread_pool.c' || echo '$(srcdir)/'`src/ags/thread/ags_thread_pool.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_thread_pool.Tpo $(DEPDIR)/gsequencer-ags_thread_pool.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/thread/ags_thread_pool.c' object='gsequencer-ags_thread_pool.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_thread_pool.o `test -f 'src/ags/thread/ags_thread_pool.c' || echo '$(srcdir)/'`src/ags/thread/ags_thread_pool.c gsequencer-ags_thread_pool.obj: src/ags/thread/ags_thread_pool.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_thread_pool.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_thread_pool.Tpo -c -o gsequencer-ags_thread_pool.obj `if test -f 'src/ags/thread/ags_thread_pool.c'; then $(CYGPATH_W) 'src/ags/thread/ags_thread_pool.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/thread/ags_thread_pool.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_thread_pool.Tpo $(DEPDIR)/gsequencer-ags_thread_pool.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/thread/ags_thread_pool.c' object='gsequencer-ags_thread_pool.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_thread_pool.obj `if test -f 'src/ags/thread/ags_thread_pool.c'; then $(CYGPATH_W) 'src/ags/thread/ags_thread_pool.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/thread/ags_thread_pool.c'; fi` gsequencer-ags_thread-posix.o: src/ags/thread/ags_thread-posix.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_thread-posix.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_thread-posix.Tpo -c -o gsequencer-ags_thread-posix.o `test -f 'src/ags/thread/ags_thread-posix.c' || echo '$(srcdir)/'`src/ags/thread/ags_thread-posix.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_thread-posix.Tpo $(DEPDIR)/gsequencer-ags_thread-posix.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/thread/ags_thread-posix.c' object='gsequencer-ags_thread-posix.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_thread-posix.o `test -f 'src/ags/thread/ags_thread-posix.c' || echo '$(srcdir)/'`src/ags/thread/ags_thread-posix.c gsequencer-ags_thread-posix.obj: src/ags/thread/ags_thread-posix.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_thread-posix.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_thread-posix.Tpo -c -o gsequencer-ags_thread-posix.obj `if test -f 'src/ags/thread/ags_thread-posix.c'; then $(CYGPATH_W) 'src/ags/thread/ags_thread-posix.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/thread/ags_thread-posix.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_thread-posix.Tpo $(DEPDIR)/gsequencer-ags_thread-posix.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/thread/ags_thread-posix.c' object='gsequencer-ags_thread-posix.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_thread-posix.obj `if test -f 'src/ags/thread/ags_thread-posix.c'; then $(CYGPATH_W) 'src/ags/thread/ags_thread-posix.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/thread/ags_thread-posix.c'; fi` gsequencer-ags_timestamp_thread.o: src/ags/thread/ags_timestamp_thread.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_timestamp_thread.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_timestamp_thread.Tpo -c -o gsequencer-ags_timestamp_thread.o `test -f 'src/ags/thread/ags_timestamp_thread.c' || echo '$(srcdir)/'`src/ags/thread/ags_timestamp_thread.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_timestamp_thread.Tpo $(DEPDIR)/gsequencer-ags_timestamp_thread.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/thread/ags_timestamp_thread.c' object='gsequencer-ags_timestamp_thread.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_timestamp_thread.o `test -f 'src/ags/thread/ags_timestamp_thread.c' || echo '$(srcdir)/'`src/ags/thread/ags_timestamp_thread.c gsequencer-ags_timestamp_thread.obj: src/ags/thread/ags_timestamp_thread.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_timestamp_thread.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_timestamp_thread.Tpo -c -o gsequencer-ags_timestamp_thread.obj `if test -f 'src/ags/thread/ags_timestamp_thread.c'; then $(CYGPATH_W) 'src/ags/thread/ags_timestamp_thread.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/thread/ags_timestamp_thread.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_timestamp_thread.Tpo $(DEPDIR)/gsequencer-ags_timestamp_thread.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/thread/ags_timestamp_thread.c' object='gsequencer-ags_timestamp_thread.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_timestamp_thread.obj `if test -f 'src/ags/thread/ags_timestamp_thread.c'; then $(CYGPATH_W) 'src/ags/thread/ags_timestamp_thread.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/thread/ags_timestamp_thread.c'; fi` gsequencer-ags_id_generator.o: src/ags/util/ags_id_generator.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_id_generator.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_id_generator.Tpo -c -o gsequencer-ags_id_generator.o `test -f 'src/ags/util/ags_id_generator.c' || echo '$(srcdir)/'`src/ags/util/ags_id_generator.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_id_generator.Tpo $(DEPDIR)/gsequencer-ags_id_generator.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/util/ags_id_generator.c' object='gsequencer-ags_id_generator.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_id_generator.o `test -f 'src/ags/util/ags_id_generator.c' || echo '$(srcdir)/'`src/ags/util/ags_id_generator.c gsequencer-ags_id_generator.obj: src/ags/util/ags_id_generator.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_id_generator.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_id_generator.Tpo -c -o gsequencer-ags_id_generator.obj `if test -f 'src/ags/util/ags_id_generator.c'; then $(CYGPATH_W) 'src/ags/util/ags_id_generator.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/util/ags_id_generator.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_id_generator.Tpo $(DEPDIR)/gsequencer-ags_id_generator.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/util/ags_id_generator.c' object='gsequencer-ags_id_generator.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_id_generator.obj `if test -f 'src/ags/util/ags_id_generator.c'; then $(CYGPATH_W) 'src/ags/util/ags_id_generator.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/util/ags_id_generator.c'; fi` gsequencer-ags_cartesian.o: src/ags/widget/ags_cartesian.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_cartesian.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_cartesian.Tpo -c -o gsequencer-ags_cartesian.o `test -f 'src/ags/widget/ags_cartesian.c' || echo '$(srcdir)/'`src/ags/widget/ags_cartesian.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_cartesian.Tpo $(DEPDIR)/gsequencer-ags_cartesian.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/widget/ags_cartesian.c' object='gsequencer-ags_cartesian.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_cartesian.o `test -f 'src/ags/widget/ags_cartesian.c' || echo '$(srcdir)/'`src/ags/widget/ags_cartesian.c gsequencer-ags_cartesian.obj: src/ags/widget/ags_cartesian.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_cartesian.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_cartesian.Tpo -c -o gsequencer-ags_cartesian.obj `if test -f 'src/ags/widget/ags_cartesian.c'; then $(CYGPATH_W) 'src/ags/widget/ags_cartesian.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/widget/ags_cartesian.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_cartesian.Tpo $(DEPDIR)/gsequencer-ags_cartesian.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/widget/ags_cartesian.c' object='gsequencer-ags_cartesian.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_cartesian.obj `if test -f 'src/ags/widget/ags_cartesian.c'; then $(CYGPATH_W) 'src/ags/widget/ags_cartesian.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/widget/ags_cartesian.c'; fi` gsequencer-ags_dial.o: src/ags/widget/ags_dial.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_dial.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_dial.Tpo -c -o gsequencer-ags_dial.o `test -f 'src/ags/widget/ags_dial.c' || echo '$(srcdir)/'`src/ags/widget/ags_dial.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_dial.Tpo $(DEPDIR)/gsequencer-ags_dial.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/widget/ags_dial.c' object='gsequencer-ags_dial.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_dial.o `test -f 'src/ags/widget/ags_dial.c' || echo '$(srcdir)/'`src/ags/widget/ags_dial.c gsequencer-ags_dial.obj: src/ags/widget/ags_dial.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_dial.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_dial.Tpo -c -o gsequencer-ags_dial.obj `if test -f 'src/ags/widget/ags_dial.c'; then $(CYGPATH_W) 'src/ags/widget/ags_dial.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/widget/ags_dial.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_dial.Tpo $(DEPDIR)/gsequencer-ags_dial.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/widget/ags_dial.c' object='gsequencer-ags_dial.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_dial.obj `if test -f 'src/ags/widget/ags_dial.c'; then $(CYGPATH_W) 'src/ags/widget/ags_dial.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/widget/ags_dial.c'; fi` gsequencer-ags_expander.o: src/ags/widget/ags_expander.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_expander.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_expander.Tpo -c -o gsequencer-ags_expander.o `test -f 'src/ags/widget/ags_expander.c' || echo '$(srcdir)/'`src/ags/widget/ags_expander.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_expander.Tpo $(DEPDIR)/gsequencer-ags_expander.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/widget/ags_expander.c' object='gsequencer-ags_expander.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_expander.o `test -f 'src/ags/widget/ags_expander.c' || echo '$(srcdir)/'`src/ags/widget/ags_expander.c gsequencer-ags_expander.obj: src/ags/widget/ags_expander.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_expander.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_expander.Tpo -c -o gsequencer-ags_expander.obj `if test -f 'src/ags/widget/ags_expander.c'; then $(CYGPATH_W) 'src/ags/widget/ags_expander.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/widget/ags_expander.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_expander.Tpo $(DEPDIR)/gsequencer-ags_expander.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/widget/ags_expander.c' object='gsequencer-ags_expander.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_expander.obj `if test -f 'src/ags/widget/ags_expander.c'; then $(CYGPATH_W) 'src/ags/widget/ags_expander.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/widget/ags_expander.c'; fi` gsequencer-ags_expander_set.o: src/ags/widget/ags_expander_set.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_expander_set.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_expander_set.Tpo -c -o gsequencer-ags_expander_set.o `test -f 'src/ags/widget/ags_expander_set.c' || echo '$(srcdir)/'`src/ags/widget/ags_expander_set.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_expander_set.Tpo $(DEPDIR)/gsequencer-ags_expander_set.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/widget/ags_expander_set.c' object='gsequencer-ags_expander_set.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_expander_set.o `test -f 'src/ags/widget/ags_expander_set.c' || echo '$(srcdir)/'`src/ags/widget/ags_expander_set.c gsequencer-ags_expander_set.obj: src/ags/widget/ags_expander_set.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_expander_set.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_expander_set.Tpo -c -o gsequencer-ags_expander_set.obj `if test -f 'src/ags/widget/ags_expander_set.c'; then $(CYGPATH_W) 'src/ags/widget/ags_expander_set.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/widget/ags_expander_set.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_expander_set.Tpo $(DEPDIR)/gsequencer-ags_expander_set.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/widget/ags_expander_set.c' object='gsequencer-ags_expander_set.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_expander_set.obj `if test -f 'src/ags/widget/ags_expander_set.c'; then $(CYGPATH_W) 'src/ags/widget/ags_expander_set.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/widget/ags_expander_set.c'; fi` gsequencer-ags_hindicator.o: src/ags/widget/ags_hindicator.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_hindicator.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_hindicator.Tpo -c -o gsequencer-ags_hindicator.o `test -f 'src/ags/widget/ags_hindicator.c' || echo '$(srcdir)/'`src/ags/widget/ags_hindicator.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_hindicator.Tpo $(DEPDIR)/gsequencer-ags_hindicator.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/widget/ags_hindicator.c' object='gsequencer-ags_hindicator.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_hindicator.o `test -f 'src/ags/widget/ags_hindicator.c' || echo '$(srcdir)/'`src/ags/widget/ags_hindicator.c gsequencer-ags_hindicator.obj: src/ags/widget/ags_hindicator.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_hindicator.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_hindicator.Tpo -c -o gsequencer-ags_hindicator.obj `if test -f 'src/ags/widget/ags_hindicator.c'; then $(CYGPATH_W) 'src/ags/widget/ags_hindicator.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/widget/ags_hindicator.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_hindicator.Tpo $(DEPDIR)/gsequencer-ags_hindicator.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/widget/ags_hindicator.c' object='gsequencer-ags_hindicator.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_hindicator.obj `if test -f 'src/ags/widget/ags_hindicator.c'; then $(CYGPATH_W) 'src/ags/widget/ags_hindicator.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/widget/ags_hindicator.c'; fi` gsequencer-ags_htimebar.o: src/ags/widget/ags_htimebar.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_htimebar.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_htimebar.Tpo -c -o gsequencer-ags_htimebar.o `test -f 'src/ags/widget/ags_htimebar.c' || echo '$(srcdir)/'`src/ags/widget/ags_htimebar.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_htimebar.Tpo $(DEPDIR)/gsequencer-ags_htimebar.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/widget/ags_htimebar.c' object='gsequencer-ags_htimebar.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_htimebar.o `test -f 'src/ags/widget/ags_htimebar.c' || echo '$(srcdir)/'`src/ags/widget/ags_htimebar.c gsequencer-ags_htimebar.obj: src/ags/widget/ags_htimebar.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_htimebar.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_htimebar.Tpo -c -o gsequencer-ags_htimebar.obj `if test -f 'src/ags/widget/ags_htimebar.c'; then $(CYGPATH_W) 'src/ags/widget/ags_htimebar.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/widget/ags_htimebar.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_htimebar.Tpo $(DEPDIR)/gsequencer-ags_htimebar.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/widget/ags_htimebar.c' object='gsequencer-ags_htimebar.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_htimebar.obj `if test -f 'src/ags/widget/ags_htimebar.c'; then $(CYGPATH_W) 'src/ags/widget/ags_htimebar.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/widget/ags_htimebar.c'; fi` gsequencer-ags_indicator.o: src/ags/widget/ags_indicator.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_indicator.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_indicator.Tpo -c -o gsequencer-ags_indicator.o `test -f 'src/ags/widget/ags_indicator.c' || echo '$(srcdir)/'`src/ags/widget/ags_indicator.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_indicator.Tpo $(DEPDIR)/gsequencer-ags_indicator.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/widget/ags_indicator.c' object='gsequencer-ags_indicator.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_indicator.o `test -f 'src/ags/widget/ags_indicator.c' || echo '$(srcdir)/'`src/ags/widget/ags_indicator.c gsequencer-ags_indicator.obj: src/ags/widget/ags_indicator.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_indicator.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_indicator.Tpo -c -o gsequencer-ags_indicator.obj `if test -f 'src/ags/widget/ags_indicator.c'; then $(CYGPATH_W) 'src/ags/widget/ags_indicator.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/widget/ags_indicator.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_indicator.Tpo $(DEPDIR)/gsequencer-ags_indicator.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/widget/ags_indicator.c' object='gsequencer-ags_indicator.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_indicator.obj `if test -f 'src/ags/widget/ags_indicator.c'; then $(CYGPATH_W) 'src/ags/widget/ags_indicator.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/widget/ags_indicator.c'; fi` gsequencer-ags_led.o: src/ags/widget/ags_led.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_led.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_led.Tpo -c -o gsequencer-ags_led.o `test -f 'src/ags/widget/ags_led.c' || echo '$(srcdir)/'`src/ags/widget/ags_led.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_led.Tpo $(DEPDIR)/gsequencer-ags_led.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/widget/ags_led.c' object='gsequencer-ags_led.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_led.o `test -f 'src/ags/widget/ags_led.c' || echo '$(srcdir)/'`src/ags/widget/ags_led.c gsequencer-ags_led.obj: src/ags/widget/ags_led.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_led.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_led.Tpo -c -o gsequencer-ags_led.obj `if test -f 'src/ags/widget/ags_led.c'; then $(CYGPATH_W) 'src/ags/widget/ags_led.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/widget/ags_led.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_led.Tpo $(DEPDIR)/gsequencer-ags_led.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/widget/ags_led.c' object='gsequencer-ags_led.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_led.obj `if test -f 'src/ags/widget/ags_led.c'; then $(CYGPATH_W) 'src/ags/widget/ags_led.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/widget/ags_led.c'; fi` gsequencer-ags_menu.o: src/ags/widget/ags_menu.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_menu.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_menu.Tpo -c -o gsequencer-ags_menu.o `test -f 'src/ags/widget/ags_menu.c' || echo '$(srcdir)/'`src/ags/widget/ags_menu.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_menu.Tpo $(DEPDIR)/gsequencer-ags_menu.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/widget/ags_menu.c' object='gsequencer-ags_menu.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_menu.o `test -f 'src/ags/widget/ags_menu.c' || echo '$(srcdir)/'`src/ags/widget/ags_menu.c gsequencer-ags_menu.obj: src/ags/widget/ags_menu.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_menu.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_menu.Tpo -c -o gsequencer-ags_menu.obj `if test -f 'src/ags/widget/ags_menu.c'; then $(CYGPATH_W) 'src/ags/widget/ags_menu.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/widget/ags_menu.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_menu.Tpo $(DEPDIR)/gsequencer-ags_menu.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/widget/ags_menu.c' object='gsequencer-ags_menu.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_menu.obj `if test -f 'src/ags/widget/ags_menu.c'; then $(CYGPATH_W) 'src/ags/widget/ags_menu.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/widget/ags_menu.c'; fi` gsequencer-ags_menu_item.o: src/ags/widget/ags_menu_item.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_menu_item.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_menu_item.Tpo -c -o gsequencer-ags_menu_item.o `test -f 'src/ags/widget/ags_menu_item.c' || echo '$(srcdir)/'`src/ags/widget/ags_menu_item.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_menu_item.Tpo $(DEPDIR)/gsequencer-ags_menu_item.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/widget/ags_menu_item.c' object='gsequencer-ags_menu_item.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_menu_item.o `test -f 'src/ags/widget/ags_menu_item.c' || echo '$(srcdir)/'`src/ags/widget/ags_menu_item.c gsequencer-ags_menu_item.obj: src/ags/widget/ags_menu_item.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_menu_item.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_menu_item.Tpo -c -o gsequencer-ags_menu_item.obj `if test -f 'src/ags/widget/ags_menu_item.c'; then $(CYGPATH_W) 'src/ags/widget/ags_menu_item.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/widget/ags_menu_item.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_menu_item.Tpo $(DEPDIR)/gsequencer-ags_menu_item.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/widget/ags_menu_item.c' object='gsequencer-ags_menu_item.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_menu_item.obj `if test -f 'src/ags/widget/ags_menu_item.c'; then $(CYGPATH_W) 'src/ags/widget/ags_menu_item.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/widget/ags_menu_item.c'; fi` gsequencer-ags_option_menu.o: src/ags/widget/ags_option_menu.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_option_menu.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_option_menu.Tpo -c -o gsequencer-ags_option_menu.o `test -f 'src/ags/widget/ags_option_menu.c' || echo '$(srcdir)/'`src/ags/widget/ags_option_menu.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_option_menu.Tpo $(DEPDIR)/gsequencer-ags_option_menu.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/widget/ags_option_menu.c' object='gsequencer-ags_option_menu.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_option_menu.o `test -f 'src/ags/widget/ags_option_menu.c' || echo '$(srcdir)/'`src/ags/widget/ags_option_menu.c gsequencer-ags_option_menu.obj: src/ags/widget/ags_option_menu.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_option_menu.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_option_menu.Tpo -c -o gsequencer-ags_option_menu.obj `if test -f 'src/ags/widget/ags_option_menu.c'; then $(CYGPATH_W) 'src/ags/widget/ags_option_menu.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/widget/ags_option_menu.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_option_menu.Tpo $(DEPDIR)/gsequencer-ags_option_menu.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/widget/ags_option_menu.c' object='gsequencer-ags_option_menu.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_option_menu.obj `if test -f 'src/ags/widget/ags_option_menu.c'; then $(CYGPATH_W) 'src/ags/widget/ags_option_menu.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/widget/ags_option_menu.c'; fi` gsequencer-ags_ruler.o: src/ags/widget/ags_ruler.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_ruler.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_ruler.Tpo -c -o gsequencer-ags_ruler.o `test -f 'src/ags/widget/ags_ruler.c' || echo '$(srcdir)/'`src/ags/widget/ags_ruler.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_ruler.Tpo $(DEPDIR)/gsequencer-ags_ruler.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/widget/ags_ruler.c' object='gsequencer-ags_ruler.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_ruler.o `test -f 'src/ags/widget/ags_ruler.c' || echo '$(srcdir)/'`src/ags/widget/ags_ruler.c gsequencer-ags_ruler.obj: src/ags/widget/ags_ruler.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_ruler.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_ruler.Tpo -c -o gsequencer-ags_ruler.obj `if test -f 'src/ags/widget/ags_ruler.c'; then $(CYGPATH_W) 'src/ags/widget/ags_ruler.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/widget/ags_ruler.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_ruler.Tpo $(DEPDIR)/gsequencer-ags_ruler.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/widget/ags_ruler.c' object='gsequencer-ags_ruler.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_ruler.obj `if test -f 'src/ags/widget/ags_ruler.c'; then $(CYGPATH_W) 'src/ags/widget/ags_ruler.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/widget/ags_ruler.c'; fi` gsequencer-ags_segment.o: src/ags/widget/ags_segment.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_segment.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_segment.Tpo -c -o gsequencer-ags_segment.o `test -f 'src/ags/widget/ags_segment.c' || echo '$(srcdir)/'`src/ags/widget/ags_segment.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_segment.Tpo $(DEPDIR)/gsequencer-ags_segment.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/widget/ags_segment.c' object='gsequencer-ags_segment.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_segment.o `test -f 'src/ags/widget/ags_segment.c' || echo '$(srcdir)/'`src/ags/widget/ags_segment.c gsequencer-ags_segment.obj: src/ags/widget/ags_segment.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_segment.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_segment.Tpo -c -o gsequencer-ags_segment.obj `if test -f 'src/ags/widget/ags_segment.c'; then $(CYGPATH_W) 'src/ags/widget/ags_segment.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/widget/ags_segment.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_segment.Tpo $(DEPDIR)/gsequencer-ags_segment.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/widget/ags_segment.c' object='gsequencer-ags_segment.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_segment.obj `if test -f 'src/ags/widget/ags_segment.c'; then $(CYGPATH_W) 'src/ags/widget/ags_segment.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/widget/ags_segment.c'; fi` gsequencer-ags_table.o: src/ags/widget/ags_table.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_table.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_table.Tpo -c -o gsequencer-ags_table.o `test -f 'src/ags/widget/ags_table.c' || echo '$(srcdir)/'`src/ags/widget/ags_table.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_table.Tpo $(DEPDIR)/gsequencer-ags_table.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/widget/ags_table.c' object='gsequencer-ags_table.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_table.o `test -f 'src/ags/widget/ags_table.c' || echo '$(srcdir)/'`src/ags/widget/ags_table.c gsequencer-ags_table.obj: src/ags/widget/ags_table.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_table.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_table.Tpo -c -o gsequencer-ags_table.obj `if test -f 'src/ags/widget/ags_table.c'; then $(CYGPATH_W) 'src/ags/widget/ags_table.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/widget/ags_table.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_table.Tpo $(DEPDIR)/gsequencer-ags_table.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/widget/ags_table.c' object='gsequencer-ags_table.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_table.obj `if test -f 'src/ags/widget/ags_table.c'; then $(CYGPATH_W) 'src/ags/widget/ags_table.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/widget/ags_table.c'; fi` gsequencer-ags_timebar.o: src/ags/widget/ags_timebar.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_timebar.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_timebar.Tpo -c -o gsequencer-ags_timebar.o `test -f 'src/ags/widget/ags_timebar.c' || echo '$(srcdir)/'`src/ags/widget/ags_timebar.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_timebar.Tpo $(DEPDIR)/gsequencer-ags_timebar.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/widget/ags_timebar.c' object='gsequencer-ags_timebar.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_timebar.o `test -f 'src/ags/widget/ags_timebar.c' || echo '$(srcdir)/'`src/ags/widget/ags_timebar.c gsequencer-ags_timebar.obj: src/ags/widget/ags_timebar.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_timebar.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_timebar.Tpo -c -o gsequencer-ags_timebar.obj `if test -f 'src/ags/widget/ags_timebar.c'; then $(CYGPATH_W) 'src/ags/widget/ags_timebar.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/widget/ags_timebar.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_timebar.Tpo $(DEPDIR)/gsequencer-ags_timebar.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/widget/ags_timebar.c' object='gsequencer-ags_timebar.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_timebar.obj `if test -f 'src/ags/widget/ags_timebar.c'; then $(CYGPATH_W) 'src/ags/widget/ags_timebar.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/widget/ags_timebar.c'; fi` gsequencer-ags_vindicator.o: src/ags/widget/ags_vindicator.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_vindicator.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_vindicator.Tpo -c -o gsequencer-ags_vindicator.o `test -f 'src/ags/widget/ags_vindicator.c' || echo '$(srcdir)/'`src/ags/widget/ags_vindicator.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_vindicator.Tpo $(DEPDIR)/gsequencer-ags_vindicator.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/widget/ags_vindicator.c' object='gsequencer-ags_vindicator.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_vindicator.o `test -f 'src/ags/widget/ags_vindicator.c' || echo '$(srcdir)/'`src/ags/widget/ags_vindicator.c gsequencer-ags_vindicator.obj: src/ags/widget/ags_vindicator.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_vindicator.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_vindicator.Tpo -c -o gsequencer-ags_vindicator.obj `if test -f 'src/ags/widget/ags_vindicator.c'; then $(CYGPATH_W) 'src/ags/widget/ags_vindicator.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/widget/ags_vindicator.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_vindicator.Tpo $(DEPDIR)/gsequencer-ags_vindicator.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/widget/ags_vindicator.c' object='gsequencer-ags_vindicator.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_vindicator.obj `if test -f 'src/ags/widget/ags_vindicator.c'; then $(CYGPATH_W) 'src/ags/widget/ags_vindicator.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/widget/ags_vindicator.c'; fi` gsequencer-ags_waveform.o: src/ags/widget/ags_waveform.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_waveform.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_waveform.Tpo -c -o gsequencer-ags_waveform.o `test -f 'src/ags/widget/ags_waveform.c' || echo '$(srcdir)/'`src/ags/widget/ags_waveform.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_waveform.Tpo $(DEPDIR)/gsequencer-ags_waveform.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/widget/ags_waveform.c' object='gsequencer-ags_waveform.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_waveform.o `test -f 'src/ags/widget/ags_waveform.c' || echo '$(srcdir)/'`src/ags/widget/ags_waveform.c gsequencer-ags_waveform.obj: src/ags/widget/ags_waveform.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_waveform.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_waveform.Tpo -c -o gsequencer-ags_waveform.obj `if test -f 'src/ags/widget/ags_waveform.c'; then $(CYGPATH_W) 'src/ags/widget/ags_waveform.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/widget/ags_waveform.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_waveform.Tpo $(DEPDIR)/gsequencer-ags_waveform.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/widget/ags_waveform.c' object='gsequencer-ags_waveform.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_waveform.obj `if test -f 'src/ags/widget/ags_waveform.c'; then $(CYGPATH_W) 'src/ags/widget/ags_waveform.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/widget/ags_waveform.c'; fi` gsequencer-ags_audio_preferences.o: src/ags/X/ags_audio_preferences.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_audio_preferences.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_audio_preferences.Tpo -c -o gsequencer-ags_audio_preferences.o `test -f 'src/ags/X/ags_audio_preferences.c' || echo '$(srcdir)/'`src/ags/X/ags_audio_preferences.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_audio_preferences.Tpo $(DEPDIR)/gsequencer-ags_audio_preferences.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_audio_preferences.c' object='gsequencer-ags_audio_preferences.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_audio_preferences.o `test -f 'src/ags/X/ags_audio_preferences.c' || echo '$(srcdir)/'`src/ags/X/ags_audio_preferences.c gsequencer-ags_audio_preferences.obj: src/ags/X/ags_audio_preferences.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_audio_preferences.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_audio_preferences.Tpo -c -o gsequencer-ags_audio_preferences.obj `if test -f 'src/ags/X/ags_audio_preferences.c'; then $(CYGPATH_W) 'src/ags/X/ags_audio_preferences.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_audio_preferences.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_audio_preferences.Tpo $(DEPDIR)/gsequencer-ags_audio_preferences.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_audio_preferences.c' object='gsequencer-ags_audio_preferences.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_audio_preferences.obj `if test -f 'src/ags/X/ags_audio_preferences.c'; then $(CYGPATH_W) 'src/ags/X/ags_audio_preferences.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_audio_preferences.c'; fi` gsequencer-ags_audio_preferences_callbacks.o: src/ags/X/ags_audio_preferences_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_audio_preferences_callbacks.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_audio_preferences_callbacks.Tpo -c -o gsequencer-ags_audio_preferences_callbacks.o `test -f 'src/ags/X/ags_audio_preferences_callbacks.c' || echo '$(srcdir)/'`src/ags/X/ags_audio_preferences_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_audio_preferences_callbacks.Tpo $(DEPDIR)/gsequencer-ags_audio_preferences_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_audio_preferences_callbacks.c' object='gsequencer-ags_audio_preferences_callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_audio_preferences_callbacks.o `test -f 'src/ags/X/ags_audio_preferences_callbacks.c' || echo '$(srcdir)/'`src/ags/X/ags_audio_preferences_callbacks.c gsequencer-ags_audio_preferences_callbacks.obj: src/ags/X/ags_audio_preferences_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_audio_preferences_callbacks.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_audio_preferences_callbacks.Tpo -c -o gsequencer-ags_audio_preferences_callbacks.obj `if test -f 'src/ags/X/ags_audio_preferences_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/ags_audio_preferences_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_audio_preferences_callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_audio_preferences_callbacks.Tpo $(DEPDIR)/gsequencer-ags_audio_preferences_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_audio_preferences_callbacks.c' object='gsequencer-ags_audio_preferences_callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_audio_preferences_callbacks.obj `if test -f 'src/ags/X/ags_audio_preferences_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/ags_audio_preferences_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_audio_preferences_callbacks.c'; fi` gsequencer-ags_editor.o: src/ags/X/ags_editor.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_editor.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_editor.Tpo -c -o gsequencer-ags_editor.o `test -f 'src/ags/X/ags_editor.c' || echo '$(srcdir)/'`src/ags/X/ags_editor.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_editor.Tpo $(DEPDIR)/gsequencer-ags_editor.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_editor.c' object='gsequencer-ags_editor.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_editor.o `test -f 'src/ags/X/ags_editor.c' || echo '$(srcdir)/'`src/ags/X/ags_editor.c gsequencer-ags_editor.obj: src/ags/X/ags_editor.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_editor.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_editor.Tpo -c -o gsequencer-ags_editor.obj `if test -f 'src/ags/X/ags_editor.c'; then $(CYGPATH_W) 'src/ags/X/ags_editor.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_editor.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_editor.Tpo $(DEPDIR)/gsequencer-ags_editor.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_editor.c' object='gsequencer-ags_editor.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_editor.obj `if test -f 'src/ags/X/ags_editor.c'; then $(CYGPATH_W) 'src/ags/X/ags_editor.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_editor.c'; fi` gsequencer-ags_editor_callbacks.o: src/ags/X/ags_editor_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_editor_callbacks.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_editor_callbacks.Tpo -c -o gsequencer-ags_editor_callbacks.o `test -f 'src/ags/X/ags_editor_callbacks.c' || echo '$(srcdir)/'`src/ags/X/ags_editor_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_editor_callbacks.Tpo $(DEPDIR)/gsequencer-ags_editor_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_editor_callbacks.c' object='gsequencer-ags_editor_callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_editor_callbacks.o `test -f 'src/ags/X/ags_editor_callbacks.c' || echo '$(srcdir)/'`src/ags/X/ags_editor_callbacks.c gsequencer-ags_editor_callbacks.obj: src/ags/X/ags_editor_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_editor_callbacks.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_editor_callbacks.Tpo -c -o gsequencer-ags_editor_callbacks.obj `if test -f 'src/ags/X/ags_editor_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/ags_editor_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_editor_callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_editor_callbacks.Tpo $(DEPDIR)/gsequencer-ags_editor_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_editor_callbacks.c' object='gsequencer-ags_editor_callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_editor_callbacks.obj `if test -f 'src/ags/X/ags_editor_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/ags_editor_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_editor_callbacks.c'; fi` gsequencer-ags_export_window.o: src/ags/X/ags_export_window.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_export_window.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_export_window.Tpo -c -o gsequencer-ags_export_window.o `test -f 'src/ags/X/ags_export_window.c' || echo '$(srcdir)/'`src/ags/X/ags_export_window.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_export_window.Tpo $(DEPDIR)/gsequencer-ags_export_window.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_export_window.c' object='gsequencer-ags_export_window.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_export_window.o `test -f 'src/ags/X/ags_export_window.c' || echo '$(srcdir)/'`src/ags/X/ags_export_window.c gsequencer-ags_export_window.obj: src/ags/X/ags_export_window.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_export_window.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_export_window.Tpo -c -o gsequencer-ags_export_window.obj `if test -f 'src/ags/X/ags_export_window.c'; then $(CYGPATH_W) 'src/ags/X/ags_export_window.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_export_window.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_export_window.Tpo $(DEPDIR)/gsequencer-ags_export_window.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_export_window.c' object='gsequencer-ags_export_window.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_export_window.obj `if test -f 'src/ags/X/ags_export_window.c'; then $(CYGPATH_W) 'src/ags/X/ags_export_window.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_export_window.c'; fi` gsequencer-ags_export_window_callbacks.o: src/ags/X/ags_export_window_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_export_window_callbacks.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_export_window_callbacks.Tpo -c -o gsequencer-ags_export_window_callbacks.o `test -f 'src/ags/X/ags_export_window_callbacks.c' || echo '$(srcdir)/'`src/ags/X/ags_export_window_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_export_window_callbacks.Tpo $(DEPDIR)/gsequencer-ags_export_window_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_export_window_callbacks.c' object='gsequencer-ags_export_window_callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_export_window_callbacks.o `test -f 'src/ags/X/ags_export_window_callbacks.c' || echo '$(srcdir)/'`src/ags/X/ags_export_window_callbacks.c gsequencer-ags_export_window_callbacks.obj: src/ags/X/ags_export_window_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_export_window_callbacks.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_export_window_callbacks.Tpo -c -o gsequencer-ags_export_window_callbacks.obj `if test -f 'src/ags/X/ags_export_window_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/ags_export_window_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_export_window_callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_export_window_callbacks.Tpo $(DEPDIR)/gsequencer-ags_export_window_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_export_window_callbacks.c' object='gsequencer-ags_export_window_callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_export_window_callbacks.obj `if test -f 'src/ags/X/ags_export_window_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/ags_export_window_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_export_window_callbacks.c'; fi` gsequencer-ags_generic_preferences.o: src/ags/X/ags_generic_preferences.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_generic_preferences.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_generic_preferences.Tpo -c -o gsequencer-ags_generic_preferences.o `test -f 'src/ags/X/ags_generic_preferences.c' || echo '$(srcdir)/'`src/ags/X/ags_generic_preferences.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_generic_preferences.Tpo $(DEPDIR)/gsequencer-ags_generic_preferences.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_generic_preferences.c' object='gsequencer-ags_generic_preferences.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_generic_preferences.o `test -f 'src/ags/X/ags_generic_preferences.c' || echo '$(srcdir)/'`src/ags/X/ags_generic_preferences.c gsequencer-ags_generic_preferences.obj: src/ags/X/ags_generic_preferences.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_generic_preferences.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_generic_preferences.Tpo -c -o gsequencer-ags_generic_preferences.obj `if test -f 'src/ags/X/ags_generic_preferences.c'; then $(CYGPATH_W) 'src/ags/X/ags_generic_preferences.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_generic_preferences.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_generic_preferences.Tpo $(DEPDIR)/gsequencer-ags_generic_preferences.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_generic_preferences.c' object='gsequencer-ags_generic_preferences.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_generic_preferences.obj `if test -f 'src/ags/X/ags_generic_preferences.c'; then $(CYGPATH_W) 'src/ags/X/ags_generic_preferences.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_generic_preferences.c'; fi` gsequencer-ags_generic_preferences_callbacks.o: src/ags/X/ags_generic_preferences_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_generic_preferences_callbacks.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_generic_preferences_callbacks.Tpo -c -o gsequencer-ags_generic_preferences_callbacks.o `test -f 'src/ags/X/ags_generic_preferences_callbacks.c' || echo '$(srcdir)/'`src/ags/X/ags_generic_preferences_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_generic_preferences_callbacks.Tpo $(DEPDIR)/gsequencer-ags_generic_preferences_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_generic_preferences_callbacks.c' object='gsequencer-ags_generic_preferences_callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_generic_preferences_callbacks.o `test -f 'src/ags/X/ags_generic_preferences_callbacks.c' || echo '$(srcdir)/'`src/ags/X/ags_generic_preferences_callbacks.c gsequencer-ags_generic_preferences_callbacks.obj: src/ags/X/ags_generic_preferences_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_generic_preferences_callbacks.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_generic_preferences_callbacks.Tpo -c -o gsequencer-ags_generic_preferences_callbacks.obj `if test -f 'src/ags/X/ags_generic_preferences_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/ags_generic_preferences_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_generic_preferences_callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_generic_preferences_callbacks.Tpo $(DEPDIR)/gsequencer-ags_generic_preferences_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_generic_preferences_callbacks.c' object='gsequencer-ags_generic_preferences_callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_generic_preferences_callbacks.obj `if test -f 'src/ags/X/ags_generic_preferences_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/ags_generic_preferences_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_generic_preferences_callbacks.c'; fi` gsequencer-ags_ladspa_browser.o: src/ags/X/ags_ladspa_browser.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_ladspa_browser.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_ladspa_browser.Tpo -c -o gsequencer-ags_ladspa_browser.o `test -f 'src/ags/X/ags_ladspa_browser.c' || echo '$(srcdir)/'`src/ags/X/ags_ladspa_browser.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_ladspa_browser.Tpo $(DEPDIR)/gsequencer-ags_ladspa_browser.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_ladspa_browser.c' object='gsequencer-ags_ladspa_browser.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_ladspa_browser.o `test -f 'src/ags/X/ags_ladspa_browser.c' || echo '$(srcdir)/'`src/ags/X/ags_ladspa_browser.c gsequencer-ags_ladspa_browser.obj: src/ags/X/ags_ladspa_browser.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_ladspa_browser.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_ladspa_browser.Tpo -c -o gsequencer-ags_ladspa_browser.obj `if test -f 'src/ags/X/ags_ladspa_browser.c'; then $(CYGPATH_W) 'src/ags/X/ags_ladspa_browser.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_ladspa_browser.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_ladspa_browser.Tpo $(DEPDIR)/gsequencer-ags_ladspa_browser.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_ladspa_browser.c' object='gsequencer-ags_ladspa_browser.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_ladspa_browser.obj `if test -f 'src/ags/X/ags_ladspa_browser.c'; then $(CYGPATH_W) 'src/ags/X/ags_ladspa_browser.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_ladspa_browser.c'; fi` gsequencer-ags_ladspa_browser_callbacks.o: src/ags/X/ags_ladspa_browser_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_ladspa_browser_callbacks.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_ladspa_browser_callbacks.Tpo -c -o gsequencer-ags_ladspa_browser_callbacks.o `test -f 'src/ags/X/ags_ladspa_browser_callbacks.c' || echo '$(srcdir)/'`src/ags/X/ags_ladspa_browser_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_ladspa_browser_callbacks.Tpo $(DEPDIR)/gsequencer-ags_ladspa_browser_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_ladspa_browser_callbacks.c' object='gsequencer-ags_ladspa_browser_callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_ladspa_browser_callbacks.o `test -f 'src/ags/X/ags_ladspa_browser_callbacks.c' || echo '$(srcdir)/'`src/ags/X/ags_ladspa_browser_callbacks.c gsequencer-ags_ladspa_browser_callbacks.obj: src/ags/X/ags_ladspa_browser_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_ladspa_browser_callbacks.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_ladspa_browser_callbacks.Tpo -c -o gsequencer-ags_ladspa_browser_callbacks.obj `if test -f 'src/ags/X/ags_ladspa_browser_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/ags_ladspa_browser_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_ladspa_browser_callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_ladspa_browser_callbacks.Tpo $(DEPDIR)/gsequencer-ags_ladspa_browser_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_ladspa_browser_callbacks.c' object='gsequencer-ags_ladspa_browser_callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_ladspa_browser_callbacks.obj `if test -f 'src/ags/X/ags_ladspa_browser_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/ags_ladspa_browser_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_ladspa_browser_callbacks.c'; fi` gsequencer-ags_line.o: src/ags/X/ags_line.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_line.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_line.Tpo -c -o gsequencer-ags_line.o `test -f 'src/ags/X/ags_line.c' || echo '$(srcdir)/'`src/ags/X/ags_line.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_line.Tpo $(DEPDIR)/gsequencer-ags_line.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_line.c' object='gsequencer-ags_line.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_line.o `test -f 'src/ags/X/ags_line.c' || echo '$(srcdir)/'`src/ags/X/ags_line.c gsequencer-ags_line.obj: src/ags/X/ags_line.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_line.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_line.Tpo -c -o gsequencer-ags_line.obj `if test -f 'src/ags/X/ags_line.c'; then $(CYGPATH_W) 'src/ags/X/ags_line.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_line.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_line.Tpo $(DEPDIR)/gsequencer-ags_line.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_line.c' object='gsequencer-ags_line.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_line.obj `if test -f 'src/ags/X/ags_line.c'; then $(CYGPATH_W) 'src/ags/X/ags_line.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_line.c'; fi` gsequencer-ags_line_callbacks.o: src/ags/X/ags_line_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_line_callbacks.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_line_callbacks.Tpo -c -o gsequencer-ags_line_callbacks.o `test -f 'src/ags/X/ags_line_callbacks.c' || echo '$(srcdir)/'`src/ags/X/ags_line_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_line_callbacks.Tpo $(DEPDIR)/gsequencer-ags_line_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_line_callbacks.c' object='gsequencer-ags_line_callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_line_callbacks.o `test -f 'src/ags/X/ags_line_callbacks.c' || echo '$(srcdir)/'`src/ags/X/ags_line_callbacks.c gsequencer-ags_line_callbacks.obj: src/ags/X/ags_line_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_line_callbacks.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_line_callbacks.Tpo -c -o gsequencer-ags_line_callbacks.obj `if test -f 'src/ags/X/ags_line_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/ags_line_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_line_callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_line_callbacks.Tpo $(DEPDIR)/gsequencer-ags_line_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_line_callbacks.c' object='gsequencer-ags_line_callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_line_callbacks.obj `if test -f 'src/ags/X/ags_line_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/ags_line_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_line_callbacks.c'; fi` gsequencer-ags_line_editor.o: src/ags/X/ags_line_editor.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_line_editor.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_line_editor.Tpo -c -o gsequencer-ags_line_editor.o `test -f 'src/ags/X/ags_line_editor.c' || echo '$(srcdir)/'`src/ags/X/ags_line_editor.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_line_editor.Tpo $(DEPDIR)/gsequencer-ags_line_editor.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_line_editor.c' object='gsequencer-ags_line_editor.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_line_editor.o `test -f 'src/ags/X/ags_line_editor.c' || echo '$(srcdir)/'`src/ags/X/ags_line_editor.c gsequencer-ags_line_editor.obj: src/ags/X/ags_line_editor.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_line_editor.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_line_editor.Tpo -c -o gsequencer-ags_line_editor.obj `if test -f 'src/ags/X/ags_line_editor.c'; then $(CYGPATH_W) 'src/ags/X/ags_line_editor.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_line_editor.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_line_editor.Tpo $(DEPDIR)/gsequencer-ags_line_editor.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_line_editor.c' object='gsequencer-ags_line_editor.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_line_editor.obj `if test -f 'src/ags/X/ags_line_editor.c'; then $(CYGPATH_W) 'src/ags/X/ags_line_editor.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_line_editor.c'; fi` gsequencer-ags_line_editor_callbacks.o: src/ags/X/ags_line_editor_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_line_editor_callbacks.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_line_editor_callbacks.Tpo -c -o gsequencer-ags_line_editor_callbacks.o `test -f 'src/ags/X/ags_line_editor_callbacks.c' || echo '$(srcdir)/'`src/ags/X/ags_line_editor_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_line_editor_callbacks.Tpo $(DEPDIR)/gsequencer-ags_line_editor_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_line_editor_callbacks.c' object='gsequencer-ags_line_editor_callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_line_editor_callbacks.o `test -f 'src/ags/X/ags_line_editor_callbacks.c' || echo '$(srcdir)/'`src/ags/X/ags_line_editor_callbacks.c gsequencer-ags_line_editor_callbacks.obj: src/ags/X/ags_line_editor_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_line_editor_callbacks.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_line_editor_callbacks.Tpo -c -o gsequencer-ags_line_editor_callbacks.obj `if test -f 'src/ags/X/ags_line_editor_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/ags_line_editor_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_line_editor_callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_line_editor_callbacks.Tpo $(DEPDIR)/gsequencer-ags_line_editor_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_line_editor_callbacks.c' object='gsequencer-ags_line_editor_callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_line_editor_callbacks.obj `if test -f 'src/ags/X/ags_line_editor_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/ags_line_editor_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_line_editor_callbacks.c'; fi` gsequencer-ags_line_member.o: src/ags/X/ags_line_member.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_line_member.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_line_member.Tpo -c -o gsequencer-ags_line_member.o `test -f 'src/ags/X/ags_line_member.c' || echo '$(srcdir)/'`src/ags/X/ags_line_member.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_line_member.Tpo $(DEPDIR)/gsequencer-ags_line_member.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_line_member.c' object='gsequencer-ags_line_member.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_line_member.o `test -f 'src/ags/X/ags_line_member.c' || echo '$(srcdir)/'`src/ags/X/ags_line_member.c gsequencer-ags_line_member.obj: src/ags/X/ags_line_member.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_line_member.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_line_member.Tpo -c -o gsequencer-ags_line_member.obj `if test -f 'src/ags/X/ags_line_member.c'; then $(CYGPATH_W) 'src/ags/X/ags_line_member.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_line_member.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_line_member.Tpo $(DEPDIR)/gsequencer-ags_line_member.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_line_member.c' object='gsequencer-ags_line_member.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_line_member.obj `if test -f 'src/ags/X/ags_line_member.c'; then $(CYGPATH_W) 'src/ags/X/ags_line_member.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_line_member.c'; fi` gsequencer-ags_line_member_callbacks.o: src/ags/X/ags_line_member_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_line_member_callbacks.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_line_member_callbacks.Tpo -c -o gsequencer-ags_line_member_callbacks.o `test -f 'src/ags/X/ags_line_member_callbacks.c' || echo '$(srcdir)/'`src/ags/X/ags_line_member_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_line_member_callbacks.Tpo $(DEPDIR)/gsequencer-ags_line_member_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_line_member_callbacks.c' object='gsequencer-ags_line_member_callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_line_member_callbacks.o `test -f 'src/ags/X/ags_line_member_callbacks.c' || echo '$(srcdir)/'`src/ags/X/ags_line_member_callbacks.c gsequencer-ags_line_member_callbacks.obj: src/ags/X/ags_line_member_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_line_member_callbacks.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_line_member_callbacks.Tpo -c -o gsequencer-ags_line_member_callbacks.obj `if test -f 'src/ags/X/ags_line_member_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/ags_line_member_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_line_member_callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_line_member_callbacks.Tpo $(DEPDIR)/gsequencer-ags_line_member_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_line_member_callbacks.c' object='gsequencer-ags_line_member_callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_line_member_callbacks.obj `if test -f 'src/ags/X/ags_line_member_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/ags_line_member_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_line_member_callbacks.c'; fi` gsequencer-ags_line_member_editor.o: src/ags/X/ags_line_member_editor.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_line_member_editor.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_line_member_editor.Tpo -c -o gsequencer-ags_line_member_editor.o `test -f 'src/ags/X/ags_line_member_editor.c' || echo '$(srcdir)/'`src/ags/X/ags_line_member_editor.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_line_member_editor.Tpo $(DEPDIR)/gsequencer-ags_line_member_editor.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_line_member_editor.c' object='gsequencer-ags_line_member_editor.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_line_member_editor.o `test -f 'src/ags/X/ags_line_member_editor.c' || echo '$(srcdir)/'`src/ags/X/ags_line_member_editor.c gsequencer-ags_line_member_editor.obj: src/ags/X/ags_line_member_editor.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_line_member_editor.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_line_member_editor.Tpo -c -o gsequencer-ags_line_member_editor.obj `if test -f 'src/ags/X/ags_line_member_editor.c'; then $(CYGPATH_W) 'src/ags/X/ags_line_member_editor.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_line_member_editor.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_line_member_editor.Tpo $(DEPDIR)/gsequencer-ags_line_member_editor.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_line_member_editor.c' object='gsequencer-ags_line_member_editor.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_line_member_editor.obj `if test -f 'src/ags/X/ags_line_member_editor.c'; then $(CYGPATH_W) 'src/ags/X/ags_line_member_editor.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_line_member_editor.c'; fi` gsequencer-ags_line_member_editor_callbacks.o: src/ags/X/ags_line_member_editor_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_line_member_editor_callbacks.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_line_member_editor_callbacks.Tpo -c -o gsequencer-ags_line_member_editor_callbacks.o `test -f 'src/ags/X/ags_line_member_editor_callbacks.c' || echo '$(srcdir)/'`src/ags/X/ags_line_member_editor_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_line_member_editor_callbacks.Tpo $(DEPDIR)/gsequencer-ags_line_member_editor_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_line_member_editor_callbacks.c' object='gsequencer-ags_line_member_editor_callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_line_member_editor_callbacks.o `test -f 'src/ags/X/ags_line_member_editor_callbacks.c' || echo '$(srcdir)/'`src/ags/X/ags_line_member_editor_callbacks.c gsequencer-ags_line_member_editor_callbacks.obj: src/ags/X/ags_line_member_editor_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_line_member_editor_callbacks.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_line_member_editor_callbacks.Tpo -c -o gsequencer-ags_line_member_editor_callbacks.obj `if test -f 'src/ags/X/ags_line_member_editor_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/ags_line_member_editor_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_line_member_editor_callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_line_member_editor_callbacks.Tpo $(DEPDIR)/gsequencer-ags_line_member_editor_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_line_member_editor_callbacks.c' object='gsequencer-ags_line_member_editor_callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_line_member_editor_callbacks.obj `if test -f 'src/ags/X/ags_line_member_editor_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/ags_line_member_editor_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_line_member_editor_callbacks.c'; fi` gsequencer-ags_link_collection_editor.o: src/ags/X/ags_link_collection_editor.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_link_collection_editor.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_link_collection_editor.Tpo -c -o gsequencer-ags_link_collection_editor.o `test -f 'src/ags/X/ags_link_collection_editor.c' || echo '$(srcdir)/'`src/ags/X/ags_link_collection_editor.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_link_collection_editor.Tpo $(DEPDIR)/gsequencer-ags_link_collection_editor.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_link_collection_editor.c' object='gsequencer-ags_link_collection_editor.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_link_collection_editor.o `test -f 'src/ags/X/ags_link_collection_editor.c' || echo '$(srcdir)/'`src/ags/X/ags_link_collection_editor.c gsequencer-ags_link_collection_editor.obj: src/ags/X/ags_link_collection_editor.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_link_collection_editor.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_link_collection_editor.Tpo -c -o gsequencer-ags_link_collection_editor.obj `if test -f 'src/ags/X/ags_link_collection_editor.c'; then $(CYGPATH_W) 'src/ags/X/ags_link_collection_editor.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_link_collection_editor.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_link_collection_editor.Tpo $(DEPDIR)/gsequencer-ags_link_collection_editor.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_link_collection_editor.c' object='gsequencer-ags_link_collection_editor.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_link_collection_editor.obj `if test -f 'src/ags/X/ags_link_collection_editor.c'; then $(CYGPATH_W) 'src/ags/X/ags_link_collection_editor.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_link_collection_editor.c'; fi` gsequencer-ags_link_collection_editor_callbacks.o: src/ags/X/ags_link_collection_editor_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_link_collection_editor_callbacks.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_link_collection_editor_callbacks.Tpo -c -o gsequencer-ags_link_collection_editor_callbacks.o `test -f 'src/ags/X/ags_link_collection_editor_callbacks.c' || echo '$(srcdir)/'`src/ags/X/ags_link_collection_editor_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_link_collection_editor_callbacks.Tpo $(DEPDIR)/gsequencer-ags_link_collection_editor_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_link_collection_editor_callbacks.c' object='gsequencer-ags_link_collection_editor_callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_link_collection_editor_callbacks.o `test -f 'src/ags/X/ags_link_collection_editor_callbacks.c' || echo '$(srcdir)/'`src/ags/X/ags_link_collection_editor_callbacks.c gsequencer-ags_link_collection_editor_callbacks.obj: src/ags/X/ags_link_collection_editor_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_link_collection_editor_callbacks.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_link_collection_editor_callbacks.Tpo -c -o gsequencer-ags_link_collection_editor_callbacks.obj `if test -f 'src/ags/X/ags_link_collection_editor_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/ags_link_collection_editor_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_link_collection_editor_callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_link_collection_editor_callbacks.Tpo $(DEPDIR)/gsequencer-ags_link_collection_editor_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_link_collection_editor_callbacks.c' object='gsequencer-ags_link_collection_editor_callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_link_collection_editor_callbacks.obj `if test -f 'src/ags/X/ags_link_collection_editor_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/ags_link_collection_editor_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_link_collection_editor_callbacks.c'; fi` gsequencer-ags_link_editor.o: src/ags/X/ags_link_editor.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_link_editor.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_link_editor.Tpo -c -o gsequencer-ags_link_editor.o `test -f 'src/ags/X/ags_link_editor.c' || echo '$(srcdir)/'`src/ags/X/ags_link_editor.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_link_editor.Tpo $(DEPDIR)/gsequencer-ags_link_editor.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_link_editor.c' object='gsequencer-ags_link_editor.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_link_editor.o `test -f 'src/ags/X/ags_link_editor.c' || echo '$(srcdir)/'`src/ags/X/ags_link_editor.c gsequencer-ags_link_editor.obj: src/ags/X/ags_link_editor.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_link_editor.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_link_editor.Tpo -c -o gsequencer-ags_link_editor.obj `if test -f 'src/ags/X/ags_link_editor.c'; then $(CYGPATH_W) 'src/ags/X/ags_link_editor.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_link_editor.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_link_editor.Tpo $(DEPDIR)/gsequencer-ags_link_editor.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_link_editor.c' object='gsequencer-ags_link_editor.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_link_editor.obj `if test -f 'src/ags/X/ags_link_editor.c'; then $(CYGPATH_W) 'src/ags/X/ags_link_editor.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_link_editor.c'; fi` gsequencer-ags_link_editor_callbacks.o: src/ags/X/ags_link_editor_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_link_editor_callbacks.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_link_editor_callbacks.Tpo -c -o gsequencer-ags_link_editor_callbacks.o `test -f 'src/ags/X/ags_link_editor_callbacks.c' || echo '$(srcdir)/'`src/ags/X/ags_link_editor_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_link_editor_callbacks.Tpo $(DEPDIR)/gsequencer-ags_link_editor_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_link_editor_callbacks.c' object='gsequencer-ags_link_editor_callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_link_editor_callbacks.o `test -f 'src/ags/X/ags_link_editor_callbacks.c' || echo '$(srcdir)/'`src/ags/X/ags_link_editor_callbacks.c gsequencer-ags_link_editor_callbacks.obj: src/ags/X/ags_link_editor_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_link_editor_callbacks.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_link_editor_callbacks.Tpo -c -o gsequencer-ags_link_editor_callbacks.obj `if test -f 'src/ags/X/ags_link_editor_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/ags_link_editor_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_link_editor_callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_link_editor_callbacks.Tpo $(DEPDIR)/gsequencer-ags_link_editor_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_link_editor_callbacks.c' object='gsequencer-ags_link_editor_callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_link_editor_callbacks.obj `if test -f 'src/ags/X/ags_link_editor_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/ags_link_editor_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_link_editor_callbacks.c'; fi` gsequencer-ags_listing_editor.o: src/ags/X/ags_listing_editor.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_listing_editor.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_listing_editor.Tpo -c -o gsequencer-ags_listing_editor.o `test -f 'src/ags/X/ags_listing_editor.c' || echo '$(srcdir)/'`src/ags/X/ags_listing_editor.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_listing_editor.Tpo $(DEPDIR)/gsequencer-ags_listing_editor.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_listing_editor.c' object='gsequencer-ags_listing_editor.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_listing_editor.o `test -f 'src/ags/X/ags_listing_editor.c' || echo '$(srcdir)/'`src/ags/X/ags_listing_editor.c gsequencer-ags_listing_editor.obj: src/ags/X/ags_listing_editor.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_listing_editor.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_listing_editor.Tpo -c -o gsequencer-ags_listing_editor.obj `if test -f 'src/ags/X/ags_listing_editor.c'; then $(CYGPATH_W) 'src/ags/X/ags_listing_editor.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_listing_editor.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_listing_editor.Tpo $(DEPDIR)/gsequencer-ags_listing_editor.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_listing_editor.c' object='gsequencer-ags_listing_editor.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_listing_editor.obj `if test -f 'src/ags/X/ags_listing_editor.c'; then $(CYGPATH_W) 'src/ags/X/ags_listing_editor.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_listing_editor.c'; fi` gsequencer-ags_listing_editor_callbacks.o: src/ags/X/ags_listing_editor_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_listing_editor_callbacks.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_listing_editor_callbacks.Tpo -c -o gsequencer-ags_listing_editor_callbacks.o `test -f 'src/ags/X/ags_listing_editor_callbacks.c' || echo '$(srcdir)/'`src/ags/X/ags_listing_editor_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_listing_editor_callbacks.Tpo $(DEPDIR)/gsequencer-ags_listing_editor_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_listing_editor_callbacks.c' object='gsequencer-ags_listing_editor_callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_listing_editor_callbacks.o `test -f 'src/ags/X/ags_listing_editor_callbacks.c' || echo '$(srcdir)/'`src/ags/X/ags_listing_editor_callbacks.c gsequencer-ags_listing_editor_callbacks.obj: src/ags/X/ags_listing_editor_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_listing_editor_callbacks.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_listing_editor_callbacks.Tpo -c -o gsequencer-ags_listing_editor_callbacks.obj `if test -f 'src/ags/X/ags_listing_editor_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/ags_listing_editor_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_listing_editor_callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_listing_editor_callbacks.Tpo $(DEPDIR)/gsequencer-ags_listing_editor_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_listing_editor_callbacks.c' object='gsequencer-ags_listing_editor_callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_listing_editor_callbacks.obj `if test -f 'src/ags/X/ags_listing_editor_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/ags_listing_editor_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_listing_editor_callbacks.c'; fi` gsequencer-ags_machine.o: src/ags/X/ags_machine.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_machine.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_machine.Tpo -c -o gsequencer-ags_machine.o `test -f 'src/ags/X/ags_machine.c' || echo '$(srcdir)/'`src/ags/X/ags_machine.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_machine.Tpo $(DEPDIR)/gsequencer-ags_machine.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_machine.c' object='gsequencer-ags_machine.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_machine.o `test -f 'src/ags/X/ags_machine.c' || echo '$(srcdir)/'`src/ags/X/ags_machine.c gsequencer-ags_machine.obj: src/ags/X/ags_machine.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_machine.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_machine.Tpo -c -o gsequencer-ags_machine.obj `if test -f 'src/ags/X/ags_machine.c'; then $(CYGPATH_W) 'src/ags/X/ags_machine.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_machine.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_machine.Tpo $(DEPDIR)/gsequencer-ags_machine.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_machine.c' object='gsequencer-ags_machine.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_machine.obj `if test -f 'src/ags/X/ags_machine.c'; then $(CYGPATH_W) 'src/ags/X/ags_machine.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_machine.c'; fi` gsequencer-ags_machine_callbacks.o: src/ags/X/ags_machine_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_machine_callbacks.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_machine_callbacks.Tpo -c -o gsequencer-ags_machine_callbacks.o `test -f 'src/ags/X/ags_machine_callbacks.c' || echo '$(srcdir)/'`src/ags/X/ags_machine_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_machine_callbacks.Tpo $(DEPDIR)/gsequencer-ags_machine_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_machine_callbacks.c' object='gsequencer-ags_machine_callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_machine_callbacks.o `test -f 'src/ags/X/ags_machine_callbacks.c' || echo '$(srcdir)/'`src/ags/X/ags_machine_callbacks.c gsequencer-ags_machine_callbacks.obj: src/ags/X/ags_machine_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_machine_callbacks.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_machine_callbacks.Tpo -c -o gsequencer-ags_machine_callbacks.obj `if test -f 'src/ags/X/ags_machine_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/ags_machine_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_machine_callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_machine_callbacks.Tpo $(DEPDIR)/gsequencer-ags_machine_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_machine_callbacks.c' object='gsequencer-ags_machine_callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_machine_callbacks.obj `if test -f 'src/ags/X/ags_machine_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/ags_machine_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_machine_callbacks.c'; fi` gsequencer-ags_machine_editor.o: src/ags/X/ags_machine_editor.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_machine_editor.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_machine_editor.Tpo -c -o gsequencer-ags_machine_editor.o `test -f 'src/ags/X/ags_machine_editor.c' || echo '$(srcdir)/'`src/ags/X/ags_machine_editor.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_machine_editor.Tpo $(DEPDIR)/gsequencer-ags_machine_editor.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_machine_editor.c' object='gsequencer-ags_machine_editor.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_machine_editor.o `test -f 'src/ags/X/ags_machine_editor.c' || echo '$(srcdir)/'`src/ags/X/ags_machine_editor.c gsequencer-ags_machine_editor.obj: src/ags/X/ags_machine_editor.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_machine_editor.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_machine_editor.Tpo -c -o gsequencer-ags_machine_editor.obj `if test -f 'src/ags/X/ags_machine_editor.c'; then $(CYGPATH_W) 'src/ags/X/ags_machine_editor.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_machine_editor.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_machine_editor.Tpo $(DEPDIR)/gsequencer-ags_machine_editor.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_machine_editor.c' object='gsequencer-ags_machine_editor.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_machine_editor.obj `if test -f 'src/ags/X/ags_machine_editor.c'; then $(CYGPATH_W) 'src/ags/X/ags_machine_editor.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_machine_editor.c'; fi` gsequencer-ags_machine_editor_callbacks.o: src/ags/X/ags_machine_editor_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_machine_editor_callbacks.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_machine_editor_callbacks.Tpo -c -o gsequencer-ags_machine_editor_callbacks.o `test -f 'src/ags/X/ags_machine_editor_callbacks.c' || echo '$(srcdir)/'`src/ags/X/ags_machine_editor_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_machine_editor_callbacks.Tpo $(DEPDIR)/gsequencer-ags_machine_editor_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_machine_editor_callbacks.c' object='gsequencer-ags_machine_editor_callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_machine_editor_callbacks.o `test -f 'src/ags/X/ags_machine_editor_callbacks.c' || echo '$(srcdir)/'`src/ags/X/ags_machine_editor_callbacks.c gsequencer-ags_machine_editor_callbacks.obj: src/ags/X/ags_machine_editor_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_machine_editor_callbacks.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_machine_editor_callbacks.Tpo -c -o gsequencer-ags_machine_editor_callbacks.obj `if test -f 'src/ags/X/ags_machine_editor_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/ags_machine_editor_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_machine_editor_callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_machine_editor_callbacks.Tpo $(DEPDIR)/gsequencer-ags_machine_editor_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_machine_editor_callbacks.c' object='gsequencer-ags_machine_editor_callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_machine_editor_callbacks.obj `if test -f 'src/ags/X/ags_machine_editor_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/ags_machine_editor_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_machine_editor_callbacks.c'; fi` gsequencer-ags_menu_bar.o: src/ags/X/ags_menu_bar.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_menu_bar.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_menu_bar.Tpo -c -o gsequencer-ags_menu_bar.o `test -f 'src/ags/X/ags_menu_bar.c' || echo '$(srcdir)/'`src/ags/X/ags_menu_bar.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_menu_bar.Tpo $(DEPDIR)/gsequencer-ags_menu_bar.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_menu_bar.c' object='gsequencer-ags_menu_bar.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_menu_bar.o `test -f 'src/ags/X/ags_menu_bar.c' || echo '$(srcdir)/'`src/ags/X/ags_menu_bar.c gsequencer-ags_menu_bar.obj: src/ags/X/ags_menu_bar.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_menu_bar.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_menu_bar.Tpo -c -o gsequencer-ags_menu_bar.obj `if test -f 'src/ags/X/ags_menu_bar.c'; then $(CYGPATH_W) 'src/ags/X/ags_menu_bar.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_menu_bar.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_menu_bar.Tpo $(DEPDIR)/gsequencer-ags_menu_bar.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_menu_bar.c' object='gsequencer-ags_menu_bar.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_menu_bar.obj `if test -f 'src/ags/X/ags_menu_bar.c'; then $(CYGPATH_W) 'src/ags/X/ags_menu_bar.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_menu_bar.c'; fi` gsequencer-ags_menu_bar_callbacks.o: src/ags/X/ags_menu_bar_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_menu_bar_callbacks.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_menu_bar_callbacks.Tpo -c -o gsequencer-ags_menu_bar_callbacks.o `test -f 'src/ags/X/ags_menu_bar_callbacks.c' || echo '$(srcdir)/'`src/ags/X/ags_menu_bar_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_menu_bar_callbacks.Tpo $(DEPDIR)/gsequencer-ags_menu_bar_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_menu_bar_callbacks.c' object='gsequencer-ags_menu_bar_callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_menu_bar_callbacks.o `test -f 'src/ags/X/ags_menu_bar_callbacks.c' || echo '$(srcdir)/'`src/ags/X/ags_menu_bar_callbacks.c gsequencer-ags_menu_bar_callbacks.obj: src/ags/X/ags_menu_bar_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_menu_bar_callbacks.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_menu_bar_callbacks.Tpo -c -o gsequencer-ags_menu_bar_callbacks.obj `if test -f 'src/ags/X/ags_menu_bar_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/ags_menu_bar_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_menu_bar_callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_menu_bar_callbacks.Tpo $(DEPDIR)/gsequencer-ags_menu_bar_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_menu_bar_callbacks.c' object='gsequencer-ags_menu_bar_callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_menu_bar_callbacks.obj `if test -f 'src/ags/X/ags_menu_bar_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/ags_menu_bar_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_menu_bar_callbacks.c'; fi` gsequencer-ags_navigation.o: src/ags/X/ags_navigation.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_navigation.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_navigation.Tpo -c -o gsequencer-ags_navigation.o `test -f 'src/ags/X/ags_navigation.c' || echo '$(srcdir)/'`src/ags/X/ags_navigation.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_navigation.Tpo $(DEPDIR)/gsequencer-ags_navigation.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_navigation.c' object='gsequencer-ags_navigation.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_navigation.o `test -f 'src/ags/X/ags_navigation.c' || echo '$(srcdir)/'`src/ags/X/ags_navigation.c gsequencer-ags_navigation.obj: src/ags/X/ags_navigation.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_navigation.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_navigation.Tpo -c -o gsequencer-ags_navigation.obj `if test -f 'src/ags/X/ags_navigation.c'; then $(CYGPATH_W) 'src/ags/X/ags_navigation.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_navigation.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_navigation.Tpo $(DEPDIR)/gsequencer-ags_navigation.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_navigation.c' object='gsequencer-ags_navigation.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_navigation.obj `if test -f 'src/ags/X/ags_navigation.c'; then $(CYGPATH_W) 'src/ags/X/ags_navigation.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_navigation.c'; fi` gsequencer-ags_navigation_callbacks.o: src/ags/X/ags_navigation_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_navigation_callbacks.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_navigation_callbacks.Tpo -c -o gsequencer-ags_navigation_callbacks.o `test -f 'src/ags/X/ags_navigation_callbacks.c' || echo '$(srcdir)/'`src/ags/X/ags_navigation_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_navigation_callbacks.Tpo $(DEPDIR)/gsequencer-ags_navigation_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_navigation_callbacks.c' object='gsequencer-ags_navigation_callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_navigation_callbacks.o `test -f 'src/ags/X/ags_navigation_callbacks.c' || echo '$(srcdir)/'`src/ags/X/ags_navigation_callbacks.c gsequencer-ags_navigation_callbacks.obj: src/ags/X/ags_navigation_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_navigation_callbacks.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_navigation_callbacks.Tpo -c -o gsequencer-ags_navigation_callbacks.obj `if test -f 'src/ags/X/ags_navigation_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/ags_navigation_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_navigation_callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_navigation_callbacks.Tpo $(DEPDIR)/gsequencer-ags_navigation_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_navigation_callbacks.c' object='gsequencer-ags_navigation_callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_navigation_callbacks.obj `if test -f 'src/ags/X/ags_navigation_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/ags_navigation_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_navigation_callbacks.c'; fi` gsequencer-ags_pad.o: src/ags/X/ags_pad.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_pad.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_pad.Tpo -c -o gsequencer-ags_pad.o `test -f 'src/ags/X/ags_pad.c' || echo '$(srcdir)/'`src/ags/X/ags_pad.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_pad.Tpo $(DEPDIR)/gsequencer-ags_pad.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_pad.c' object='gsequencer-ags_pad.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_pad.o `test -f 'src/ags/X/ags_pad.c' || echo '$(srcdir)/'`src/ags/X/ags_pad.c gsequencer-ags_pad.obj: src/ags/X/ags_pad.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_pad.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_pad.Tpo -c -o gsequencer-ags_pad.obj `if test -f 'src/ags/X/ags_pad.c'; then $(CYGPATH_W) 'src/ags/X/ags_pad.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_pad.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_pad.Tpo $(DEPDIR)/gsequencer-ags_pad.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_pad.c' object='gsequencer-ags_pad.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_pad.obj `if test -f 'src/ags/X/ags_pad.c'; then $(CYGPATH_W) 'src/ags/X/ags_pad.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_pad.c'; fi` gsequencer-ags_pad_callbacks.o: src/ags/X/ags_pad_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_pad_callbacks.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_pad_callbacks.Tpo -c -o gsequencer-ags_pad_callbacks.o `test -f 'src/ags/X/ags_pad_callbacks.c' || echo '$(srcdir)/'`src/ags/X/ags_pad_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_pad_callbacks.Tpo $(DEPDIR)/gsequencer-ags_pad_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_pad_callbacks.c' object='gsequencer-ags_pad_callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_pad_callbacks.o `test -f 'src/ags/X/ags_pad_callbacks.c' || echo '$(srcdir)/'`src/ags/X/ags_pad_callbacks.c gsequencer-ags_pad_callbacks.obj: src/ags/X/ags_pad_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_pad_callbacks.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_pad_callbacks.Tpo -c -o gsequencer-ags_pad_callbacks.obj `if test -f 'src/ags/X/ags_pad_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/ags_pad_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_pad_callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_pad_callbacks.Tpo $(DEPDIR)/gsequencer-ags_pad_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_pad_callbacks.c' object='gsequencer-ags_pad_callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_pad_callbacks.obj `if test -f 'src/ags/X/ags_pad_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/ags_pad_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_pad_callbacks.c'; fi` gsequencer-ags_pad_editor.o: src/ags/X/ags_pad_editor.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_pad_editor.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_pad_editor.Tpo -c -o gsequencer-ags_pad_editor.o `test -f 'src/ags/X/ags_pad_editor.c' || echo '$(srcdir)/'`src/ags/X/ags_pad_editor.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_pad_editor.Tpo $(DEPDIR)/gsequencer-ags_pad_editor.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_pad_editor.c' object='gsequencer-ags_pad_editor.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_pad_editor.o `test -f 'src/ags/X/ags_pad_editor.c' || echo '$(srcdir)/'`src/ags/X/ags_pad_editor.c gsequencer-ags_pad_editor.obj: src/ags/X/ags_pad_editor.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_pad_editor.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_pad_editor.Tpo -c -o gsequencer-ags_pad_editor.obj `if test -f 'src/ags/X/ags_pad_editor.c'; then $(CYGPATH_W) 'src/ags/X/ags_pad_editor.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_pad_editor.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_pad_editor.Tpo $(DEPDIR)/gsequencer-ags_pad_editor.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_pad_editor.c' object='gsequencer-ags_pad_editor.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_pad_editor.obj `if test -f 'src/ags/X/ags_pad_editor.c'; then $(CYGPATH_W) 'src/ags/X/ags_pad_editor.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_pad_editor.c'; fi` gsequencer-ags_pad_editor_callbacks.o: src/ags/X/ags_pad_editor_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_pad_editor_callbacks.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_pad_editor_callbacks.Tpo -c -o gsequencer-ags_pad_editor_callbacks.o `test -f 'src/ags/X/ags_pad_editor_callbacks.c' || echo '$(srcdir)/'`src/ags/X/ags_pad_editor_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_pad_editor_callbacks.Tpo $(DEPDIR)/gsequencer-ags_pad_editor_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_pad_editor_callbacks.c' object='gsequencer-ags_pad_editor_callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_pad_editor_callbacks.o `test -f 'src/ags/X/ags_pad_editor_callbacks.c' || echo '$(srcdir)/'`src/ags/X/ags_pad_editor_callbacks.c gsequencer-ags_pad_editor_callbacks.obj: src/ags/X/ags_pad_editor_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_pad_editor_callbacks.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_pad_editor_callbacks.Tpo -c -o gsequencer-ags_pad_editor_callbacks.obj `if test -f 'src/ags/X/ags_pad_editor_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/ags_pad_editor_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_pad_editor_callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_pad_editor_callbacks.Tpo $(DEPDIR)/gsequencer-ags_pad_editor_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_pad_editor_callbacks.c' object='gsequencer-ags_pad_editor_callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_pad_editor_callbacks.obj `if test -f 'src/ags/X/ags_pad_editor_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/ags_pad_editor_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_pad_editor_callbacks.c'; fi` gsequencer-ags_performance_preferences.o: src/ags/X/ags_performance_preferences.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_performance_preferences.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_performance_preferences.Tpo -c -o gsequencer-ags_performance_preferences.o `test -f 'src/ags/X/ags_performance_preferences.c' || echo '$(srcdir)/'`src/ags/X/ags_performance_preferences.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_performance_preferences.Tpo $(DEPDIR)/gsequencer-ags_performance_preferences.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_performance_preferences.c' object='gsequencer-ags_performance_preferences.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_performance_preferences.o `test -f 'src/ags/X/ags_performance_preferences.c' || echo '$(srcdir)/'`src/ags/X/ags_performance_preferences.c gsequencer-ags_performance_preferences.obj: src/ags/X/ags_performance_preferences.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_performance_preferences.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_performance_preferences.Tpo -c -o gsequencer-ags_performance_preferences.obj `if test -f 'src/ags/X/ags_performance_preferences.c'; then $(CYGPATH_W) 'src/ags/X/ags_performance_preferences.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_performance_preferences.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_performance_preferences.Tpo $(DEPDIR)/gsequencer-ags_performance_preferences.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_performance_preferences.c' object='gsequencer-ags_performance_preferences.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_performance_preferences.obj `if test -f 'src/ags/X/ags_performance_preferences.c'; then $(CYGPATH_W) 'src/ags/X/ags_performance_preferences.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_performance_preferences.c'; fi` gsequencer-ags_performance_preferences_callbacks.o: src/ags/X/ags_performance_preferences_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_performance_preferences_callbacks.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_performance_preferences_callbacks.Tpo -c -o gsequencer-ags_performance_preferences_callbacks.o `test -f 'src/ags/X/ags_performance_preferences_callbacks.c' || echo '$(srcdir)/'`src/ags/X/ags_performance_preferences_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_performance_preferences_callbacks.Tpo $(DEPDIR)/gsequencer-ags_performance_preferences_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_performance_preferences_callbacks.c' object='gsequencer-ags_performance_preferences_callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_performance_preferences_callbacks.o `test -f 'src/ags/X/ags_performance_preferences_callbacks.c' || echo '$(srcdir)/'`src/ags/X/ags_performance_preferences_callbacks.c gsequencer-ags_performance_preferences_callbacks.obj: src/ags/X/ags_performance_preferences_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_performance_preferences_callbacks.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_performance_preferences_callbacks.Tpo -c -o gsequencer-ags_performance_preferences_callbacks.obj `if test -f 'src/ags/X/ags_performance_preferences_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/ags_performance_preferences_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_performance_preferences_callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_performance_preferences_callbacks.Tpo $(DEPDIR)/gsequencer-ags_performance_preferences_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_performance_preferences_callbacks.c' object='gsequencer-ags_performance_preferences_callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_performance_preferences_callbacks.obj `if test -f 'src/ags/X/ags_performance_preferences_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/ags_performance_preferences_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_performance_preferences_callbacks.c'; fi` gsequencer-ags_plugin_preferences.o: src/ags/X/ags_plugin_preferences.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_plugin_preferences.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_plugin_preferences.Tpo -c -o gsequencer-ags_plugin_preferences.o `test -f 'src/ags/X/ags_plugin_preferences.c' || echo '$(srcdir)/'`src/ags/X/ags_plugin_preferences.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_plugin_preferences.Tpo $(DEPDIR)/gsequencer-ags_plugin_preferences.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_plugin_preferences.c' object='gsequencer-ags_plugin_preferences.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_plugin_preferences.o `test -f 'src/ags/X/ags_plugin_preferences.c' || echo '$(srcdir)/'`src/ags/X/ags_plugin_preferences.c gsequencer-ags_plugin_preferences.obj: src/ags/X/ags_plugin_preferences.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_plugin_preferences.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_plugin_preferences.Tpo -c -o gsequencer-ags_plugin_preferences.obj `if test -f 'src/ags/X/ags_plugin_preferences.c'; then $(CYGPATH_W) 'src/ags/X/ags_plugin_preferences.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_plugin_preferences.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_plugin_preferences.Tpo $(DEPDIR)/gsequencer-ags_plugin_preferences.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_plugin_preferences.c' object='gsequencer-ags_plugin_preferences.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_plugin_preferences.obj `if test -f 'src/ags/X/ags_plugin_preferences.c'; then $(CYGPATH_W) 'src/ags/X/ags_plugin_preferences.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_plugin_preferences.c'; fi` gsequencer-ags_plugin_preferences_callbacks.o: src/ags/X/ags_plugin_preferences_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_plugin_preferences_callbacks.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_plugin_preferences_callbacks.Tpo -c -o gsequencer-ags_plugin_preferences_callbacks.o `test -f 'src/ags/X/ags_plugin_preferences_callbacks.c' || echo '$(srcdir)/'`src/ags/X/ags_plugin_preferences_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_plugin_preferences_callbacks.Tpo $(DEPDIR)/gsequencer-ags_plugin_preferences_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_plugin_preferences_callbacks.c' object='gsequencer-ags_plugin_preferences_callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_plugin_preferences_callbacks.o `test -f 'src/ags/X/ags_plugin_preferences_callbacks.c' || echo '$(srcdir)/'`src/ags/X/ags_plugin_preferences_callbacks.c gsequencer-ags_plugin_preferences_callbacks.obj: src/ags/X/ags_plugin_preferences_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_plugin_preferences_callbacks.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_plugin_preferences_callbacks.Tpo -c -o gsequencer-ags_plugin_preferences_callbacks.obj `if test -f 'src/ags/X/ags_plugin_preferences_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/ags_plugin_preferences_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_plugin_preferences_callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_plugin_preferences_callbacks.Tpo $(DEPDIR)/gsequencer-ags_plugin_preferences_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_plugin_preferences_callbacks.c' object='gsequencer-ags_plugin_preferences_callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_plugin_preferences_callbacks.obj `if test -f 'src/ags/X/ags_plugin_preferences_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/ags_plugin_preferences_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_plugin_preferences_callbacks.c'; fi` gsequencer-ags_preferences.o: src/ags/X/ags_preferences.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_preferences.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_preferences.Tpo -c -o gsequencer-ags_preferences.o `test -f 'src/ags/X/ags_preferences.c' || echo '$(srcdir)/'`src/ags/X/ags_preferences.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_preferences.Tpo $(DEPDIR)/gsequencer-ags_preferences.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_preferences.c' object='gsequencer-ags_preferences.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_preferences.o `test -f 'src/ags/X/ags_preferences.c' || echo '$(srcdir)/'`src/ags/X/ags_preferences.c gsequencer-ags_preferences.obj: src/ags/X/ags_preferences.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_preferences.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_preferences.Tpo -c -o gsequencer-ags_preferences.obj `if test -f 'src/ags/X/ags_preferences.c'; then $(CYGPATH_W) 'src/ags/X/ags_preferences.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_preferences.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_preferences.Tpo $(DEPDIR)/gsequencer-ags_preferences.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_preferences.c' object='gsequencer-ags_preferences.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_preferences.obj `if test -f 'src/ags/X/ags_preferences.c'; then $(CYGPATH_W) 'src/ags/X/ags_preferences.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_preferences.c'; fi` gsequencer-ags_preferences_callbacks.o: src/ags/X/ags_preferences_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_preferences_callbacks.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_preferences_callbacks.Tpo -c -o gsequencer-ags_preferences_callbacks.o `test -f 'src/ags/X/ags_preferences_callbacks.c' || echo '$(srcdir)/'`src/ags/X/ags_preferences_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_preferences_callbacks.Tpo $(DEPDIR)/gsequencer-ags_preferences_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_preferences_callbacks.c' object='gsequencer-ags_preferences_callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_preferences_callbacks.o `test -f 'src/ags/X/ags_preferences_callbacks.c' || echo '$(srcdir)/'`src/ags/X/ags_preferences_callbacks.c gsequencer-ags_preferences_callbacks.obj: src/ags/X/ags_preferences_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_preferences_callbacks.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_preferences_callbacks.Tpo -c -o gsequencer-ags_preferences_callbacks.obj `if test -f 'src/ags/X/ags_preferences_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/ags_preferences_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_preferences_callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_preferences_callbacks.Tpo $(DEPDIR)/gsequencer-ags_preferences_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_preferences_callbacks.c' object='gsequencer-ags_preferences_callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_preferences_callbacks.obj `if test -f 'src/ags/X/ags_preferences_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/ags_preferences_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_preferences_callbacks.c'; fi` gsequencer-ags_property_collection_editor.o: src/ags/X/ags_property_collection_editor.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_property_collection_editor.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_property_collection_editor.Tpo -c -o gsequencer-ags_property_collection_editor.o `test -f 'src/ags/X/ags_property_collection_editor.c' || echo '$(srcdir)/'`src/ags/X/ags_property_collection_editor.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_property_collection_editor.Tpo $(DEPDIR)/gsequencer-ags_property_collection_editor.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_property_collection_editor.c' object='gsequencer-ags_property_collection_editor.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_property_collection_editor.o `test -f 'src/ags/X/ags_property_collection_editor.c' || echo '$(srcdir)/'`src/ags/X/ags_property_collection_editor.c gsequencer-ags_property_collection_editor.obj: src/ags/X/ags_property_collection_editor.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_property_collection_editor.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_property_collection_editor.Tpo -c -o gsequencer-ags_property_collection_editor.obj `if test -f 'src/ags/X/ags_property_collection_editor.c'; then $(CYGPATH_W) 'src/ags/X/ags_property_collection_editor.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_property_collection_editor.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_property_collection_editor.Tpo $(DEPDIR)/gsequencer-ags_property_collection_editor.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_property_collection_editor.c' object='gsequencer-ags_property_collection_editor.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_property_collection_editor.obj `if test -f 'src/ags/X/ags_property_collection_editor.c'; then $(CYGPATH_W) 'src/ags/X/ags_property_collection_editor.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_property_collection_editor.c'; fi` gsequencer-ags_property_collection_editor_callbacks.o: src/ags/X/ags_property_collection_editor_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_property_collection_editor_callbacks.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_property_collection_editor_callbacks.Tpo -c -o gsequencer-ags_property_collection_editor_callbacks.o `test -f 'src/ags/X/ags_property_collection_editor_callbacks.c' || echo '$(srcdir)/'`src/ags/X/ags_property_collection_editor_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_property_collection_editor_callbacks.Tpo $(DEPDIR)/gsequencer-ags_property_collection_editor_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_property_collection_editor_callbacks.c' object='gsequencer-ags_property_collection_editor_callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_property_collection_editor_callbacks.o `test -f 'src/ags/X/ags_property_collection_editor_callbacks.c' || echo '$(srcdir)/'`src/ags/X/ags_property_collection_editor_callbacks.c gsequencer-ags_property_collection_editor_callbacks.obj: src/ags/X/ags_property_collection_editor_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_property_collection_editor_callbacks.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_property_collection_editor_callbacks.Tpo -c -o gsequencer-ags_property_collection_editor_callbacks.obj `if test -f 'src/ags/X/ags_property_collection_editor_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/ags_property_collection_editor_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_property_collection_editor_callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_property_collection_editor_callbacks.Tpo $(DEPDIR)/gsequencer-ags_property_collection_editor_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_property_collection_editor_callbacks.c' object='gsequencer-ags_property_collection_editor_callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_property_collection_editor_callbacks.obj `if test -f 'src/ags/X/ags_property_collection_editor_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/ags_property_collection_editor_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_property_collection_editor_callbacks.c'; fi` gsequencer-ags_property_editor.o: src/ags/X/ags_property_editor.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_property_editor.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_property_editor.Tpo -c -o gsequencer-ags_property_editor.o `test -f 'src/ags/X/ags_property_editor.c' || echo '$(srcdir)/'`src/ags/X/ags_property_editor.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_property_editor.Tpo $(DEPDIR)/gsequencer-ags_property_editor.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_property_editor.c' object='gsequencer-ags_property_editor.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_property_editor.o `test -f 'src/ags/X/ags_property_editor.c' || echo '$(srcdir)/'`src/ags/X/ags_property_editor.c gsequencer-ags_property_editor.obj: src/ags/X/ags_property_editor.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_property_editor.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_property_editor.Tpo -c -o gsequencer-ags_property_editor.obj `if test -f 'src/ags/X/ags_property_editor.c'; then $(CYGPATH_W) 'src/ags/X/ags_property_editor.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_property_editor.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_property_editor.Tpo $(DEPDIR)/gsequencer-ags_property_editor.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_property_editor.c' object='gsequencer-ags_property_editor.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_property_editor.obj `if test -f 'src/ags/X/ags_property_editor.c'; then $(CYGPATH_W) 'src/ags/X/ags_property_editor.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_property_editor.c'; fi` gsequencer-ags_property_editor_callbacks.o: src/ags/X/ags_property_editor_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_property_editor_callbacks.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_property_editor_callbacks.Tpo -c -o gsequencer-ags_property_editor_callbacks.o `test -f 'src/ags/X/ags_property_editor_callbacks.c' || echo '$(srcdir)/'`src/ags/X/ags_property_editor_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_property_editor_callbacks.Tpo $(DEPDIR)/gsequencer-ags_property_editor_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_property_editor_callbacks.c' object='gsequencer-ags_property_editor_callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_property_editor_callbacks.o `test -f 'src/ags/X/ags_property_editor_callbacks.c' || echo '$(srcdir)/'`src/ags/X/ags_property_editor_callbacks.c gsequencer-ags_property_editor_callbacks.obj: src/ags/X/ags_property_editor_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_property_editor_callbacks.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_property_editor_callbacks.Tpo -c -o gsequencer-ags_property_editor_callbacks.obj `if test -f 'src/ags/X/ags_property_editor_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/ags_property_editor_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_property_editor_callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_property_editor_callbacks.Tpo $(DEPDIR)/gsequencer-ags_property_editor_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_property_editor_callbacks.c' object='gsequencer-ags_property_editor_callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_property_editor_callbacks.obj `if test -f 'src/ags/X/ags_property_editor_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/ags_property_editor_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_property_editor_callbacks.c'; fi` gsequencer-ags_property_listing_editor.o: src/ags/X/ags_property_listing_editor.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_property_listing_editor.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_property_listing_editor.Tpo -c -o gsequencer-ags_property_listing_editor.o `test -f 'src/ags/X/ags_property_listing_editor.c' || echo '$(srcdir)/'`src/ags/X/ags_property_listing_editor.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_property_listing_editor.Tpo $(DEPDIR)/gsequencer-ags_property_listing_editor.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_property_listing_editor.c' object='gsequencer-ags_property_listing_editor.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_property_listing_editor.o `test -f 'src/ags/X/ags_property_listing_editor.c' || echo '$(srcdir)/'`src/ags/X/ags_property_listing_editor.c gsequencer-ags_property_listing_editor.obj: src/ags/X/ags_property_listing_editor.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_property_listing_editor.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_property_listing_editor.Tpo -c -o gsequencer-ags_property_listing_editor.obj `if test -f 'src/ags/X/ags_property_listing_editor.c'; then $(CYGPATH_W) 'src/ags/X/ags_property_listing_editor.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_property_listing_editor.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_property_listing_editor.Tpo $(DEPDIR)/gsequencer-ags_property_listing_editor.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_property_listing_editor.c' object='gsequencer-ags_property_listing_editor.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_property_listing_editor.obj `if test -f 'src/ags/X/ags_property_listing_editor.c'; then $(CYGPATH_W) 'src/ags/X/ags_property_listing_editor.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_property_listing_editor.c'; fi` gsequencer-ags_resize_editor.o: src/ags/X/ags_resize_editor.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_resize_editor.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_resize_editor.Tpo -c -o gsequencer-ags_resize_editor.o `test -f 'src/ags/X/ags_resize_editor.c' || echo '$(srcdir)/'`src/ags/X/ags_resize_editor.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_resize_editor.Tpo $(DEPDIR)/gsequencer-ags_resize_editor.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_resize_editor.c' object='gsequencer-ags_resize_editor.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_resize_editor.o `test -f 'src/ags/X/ags_resize_editor.c' || echo '$(srcdir)/'`src/ags/X/ags_resize_editor.c gsequencer-ags_resize_editor.obj: src/ags/X/ags_resize_editor.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_resize_editor.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_resize_editor.Tpo -c -o gsequencer-ags_resize_editor.obj `if test -f 'src/ags/X/ags_resize_editor.c'; then $(CYGPATH_W) 'src/ags/X/ags_resize_editor.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_resize_editor.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_resize_editor.Tpo $(DEPDIR)/gsequencer-ags_resize_editor.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_resize_editor.c' object='gsequencer-ags_resize_editor.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_resize_editor.obj `if test -f 'src/ags/X/ags_resize_editor.c'; then $(CYGPATH_W) 'src/ags/X/ags_resize_editor.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_resize_editor.c'; fi` gsequencer-ags_server_preferences.o: src/ags/X/ags_server_preferences.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_server_preferences.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_server_preferences.Tpo -c -o gsequencer-ags_server_preferences.o `test -f 'src/ags/X/ags_server_preferences.c' || echo '$(srcdir)/'`src/ags/X/ags_server_preferences.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_server_preferences.Tpo $(DEPDIR)/gsequencer-ags_server_preferences.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_server_preferences.c' object='gsequencer-ags_server_preferences.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_server_preferences.o `test -f 'src/ags/X/ags_server_preferences.c' || echo '$(srcdir)/'`src/ags/X/ags_server_preferences.c gsequencer-ags_server_preferences.obj: src/ags/X/ags_server_preferences.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_server_preferences.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_server_preferences.Tpo -c -o gsequencer-ags_server_preferences.obj `if test -f 'src/ags/X/ags_server_preferences.c'; then $(CYGPATH_W) 'src/ags/X/ags_server_preferences.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_server_preferences.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_server_preferences.Tpo $(DEPDIR)/gsequencer-ags_server_preferences.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_server_preferences.c' object='gsequencer-ags_server_preferences.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_server_preferences.obj `if test -f 'src/ags/X/ags_server_preferences.c'; then $(CYGPATH_W) 'src/ags/X/ags_server_preferences.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_server_preferences.c'; fi` gsequencer-ags_server_preferences_callbacks.o: src/ags/X/ags_server_preferences_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_server_preferences_callbacks.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_server_preferences_callbacks.Tpo -c -o gsequencer-ags_server_preferences_callbacks.o `test -f 'src/ags/X/ags_server_preferences_callbacks.c' || echo '$(srcdir)/'`src/ags/X/ags_server_preferences_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_server_preferences_callbacks.Tpo $(DEPDIR)/gsequencer-ags_server_preferences_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_server_preferences_callbacks.c' object='gsequencer-ags_server_preferences_callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_server_preferences_callbacks.o `test -f 'src/ags/X/ags_server_preferences_callbacks.c' || echo '$(srcdir)/'`src/ags/X/ags_server_preferences_callbacks.c gsequencer-ags_server_preferences_callbacks.obj: src/ags/X/ags_server_preferences_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_server_preferences_callbacks.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_server_preferences_callbacks.Tpo -c -o gsequencer-ags_server_preferences_callbacks.obj `if test -f 'src/ags/X/ags_server_preferences_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/ags_server_preferences_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_server_preferences_callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_server_preferences_callbacks.Tpo $(DEPDIR)/gsequencer-ags_server_preferences_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_server_preferences_callbacks.c' object='gsequencer-ags_server_preferences_callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_server_preferences_callbacks.obj `if test -f 'src/ags/X/ags_server_preferences_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/ags_server_preferences_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_server_preferences_callbacks.c'; fi` gsequencer-ags_window.o: src/ags/X/ags_window.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_window.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_window.Tpo -c -o gsequencer-ags_window.o `test -f 'src/ags/X/ags_window.c' || echo '$(srcdir)/'`src/ags/X/ags_window.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_window.Tpo $(DEPDIR)/gsequencer-ags_window.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_window.c' object='gsequencer-ags_window.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_window.o `test -f 'src/ags/X/ags_window.c' || echo '$(srcdir)/'`src/ags/X/ags_window.c gsequencer-ags_window.obj: src/ags/X/ags_window.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_window.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_window.Tpo -c -o gsequencer-ags_window.obj `if test -f 'src/ags/X/ags_window.c'; then $(CYGPATH_W) 'src/ags/X/ags_window.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_window.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_window.Tpo $(DEPDIR)/gsequencer-ags_window.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_window.c' object='gsequencer-ags_window.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_window.obj `if test -f 'src/ags/X/ags_window.c'; then $(CYGPATH_W) 'src/ags/X/ags_window.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_window.c'; fi` gsequencer-ags_window_callbacks.o: src/ags/X/ags_window_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_window_callbacks.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_window_callbacks.Tpo -c -o gsequencer-ags_window_callbacks.o `test -f 'src/ags/X/ags_window_callbacks.c' || echo '$(srcdir)/'`src/ags/X/ags_window_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_window_callbacks.Tpo $(DEPDIR)/gsequencer-ags_window_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_window_callbacks.c' object='gsequencer-ags_window_callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_window_callbacks.o `test -f 'src/ags/X/ags_window_callbacks.c' || echo '$(srcdir)/'`src/ags/X/ags_window_callbacks.c gsequencer-ags_window_callbacks.obj: src/ags/X/ags_window_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_window_callbacks.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_window_callbacks.Tpo -c -o gsequencer-ags_window_callbacks.obj `if test -f 'src/ags/X/ags_window_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/ags_window_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_window_callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_window_callbacks.Tpo $(DEPDIR)/gsequencer-ags_window_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/ags_window_callbacks.c' object='gsequencer-ags_window_callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_window_callbacks.obj `if test -f 'src/ags/X/ags_window_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/ags_window_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/ags_window_callbacks.c'; fi` gsequencer-ags_file_selection.o: src/ags/X/editor/ags_file_selection.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_file_selection.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_file_selection.Tpo -c -o gsequencer-ags_file_selection.o `test -f 'src/ags/X/editor/ags_file_selection.c' || echo '$(srcdir)/'`src/ags/X/editor/ags_file_selection.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_file_selection.Tpo $(DEPDIR)/gsequencer-ags_file_selection.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/editor/ags_file_selection.c' object='gsequencer-ags_file_selection.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_file_selection.o `test -f 'src/ags/X/editor/ags_file_selection.c' || echo '$(srcdir)/'`src/ags/X/editor/ags_file_selection.c gsequencer-ags_file_selection.obj: src/ags/X/editor/ags_file_selection.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_file_selection.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_file_selection.Tpo -c -o gsequencer-ags_file_selection.obj `if test -f 'src/ags/X/editor/ags_file_selection.c'; then $(CYGPATH_W) 'src/ags/X/editor/ags_file_selection.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/editor/ags_file_selection.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_file_selection.Tpo $(DEPDIR)/gsequencer-ags_file_selection.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/editor/ags_file_selection.c' object='gsequencer-ags_file_selection.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_file_selection.obj `if test -f 'src/ags/X/editor/ags_file_selection.c'; then $(CYGPATH_W) 'src/ags/X/editor/ags_file_selection.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/editor/ags_file_selection.c'; fi` gsequencer-ags_file_selection_callbacks.o: src/ags/X/editor/ags_file_selection_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_file_selection_callbacks.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_file_selection_callbacks.Tpo -c -o gsequencer-ags_file_selection_callbacks.o `test -f 'src/ags/X/editor/ags_file_selection_callbacks.c' || echo '$(srcdir)/'`src/ags/X/editor/ags_file_selection_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_file_selection_callbacks.Tpo $(DEPDIR)/gsequencer-ags_file_selection_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/editor/ags_file_selection_callbacks.c' object='gsequencer-ags_file_selection_callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_file_selection_callbacks.o `test -f 'src/ags/X/editor/ags_file_selection_callbacks.c' || echo '$(srcdir)/'`src/ags/X/editor/ags_file_selection_callbacks.c gsequencer-ags_file_selection_callbacks.obj: src/ags/X/editor/ags_file_selection_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_file_selection_callbacks.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_file_selection_callbacks.Tpo -c -o gsequencer-ags_file_selection_callbacks.obj `if test -f 'src/ags/X/editor/ags_file_selection_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/editor/ags_file_selection_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/editor/ags_file_selection_callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_file_selection_callbacks.Tpo $(DEPDIR)/gsequencer-ags_file_selection_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/editor/ags_file_selection_callbacks.c' object='gsequencer-ags_file_selection_callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_file_selection_callbacks.obj `if test -f 'src/ags/X/editor/ags_file_selection_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/editor/ags_file_selection_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/editor/ags_file_selection_callbacks.c'; fi` gsequencer-ags_inline_player.o: src/ags/X/editor/ags_inline_player.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_inline_player.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_inline_player.Tpo -c -o gsequencer-ags_inline_player.o `test -f 'src/ags/X/editor/ags_inline_player.c' || echo '$(srcdir)/'`src/ags/X/editor/ags_inline_player.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_inline_player.Tpo $(DEPDIR)/gsequencer-ags_inline_player.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/editor/ags_inline_player.c' object='gsequencer-ags_inline_player.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_inline_player.o `test -f 'src/ags/X/editor/ags_inline_player.c' || echo '$(srcdir)/'`src/ags/X/editor/ags_inline_player.c gsequencer-ags_inline_player.obj: src/ags/X/editor/ags_inline_player.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_inline_player.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_inline_player.Tpo -c -o gsequencer-ags_inline_player.obj `if test -f 'src/ags/X/editor/ags_inline_player.c'; then $(CYGPATH_W) 'src/ags/X/editor/ags_inline_player.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/editor/ags_inline_player.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_inline_player.Tpo $(DEPDIR)/gsequencer-ags_inline_player.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/editor/ags_inline_player.c' object='gsequencer-ags_inline_player.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_inline_player.obj `if test -f 'src/ags/X/editor/ags_inline_player.c'; then $(CYGPATH_W) 'src/ags/X/editor/ags_inline_player.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/editor/ags_inline_player.c'; fi` gsequencer-ags_inline_player_callbacks.o: src/ags/X/editor/ags_inline_player_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_inline_player_callbacks.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_inline_player_callbacks.Tpo -c -o gsequencer-ags_inline_player_callbacks.o `test -f 'src/ags/X/editor/ags_inline_player_callbacks.c' || echo '$(srcdir)/'`src/ags/X/editor/ags_inline_player_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_inline_player_callbacks.Tpo $(DEPDIR)/gsequencer-ags_inline_player_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/editor/ags_inline_player_callbacks.c' object='gsequencer-ags_inline_player_callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_inline_player_callbacks.o `test -f 'src/ags/X/editor/ags_inline_player_callbacks.c' || echo '$(srcdir)/'`src/ags/X/editor/ags_inline_player_callbacks.c gsequencer-ags_inline_player_callbacks.obj: src/ags/X/editor/ags_inline_player_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_inline_player_callbacks.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_inline_player_callbacks.Tpo -c -o gsequencer-ags_inline_player_callbacks.obj `if test -f 'src/ags/X/editor/ags_inline_player_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/editor/ags_inline_player_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/editor/ags_inline_player_callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_inline_player_callbacks.Tpo $(DEPDIR)/gsequencer-ags_inline_player_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/editor/ags_inline_player_callbacks.c' object='gsequencer-ags_inline_player_callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_inline_player_callbacks.obj `if test -f 'src/ags/X/editor/ags_inline_player_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/editor/ags_inline_player_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/editor/ags_inline_player_callbacks.c'; fi` gsequencer-ags_machine_radio_button.o: src/ags/X/editor/ags_machine_radio_button.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_machine_radio_button.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_machine_radio_button.Tpo -c -o gsequencer-ags_machine_radio_button.o `test -f 'src/ags/X/editor/ags_machine_radio_button.c' || echo '$(srcdir)/'`src/ags/X/editor/ags_machine_radio_button.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_machine_radio_button.Tpo $(DEPDIR)/gsequencer-ags_machine_radio_button.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/editor/ags_machine_radio_button.c' object='gsequencer-ags_machine_radio_button.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_machine_radio_button.o `test -f 'src/ags/X/editor/ags_machine_radio_button.c' || echo '$(srcdir)/'`src/ags/X/editor/ags_machine_radio_button.c gsequencer-ags_machine_radio_button.obj: src/ags/X/editor/ags_machine_radio_button.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_machine_radio_button.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_machine_radio_button.Tpo -c -o gsequencer-ags_machine_radio_button.obj `if test -f 'src/ags/X/editor/ags_machine_radio_button.c'; then $(CYGPATH_W) 'src/ags/X/editor/ags_machine_radio_button.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/editor/ags_machine_radio_button.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_machine_radio_button.Tpo $(DEPDIR)/gsequencer-ags_machine_radio_button.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/editor/ags_machine_radio_button.c' object='gsequencer-ags_machine_radio_button.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_machine_radio_button.obj `if test -f 'src/ags/X/editor/ags_machine_radio_button.c'; then $(CYGPATH_W) 'src/ags/X/editor/ags_machine_radio_button.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/editor/ags_machine_radio_button.c'; fi` gsequencer-ags_machine_selection.o: src/ags/X/editor/ags_machine_selection.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_machine_selection.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_machine_selection.Tpo -c -o gsequencer-ags_machine_selection.o `test -f 'src/ags/X/editor/ags_machine_selection.c' || echo '$(srcdir)/'`src/ags/X/editor/ags_machine_selection.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_machine_selection.Tpo $(DEPDIR)/gsequencer-ags_machine_selection.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/editor/ags_machine_selection.c' object='gsequencer-ags_machine_selection.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_machine_selection.o `test -f 'src/ags/X/editor/ags_machine_selection.c' || echo '$(srcdir)/'`src/ags/X/editor/ags_machine_selection.c gsequencer-ags_machine_selection.obj: src/ags/X/editor/ags_machine_selection.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_machine_selection.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_machine_selection.Tpo -c -o gsequencer-ags_machine_selection.obj `if test -f 'src/ags/X/editor/ags_machine_selection.c'; then $(CYGPATH_W) 'src/ags/X/editor/ags_machine_selection.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/editor/ags_machine_selection.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_machine_selection.Tpo $(DEPDIR)/gsequencer-ags_machine_selection.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/editor/ags_machine_selection.c' object='gsequencer-ags_machine_selection.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_machine_selection.obj `if test -f 'src/ags/X/editor/ags_machine_selection.c'; then $(CYGPATH_W) 'src/ags/X/editor/ags_machine_selection.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/editor/ags_machine_selection.c'; fi` gsequencer-ags_machine_selector.o: src/ags/X/editor/ags_machine_selector.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_machine_selector.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_machine_selector.Tpo -c -o gsequencer-ags_machine_selector.o `test -f 'src/ags/X/editor/ags_machine_selector.c' || echo '$(srcdir)/'`src/ags/X/editor/ags_machine_selector.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_machine_selector.Tpo $(DEPDIR)/gsequencer-ags_machine_selector.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/editor/ags_machine_selector.c' object='gsequencer-ags_machine_selector.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_machine_selector.o `test -f 'src/ags/X/editor/ags_machine_selector.c' || echo '$(srcdir)/'`src/ags/X/editor/ags_machine_selector.c gsequencer-ags_machine_selector.obj: src/ags/X/editor/ags_machine_selector.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_machine_selector.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_machine_selector.Tpo -c -o gsequencer-ags_machine_selector.obj `if test -f 'src/ags/X/editor/ags_machine_selector.c'; then $(CYGPATH_W) 'src/ags/X/editor/ags_machine_selector.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/editor/ags_machine_selector.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_machine_selector.Tpo $(DEPDIR)/gsequencer-ags_machine_selector.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/editor/ags_machine_selector.c' object='gsequencer-ags_machine_selector.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_machine_selector.obj `if test -f 'src/ags/X/editor/ags_machine_selector.c'; then $(CYGPATH_W) 'src/ags/X/editor/ags_machine_selector.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/editor/ags_machine_selector.c'; fi` gsequencer-ags_machine_selector_callbacks.o: src/ags/X/editor/ags_machine_selector_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_machine_selector_callbacks.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_machine_selector_callbacks.Tpo -c -o gsequencer-ags_machine_selector_callbacks.o `test -f 'src/ags/X/editor/ags_machine_selector_callbacks.c' || echo '$(srcdir)/'`src/ags/X/editor/ags_machine_selector_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_machine_selector_callbacks.Tpo $(DEPDIR)/gsequencer-ags_machine_selector_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/editor/ags_machine_selector_callbacks.c' object='gsequencer-ags_machine_selector_callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_machine_selector_callbacks.o `test -f 'src/ags/X/editor/ags_machine_selector_callbacks.c' || echo '$(srcdir)/'`src/ags/X/editor/ags_machine_selector_callbacks.c gsequencer-ags_machine_selector_callbacks.obj: src/ags/X/editor/ags_machine_selector_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_machine_selector_callbacks.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_machine_selector_callbacks.Tpo -c -o gsequencer-ags_machine_selector_callbacks.obj `if test -f 'src/ags/X/editor/ags_machine_selector_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/editor/ags_machine_selector_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/editor/ags_machine_selector_callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_machine_selector_callbacks.Tpo $(DEPDIR)/gsequencer-ags_machine_selector_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/editor/ags_machine_selector_callbacks.c' object='gsequencer-ags_machine_selector_callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_machine_selector_callbacks.obj `if test -f 'src/ags/X/editor/ags_machine_selector_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/editor/ags_machine_selector_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/editor/ags_machine_selector_callbacks.c'; fi` gsequencer-ags_meter.o: src/ags/X/editor/ags_meter.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_meter.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_meter.Tpo -c -o gsequencer-ags_meter.o `test -f 'src/ags/X/editor/ags_meter.c' || echo '$(srcdir)/'`src/ags/X/editor/ags_meter.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_meter.Tpo $(DEPDIR)/gsequencer-ags_meter.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/editor/ags_meter.c' object='gsequencer-ags_meter.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_meter.o `test -f 'src/ags/X/editor/ags_meter.c' || echo '$(srcdir)/'`src/ags/X/editor/ags_meter.c gsequencer-ags_meter.obj: src/ags/X/editor/ags_meter.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_meter.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_meter.Tpo -c -o gsequencer-ags_meter.obj `if test -f 'src/ags/X/editor/ags_meter.c'; then $(CYGPATH_W) 'src/ags/X/editor/ags_meter.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/editor/ags_meter.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_meter.Tpo $(DEPDIR)/gsequencer-ags_meter.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/editor/ags_meter.c' object='gsequencer-ags_meter.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_meter.obj `if test -f 'src/ags/X/editor/ags_meter.c'; then $(CYGPATH_W) 'src/ags/X/editor/ags_meter.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/editor/ags_meter.c'; fi` gsequencer-ags_meter_callbacks.o: src/ags/X/editor/ags_meter_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_meter_callbacks.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_meter_callbacks.Tpo -c -o gsequencer-ags_meter_callbacks.o `test -f 'src/ags/X/editor/ags_meter_callbacks.c' || echo '$(srcdir)/'`src/ags/X/editor/ags_meter_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_meter_callbacks.Tpo $(DEPDIR)/gsequencer-ags_meter_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/editor/ags_meter_callbacks.c' object='gsequencer-ags_meter_callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_meter_callbacks.o `test -f 'src/ags/X/editor/ags_meter_callbacks.c' || echo '$(srcdir)/'`src/ags/X/editor/ags_meter_callbacks.c gsequencer-ags_meter_callbacks.obj: src/ags/X/editor/ags_meter_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_meter_callbacks.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_meter_callbacks.Tpo -c -o gsequencer-ags_meter_callbacks.obj `if test -f 'src/ags/X/editor/ags_meter_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/editor/ags_meter_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/editor/ags_meter_callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_meter_callbacks.Tpo $(DEPDIR)/gsequencer-ags_meter_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/editor/ags_meter_callbacks.c' object='gsequencer-ags_meter_callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_meter_callbacks.obj `if test -f 'src/ags/X/editor/ags_meter_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/editor/ags_meter_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/editor/ags_meter_callbacks.c'; fi` gsequencer-ags_notebook.o: src/ags/X/editor/ags_notebook.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_notebook.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_notebook.Tpo -c -o gsequencer-ags_notebook.o `test -f 'src/ags/X/editor/ags_notebook.c' || echo '$(srcdir)/'`src/ags/X/editor/ags_notebook.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_notebook.Tpo $(DEPDIR)/gsequencer-ags_notebook.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/editor/ags_notebook.c' object='gsequencer-ags_notebook.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_notebook.o `test -f 'src/ags/X/editor/ags_notebook.c' || echo '$(srcdir)/'`src/ags/X/editor/ags_notebook.c gsequencer-ags_notebook.obj: src/ags/X/editor/ags_notebook.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_notebook.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_notebook.Tpo -c -o gsequencer-ags_notebook.obj `if test -f 'src/ags/X/editor/ags_notebook.c'; then $(CYGPATH_W) 'src/ags/X/editor/ags_notebook.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/editor/ags_notebook.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_notebook.Tpo $(DEPDIR)/gsequencer-ags_notebook.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/editor/ags_notebook.c' object='gsequencer-ags_notebook.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_notebook.obj `if test -f 'src/ags/X/editor/ags_notebook.c'; then $(CYGPATH_W) 'src/ags/X/editor/ags_notebook.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/editor/ags_notebook.c'; fi` gsequencer-ags_notebook_callbacks.o: src/ags/X/editor/ags_notebook_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_notebook_callbacks.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_notebook_callbacks.Tpo -c -o gsequencer-ags_notebook_callbacks.o `test -f 'src/ags/X/editor/ags_notebook_callbacks.c' || echo '$(srcdir)/'`src/ags/X/editor/ags_notebook_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_notebook_callbacks.Tpo $(DEPDIR)/gsequencer-ags_notebook_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/editor/ags_notebook_callbacks.c' object='gsequencer-ags_notebook_callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_notebook_callbacks.o `test -f 'src/ags/X/editor/ags_notebook_callbacks.c' || echo '$(srcdir)/'`src/ags/X/editor/ags_notebook_callbacks.c gsequencer-ags_notebook_callbacks.obj: src/ags/X/editor/ags_notebook_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_notebook_callbacks.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_notebook_callbacks.Tpo -c -o gsequencer-ags_notebook_callbacks.obj `if test -f 'src/ags/X/editor/ags_notebook_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/editor/ags_notebook_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/editor/ags_notebook_callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_notebook_callbacks.Tpo $(DEPDIR)/gsequencer-ags_notebook_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/editor/ags_notebook_callbacks.c' object='gsequencer-ags_notebook_callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_notebook_callbacks.obj `if test -f 'src/ags/X/editor/ags_notebook_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/editor/ags_notebook_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/editor/ags_notebook_callbacks.c'; fi` gsequencer-ags_note_edit.o: src/ags/X/editor/ags_note_edit.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_note_edit.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_note_edit.Tpo -c -o gsequencer-ags_note_edit.o `test -f 'src/ags/X/editor/ags_note_edit.c' || echo '$(srcdir)/'`src/ags/X/editor/ags_note_edit.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_note_edit.Tpo $(DEPDIR)/gsequencer-ags_note_edit.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/editor/ags_note_edit.c' object='gsequencer-ags_note_edit.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_note_edit.o `test -f 'src/ags/X/editor/ags_note_edit.c' || echo '$(srcdir)/'`src/ags/X/editor/ags_note_edit.c gsequencer-ags_note_edit.obj: src/ags/X/editor/ags_note_edit.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_note_edit.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_note_edit.Tpo -c -o gsequencer-ags_note_edit.obj `if test -f 'src/ags/X/editor/ags_note_edit.c'; then $(CYGPATH_W) 'src/ags/X/editor/ags_note_edit.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/editor/ags_note_edit.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_note_edit.Tpo $(DEPDIR)/gsequencer-ags_note_edit.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/editor/ags_note_edit.c' object='gsequencer-ags_note_edit.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_note_edit.obj `if test -f 'src/ags/X/editor/ags_note_edit.c'; then $(CYGPATH_W) 'src/ags/X/editor/ags_note_edit.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/editor/ags_note_edit.c'; fi` gsequencer-ags_note_edit_callbacks.o: src/ags/X/editor/ags_note_edit_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_note_edit_callbacks.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_note_edit_callbacks.Tpo -c -o gsequencer-ags_note_edit_callbacks.o `test -f 'src/ags/X/editor/ags_note_edit_callbacks.c' || echo '$(srcdir)/'`src/ags/X/editor/ags_note_edit_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_note_edit_callbacks.Tpo $(DEPDIR)/gsequencer-ags_note_edit_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/editor/ags_note_edit_callbacks.c' object='gsequencer-ags_note_edit_callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_note_edit_callbacks.o `test -f 'src/ags/X/editor/ags_note_edit_callbacks.c' || echo '$(srcdir)/'`src/ags/X/editor/ags_note_edit_callbacks.c gsequencer-ags_note_edit_callbacks.obj: src/ags/X/editor/ags_note_edit_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_note_edit_callbacks.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_note_edit_callbacks.Tpo -c -o gsequencer-ags_note_edit_callbacks.obj `if test -f 'src/ags/X/editor/ags_note_edit_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/editor/ags_note_edit_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/editor/ags_note_edit_callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_note_edit_callbacks.Tpo $(DEPDIR)/gsequencer-ags_note_edit_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/editor/ags_note_edit_callbacks.c' object='gsequencer-ags_note_edit_callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_note_edit_callbacks.obj `if test -f 'src/ags/X/editor/ags_note_edit_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/editor/ags_note_edit_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/editor/ags_note_edit_callbacks.c'; fi` gsequencer-ags_pattern_edit.o: src/ags/X/editor/ags_pattern_edit.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_pattern_edit.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_pattern_edit.Tpo -c -o gsequencer-ags_pattern_edit.o `test -f 'src/ags/X/editor/ags_pattern_edit.c' || echo '$(srcdir)/'`src/ags/X/editor/ags_pattern_edit.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_pattern_edit.Tpo $(DEPDIR)/gsequencer-ags_pattern_edit.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/editor/ags_pattern_edit.c' object='gsequencer-ags_pattern_edit.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_pattern_edit.o `test -f 'src/ags/X/editor/ags_pattern_edit.c' || echo '$(srcdir)/'`src/ags/X/editor/ags_pattern_edit.c gsequencer-ags_pattern_edit.obj: src/ags/X/editor/ags_pattern_edit.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_pattern_edit.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_pattern_edit.Tpo -c -o gsequencer-ags_pattern_edit.obj `if test -f 'src/ags/X/editor/ags_pattern_edit.c'; then $(CYGPATH_W) 'src/ags/X/editor/ags_pattern_edit.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/editor/ags_pattern_edit.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_pattern_edit.Tpo $(DEPDIR)/gsequencer-ags_pattern_edit.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/editor/ags_pattern_edit.c' object='gsequencer-ags_pattern_edit.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_pattern_edit.obj `if test -f 'src/ags/X/editor/ags_pattern_edit.c'; then $(CYGPATH_W) 'src/ags/X/editor/ags_pattern_edit.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/editor/ags_pattern_edit.c'; fi` gsequencer-ags_pattern_edit_callbacks.o: src/ags/X/editor/ags_pattern_edit_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_pattern_edit_callbacks.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_pattern_edit_callbacks.Tpo -c -o gsequencer-ags_pattern_edit_callbacks.o `test -f 'src/ags/X/editor/ags_pattern_edit_callbacks.c' || echo '$(srcdir)/'`src/ags/X/editor/ags_pattern_edit_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_pattern_edit_callbacks.Tpo $(DEPDIR)/gsequencer-ags_pattern_edit_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/editor/ags_pattern_edit_callbacks.c' object='gsequencer-ags_pattern_edit_callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_pattern_edit_callbacks.o `test -f 'src/ags/X/editor/ags_pattern_edit_callbacks.c' || echo '$(srcdir)/'`src/ags/X/editor/ags_pattern_edit_callbacks.c gsequencer-ags_pattern_edit_callbacks.obj: src/ags/X/editor/ags_pattern_edit_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_pattern_edit_callbacks.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_pattern_edit_callbacks.Tpo -c -o gsequencer-ags_pattern_edit_callbacks.obj `if test -f 'src/ags/X/editor/ags_pattern_edit_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/editor/ags_pattern_edit_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/editor/ags_pattern_edit_callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_pattern_edit_callbacks.Tpo $(DEPDIR)/gsequencer-ags_pattern_edit_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/editor/ags_pattern_edit_callbacks.c' object='gsequencer-ags_pattern_edit_callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_pattern_edit_callbacks.obj `if test -f 'src/ags/X/editor/ags_pattern_edit_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/editor/ags_pattern_edit_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/editor/ags_pattern_edit_callbacks.c'; fi` gsequencer-ags_sf2_chooser.o: src/ags/X/editor/ags_sf2_chooser.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_sf2_chooser.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_sf2_chooser.Tpo -c -o gsequencer-ags_sf2_chooser.o `test -f 'src/ags/X/editor/ags_sf2_chooser.c' || echo '$(srcdir)/'`src/ags/X/editor/ags_sf2_chooser.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_sf2_chooser.Tpo $(DEPDIR)/gsequencer-ags_sf2_chooser.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/editor/ags_sf2_chooser.c' object='gsequencer-ags_sf2_chooser.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_sf2_chooser.o `test -f 'src/ags/X/editor/ags_sf2_chooser.c' || echo '$(srcdir)/'`src/ags/X/editor/ags_sf2_chooser.c gsequencer-ags_sf2_chooser.obj: src/ags/X/editor/ags_sf2_chooser.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_sf2_chooser.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_sf2_chooser.Tpo -c -o gsequencer-ags_sf2_chooser.obj `if test -f 'src/ags/X/editor/ags_sf2_chooser.c'; then $(CYGPATH_W) 'src/ags/X/editor/ags_sf2_chooser.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/editor/ags_sf2_chooser.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_sf2_chooser.Tpo $(DEPDIR)/gsequencer-ags_sf2_chooser.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/editor/ags_sf2_chooser.c' object='gsequencer-ags_sf2_chooser.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_sf2_chooser.obj `if test -f 'src/ags/X/editor/ags_sf2_chooser.c'; then $(CYGPATH_W) 'src/ags/X/editor/ags_sf2_chooser.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/editor/ags_sf2_chooser.c'; fi` gsequencer-ags_sf2_chooser_callbacks.o: src/ags/X/editor/ags_sf2_chooser_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_sf2_chooser_callbacks.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_sf2_chooser_callbacks.Tpo -c -o gsequencer-ags_sf2_chooser_callbacks.o `test -f 'src/ags/X/editor/ags_sf2_chooser_callbacks.c' || echo '$(srcdir)/'`src/ags/X/editor/ags_sf2_chooser_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_sf2_chooser_callbacks.Tpo $(DEPDIR)/gsequencer-ags_sf2_chooser_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/editor/ags_sf2_chooser_callbacks.c' object='gsequencer-ags_sf2_chooser_callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_sf2_chooser_callbacks.o `test -f 'src/ags/X/editor/ags_sf2_chooser_callbacks.c' || echo '$(srcdir)/'`src/ags/X/editor/ags_sf2_chooser_callbacks.c gsequencer-ags_sf2_chooser_callbacks.obj: src/ags/X/editor/ags_sf2_chooser_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_sf2_chooser_callbacks.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_sf2_chooser_callbacks.Tpo -c -o gsequencer-ags_sf2_chooser_callbacks.obj `if test -f 'src/ags/X/editor/ags_sf2_chooser_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/editor/ags_sf2_chooser_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/editor/ags_sf2_chooser_callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_sf2_chooser_callbacks.Tpo $(DEPDIR)/gsequencer-ags_sf2_chooser_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/editor/ags_sf2_chooser_callbacks.c' object='gsequencer-ags_sf2_chooser_callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_sf2_chooser_callbacks.obj `if test -f 'src/ags/X/editor/ags_sf2_chooser_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/editor/ags_sf2_chooser_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/editor/ags_sf2_chooser_callbacks.c'; fi` gsequencer-ags_toolbar.o: src/ags/X/editor/ags_toolbar.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_toolbar.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_toolbar.Tpo -c -o gsequencer-ags_toolbar.o `test -f 'src/ags/X/editor/ags_toolbar.c' || echo '$(srcdir)/'`src/ags/X/editor/ags_toolbar.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_toolbar.Tpo $(DEPDIR)/gsequencer-ags_toolbar.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/editor/ags_toolbar.c' object='gsequencer-ags_toolbar.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_toolbar.o `test -f 'src/ags/X/editor/ags_toolbar.c' || echo '$(srcdir)/'`src/ags/X/editor/ags_toolbar.c gsequencer-ags_toolbar.obj: src/ags/X/editor/ags_toolbar.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_toolbar.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_toolbar.Tpo -c -o gsequencer-ags_toolbar.obj `if test -f 'src/ags/X/editor/ags_toolbar.c'; then $(CYGPATH_W) 'src/ags/X/editor/ags_toolbar.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/editor/ags_toolbar.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_toolbar.Tpo $(DEPDIR)/gsequencer-ags_toolbar.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/editor/ags_toolbar.c' object='gsequencer-ags_toolbar.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_toolbar.obj `if test -f 'src/ags/X/editor/ags_toolbar.c'; then $(CYGPATH_W) 'src/ags/X/editor/ags_toolbar.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/editor/ags_toolbar.c'; fi` gsequencer-ags_toolbar_callbacks.o: src/ags/X/editor/ags_toolbar_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_toolbar_callbacks.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_toolbar_callbacks.Tpo -c -o gsequencer-ags_toolbar_callbacks.o `test -f 'src/ags/X/editor/ags_toolbar_callbacks.c' || echo '$(srcdir)/'`src/ags/X/editor/ags_toolbar_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_toolbar_callbacks.Tpo $(DEPDIR)/gsequencer-ags_toolbar_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/editor/ags_toolbar_callbacks.c' object='gsequencer-ags_toolbar_callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_toolbar_callbacks.o `test -f 'src/ags/X/editor/ags_toolbar_callbacks.c' || echo '$(srcdir)/'`src/ags/X/editor/ags_toolbar_callbacks.c gsequencer-ags_toolbar_callbacks.obj: src/ags/X/editor/ags_toolbar_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_toolbar_callbacks.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_toolbar_callbacks.Tpo -c -o gsequencer-ags_toolbar_callbacks.obj `if test -f 'src/ags/X/editor/ags_toolbar_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/editor/ags_toolbar_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/editor/ags_toolbar_callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_toolbar_callbacks.Tpo $(DEPDIR)/gsequencer-ags_toolbar_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/editor/ags_toolbar_callbacks.c' object='gsequencer-ags_toolbar_callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_toolbar_callbacks.obj `if test -f 'src/ags/X/editor/ags_toolbar_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/editor/ags_toolbar_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/editor/ags_toolbar_callbacks.c'; fi` gsequencer-ags_cell_pattern.o: src/ags/X/machine/ags_cell_pattern.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_cell_pattern.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_cell_pattern.Tpo -c -o gsequencer-ags_cell_pattern.o `test -f 'src/ags/X/machine/ags_cell_pattern.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_cell_pattern.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_cell_pattern.Tpo $(DEPDIR)/gsequencer-ags_cell_pattern.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_cell_pattern.c' object='gsequencer-ags_cell_pattern.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_cell_pattern.o `test -f 'src/ags/X/machine/ags_cell_pattern.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_cell_pattern.c gsequencer-ags_cell_pattern.obj: src/ags/X/machine/ags_cell_pattern.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_cell_pattern.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_cell_pattern.Tpo -c -o gsequencer-ags_cell_pattern.obj `if test -f 'src/ags/X/machine/ags_cell_pattern.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_cell_pattern.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_cell_pattern.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_cell_pattern.Tpo $(DEPDIR)/gsequencer-ags_cell_pattern.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_cell_pattern.c' object='gsequencer-ags_cell_pattern.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_cell_pattern.obj `if test -f 'src/ags/X/machine/ags_cell_pattern.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_cell_pattern.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_cell_pattern.c'; fi` gsequencer-ags_cell_pattern_callbacks.o: src/ags/X/machine/ags_cell_pattern_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_cell_pattern_callbacks.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_cell_pattern_callbacks.Tpo -c -o gsequencer-ags_cell_pattern_callbacks.o `test -f 'src/ags/X/machine/ags_cell_pattern_callbacks.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_cell_pattern_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_cell_pattern_callbacks.Tpo $(DEPDIR)/gsequencer-ags_cell_pattern_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_cell_pattern_callbacks.c' object='gsequencer-ags_cell_pattern_callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_cell_pattern_callbacks.o `test -f 'src/ags/X/machine/ags_cell_pattern_callbacks.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_cell_pattern_callbacks.c gsequencer-ags_cell_pattern_callbacks.obj: src/ags/X/machine/ags_cell_pattern_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_cell_pattern_callbacks.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_cell_pattern_callbacks.Tpo -c -o gsequencer-ags_cell_pattern_callbacks.obj `if test -f 'src/ags/X/machine/ags_cell_pattern_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_cell_pattern_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_cell_pattern_callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_cell_pattern_callbacks.Tpo $(DEPDIR)/gsequencer-ags_cell_pattern_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_cell_pattern_callbacks.c' object='gsequencer-ags_cell_pattern_callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_cell_pattern_callbacks.obj `if test -f 'src/ags/X/machine/ags_cell_pattern_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_cell_pattern_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_cell_pattern_callbacks.c'; fi` gsequencer-ags_drum.o: src/ags/X/machine/ags_drum.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_drum.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_drum.Tpo -c -o gsequencer-ags_drum.o `test -f 'src/ags/X/machine/ags_drum.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_drum.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_drum.Tpo $(DEPDIR)/gsequencer-ags_drum.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_drum.c' object='gsequencer-ags_drum.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_drum.o `test -f 'src/ags/X/machine/ags_drum.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_drum.c gsequencer-ags_drum.obj: src/ags/X/machine/ags_drum.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_drum.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_drum.Tpo -c -o gsequencer-ags_drum.obj `if test -f 'src/ags/X/machine/ags_drum.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_drum.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_drum.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_drum.Tpo $(DEPDIR)/gsequencer-ags_drum.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_drum.c' object='gsequencer-ags_drum.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_drum.obj `if test -f 'src/ags/X/machine/ags_drum.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_drum.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_drum.c'; fi` gsequencer-ags_drum_callbacks.o: src/ags/X/machine/ags_drum_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_drum_callbacks.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_drum_callbacks.Tpo -c -o gsequencer-ags_drum_callbacks.o `test -f 'src/ags/X/machine/ags_drum_callbacks.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_drum_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_drum_callbacks.Tpo $(DEPDIR)/gsequencer-ags_drum_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_drum_callbacks.c' object='gsequencer-ags_drum_callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_drum_callbacks.o `test -f 'src/ags/X/machine/ags_drum_callbacks.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_drum_callbacks.c gsequencer-ags_drum_callbacks.obj: src/ags/X/machine/ags_drum_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_drum_callbacks.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_drum_callbacks.Tpo -c -o gsequencer-ags_drum_callbacks.obj `if test -f 'src/ags/X/machine/ags_drum_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_drum_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_drum_callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_drum_callbacks.Tpo $(DEPDIR)/gsequencer-ags_drum_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_drum_callbacks.c' object='gsequencer-ags_drum_callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_drum_callbacks.obj `if test -f 'src/ags/X/machine/ags_drum_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_drum_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_drum_callbacks.c'; fi` gsequencer-ags_drum_input_line.o: src/ags/X/machine/ags_drum_input_line.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_drum_input_line.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_drum_input_line.Tpo -c -o gsequencer-ags_drum_input_line.o `test -f 'src/ags/X/machine/ags_drum_input_line.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_drum_input_line.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_drum_input_line.Tpo $(DEPDIR)/gsequencer-ags_drum_input_line.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_drum_input_line.c' object='gsequencer-ags_drum_input_line.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_drum_input_line.o `test -f 'src/ags/X/machine/ags_drum_input_line.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_drum_input_line.c gsequencer-ags_drum_input_line.obj: src/ags/X/machine/ags_drum_input_line.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_drum_input_line.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_drum_input_line.Tpo -c -o gsequencer-ags_drum_input_line.obj `if test -f 'src/ags/X/machine/ags_drum_input_line.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_drum_input_line.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_drum_input_line.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_drum_input_line.Tpo $(DEPDIR)/gsequencer-ags_drum_input_line.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_drum_input_line.c' object='gsequencer-ags_drum_input_line.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_drum_input_line.obj `if test -f 'src/ags/X/machine/ags_drum_input_line.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_drum_input_line.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_drum_input_line.c'; fi` gsequencer-ags_drum_input_line_callbacks.o: src/ags/X/machine/ags_drum_input_line_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_drum_input_line_callbacks.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_drum_input_line_callbacks.Tpo -c -o gsequencer-ags_drum_input_line_callbacks.o `test -f 'src/ags/X/machine/ags_drum_input_line_callbacks.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_drum_input_line_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_drum_input_line_callbacks.Tpo $(DEPDIR)/gsequencer-ags_drum_input_line_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_drum_input_line_callbacks.c' object='gsequencer-ags_drum_input_line_callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_drum_input_line_callbacks.o `test -f 'src/ags/X/machine/ags_drum_input_line_callbacks.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_drum_input_line_callbacks.c gsequencer-ags_drum_input_line_callbacks.obj: src/ags/X/machine/ags_drum_input_line_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_drum_input_line_callbacks.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_drum_input_line_callbacks.Tpo -c -o gsequencer-ags_drum_input_line_callbacks.obj `if test -f 'src/ags/X/machine/ags_drum_input_line_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_drum_input_line_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_drum_input_line_callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_drum_input_line_callbacks.Tpo $(DEPDIR)/gsequencer-ags_drum_input_line_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_drum_input_line_callbacks.c' object='gsequencer-ags_drum_input_line_callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_drum_input_line_callbacks.obj `if test -f 'src/ags/X/machine/ags_drum_input_line_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_drum_input_line_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_drum_input_line_callbacks.c'; fi` gsequencer-ags_drum_input_pad.o: src/ags/X/machine/ags_drum_input_pad.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_drum_input_pad.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_drum_input_pad.Tpo -c -o gsequencer-ags_drum_input_pad.o `test -f 'src/ags/X/machine/ags_drum_input_pad.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_drum_input_pad.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_drum_input_pad.Tpo $(DEPDIR)/gsequencer-ags_drum_input_pad.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_drum_input_pad.c' object='gsequencer-ags_drum_input_pad.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_drum_input_pad.o `test -f 'src/ags/X/machine/ags_drum_input_pad.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_drum_input_pad.c gsequencer-ags_drum_input_pad.obj: src/ags/X/machine/ags_drum_input_pad.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_drum_input_pad.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_drum_input_pad.Tpo -c -o gsequencer-ags_drum_input_pad.obj `if test -f 'src/ags/X/machine/ags_drum_input_pad.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_drum_input_pad.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_drum_input_pad.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_drum_input_pad.Tpo $(DEPDIR)/gsequencer-ags_drum_input_pad.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_drum_input_pad.c' object='gsequencer-ags_drum_input_pad.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_drum_input_pad.obj `if test -f 'src/ags/X/machine/ags_drum_input_pad.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_drum_input_pad.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_drum_input_pad.c'; fi` gsequencer-ags_drum_input_pad_callbacks.o: src/ags/X/machine/ags_drum_input_pad_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_drum_input_pad_callbacks.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_drum_input_pad_callbacks.Tpo -c -o gsequencer-ags_drum_input_pad_callbacks.o `test -f 'src/ags/X/machine/ags_drum_input_pad_callbacks.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_drum_input_pad_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_drum_input_pad_callbacks.Tpo $(DEPDIR)/gsequencer-ags_drum_input_pad_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_drum_input_pad_callbacks.c' object='gsequencer-ags_drum_input_pad_callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_drum_input_pad_callbacks.o `test -f 'src/ags/X/machine/ags_drum_input_pad_callbacks.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_drum_input_pad_callbacks.c gsequencer-ags_drum_input_pad_callbacks.obj: src/ags/X/machine/ags_drum_input_pad_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_drum_input_pad_callbacks.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_drum_input_pad_callbacks.Tpo -c -o gsequencer-ags_drum_input_pad_callbacks.obj `if test -f 'src/ags/X/machine/ags_drum_input_pad_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_drum_input_pad_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_drum_input_pad_callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_drum_input_pad_callbacks.Tpo $(DEPDIR)/gsequencer-ags_drum_input_pad_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_drum_input_pad_callbacks.c' object='gsequencer-ags_drum_input_pad_callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_drum_input_pad_callbacks.obj `if test -f 'src/ags/X/machine/ags_drum_input_pad_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_drum_input_pad_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_drum_input_pad_callbacks.c'; fi` gsequencer-ags_drum_output_line.o: src/ags/X/machine/ags_drum_output_line.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_drum_output_line.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_drum_output_line.Tpo -c -o gsequencer-ags_drum_output_line.o `test -f 'src/ags/X/machine/ags_drum_output_line.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_drum_output_line.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_drum_output_line.Tpo $(DEPDIR)/gsequencer-ags_drum_output_line.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_drum_output_line.c' object='gsequencer-ags_drum_output_line.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_drum_output_line.o `test -f 'src/ags/X/machine/ags_drum_output_line.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_drum_output_line.c gsequencer-ags_drum_output_line.obj: src/ags/X/machine/ags_drum_output_line.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_drum_output_line.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_drum_output_line.Tpo -c -o gsequencer-ags_drum_output_line.obj `if test -f 'src/ags/X/machine/ags_drum_output_line.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_drum_output_line.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_drum_output_line.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_drum_output_line.Tpo $(DEPDIR)/gsequencer-ags_drum_output_line.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_drum_output_line.c' object='gsequencer-ags_drum_output_line.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_drum_output_line.obj `if test -f 'src/ags/X/machine/ags_drum_output_line.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_drum_output_line.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_drum_output_line.c'; fi` gsequencer-ags_drum_output_line_callbacks.o: src/ags/X/machine/ags_drum_output_line_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_drum_output_line_callbacks.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_drum_output_line_callbacks.Tpo -c -o gsequencer-ags_drum_output_line_callbacks.o `test -f 'src/ags/X/machine/ags_drum_output_line_callbacks.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_drum_output_line_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_drum_output_line_callbacks.Tpo $(DEPDIR)/gsequencer-ags_drum_output_line_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_drum_output_line_callbacks.c' object='gsequencer-ags_drum_output_line_callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_drum_output_line_callbacks.o `test -f 'src/ags/X/machine/ags_drum_output_line_callbacks.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_drum_output_line_callbacks.c gsequencer-ags_drum_output_line_callbacks.obj: src/ags/X/machine/ags_drum_output_line_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_drum_output_line_callbacks.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_drum_output_line_callbacks.Tpo -c -o gsequencer-ags_drum_output_line_callbacks.obj `if test -f 'src/ags/X/machine/ags_drum_output_line_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_drum_output_line_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_drum_output_line_callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_drum_output_line_callbacks.Tpo $(DEPDIR)/gsequencer-ags_drum_output_line_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_drum_output_line_callbacks.c' object='gsequencer-ags_drum_output_line_callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_drum_output_line_callbacks.obj `if test -f 'src/ags/X/machine/ags_drum_output_line_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_drum_output_line_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_drum_output_line_callbacks.c'; fi` gsequencer-ags_drum_output_pad.o: src/ags/X/machine/ags_drum_output_pad.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_drum_output_pad.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_drum_output_pad.Tpo -c -o gsequencer-ags_drum_output_pad.o `test -f 'src/ags/X/machine/ags_drum_output_pad.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_drum_output_pad.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_drum_output_pad.Tpo $(DEPDIR)/gsequencer-ags_drum_output_pad.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_drum_output_pad.c' object='gsequencer-ags_drum_output_pad.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_drum_output_pad.o `test -f 'src/ags/X/machine/ags_drum_output_pad.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_drum_output_pad.c gsequencer-ags_drum_output_pad.obj: src/ags/X/machine/ags_drum_output_pad.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_drum_output_pad.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_drum_output_pad.Tpo -c -o gsequencer-ags_drum_output_pad.obj `if test -f 'src/ags/X/machine/ags_drum_output_pad.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_drum_output_pad.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_drum_output_pad.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_drum_output_pad.Tpo $(DEPDIR)/gsequencer-ags_drum_output_pad.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_drum_output_pad.c' object='gsequencer-ags_drum_output_pad.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_drum_output_pad.obj `if test -f 'src/ags/X/machine/ags_drum_output_pad.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_drum_output_pad.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_drum_output_pad.c'; fi` gsequencer-ags_drum_output_pad_callbacks.o: src/ags/X/machine/ags_drum_output_pad_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_drum_output_pad_callbacks.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_drum_output_pad_callbacks.Tpo -c -o gsequencer-ags_drum_output_pad_callbacks.o `test -f 'src/ags/X/machine/ags_drum_output_pad_callbacks.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_drum_output_pad_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_drum_output_pad_callbacks.Tpo $(DEPDIR)/gsequencer-ags_drum_output_pad_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_drum_output_pad_callbacks.c' object='gsequencer-ags_drum_output_pad_callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_drum_output_pad_callbacks.o `test -f 'src/ags/X/machine/ags_drum_output_pad_callbacks.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_drum_output_pad_callbacks.c gsequencer-ags_drum_output_pad_callbacks.obj: src/ags/X/machine/ags_drum_output_pad_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_drum_output_pad_callbacks.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_drum_output_pad_callbacks.Tpo -c -o gsequencer-ags_drum_output_pad_callbacks.obj `if test -f 'src/ags/X/machine/ags_drum_output_pad_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_drum_output_pad_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_drum_output_pad_callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_drum_output_pad_callbacks.Tpo $(DEPDIR)/gsequencer-ags_drum_output_pad_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_drum_output_pad_callbacks.c' object='gsequencer-ags_drum_output_pad_callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_drum_output_pad_callbacks.obj `if test -f 'src/ags/X/machine/ags_drum_output_pad_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_drum_output_pad_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_drum_output_pad_callbacks.c'; fi` gsequencer-ags_ffplayer.o: src/ags/X/machine/ags_ffplayer.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_ffplayer.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_ffplayer.Tpo -c -o gsequencer-ags_ffplayer.o `test -f 'src/ags/X/machine/ags_ffplayer.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_ffplayer.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_ffplayer.Tpo $(DEPDIR)/gsequencer-ags_ffplayer.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_ffplayer.c' object='gsequencer-ags_ffplayer.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_ffplayer.o `test -f 'src/ags/X/machine/ags_ffplayer.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_ffplayer.c gsequencer-ags_ffplayer.obj: src/ags/X/machine/ags_ffplayer.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_ffplayer.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_ffplayer.Tpo -c -o gsequencer-ags_ffplayer.obj `if test -f 'src/ags/X/machine/ags_ffplayer.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_ffplayer.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_ffplayer.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_ffplayer.Tpo $(DEPDIR)/gsequencer-ags_ffplayer.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_ffplayer.c' object='gsequencer-ags_ffplayer.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_ffplayer.obj `if test -f 'src/ags/X/machine/ags_ffplayer.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_ffplayer.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_ffplayer.c'; fi` gsequencer-ags_ffplayer_callbacks.o: src/ags/X/machine/ags_ffplayer_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_ffplayer_callbacks.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_ffplayer_callbacks.Tpo -c -o gsequencer-ags_ffplayer_callbacks.o `test -f 'src/ags/X/machine/ags_ffplayer_callbacks.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_ffplayer_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_ffplayer_callbacks.Tpo $(DEPDIR)/gsequencer-ags_ffplayer_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_ffplayer_callbacks.c' object='gsequencer-ags_ffplayer_callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_ffplayer_callbacks.o `test -f 'src/ags/X/machine/ags_ffplayer_callbacks.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_ffplayer_callbacks.c gsequencer-ags_ffplayer_callbacks.obj: src/ags/X/machine/ags_ffplayer_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_ffplayer_callbacks.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_ffplayer_callbacks.Tpo -c -o gsequencer-ags_ffplayer_callbacks.obj `if test -f 'src/ags/X/machine/ags_ffplayer_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_ffplayer_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_ffplayer_callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_ffplayer_callbacks.Tpo $(DEPDIR)/gsequencer-ags_ffplayer_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_ffplayer_callbacks.c' object='gsequencer-ags_ffplayer_callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_ffplayer_callbacks.obj `if test -f 'src/ags/X/machine/ags_ffplayer_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_ffplayer_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_ffplayer_callbacks.c'; fi` gsequencer-ags_matrix.o: src/ags/X/machine/ags_matrix.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_matrix.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_matrix.Tpo -c -o gsequencer-ags_matrix.o `test -f 'src/ags/X/machine/ags_matrix.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_matrix.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_matrix.Tpo $(DEPDIR)/gsequencer-ags_matrix.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_matrix.c' object='gsequencer-ags_matrix.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_matrix.o `test -f 'src/ags/X/machine/ags_matrix.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_matrix.c gsequencer-ags_matrix.obj: src/ags/X/machine/ags_matrix.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_matrix.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_matrix.Tpo -c -o gsequencer-ags_matrix.obj `if test -f 'src/ags/X/machine/ags_matrix.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_matrix.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_matrix.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_matrix.Tpo $(DEPDIR)/gsequencer-ags_matrix.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_matrix.c' object='gsequencer-ags_matrix.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_matrix.obj `if test -f 'src/ags/X/machine/ags_matrix.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_matrix.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_matrix.c'; fi` gsequencer-ags_matrix_callbacks.o: src/ags/X/machine/ags_matrix_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_matrix_callbacks.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_matrix_callbacks.Tpo -c -o gsequencer-ags_matrix_callbacks.o `test -f 'src/ags/X/machine/ags_matrix_callbacks.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_matrix_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_matrix_callbacks.Tpo $(DEPDIR)/gsequencer-ags_matrix_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_matrix_callbacks.c' object='gsequencer-ags_matrix_callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_matrix_callbacks.o `test -f 'src/ags/X/machine/ags_matrix_callbacks.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_matrix_callbacks.c gsequencer-ags_matrix_callbacks.obj: src/ags/X/machine/ags_matrix_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_matrix_callbacks.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_matrix_callbacks.Tpo -c -o gsequencer-ags_matrix_callbacks.obj `if test -f 'src/ags/X/machine/ags_matrix_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_matrix_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_matrix_callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_matrix_callbacks.Tpo $(DEPDIR)/gsequencer-ags_matrix_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_matrix_callbacks.c' object='gsequencer-ags_matrix_callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_matrix_callbacks.obj `if test -f 'src/ags/X/machine/ags_matrix_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_matrix_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_matrix_callbacks.c'; fi` gsequencer-ags_mixer.o: src/ags/X/machine/ags_mixer.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_mixer.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_mixer.Tpo -c -o gsequencer-ags_mixer.o `test -f 'src/ags/X/machine/ags_mixer.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_mixer.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_mixer.Tpo $(DEPDIR)/gsequencer-ags_mixer.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_mixer.c' object='gsequencer-ags_mixer.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_mixer.o `test -f 'src/ags/X/machine/ags_mixer.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_mixer.c gsequencer-ags_mixer.obj: src/ags/X/machine/ags_mixer.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_mixer.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_mixer.Tpo -c -o gsequencer-ags_mixer.obj `if test -f 'src/ags/X/machine/ags_mixer.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_mixer.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_mixer.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_mixer.Tpo $(DEPDIR)/gsequencer-ags_mixer.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_mixer.c' object='gsequencer-ags_mixer.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_mixer.obj `if test -f 'src/ags/X/machine/ags_mixer.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_mixer.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_mixer.c'; fi` gsequencer-ags_mixer_callbacks.o: src/ags/X/machine/ags_mixer_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_mixer_callbacks.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_mixer_callbacks.Tpo -c -o gsequencer-ags_mixer_callbacks.o `test -f 'src/ags/X/machine/ags_mixer_callbacks.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_mixer_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_mixer_callbacks.Tpo $(DEPDIR)/gsequencer-ags_mixer_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_mixer_callbacks.c' object='gsequencer-ags_mixer_callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_mixer_callbacks.o `test -f 'src/ags/X/machine/ags_mixer_callbacks.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_mixer_callbacks.c gsequencer-ags_mixer_callbacks.obj: src/ags/X/machine/ags_mixer_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_mixer_callbacks.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_mixer_callbacks.Tpo -c -o gsequencer-ags_mixer_callbacks.obj `if test -f 'src/ags/X/machine/ags_mixer_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_mixer_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_mixer_callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_mixer_callbacks.Tpo $(DEPDIR)/gsequencer-ags_mixer_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_mixer_callbacks.c' object='gsequencer-ags_mixer_callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_mixer_callbacks.obj `if test -f 'src/ags/X/machine/ags_mixer_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_mixer_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_mixer_callbacks.c'; fi` gsequencer-ags_mixer_input_line.o: src/ags/X/machine/ags_mixer_input_line.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_mixer_input_line.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_mixer_input_line.Tpo -c -o gsequencer-ags_mixer_input_line.o `test -f 'src/ags/X/machine/ags_mixer_input_line.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_mixer_input_line.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_mixer_input_line.Tpo $(DEPDIR)/gsequencer-ags_mixer_input_line.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_mixer_input_line.c' object='gsequencer-ags_mixer_input_line.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_mixer_input_line.o `test -f 'src/ags/X/machine/ags_mixer_input_line.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_mixer_input_line.c gsequencer-ags_mixer_input_line.obj: src/ags/X/machine/ags_mixer_input_line.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_mixer_input_line.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_mixer_input_line.Tpo -c -o gsequencer-ags_mixer_input_line.obj `if test -f 'src/ags/X/machine/ags_mixer_input_line.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_mixer_input_line.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_mixer_input_line.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_mixer_input_line.Tpo $(DEPDIR)/gsequencer-ags_mixer_input_line.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_mixer_input_line.c' object='gsequencer-ags_mixer_input_line.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_mixer_input_line.obj `if test -f 'src/ags/X/machine/ags_mixer_input_line.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_mixer_input_line.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_mixer_input_line.c'; fi` gsequencer-ags_mixer_input_pad.o: src/ags/X/machine/ags_mixer_input_pad.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_mixer_input_pad.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_mixer_input_pad.Tpo -c -o gsequencer-ags_mixer_input_pad.o `test -f 'src/ags/X/machine/ags_mixer_input_pad.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_mixer_input_pad.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_mixer_input_pad.Tpo $(DEPDIR)/gsequencer-ags_mixer_input_pad.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_mixer_input_pad.c' object='gsequencer-ags_mixer_input_pad.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_mixer_input_pad.o `test -f 'src/ags/X/machine/ags_mixer_input_pad.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_mixer_input_pad.c gsequencer-ags_mixer_input_pad.obj: src/ags/X/machine/ags_mixer_input_pad.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_mixer_input_pad.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_mixer_input_pad.Tpo -c -o gsequencer-ags_mixer_input_pad.obj `if test -f 'src/ags/X/machine/ags_mixer_input_pad.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_mixer_input_pad.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_mixer_input_pad.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_mixer_input_pad.Tpo $(DEPDIR)/gsequencer-ags_mixer_input_pad.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_mixer_input_pad.c' object='gsequencer-ags_mixer_input_pad.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_mixer_input_pad.obj `if test -f 'src/ags/X/machine/ags_mixer_input_pad.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_mixer_input_pad.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_mixer_input_pad.c'; fi` gsequencer-ags_oscillator.o: src/ags/X/machine/ags_oscillator.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_oscillator.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_oscillator.Tpo -c -o gsequencer-ags_oscillator.o `test -f 'src/ags/X/machine/ags_oscillator.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_oscillator.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_oscillator.Tpo $(DEPDIR)/gsequencer-ags_oscillator.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_oscillator.c' object='gsequencer-ags_oscillator.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_oscillator.o `test -f 'src/ags/X/machine/ags_oscillator.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_oscillator.c gsequencer-ags_oscillator.obj: src/ags/X/machine/ags_oscillator.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_oscillator.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_oscillator.Tpo -c -o gsequencer-ags_oscillator.obj `if test -f 'src/ags/X/machine/ags_oscillator.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_oscillator.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_oscillator.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_oscillator.Tpo $(DEPDIR)/gsequencer-ags_oscillator.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_oscillator.c' object='gsequencer-ags_oscillator.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_oscillator.obj `if test -f 'src/ags/X/machine/ags_oscillator.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_oscillator.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_oscillator.c'; fi` gsequencer-ags_oscillator_callbacks.o: src/ags/X/machine/ags_oscillator_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_oscillator_callbacks.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_oscillator_callbacks.Tpo -c -o gsequencer-ags_oscillator_callbacks.o `test -f 'src/ags/X/machine/ags_oscillator_callbacks.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_oscillator_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_oscillator_callbacks.Tpo $(DEPDIR)/gsequencer-ags_oscillator_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_oscillator_callbacks.c' object='gsequencer-ags_oscillator_callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_oscillator_callbacks.o `test -f 'src/ags/X/machine/ags_oscillator_callbacks.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_oscillator_callbacks.c gsequencer-ags_oscillator_callbacks.obj: src/ags/X/machine/ags_oscillator_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_oscillator_callbacks.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_oscillator_callbacks.Tpo -c -o gsequencer-ags_oscillator_callbacks.obj `if test -f 'src/ags/X/machine/ags_oscillator_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_oscillator_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_oscillator_callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_oscillator_callbacks.Tpo $(DEPDIR)/gsequencer-ags_oscillator_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_oscillator_callbacks.c' object='gsequencer-ags_oscillator_callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_oscillator_callbacks.obj `if test -f 'src/ags/X/machine/ags_oscillator_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_oscillator_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_oscillator_callbacks.c'; fi` gsequencer-ags_panel.o: src/ags/X/machine/ags_panel.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_panel.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_panel.Tpo -c -o gsequencer-ags_panel.o `test -f 'src/ags/X/machine/ags_panel.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_panel.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_panel.Tpo $(DEPDIR)/gsequencer-ags_panel.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_panel.c' object='gsequencer-ags_panel.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_panel.o `test -f 'src/ags/X/machine/ags_panel.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_panel.c gsequencer-ags_panel.obj: src/ags/X/machine/ags_panel.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_panel.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_panel.Tpo -c -o gsequencer-ags_panel.obj `if test -f 'src/ags/X/machine/ags_panel.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_panel.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_panel.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_panel.Tpo $(DEPDIR)/gsequencer-ags_panel.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_panel.c' object='gsequencer-ags_panel.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_panel.obj `if test -f 'src/ags/X/machine/ags_panel.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_panel.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_panel.c'; fi` gsequencer-ags_panel_callbacks.o: src/ags/X/machine/ags_panel_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_panel_callbacks.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_panel_callbacks.Tpo -c -o gsequencer-ags_panel_callbacks.o `test -f 'src/ags/X/machine/ags_panel_callbacks.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_panel_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_panel_callbacks.Tpo $(DEPDIR)/gsequencer-ags_panel_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_panel_callbacks.c' object='gsequencer-ags_panel_callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_panel_callbacks.o `test -f 'src/ags/X/machine/ags_panel_callbacks.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_panel_callbacks.c gsequencer-ags_panel_callbacks.obj: src/ags/X/machine/ags_panel_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_panel_callbacks.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_panel_callbacks.Tpo -c -o gsequencer-ags_panel_callbacks.obj `if test -f 'src/ags/X/machine/ags_panel_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_panel_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_panel_callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_panel_callbacks.Tpo $(DEPDIR)/gsequencer-ags_panel_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_panel_callbacks.c' object='gsequencer-ags_panel_callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_panel_callbacks.obj `if test -f 'src/ags/X/machine/ags_panel_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_panel_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_panel_callbacks.c'; fi` gsequencer-ags_panel_input_line.o: src/ags/X/machine/ags_panel_input_line.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_panel_input_line.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_panel_input_line.Tpo -c -o gsequencer-ags_panel_input_line.o `test -f 'src/ags/X/machine/ags_panel_input_line.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_panel_input_line.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_panel_input_line.Tpo $(DEPDIR)/gsequencer-ags_panel_input_line.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_panel_input_line.c' object='gsequencer-ags_panel_input_line.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_panel_input_line.o `test -f 'src/ags/X/machine/ags_panel_input_line.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_panel_input_line.c gsequencer-ags_panel_input_line.obj: src/ags/X/machine/ags_panel_input_line.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_panel_input_line.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_panel_input_line.Tpo -c -o gsequencer-ags_panel_input_line.obj `if test -f 'src/ags/X/machine/ags_panel_input_line.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_panel_input_line.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_panel_input_line.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_panel_input_line.Tpo $(DEPDIR)/gsequencer-ags_panel_input_line.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_panel_input_line.c' object='gsequencer-ags_panel_input_line.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_panel_input_line.obj `if test -f 'src/ags/X/machine/ags_panel_input_line.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_panel_input_line.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_panel_input_line.c'; fi` gsequencer-ags_panel_input_pad.o: src/ags/X/machine/ags_panel_input_pad.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_panel_input_pad.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_panel_input_pad.Tpo -c -o gsequencer-ags_panel_input_pad.o `test -f 'src/ags/X/machine/ags_panel_input_pad.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_panel_input_pad.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_panel_input_pad.Tpo $(DEPDIR)/gsequencer-ags_panel_input_pad.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_panel_input_pad.c' object='gsequencer-ags_panel_input_pad.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_panel_input_pad.o `test -f 'src/ags/X/machine/ags_panel_input_pad.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_panel_input_pad.c gsequencer-ags_panel_input_pad.obj: src/ags/X/machine/ags_panel_input_pad.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_panel_input_pad.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_panel_input_pad.Tpo -c -o gsequencer-ags_panel_input_pad.obj `if test -f 'src/ags/X/machine/ags_panel_input_pad.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_panel_input_pad.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_panel_input_pad.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_panel_input_pad.Tpo $(DEPDIR)/gsequencer-ags_panel_input_pad.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_panel_input_pad.c' object='gsequencer-ags_panel_input_pad.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_panel_input_pad.obj `if test -f 'src/ags/X/machine/ags_panel_input_pad.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_panel_input_pad.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_panel_input_pad.c'; fi` gsequencer-ags_pattern_box_callbacks.o: src/ags/X/machine/ags_pattern_box_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_pattern_box_callbacks.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_pattern_box_callbacks.Tpo -c -o gsequencer-ags_pattern_box_callbacks.o `test -f 'src/ags/X/machine/ags_pattern_box_callbacks.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_pattern_box_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_pattern_box_callbacks.Tpo $(DEPDIR)/gsequencer-ags_pattern_box_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_pattern_box_callbacks.c' object='gsequencer-ags_pattern_box_callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_pattern_box_callbacks.o `test -f 'src/ags/X/machine/ags_pattern_box_callbacks.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_pattern_box_callbacks.c gsequencer-ags_pattern_box_callbacks.obj: src/ags/X/machine/ags_pattern_box_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_pattern_box_callbacks.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_pattern_box_callbacks.Tpo -c -o gsequencer-ags_pattern_box_callbacks.obj `if test -f 'src/ags/X/machine/ags_pattern_box_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_pattern_box_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_pattern_box_callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_pattern_box_callbacks.Tpo $(DEPDIR)/gsequencer-ags_pattern_box_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_pattern_box_callbacks.c' object='gsequencer-ags_pattern_box_callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_pattern_box_callbacks.obj `if test -f 'src/ags/X/machine/ags_pattern_box_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_pattern_box_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_pattern_box_callbacks.c'; fi` gsequencer-ags_pattern_box.o: src/ags/X/machine/ags_pattern_box.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_pattern_box.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_pattern_box.Tpo -c -o gsequencer-ags_pattern_box.o `test -f 'src/ags/X/machine/ags_pattern_box.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_pattern_box.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_pattern_box.Tpo $(DEPDIR)/gsequencer-ags_pattern_box.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_pattern_box.c' object='gsequencer-ags_pattern_box.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_pattern_box.o `test -f 'src/ags/X/machine/ags_pattern_box.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_pattern_box.c gsequencer-ags_pattern_box.obj: src/ags/X/machine/ags_pattern_box.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_pattern_box.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_pattern_box.Tpo -c -o gsequencer-ags_pattern_box.obj `if test -f 'src/ags/X/machine/ags_pattern_box.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_pattern_box.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_pattern_box.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_pattern_box.Tpo $(DEPDIR)/gsequencer-ags_pattern_box.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_pattern_box.c' object='gsequencer-ags_pattern_box.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_pattern_box.obj `if test -f 'src/ags/X/machine/ags_pattern_box.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_pattern_box.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_pattern_box.c'; fi` gsequencer-ags_synth.o: src/ags/X/machine/ags_synth.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_synth.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_synth.Tpo -c -o gsequencer-ags_synth.o `test -f 'src/ags/X/machine/ags_synth.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_synth.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_synth.Tpo $(DEPDIR)/gsequencer-ags_synth.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_synth.c' object='gsequencer-ags_synth.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_synth.o `test -f 'src/ags/X/machine/ags_synth.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_synth.c gsequencer-ags_synth.obj: src/ags/X/machine/ags_synth.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_synth.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_synth.Tpo -c -o gsequencer-ags_synth.obj `if test -f 'src/ags/X/machine/ags_synth.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_synth.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_synth.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_synth.Tpo $(DEPDIR)/gsequencer-ags_synth.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_synth.c' object='gsequencer-ags_synth.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_synth.obj `if test -f 'src/ags/X/machine/ags_synth.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_synth.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_synth.c'; fi` gsequencer-ags_synth_callbacks.o: src/ags/X/machine/ags_synth_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_synth_callbacks.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_synth_callbacks.Tpo -c -o gsequencer-ags_synth_callbacks.o `test -f 'src/ags/X/machine/ags_synth_callbacks.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_synth_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_synth_callbacks.Tpo $(DEPDIR)/gsequencer-ags_synth_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_synth_callbacks.c' object='gsequencer-ags_synth_callbacks.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_synth_callbacks.o `test -f 'src/ags/X/machine/ags_synth_callbacks.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_synth_callbacks.c gsequencer-ags_synth_callbacks.obj: src/ags/X/machine/ags_synth_callbacks.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_synth_callbacks.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_synth_callbacks.Tpo -c -o gsequencer-ags_synth_callbacks.obj `if test -f 'src/ags/X/machine/ags_synth_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_synth_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_synth_callbacks.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_synth_callbacks.Tpo $(DEPDIR)/gsequencer-ags_synth_callbacks.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_synth_callbacks.c' object='gsequencer-ags_synth_callbacks.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_synth_callbacks.obj `if test -f 'src/ags/X/machine/ags_synth_callbacks.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_synth_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_synth_callbacks.c'; fi` gsequencer-ags_synth_input_line.o: src/ags/X/machine/ags_synth_input_line.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_synth_input_line.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_synth_input_line.Tpo -c -o gsequencer-ags_synth_input_line.o `test -f 'src/ags/X/machine/ags_synth_input_line.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_synth_input_line.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_synth_input_line.Tpo $(DEPDIR)/gsequencer-ags_synth_input_line.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_synth_input_line.c' object='gsequencer-ags_synth_input_line.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_synth_input_line.o `test -f 'src/ags/X/machine/ags_synth_input_line.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_synth_input_line.c gsequencer-ags_synth_input_line.obj: src/ags/X/machine/ags_synth_input_line.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_synth_input_line.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_synth_input_line.Tpo -c -o gsequencer-ags_synth_input_line.obj `if test -f 'src/ags/X/machine/ags_synth_input_line.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_synth_input_line.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_synth_input_line.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_synth_input_line.Tpo $(DEPDIR)/gsequencer-ags_synth_input_line.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_synth_input_line.c' object='gsequencer-ags_synth_input_line.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_synth_input_line.obj `if test -f 'src/ags/X/machine/ags_synth_input_line.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_synth_input_line.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_synth_input_line.c'; fi` gsequencer-ags_synth_input_pad.o: src/ags/X/machine/ags_synth_input_pad.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_synth_input_pad.o -MD -MP -MF $(DEPDIR)/gsequencer-ags_synth_input_pad.Tpo -c -o gsequencer-ags_synth_input_pad.o `test -f 'src/ags/X/machine/ags_synth_input_pad.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_synth_input_pad.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_synth_input_pad.Tpo $(DEPDIR)/gsequencer-ags_synth_input_pad.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_synth_input_pad.c' object='gsequencer-ags_synth_input_pad.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_synth_input_pad.o `test -f 'src/ags/X/machine/ags_synth_input_pad.c' || echo '$(srcdir)/'`src/ags/X/machine/ags_synth_input_pad.c gsequencer-ags_synth_input_pad.obj: src/ags/X/machine/ags_synth_input_pad.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -MT gsequencer-ags_synth_input_pad.obj -MD -MP -MF $(DEPDIR)/gsequencer-ags_synth_input_pad.Tpo -c -o gsequencer-ags_synth_input_pad.obj `if test -f 'src/ags/X/machine/ags_synth_input_pad.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_synth_input_pad.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_synth_input_pad.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gsequencer-ags_synth_input_pad.Tpo $(DEPDIR)/gsequencer-ags_synth_input_pad.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/ags/X/machine/ags_synth_input_pad.c' object='gsequencer-ags_synth_input_pad.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gsequencer_CFLAGS) $(CFLAGS) -c -o gsequencer-ags_synth_input_pad.obj `if test -f 'src/ags/X/machine/ags_synth_input_pad.c'; then $(CYGPATH_W) 'src/ags/X/machine/ags_synth_input_pad.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/X/machine/ags_synth_input_pad.c'; fi` midi2xml-main.o: src/midi2ags/main.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(midi2xml_CFLAGS) $(CFLAGS) -MT midi2xml-main.o -MD -MP -MF $(DEPDIR)/midi2xml-main.Tpo -c -o midi2xml-main.o `test -f 'src/midi2ags/main.c' || echo '$(srcdir)/'`src/midi2ags/main.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/midi2xml-main.Tpo $(DEPDIR)/midi2xml-main.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/midi2ags/main.c' object='midi2xml-main.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(midi2xml_CFLAGS) $(CFLAGS) -c -o midi2xml-main.o `test -f 'src/midi2ags/main.c' || echo '$(srcdir)/'`src/midi2ags/main.c midi2xml-main.obj: src/midi2ags/main.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(midi2xml_CFLAGS) $(CFLAGS) -MT midi2xml-main.obj -MD -MP -MF $(DEPDIR)/midi2xml-main.Tpo -c -o midi2xml-main.obj `if test -f 'src/midi2ags/main.c'; then $(CYGPATH_W) 'src/midi2ags/main.c'; else $(CYGPATH_W) '$(srcdir)/src/midi2ags/main.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/midi2xml-main.Tpo $(DEPDIR)/midi2xml-main.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/midi2ags/main.c' object='midi2xml-main.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(midi2xml_CFLAGS) $(CFLAGS) -c -o midi2xml-main.obj `if test -f 'src/midi2ags/main.c'; then $(CYGPATH_W) 'src/midi2ags/main.c'; else $(CYGPATH_W) '$(srcdir)/src/midi2ags/main.c'; fi` midi2xml-ags_midi_parser.o: src/midi2ags/midi/ags_midi_parser.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(midi2xml_CFLAGS) $(CFLAGS) -MT midi2xml-ags_midi_parser.o -MD -MP -MF $(DEPDIR)/midi2xml-ags_midi_parser.Tpo -c -o midi2xml-ags_midi_parser.o `test -f 'src/midi2ags/midi/ags_midi_parser.c' || echo '$(srcdir)/'`src/midi2ags/midi/ags_midi_parser.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/midi2xml-ags_midi_parser.Tpo $(DEPDIR)/midi2xml-ags_midi_parser.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/midi2ags/midi/ags_midi_parser.c' object='midi2xml-ags_midi_parser.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(midi2xml_CFLAGS) $(CFLAGS) -c -o midi2xml-ags_midi_parser.o `test -f 'src/midi2ags/midi/ags_midi_parser.c' || echo '$(srcdir)/'`src/midi2ags/midi/ags_midi_parser.c midi2xml-ags_midi_parser.obj: src/midi2ags/midi/ags_midi_parser.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(midi2xml_CFLAGS) $(CFLAGS) -MT midi2xml-ags_midi_parser.obj -MD -MP -MF $(DEPDIR)/midi2xml-ags_midi_parser.Tpo -c -o midi2xml-ags_midi_parser.obj `if test -f 'src/midi2ags/midi/ags_midi_parser.c'; then $(CYGPATH_W) 'src/midi2ags/midi/ags_midi_parser.c'; else $(CYGPATH_W) '$(srcdir)/src/midi2ags/midi/ags_midi_parser.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/midi2xml-ags_midi_parser.Tpo $(DEPDIR)/midi2xml-ags_midi_parser.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/midi2ags/midi/ags_midi_parser.c' object='midi2xml-ags_midi_parser.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(midi2xml_CFLAGS) $(CFLAGS) -c -o midi2xml-ags_midi_parser.obj `if test -f 'src/midi2ags/midi/ags_midi_parser.c'; then $(CYGPATH_W) 'src/midi2ags/midi/ags_midi_parser.c'; else $(CYGPATH_W) '$(srcdir)/src/midi2ags/midi/ags_midi_parser.c'; fi` midi2xml-ags_marshal.o: src/midi2ags/object/ags_marshal.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(midi2xml_CFLAGS) $(CFLAGS) -MT midi2xml-ags_marshal.o -MD -MP -MF $(DEPDIR)/midi2xml-ags_marshal.Tpo -c -o midi2xml-ags_marshal.o `test -f 'src/midi2ags/object/ags_marshal.c' || echo '$(srcdir)/'`src/midi2ags/object/ags_marshal.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/midi2xml-ags_marshal.Tpo $(DEPDIR)/midi2xml-ags_marshal.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/midi2ags/object/ags_marshal.c' object='midi2xml-ags_marshal.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(midi2xml_CFLAGS) $(CFLAGS) -c -o midi2xml-ags_marshal.o `test -f 'src/midi2ags/object/ags_marshal.c' || echo '$(srcdir)/'`src/midi2ags/object/ags_marshal.c midi2xml-ags_marshal.obj: src/midi2ags/object/ags_marshal.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(midi2xml_CFLAGS) $(CFLAGS) -MT midi2xml-ags_marshal.obj -MD -MP -MF $(DEPDIR)/midi2xml-ags_marshal.Tpo -c -o midi2xml-ags_marshal.obj `if test -f 'src/midi2ags/object/ags_marshal.c'; then $(CYGPATH_W) 'src/midi2ags/object/ags_marshal.c'; else $(CYGPATH_W) '$(srcdir)/src/midi2ags/object/ags_marshal.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/midi2xml-ags_marshal.Tpo $(DEPDIR)/midi2xml-ags_marshal.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='src/midi2ags/object/ags_marshal.c' object='midi2xml-ags_marshal.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(midi2xml_CFLAGS) $(CFLAGS) -c -o midi2xml-ags_marshal.obj `if test -f 'src/midi2ags/object/ags_marshal.c'; then $(CYGPATH_W) 'src/midi2ags/object/ags_marshal.c'; else $(CYGPATH_W) '$(srcdir)/src/midi2ags/object/ags_marshal.c'; fi` install-man1: $(man1_MANS) @$(NORMAL_INSTALL) @list1='$(man1_MANS)'; \ list2=''; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list='$(man1_MANS)'; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) install-appdataDATA: $(appdata_DATA) @$(NORMAL_INSTALL) @list='$(appdata_DATA)'; test -n "$(appdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(appdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(appdatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(appdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(appdatadir)" || exit $$?; \ done uninstall-appdataDATA: @$(NORMAL_UNINSTALL) @list='$(appdata_DATA)'; test -n "$(appdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(appdatadir)'; $(am__uninstall_files_from_dir) install-docDATA: $(doc_DATA) @$(NORMAL_INSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(docdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(docdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \ done uninstall-docDATA: @$(NORMAL_UNINSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build/sub \ && ../../configure \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ --srcdir=../.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) $(PROGRAMS) $(MANS) $(DATA) config.h installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(appdatadir)" "$(DESTDIR)$(docdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-local \ clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-tags dvi: dvi-am dvi-am: html-am: info: info-am info-am: install-data-am: install-appdataDATA install-data-local \ install-docDATA install-man install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html-am: install-info: install-info-am install-info-am: install-man: install-man1 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-appdataDATA uninstall-binPROGRAMS \ uninstall-docDATA uninstall-man @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) uninstall-hook uninstall-man: uninstall-man1 .MAKE: all install-am install-strip uninstall-am .PHONY: CTAGS GTAGS TAGS all all-am am--refresh check check-am clean \ clean-binPROGRAMS clean-cscope clean-generic clean-local \ clean-noinstLIBRARIES cscope cscopelist-am ctags ctags-am dist \ dist-all dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ \ dist-xz dist-zip distcheck distclean distclean-compile \ distclean-generic distclean-hdr distclean-tags distcleancheck \ distdir distuninstallcheck dvi dvi-am html html-am info \ info-am install install-am install-appdataDATA \ install-binPROGRAMS install-data install-data-am \ install-data-local install-docDATA install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-man1 \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-appdataDATA \ uninstall-binPROGRAMS uninstall-docDATA uninstall-hook \ uninstall-man uninstall-man1 .PRECIOUS: Makefile gsequencer.1: xsltproc --nonet --param make.year.ranges 1 --param make.single.year.ranges 1 --param man.charmap.use.subset 0 -o ./ http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl gsequencer.1.xml midi2xml.1: xsltproc --nonet --param make.year.ranges 1 --param make.single.year.ranges 1 --param man.charmap.use.subset 0 -o ./ http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl midi2xml.1.xml gsequencer.desktop: gsequencer.desktop.in $(AM_V_GEN)sed -e 's,\@datadir\@,$(datadir),g' < "$<" > $@ html: mkdir -p html/ xsltproc --output html/ --xinclude /usr/share/xml/docbook/stylesheet/docbook-xsl/htmlhelp/htmlhelp.xsl $(top_srcdir)/doc/usersBook.xml install-data-local: mkdir -p $(DESTDIR)/$(datadir)/doc-base mkdir -p $(DESTDIR)/$(datadir)/gsequencer/icons mkdir -p $(DESTDIR)/$(datadir)/gsequencer/images mkdir -p $(DESTDIR)/$(datadir)/xml/gsequencer/{schema/dtd/0.4.2/,stylesheet/ags-xsl/midi-xml/} cp $(top_srcdir)/gsequencer.share/icons/ags.xpm $(DESTDIR)/$(datadir)/gsequencer/icons/ags.xpm cp $(top_srcdir)/gsequencer.share/images/ags.png $(DESTDIR)/$(datadir)/gsequencer/images/ags.png cp $(top_srcdir)/src/ags/file/ags_file.dtd $(DESTDIR)/$(datadir)/xml/gsequencer/schema/dtd/0.4.2/ cp $(top_srcdir)/ags.xsl $(DESTDIR)/$(datadir)/xml/gsequencer/stylesheet/ags-xsl/midi-xml/ cp $(top_srcdir)/gsequencer-documentation $(DESTDIR)/$(datadir)/doc-base/ mkdir -p $(DESTDIR)/$(datadir)/doc/gsequencer/ gzip -9 -c $(top_srcdir)/ChangeLog > $(DESTDIR)/$(datadir)/doc/gsequencer/changelog.gz install-html: html mkdir -p $(DESTDIR)/$(datadir)/doc/gsequencer/{images,html}/ cp $(userdocimages) $(DESTDIR)/$(datadir)/doc/gsequencer/images/ cp html/* $(DESTDIR)/$(datadir)/doc/gsequencer/html/ uninstall-hook: rm -rf $(DESTDIR)/$(datadir)/gsequencer rm -rf $(DESTDIR)/$(datadir)/doc/gsequencer rm -rf $(DESTDIR)/$(datadir)/xml/gsequencer rm -f $(DESTDIR)/$(datadir)/doc-base/gsequencer-documentation clean-local: rm -rf html # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gsequencer-0.6.37/ags.xsl0000644000175000017500000002464212612232514012201 00000000000000 ]> 60.0 1000000.0 floor($division div 256) floor($division div 256) * 256 60.0 1000000.0 floor($division div 256) floor($division div 256) * 256 note- 0 notation- 0 C note-list- _ 13f 0 &audiochannels; 1 128 xpath=//ags-devout notation-list- AgsFFPlayer machine- 628 &version; &buildid; 0 - xpath=//ags-audio[@id='_'] ffplayer- &defaultsf2; &preset; &instrument; ags-main- devout-list- ags-devout- 100 ags-audio-list- ags-audio-list window- 0 xpath=//ags-devout machine-list- ags-machine-list gsequencer-0.6.37/config.rpath0000644000175000017500000004443512621463700013211 00000000000000#! /bin/sh # Output a system dependent set of variables, describing how to set the # run time search path of shared libraries in an executable. # # Copyright 1996-2013 Free Software Foundation, Inc. # Taken from GNU libtool, 2001 # Originally by Gordon Matzigkeit , 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # # The first argument passed to this file is the canonical host specification, # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld # should be set by the caller. # # The set of defined variables is at the end of this script. # Known limitations: # - On IRIX 6.5 with CC="cc", the run time search patch must not be longer # than 256 bytes, otherwise the compiler driver will dump core. The only # known workaround is to choose shorter directory names for the build # directory and/or the installation directory. # All known linkers require a '.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a shrext=.so host="$1" host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` # Code taken from libtool.m4's _LT_CC_BASENAME. for cc_temp in $CC""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'` # Code taken from libtool.m4's _LT_COMPILER_PIC. wl= if test "$GCC" = yes; then wl='-Wl,' else case "$host_os" in aix*) wl='-Wl,' ;; mingw* | cygwin* | pw32* | os2* | cegcc*) ;; hpux9* | hpux10* | hpux11*) wl='-Wl,' ;; irix5* | irix6* | nonstopux*) wl='-Wl,' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in ecc*) wl='-Wl,' ;; icc* | ifort*) wl='-Wl,' ;; lf95*) wl='-Wl,' ;; nagfor*) wl='-Wl,-Wl,,' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) wl='-Wl,' ;; ccc*) wl='-Wl,' ;; xl* | bgxl* | bgf* | mpixl*) wl='-Wl,' ;; como) wl='-lopt=' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ F* | *Sun*Fortran*) wl= ;; *Sun\ C*) wl='-Wl,' ;; esac ;; esac ;; newsos6) ;; *nto* | *qnx*) ;; osf3* | osf4* | osf5*) wl='-Wl,' ;; rdos*) ;; solaris*) case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) wl='-Qoption ld ' ;; *) wl='-Wl,' ;; esac ;; sunos4*) wl='-Qoption ld ' ;; sysv4 | sysv4.2uw2* | sysv4.3*) wl='-Wl,' ;; sysv4*MP*) ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) wl='-Wl,' ;; unicos*) wl='-Wl,' ;; uts4*) ;; esac fi # Code taken from libtool.m4's _LT_LINKER_SHLIBS. hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no case "$host_os" in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. # Unlike libtool, we use -rpath here, not --rpath, since the documented # option of GNU ld is called -rpath, not --rpath. hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' case "$host_os" in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no fi ;; amigaos*) case "$host_cpu" in powerpc) ;; m68k) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then : else ld_shlibs=no fi ;; haiku*) ;; interix[3-9]*) hardcode_direct=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; netbsd*) ;; solaris*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs=no elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' else ld_shlibs=no fi ;; esac ;; sunos4*) hardcode_direct=yes ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then hardcode_libdir_flag_spec= fi else case "$host_os" in aix3*) # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac fi hardcode_direct=yes hardcode_libdir_separator=':' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac fi # Begin _LT_AC_SYS_LIBPATH_AIX. echo 'int main () { return 0; }' > conftest.c ${CC} ${LDFLAGS} conftest.c -o conftest aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` fi if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib" fi rm -f conftest.c conftest # End _LT_AC_SYS_LIBPATH_AIX. if test "$aix_use_runtimelinking" = yes; then hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' else hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" fi fi ;; amigaos*) case "$host_cpu" in powerpc) ;; m68k) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' libext=lib ;; darwin* | rhapsody*) hardcode_direct=no if { case $cc_basename in ifort*) true;; *) test "$GCC" = yes;; esac; }; then : else ld_shlibs=no fi ;; dgux*) hardcode_libdir_flag_spec='-L$libdir' ;; freebsd2.2*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; freebsd2*) hardcode_direct=yes hardcode_minus_L=yes ;; freebsd* | dragonfly*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; hpux9*) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; hpux10*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no ;; *) hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; netbsd*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; newsos6) hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then hardcode_libdir_flag_spec='${wl}-rpath,$libdir' else case "$host_os" in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) hardcode_libdir_flag_spec='-R$libdir' ;; *) hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; osf3*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) if test "$GCC" = yes; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else # Both cc and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi hardcode_libdir_separator=: ;; solaris*) hardcode_libdir_flag_spec='-R$libdir' ;; sunos4*) hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes ;; sysv4) case $host_vendor in sni) hardcode_direct=yes # is this really true??? ;; siemens) hardcode_direct=no ;; motorola) hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac ;; sysv4.3*) ;; sysv4*MP*) if test -d /usr/nec; then ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) ;; sysv5* | sco3.2v5* | sco5v6*) hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator=':' ;; uts4*) hardcode_libdir_flag_spec='-L$libdir' ;; *) ld_shlibs=no ;; esac fi # Check dynamic linker characteristics # Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER. # Unlike libtool.m4, here we don't care about _all_ names of the library, but # only about the one the linker finds when passed -lNAME. This is the last # element of library_names_spec in libtool.m4, or possibly two of them if the # linker has special search rules. library_names_spec= # the last element of library_names_spec in libtool.m4 libname_spec='lib$name' case "$host_os" in aix3*) library_names_spec='$libname.a' ;; aix[4-9]*) library_names_spec='$libname$shrext' ;; amigaos*) case "$host_cpu" in powerpc*) library_names_spec='$libname$shrext' ;; m68k) library_names_spec='$libname.a' ;; esac ;; beos*) library_names_spec='$libname$shrext' ;; bsdi[45]*) library_names_spec='$libname$shrext' ;; cygwin* | mingw* | pw32* | cegcc*) shrext=.dll library_names_spec='$libname.dll.a $libname.lib' ;; darwin* | rhapsody*) shrext=.dylib library_names_spec='$libname$shrext' ;; dgux*) library_names_spec='$libname$shrext' ;; freebsd* | dragonfly*) case "$host_os" in freebsd[123]*) library_names_spec='$libname$shrext$versuffix' ;; *) library_names_spec='$libname$shrext' ;; esac ;; gnu*) library_names_spec='$libname$shrext' ;; haiku*) library_names_spec='$libname$shrext' ;; hpux9* | hpux10* | hpux11*) case $host_cpu in ia64*) shrext=.so ;; hppa*64*) shrext=.sl ;; *) shrext=.sl ;; esac library_names_spec='$libname$shrext' ;; interix[3-9]*) library_names_spec='$libname$shrext' ;; irix5* | irix6* | nonstopux*) library_names_spec='$libname$shrext' case "$host_os" in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; *) libsuff= shlibsuff= ;; esac ;; esac ;; linux*oldld* | linux*aout* | linux*coff*) ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) library_names_spec='$libname$shrext' ;; knetbsd*-gnu) library_names_spec='$libname$shrext' ;; netbsd*) library_names_spec='$libname$shrext' ;; newsos6) library_names_spec='$libname$shrext' ;; *nto* | *qnx*) library_names_spec='$libname$shrext' ;; openbsd*) library_names_spec='$libname$shrext$versuffix' ;; os2*) libname_spec='$name' shrext=.dll library_names_spec='$libname.a' ;; osf3* | osf4* | osf5*) library_names_spec='$libname$shrext' ;; rdos*) ;; solaris*) library_names_spec='$libname$shrext' ;; sunos4*) library_names_spec='$libname$shrext$versuffix' ;; sysv4 | sysv4.3*) library_names_spec='$libname$shrext' ;; sysv4*MP*) library_names_spec='$libname$shrext' ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) library_names_spec='$libname$shrext' ;; tpf*) library_names_spec='$libname$shrext' ;; uts4*) library_names_spec='$libname$shrext' ;; esac sed_quote_subst='s/\(["`$\\]\)/\\\1/g' escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` shlibext=`echo "$shrext" | sed -e 's,^\.,,'` escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' < ]> Foreword When I started to use GNU/Linux in 2001 I missed only one thing. A sequencer with a nice GUI. There was already rosegarden available. But who didn't get stuck of midi setup, yet? The time before I was using free software and became an affiliate to its community I was using &win98; on my father's desktop computer and did my first steps in &java2;. My very first own Notebook was a &n160; and it's preinstalled &win98; had to vanish because I became a fellow of &stallman;. Soon, I begun to code and older I became my demands to ags increased. I developed the concept of the underlying audio library myself as not graduated college student. October 2005, I decided to reimplement &ags; from scratch in order to get rid of inherited burden. And it was one big development process until I was almost satisfied with it's design. There was a time in 2007 where I even wanted to replace GObject and Gtk+ dependencies with my own libraries I begun to develop. I'm glad of didn't doing so. Thank you! gsequencer-0.6.37/doc/usersBook/chap4.xml0000644000175000017500000000612412626272146015146 00000000000000 ]> The navigation The navigation screenshot With the navigation you have overall control of your song. Settings you perform here may influence the behaviour of AGS. BPM The beats per minute (BPM for short) indicates the velocity of a song being played. To adjust the BPM of the project in-/decrement the spinner labeled with bpm. To edit patterns or notes at a more granular rate select the wished tact within the appropriate engine or editor. To calculate timings you divide 1 minute with the entered BPM and divide it with basic. For example you have a BPM rate of 120 and a 4/4 tact you would calculate the timing as follow: t = 1 / 120 * (1 / 4) Playback controls With these controls you can play/stop a song or seek to the wished position. AGS playback controls table icon action description backward Seeking back until it's pressed again. previous Seeking back until it's not pressed anymore. play Starts the engines and the piano roll. stop Stops the engines and the piano roll. next Seeking forward until it's not pressed anymore. forward Seeking forward until it's pressed again.
gsequencer-0.6.37/doc/usersBook/appb.xml0000644000175000017500000000031112626272146015061 00000000000000 Resources gsequencer-0.6.37/doc/usersBook/chap2.xml0000644000175000017500000003206112626272146015143 00000000000000 Engines You can add engines by activating the appropriate menu item within the "add" submenu of the "edit" menu item. You may change the properties of an engine by opening the properties dialog from the context menu. From the context menu you may perform some other tasks, too. To move up or down an engine open context menu and activate "up" respectively "down" entry. To show or hide an engine open context menu and activate "show" respectively "hide" entry. Note the engines won't be hidden entirely they are just collapsed. To rename an engine open context menu and activate "rename" entry. To remove an engine open context menu and activate "destroy" entry. To open properties dialog open context menu and activate "properties" entry. There you might link, resize or asign LADSPA effects to channels. NOTE for LADSPA sink or generators aren't supported, yet. Machine properties Within properties dialog you can link lines or add effects and adjust audio-channels/pads. Output tab The machine properties dialog screenshot - output tab The output tab lets you mainly perform linking lines and adding effects to them. For each line there's a combo box listing available linking engines, on the right of it there is a spin button let you choose the input line to be linked. As you have added LADSPA effects by clicking add and selected appropriate plugin by using LADSPA dialog. You may remove it by clicking checkbox of the listed plugin and finally click remove. Input tab The machine properties dialog screenshot - input tab The input tab does the mainly same as output tab in view of input lines. If supported you might assign files, too. Link input tab The machine properties dialog screenshot - link input tab Do linking in batch mode. This means you're able to assign multiple lines at once. Thus you have to decide what start channel on each side to use and the count of lines to be linked. Resize channels tab The machine properties dialog screenshot - resize tab Adjust audio channels or input/output pads. If supported the GUI may provide more lines and pads as increasing the amount. LADSPA browser dialog The LADSPA browser dialog screenshot The LADSPA browser gives you choice of available LADSPA plugin. It lets you modify the controls to be used. The added plugin can be removed by activating checkbox in output/input tab and clicking remove. Panel The panel screenshot The panel is used for outputting to your soundcard and should be at topmost of your audio processing tree. It contains per audio channel a mute check box. Due the synchroneous nature of the output engine you're just able to adjust the audio channels. The output pads aren't visible and the ones available for input are packed vertically. Mixer The mixer screenshot Bundle audio lines with the mixer and perform toplevel stream manipulation. It contains per audio channel a volume indicator and may contain LADSPA plugins. Due the limitation of recycling it is just able to handle multiple input lines and only one output pad. Whereas the output is hidden. They are locate just below the machine's menu tool button. Drum The drum screenshot Produce an audio stream by defining a pattern. The drum supports opening audio files and associate to its input. You might doing it by open button located preceeding to pattern box. Thus multi-selection of files is supported and assigning can be controlled by the controls just above the action widgets. The drum input pad contains an open button, too. It assigns available audio channels of the file to the grouped lines. One more way to assign audio files is doing it so by link editor of machine's property dialog. The drum may contain LADSPA plugins, too. The drum may contain multiple input as well output pads. They are packed on top of the composite widget, just below the machine's menu tool button. The input is packed horizontally followed by vertically packed output. The edit button within every input pad enables it as current input for editing pattern data. Further you may de-/activate the group toggle button to control audio channel assignment. Next to the multi-selection enable open button there's a loop check-box followed by the run button what starts the drum sequencer. It follows the into a two dimensional matrix packed pattern banks. Labeled from 1 to 12 and an the combined index labeled a throughout d. The length spin-button controls the number of pattern pads to be played in sequence which may be looped. The pattern box As entering to pattern box with focus the only way to get out of it is by tabulator key. With arrow keys you may navigate within pattern or toggle with space. Left, Left-Arrow Move within pattern box left, as the pattern pad control is activate you get an audible feedback. Right, Right-Arrow Move within pattern box right, audible feedback as above. Up, Up-Arrow Decrease pattern box offset about available number of pattern pads, audible feedback as above. Down, Down-Arrow Increase pattern box offset about available number of pattern pads, audible feedback as above. Space Toggle audio pattern and give audible feedback. Ctrl+c Copy the current pattern to clipboard Tab Leave pattern box focus. Matrix The matrix screenshot Produce an audio stream by defining a pattern. The matrix itselves doesn't have any audio signals on its own input you may rather link it to a synth engine. The matrix is a rectangular area you may navigate within by arrow keys or toggle pattern by hiting space. The matrix is a true mono device but you may emulate multiple channels by doing multi-output. This is fulfilled by adjusting output pads within machine's properties dialog. Run button comes first and is followed by a one dimensional vector bank index labeled from 1 to 9. Then follows the matrix you have to leave it by hiting tab then you might modify sequence length or do loop control of the sequence. Left, Left-Arrow Move within matrix left, as the pattern pad control is activate you get an audible feedback. Right, Right-Arrow Move within matrix right, audible feedback as above. Up, Up-Arrow Decrease matrix offset about available number of pattern pads, audible feedback as above. Down, Down-Arrow Increase matrix offset about available number of pattern pads, audible feedback as above. Space Toggle audio pattern and give audible feedback. Ctrl+c Copy the current pattern to clipboard Tab Leave matrix focus. Synth The synth screenshot Produce audio data using its oscillators. The count of oscillators depends on number of input lines. They are adjusted vertically. You have on the right the option to auto-update changes you do with the controls or do it manually with the update button. Warning: There are some disabled controls. FFPlayer The ffplayer screenshot Produce audio data by opening Soundfont2 audio file container format. There three available controls, preset and instrument to navigate within container format and a open button to read Soundfont2 files and assign the selected instrument to the input. gsequencer-0.6.37/doc/usersBook/chap1.xml0000644000175000017500000001156412626272146015147 00000000000000 ]> The menubar Within the mainbar you may do basic tasks like open/close files or show this help. In this section we cover briefly the the different entries. File The file menu lets you do maintenance related to files or quit application. Open - open an &ags; XML file. Save - save your current work. Save as - save your current work as a different filename. Export - export to PCM audio file. Quit - leave &ags;. Export to PCM audio file The export window dialog screenshot. This shows you the export dialog. You may select filename to export to and duration of the exported track. BPM adjustment is take from the navigation. Basically &ags; exports what you hear of the speakers. With the export toggle button you can start exporting to PCM audio file or stop it at an arbitrary time. Edit The edit menu lets you add/remove audio machines or open preferences dialog. Add - select of different machines Panel - acts as your default sink. Mixer - enables you to bundle your different output engines. Drum - is used to do pattern editing using PCM audio files. Matrix - is used to pattern editing, intended to be linked against Synth. Synth - is a software synthesizer. FFPlayer - may be used to open Soundfont2 audio file container format. Remove - the focused machine. Preferences - open preferences dialog. Preferences dialog Within preferences dialog you may choose between different topics. For each one one tab. Generic The preferences dialog screenshot - generic tab The autosave thread option enables auto-saving to $HOME/.gsequencer directory. Audio The preferences dialog screenshot - audio tab Sound card is your physical devices to do playback. Audio channels specifies the audio channels to allocate for output device. Samplerate affects the entire project. Your audio files have to be at very same rate further your device has to support the given rate. Buffer size is used for all audio buffers. Your soundcard has to support the passed buffer size. Performance The preferences dialog screenshot - performance tab Auto-sense on stream is required for certain LADSPA plugins but may cause additional performance losses. Server The preferences dialog screenshot - server tab Ignored for now. gsequencer-0.6.37/doc/usersBook/chap3.xml0000644000175000017500000002263712626272146015154 00000000000000 ]> Editor The editor features a piano roll. After linking an editor index with an enginge You may perform tasks like adding notes or copy, cut and paste them. You may change view segmentation, too. Further you might shift the displayed piano on the left or reverse the channel mapping. Linking Before you might perform any task with the editor you have to link engines by adding an index. Then you should link it with an engine. That can all be done by using the menu button of the index list. The corresponding editor appears as you click appropriate link. Toolbar The editor's toolbar screenshot In the table below are the various buttons explained you may use for editing. AGS editor toolbar controls table. icon action description cursor You may want to set the cursor to paste notes at the position where it is located. notes Add notes by clicking within the piano roll and move to till them having the wished duration. delete Delete notes by clicking on the note you don't want anymore. select Select notes to copy or cut them. copy Copy notes to the clipboard. cut Cut notes to the clipboard. paste Paste the previously copied or cutted notes at the cursor position or just insert them where they are/were located. missing invert Invert entire notation in conjunction with reverse mapping or MIDI import.
Pattern edit The pattern edit widget is available as linking an editor index with a pattern sequencer e.g. drum or matrix. Left, Left-Arrow Move within notation left, as there is a pattern you get an audible feedback. Right, Right-Arrow Move within notation right, audible feedback as above. Up, Up-Arrow Move within notation up, audible feedback as above. Down, Down-Arrow Move within notation down, audible feedback as above. Space Add audio pattern and give audible feedback. Delete Remove audio pattern and give audible feedback. Ctrl+c Copy the selected pattern to clipboard. Ctrl+x Cut the selected pattern to clipboard. Ctrl+v Paste pattern from clipboard. Ctrl+a Select all. Ctrl+i Invert all. Tab Leave notation focus. Note edit The note edit widget is available as linking an editor index with a notes sequencer e.g. Soundfont2 file player. Left, Left-Arrow Move within notation left, as there is a note you get an audible feedback. Right, Right-Arrow Move within notation right, audible feedback as above. Up, Up-Arrow Move within notation up, audible feedback as above. Down, Down-Arrow Move within notation down, audible feedback as above. Space Add audio notes and give audible feedback. Delete Remove audio notes and give audible feedback. Ctrl+c Copy the selected notes to clipboard. Ctrl+x Cut the selected notes to clipboard. Ctrl+v Paste notes from clipboard. Ctrl+a Select all. Ctrl+i Invert all. Tab Leave notation focus.
gsequencer-0.6.37/doc/usersBook.xml0000644000175000017500000000273712626272146014155 00000000000000 ]> Advanced Gtk+ Sequencer User's Handbook Copyright (C) &jkraehemann;. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". Joël Krähemann This book is dedicated to my father †Hans-Jörg Krähemann. gsequencer-0.6.37/doc/images/0000755000175000017500000000000012633241336012766 500000000000000gsequencer-0.6.37/doc/images/ags_mixer.png0000644000175000017500000002111412626272145015375 00000000000000PNG  IHDR!3Ӝ3 pHYs+tIME /fetEXtCommentCreated with GIMPW IDATxytUo-I'A5;MpD$Gem6}2(8( ʎn D Iz,tB4)\8[sWUW3{W]#g@tBp$`a@D1B6wYu3J(J(d+%jZ/ P*sLs{ 7Rp?]0 iiq&%R"%R"%R"%Rk `خf\}q7P6蓮W{vwLA3Bѿ=J2)[șIvR"%R"%R"%RrrJ4sQW6w! |>ᢉ̽/xr/!9gF*)))漦̙=kҔ T!o/~=bA8 cPc \))[ hHRRRn((J(JvS 5pOisz<9yuCtPB %PB %[)%@d!Yo~yyys@U˽kVHo߾SPB %PB %(8Rc4۰a}ܪjȑ1׬^ݱSWPB %PB %[)Qc1dLy9s(J(JRp8kfraPB %PB %[)PcX1v(J(JRpv3#lԞɹ36cƜs m9J(J(d+%g̙=k¤) x @]z^daPB %PB %[)PcX1^vSJ(J(w@sQ>g}F8vJ(J(w@s:@@@͇ew~3{Q#=J(J( H'X}.W?yB %PB %PcTPVV|J(J(J k1 R-%PB %PBVJ  BL_!l9oTno}^X[pw1'Fs{eL=b[):R"%R"%R"%RrlJ58+)VIR;o~xկxg:k綇޾B"_,4i[))))S@`(ܜyw[=ݕ?&w/s=a᭱}cڭVJDJDJDJ䔎B6ؚl83GR|SS ?V^o"yݶR"%R"%R"%R"%'Tݿ?hykJbHr+U;+Cumx!oQ^JDJDJDJ䔪̈́J_Y[Sݙ)Iumw5HHHH)Ugqp81Z:zX_V-(J(JR=])yE-b\J3 PB %PB %l4Z/jRzu;z;J(J(wVX6zXEެJ(J(jUsX%PB %PB 1@XcՊenwZ k+P/|W Ɛv^r1ce/zuoi|;J(J(_cTόHɈm)̈́rJ(J(d+%] u_u)DJ(J(d+%-m)̈́J(J(d+%Vc'J(J(4e!`uOPB %PB %h1͵c0֭o B(ovo23%%kn4 %PB %PBəJΩ1f>[W\T|UWhBi`4M4aX |:J(J(@5-Y'7liYiH!)n{ӗ~AϞQB %PB %%Vc4RYfY4M#aiahQB %PB %/%1dc]J3r|iP6vPB %PB %[)nijĸf"g1J(J(@>5,/YJ(J(d+%ͨwJ(J(@;ya۪PB %PB %P8NaohJJ(J(q14Dܗ#QB %PB %l@5MfSJ(J(d+%hur$J(J(ZRHPB %PB %[)#ƥ4 J(J( {-/xPB %PB %lhXƐ rX+p_Zzr)Jo[ %PB %PBɕh4BTbnݺEE|GYY'ҭ[7UQՁ%PB %PB)>%&ͷ>l݋sruֽG. %PB %PBəJ)|"Rת4{>W61x?_}[/().4r& %PB %PBɮJ1ɗLOOTUI)-JX!&gffFjPB %PB %[)-PB %PB %[)-PB %PB %[)|J(J(@BVD %PB %P`oj F=ߖVfVÔVJ(J(J #j|)A %PB %PLPB %PB %[)|J(J(@J(J(/Y^J3W#QB %PB %lhxv-Pc5PcXC>(J(Jp|J(J(MYcĸf"A %PB %PT>9֥4jPB %PB %[)|J(J(@BL<(J(JRH%>^D %PB %PϭưW[4(J(Jp\YYshPPB %PB %3 y*@ CJ(J(l~n5EX%PB %PB XpA{[pAڣJ(J(J ʜٳF_0+>Z?PvvQTtE#=TJ(J(%B K) #l )"蚮'EuDJ)8*"[,DJDJDJIϕR={vo޴Q+;e^߼.ݺF߳g[ݻ'*~GV'%R"%R"%R"%'@a ),\vM~}U(E]&=#s}>oC}w'|2Q:v$Cm-#ӔvDJDJDJ6a]6޳1͂5W+#3]O5]W5іx6_ڀ5}NԨ'j99Zmڸ!]{MעyW;a|R"%R"%R"%RrrJb:8P4Mt-)Iy<9Ei,))رS s.6Pc*YHHH:ߊjriQ]acqKJJ6MSZEҎbHHH|"rl'zGDJDJDJYcD3d=QlN.)))SpjW/u"bsGDJDJDJߔ>yai蚞]n(f={>}ҴʧwDJDJDJ2gQ_@U?ʟXpZ]ɮ}]_sdQ[zN{vfgGCz#&N>߿LG$%2Hp'JSfuAHu:?#ǧɓ'!fiiYQQaXAAH$RJJJ"A4hP@@I%%%O>=tPuu////???==#|}}B&M255 ϟ8pϔ)SExVgkk{ |% TSPP@DݩTjZZZ^^X;AYYyƌٳ!ԧOsFEE-_!$s… ֯_cmm=lذ((Lh \nm#?qVWQQ!BBP,$RPPprrrڴiRYY!ӡ`ɏ˗/va۶m#lЮ]$!%]IUUð(sF%IqǏˌČJJJ*))A {[[G "##t颡w^CC| àb֍544T*Beee!$_{#JHݲe˒%Kvލxbb-[?~ ty.Ab/z$Gzꥮmm0HP(P1@f۶mӧO>Ɍ=zکܾ}[^*Op?}X,Fq۷olX|a?t:!T^^b><.Zh͚5T*uҥݹs(ʼy>dQ!H̛===}}}&qww_beaaW^;lذ'J&v'NXn㎎ݻO<ðM6CyG $ kk .JZBA@ rpp`2+WD۷Z t(h.]Zv@ HHH3g͛7X @EIGQTQ "5u:hOhL#]{e2`V0V.  BQiՒI.Ɗ*q17ACZT.[a[/ohَ& &عaYyŽg :V7Z;ؗVjDL.Ƴ3?~ҚFAb0 K}ajnN3ZB a׭ ɀo@({wVrYxl^^ֶFjht[{@O<70l!i߻K[h`1}8yyb_OwCǿZݶ,--Zq*/+2QfAENP5%BLyX:w`ºwhBDD<$ %xv_є/V*8Y;XU6U#BC4S'zJaGh|>!]IB#/G|!.qB}Sm= K/o(;}Rzt03hYoK-b 0-9oooеk׾[;ng6K6}Ԡr[k\΅u0s|'Xu?zq+)-]&.Ⱦ%ٰҢi{-kD/$v[2kc|};&QqvNTѠ.Z׉R\E\x6)$>%=j9Q%٬j^͉ [0JS3q4g׽<1%;<GMoHSG˿ND>,jJ5]q;GMm9e]]7DMjq{E~/)..).۟+X2Be$9L־n uav*"!F7b>%1!!1!ۻohӮ;)xWa"(ndxѣSϊD_hPR\9*UT+''g?~% j:uR' ύs12y~$j̾m x'W!QoۣS6ξn!TmBO'3I$ o{ہ_uxچ'/HZGgiT^pkM0|>:,eGH6)LXk?'jhcmsѕ\1jj6N("|QyYT5N\pΦ :CkgUT%0ҊLzqî] Y ߱yMrelG% ک,uLN]MlZ~5ɰ۲u㺻YR?9:P3>*!/_me0pz9(u^lN^1YQFݷF5b)+|ҰʮwCcOv4険 #&naԂvōiT'\uЫ&CF`ߦ^0a+ۺ}:vt65Zz蹭Olk5YD-v< eל#IR&xwfQSm 56}_¤ ߸]{xۻ_{=)~νMqJ{vQjp|#\Ew7koVw}(ujp]SzUxhD(IJ5 Oj\~:5dX[eheiaqtը_ Iu^0; &m/w z,i#- /Gn߹[2 l߹{H&x@e(>OkqBc_'%FL ,=dЍ!G^ffG|*Nܹ!7=B+"IOkGgYk;s _?uafV'K|yV?ͮ/]tP^e>z4$ï²=KL{S|`BSo+Do{>œJRuʦ) DṦ&٫Pd{*gr$4SQQ GR$T*%0p2[K'8*1 g3tCO{e _=|}ĤcMQ]U/-{D`g6UΔOώ=r/[=1E 9˷wU=:s ̶GCI Xp!fL i\|Q\~9%HD wOhQnkgHod)nqWC/$>R匊+A#w%&9e̼{?\5/koliF_f,Xt(1`;{wwUĄ!idOe>iBI#m,?WZXӅCV=Dms揿_R|?h20iĆi~fT9I]x5KZ W#d9?]6W \ c_9$"I0褜(dY =8W(z+T0/#f0Tf̚KPKuYsTـowG-ОǤ0uOŰjB i3j{.E&JSpu"@l#2=Ɠ]ɝVb;"E1m>.|G-DXmK~ p9 DN6eϞ"w) Xa/_G*B. E&ƨ:QB'.}A:O08@JL$&~ʑ~=)Kl`@GJ½Ҍl!0֧ 9=T KU[GU*K.$oKSR%YtUcI9Kta=fxPHو 1Mk{bEZ4!SHD$I92M\s0I\c*ƧsхyozYZYYZYYNW@VLya{ހo陔*|$ƟԫAA8.-wUVV*ۄ"/(0nOHH/su !wj>IB(xl=^cYbg&A"MESJ$A"j!A"n}D<)&ʞPKB$^̊=̍l, K$V^lnΦJеe $?|c3LS7` >_Xaz)ȒC&mC-~_"]CM#H ) 2$H0j.-׈# F8lT^Dt40/hh1n5YZ!f 1$$MakΦTLOP#*!HDӇvm=mjOmd}3ɨq810w[uq ),2."qU%ՖC:?+Ŭ !izj߻p1.9޿wUUV)eϿilxX;ErwG&Ͼp>&4^fHsb$QgA!f\A~dw:_W_E>5Iy_kYh.& >4 Wt3HFGrs n/.~hHZ1A֪L9qYf%\!D4rCZ[۟םy)2s`T;(gYB'3Ąsž;fR[KUc̵+IX:֎BA #YCƤbsg F˪$Cuz(gլoFYDJڙ$Զ"SG\:҉O~ަ4qơ^C$I~%APBXqF HDozܧ֋a1 <)u6P9&l[>C 'VjV>07!G@jBL> FQEK+$h?MsY=({?dC+/$(OZ3(:s5!eE%TPe߹o{!#guseLЇtADĩ׉7oC-Y4?>#Fѳ:m_\!!?k)AIҴW!8a$ ZlL_@_*n_~S:˟0GLsK8o׽j%ݻ!d mqɄr\\31dX/zQ"bC~ݝ6!nͨm0 ꢔ篼"nWሡUQlX>)'.i)A6$4c"#ccc]ccc/DFlq8DaY˞B<|)Btu]6Qm=E$Q!D"D<yn$;[dc~s{)IKr":vƥn 䮆iZqD$2$vwHt9IX?NHAFY%pׇEV _:|Nì43'ʡ0+xyjJcw _{X.=h<ۥcbOh(E1'X̻01gjRPe{wv{ejp˶tgMd-Jc&Z{DgeEskx;jn'&m>2lKO.Ǥ~ڴa-S`Ojd:ǫ9\[BN40< ,r)/rV$^|z\u^wGٰ|/ +FMpGjjjjilG2H_hGe麖e3~rgJmfh3+dk[<;u0@3&otvEquh/7B,ub)g?}]W#3KlF#IN:kc#{8>מL \.WSSDx[8n===P|ܫұH(<6e He]S+1_u}ѹ[EE[B\.WA#|ds-B>r0 C@sIA8ݲ#8 ;]WL!Z70I$ ;4AH~w9o޺9lLh@H? 52 =ͣGΒoU(ݰc+$``maA{DtV`&cgяr֊HЫk)0lI@B譶xIm'|s/ ew7C||Fjꈼ}lVW١iXۜ|.?b?nM j~ Zd!,=dЍ!G^ffG|Kx} >Lw`hGcP9:gJ9'%HOMw4Č)7Ġ3/嚑?{]2~̬=O |s]_r<p5rjnޛ3{F>V$Z,И~,}LbOm34 !$J<[8[l0H#rY싓}Je֩0; _H/N4V"Sq|Lȇ/456]Ή'I9Je{0u5',*MzYף&j:i8g Ua̚1!W߆2[1=Iavkanim>.|ftբ#Dd]tt.DU=]~J#| #NYr24{`.%{nڲ\&˸Ov%wb?[ Oދ&9itߦ9N$ZdOmp, iӹS>aB4I3n;%]WUzW6m#U*G0Xt 0Q {wdF"_$YBV`o jV I1WELvq^'e|yp: {SjQ5a Ț NK&Yӵ̵̤BKR9uMȭļ\k̭/)Ev7b2LΜ\>a$5DO_4f+(:/} _ma DSGDXuIҴW!ZO:ߎŗDEbY.| UlFNoE ID/^K ZlIVu8}o ^CB ;,?yEue\\Q/e3l֞N #f:dl,k״~ WH"2EMQ=R( ]?u!~>eש&  eQ4 Egs䳉/ -s1@˾{s61נ4iM\xW-H=C~?~ActZ7&fA!->$rO004sS(;|Z瞁/^&m~.#9ʡC{<|Zom#-f[ТL A3 _"E|_y'jkt}B>1xZFoU|IS=|$JA{ǀE[=Oj!),FCf|YåBH\$xѰ.ZxL+t~F9lrVf]ץ60beephӽwZ4Qi99^zq鸍o^ =  b:0uR- & Bd}WUGNp,o z^F y([ek YJЛeGL2SOG,y7ڿf[T ߔ"Z? Cˑ"t:SͰӸiS*H 5T Sz)Fj#ec6/ #'8ο] 7PGS(@DOqߐX?=4 5PjK5L瓈?eGLC3SWGȿmƷ>q !Ժo_lrz?1)EXEom$)"RƩ̸:E^4Z-VΑO5R\t0<m&AP5h!ec/xa_ʫ@xu`|y]gD3([hEtNDy#Aqa}פN\Qnő{5v%HEYN,y'72~jODlΑRKKǘ#C94=aY lo; 3[Ü@(x S;pk B H lC׸)#UI`rÒ#Ӕ̈ޜY߁MAȠ%=ڀ֘ EDŜX6kí Xh'/2kDeFTlhl6Q#UGYBtCi./w7 BV#;_9xݚi4PE ]UPvD#ӄT8tlglhdlnLxod]XBS50w?ɢ)&Q>#KeFTgYx͎<$,GS~/F=J-_7e1nw?b &jˏ Y`ODՂK11ϣGEGDK >(Dtu]6Qh~k#襁 yY# (7]pȑkO?KW *Y>jڅ;2u2hQBoCv\=yE @iԑi dCu€F57!gTKO𴍼5%J0uO5heȗS̑Y# (/]EO嶱Fu522w ' hy70V |!S0uNXjP>s ADթm}'vhhVLݷU?iXۜ&K-v~q(3l.Mߴa'yZ'$&$4NdBH>yBJGEU~(]м']W>շon܇+F^L RfA)X}͗+10i uxz&.wTkLyq']vn2d\p9J@/|rQB bÎ>X:)(ԔgyZk(lWo{zwED# Bb%m$ p:\(G1GuvfZepțeח'Tq2.l% QJ}wSPBLvG(4@ŚЬ&iu>ElBL/A'eOtS# [1G|TӒ͔(tSW>n;qmy,f1+b>a"G /'U5UhTd(H :SM̫sIP"@5u4d\媟 k̕.ǘvi~3zj$&[1G\Qld! б} Dq+,UDUʪ%kl" 5 TUJʟ瑯sRYpdUiyήʾAtj[Dx'ee=tM Iqq~fC}yJ@nEnJd* 8]!(|'Lq;Zx  }n4pGyba Ja9,8W/ -'ʼb.O[̀U7qTq7S0jAW{;{W:I:e~ttѐi~z* %aS~*'ʺ޿ͷIQ }oߞ9[3W,_~ˠ 5SFћvn,eݳHı|yXfgul!U<0݌b0j]$T`^gXFڻoN{5jRWk,,a먹6=I7eח'TqZይX['&%kRo(N?cw4<`[o 2>EIA#'eͺQZ,Qᇯ޺fG19 Bb%˧c.S3` 6pbkNIݙ$6H.Vo>sx!cPEE90pJRy** YlzSNK7S SW}lז@ݘ ;Ga] ˸YW7:*_ wjR/Yn6%t: !׉M?yɿ!hVfxh!'u =~igz-yJ*\/qBRlJcκ!|p DN"Ra"D!1d>p\[9l a5[8LXCch.i#Re!L)~ μq>'uNvum9Jaٝ^0Ҕҵף% k̕c*~/C?y;E8+Z0_pXѻResK.Ur4hǔ|sjNvzzzVUWTuDTYY#(q!;*++YkQ(@TP(rӑ+ vEF`?ʆ 7/Ft(/)Z>QnBiB\۟KG9aDN{e=WDONTwdT{c fH=TAॱGVt;L8>$'BvcHWϴ1oV?3I,#L_n;]N(Ҷp׊WW -;}*).zwOպ?;|ձ .NNα"#lך! 0@}Ĕ1VO ,&UЙ&1vܻ4fQp[]y#SJo{B!*c3kp)x-K}C V5[IQ3%T+&B"egN&~rBn4pǯSos5j-Q?=ضl]׾` V4II$"Ha3e's{:7gkkǺ$0PHpG4h0B|y6~ACǽjZ>sQ+Fc ̐nX"Jإϝ屗4) P7 s6 IDATꀦ>Txؔ3D"|q/<:w(_\\R:ݑC9\Sfu(}u9sw6w?hYqmPkʟZnG,o9fu$I:hIW2Ӕ=c H(TÀ'7y7e"x +nOj7:nckOGM IXXZAIUyYXS [I ! 'zk* _cvKЂVDY4WoGijjY(ic{~ «SMþ,9'8pMEE}.*6gM(qc-_V#SïծՏ;.e|o nMk_ =Mhh|>ۻ[2Y] ][{#ұ;OOQmgvPخ#S(M>}ZW{{{$&$$&$x{{ }jȒ{#ʺk$!BRQ ٻ<3a{qe̶ =txZNO&h3uGLU5 z^Vo~X2.١5m6l?`|AB:ZO[GȮ{BY&O>fj;Aک9݌J gJn I,eGH6*mne1t5.BOHp~0W3YQFݷF5b)7v_wԻ6'DU ZይX['&%XI7i;k]8~g!3tCO{e _a# ú_NnND9*M>z _?uafV'K|yV?ͮ/]t@H/$g'm"2 Ny_V?^uzO$0Fr|÷ ;p`줇**ʁTJSQQV#w`3. e{Os5', gr:{}Ѧ j@it!ȊWƯ<\>ODE~9R]\ݴe# =Ɠ}6}b?[ *ał'E~< E$oΌmclZe7b]Pc!)61gݐ]>q8a" ')0FEJmG"P2d{؃E60PHszFFXl !?6Ƚ~{vnVV=&Kڟn,%q5t\;c\ֲ&mȑXf*S*Ie)1nV΁%!ӻZ[t\ 49]w\iF) S+4QԲ M;*zrGPCwUVV*+U8tlglhdlnLxo; !(Tq_Cݑɳ/-|xg# !TYf=r󅑃-eIn6aGodd'D 9;BjEٱ0 d$I⃣qL8ܼ \rߗBIC㦟3Zy%)#+;#,D jLP(͚5 D&5kVxxP(PW+~'jQϣcN%M".̋Ϩ&9$%HN_pL״~ WH"2ERl5f/'w݆|'j#|w`rYT*M"'{xnhof>>嶃I2/m IIwxuqҲW{ QS~Y;{!2f7eVwcu€F57!gTKO𴍼ubۮcϾ>ÔlY32,? d7#I[Ԛ1z)>"׳iTs #U7bL\;XWK۸AA;!QZ.s |KWfomֹ떃-X5>H$ɰu6{gO]{s\T& 8p?>l|ylGq:K~zzzW-og?ɗ3i{J`H(<6e H_B\ **#\GpBNen<:F /xۯW"uthVG$A@9;j;ΰ3o LVnd&.UkfZKfi殨%Xٯz+uDDQeWAev~ * 逦s>}gfNs7,MJsߤ[Nnpp0:!>Yl2#'J!aCSBOvtbCSBO*2 zC )?(aC1Q]A~;vBDQAJ( SBB&[J)Zqi|BMGHaaajHcCR%IҩS'K 6eJ22"Fcmc² xr BMhek_!K,2 BM(ZF:P! y>/77-MW/@5W*CCC=<+Zmsۄkú&0iay3#ud_4pl7'GV/L̬);td0Naک[ϛѩE !HueIy1 ݻ/]3]ɭ goͿg۲8@ٽĶT=E/T/wLnZ|MK1ϻvQDƣ V+Xi=n}z9~ď`Z[\]jad rժXBQϺ ;VGLW8{t,Կt+4XyvC‡I'd1/0}5,^wn߲6?V"өuG—=wz?mkݙ?ސvrH|J Qd:S~#|)-+JsEF%g"n//ؗYj_˄5&;,^XOi)66{׽g`śb4I0w>c3SGwd4McggoS-]O 6QEcӃd FqUHoG7R v.4n֐P5 ú(v443O;|Hv@픲B#,DDA=Um^1twTQ>z^i"/ s< V!Ow&~0fTBO-νV_~8:+- w~Wh#By{Xݯ{e{d2*}J+%PmZ^Nɑt6 x#6T v)ToBmN-l kF$<.ʍ5Y8~+_|ڧ6/8V1&噻Z;&rv+ZDi& kNi$IFeS OuAqѸ։o-Apך /ې}u+GMo WzF}C(Wl|uᮟ8yQ߿zFj PæV upyw7*dKBd*Ow( xU@$B$ "qYkGaތ/[kDD"p:TP2*KO_ (f_ݨ(VBVдHMvmC v!d\w`KNܒr~X/s;#6A.64\3nH BRܓZ k$'+z֭TW#A5>g=3;j\Խf]gT]u?;:5&2Yܿk@b* m5d4@ݍJ&4;~sO"Swۍymc3T=!S}^4vxDRRw8A6`gOE<[LwnX+U䤾}@RrRjx\Pp6̿ 6 k?myaz7p@D3v$n3-7ziSQ:j-/))Z]Ϻ֭ݧRVa&1tӾv;hvsȒ:B$@tO(:MvmfP W nLщAb;aW"SBzSBzR4m4dx B%0(D_+DQvvv9=E*(Lu5 nr(chƙQt5I")#""YVFJu$IN,5Cj)Ȉu{cbCȒXquuONAQͲuK0!d`eYBSEZ0!da<榥J%5Jehh'+cu5QrrSSSzi/SjͬKHðjT':={ۃ!Ԥ  &9V=ᅮY!ߖ~=*~~nBLuY["Cz',+JR9D1Fw8ucJ8C!QBQBz=7¨XzK?mZcKsBܞ_#/ҍFZyo*Ո;G tM $>kYv+Ee. ka]XOI,uFSq>&F-.Mu-?wTrNjwcב T_`dνg^MCG@s֒QJ'4B Z`0 Z<{Q]rnN^nN^ل(ŭ/mټ!IxR)=|+ҘD| 0/ԦAe cG6"ȐFvw*P6ǾdCշsk|,ODjmϥKOojKj:(ܪk|aG'?W$VMB=7w;o?r_d8zBL[g&fV>֡SAr,dmp?ɡ_ſ1hNzW3?uؔ'yB3 0r;o&YsCyb[*tzxzcRgw+JmZR_sxqqky"y,4>T?G`yJ-_PƮ\J02YjUll\g~tr-?jG8/*[6ߺߎNmQ~W6νwbE+ӹ&q=E׋[64І\Ʋ!#7*~*(kiE5Z-:y).} {O+sieUT^ޗt }Kq;{DzS=x3-72wҲԹ;WdTBp&} 񅁿LY`Âɮꥍu|/ibcc]w5 L&p,@䰑_>QG8fbwgK_:#yn'o?;u3#\8u{ңMlWkb[ڼ1|B IWFMu3ݚ2s{?_k;NoM߳3"6_E,oCIJ8,5B픲BF ' ܝLۼby1"&}ʗD9^$@xB $+>Ll`7z:<[:]mM+lWry9 >}aAI Y2Q.nWvJ<>m lg_`g$[/@T'oZ{TWݓBaIuچY!fZ67Y7mJI.Vrrh'H^+>-մy5Yv6)5ݩ L _CxZ-"4Ek'4 $}WGևOudw}cWl|uᮟ8yQuR{_1fJnL:Jӑr%9{ PoVd@:iܪ36*<];78O/ !RDOw( xU@$B$ "qYkGaތ/[kDD"p:TP2*KO_ #I05`DD$1!H$vns IDATvBM2RByoLLuY˲>>n)51Y}:,l@,0\5}hMseF,ܴ4]{&\ dx! b^NnjjJϘ>-e2 BMu)IaSB$Q;ݽgϖx{00D#S\\ݪ:!!{G͛Po4D:@OaYVZs*8Pcp(pTB :,' :,M5z:>kY{- f&Yض[-.sQXz7,Ob311ژmqo׽ 898V/LH8}e~q̡7"7dN=g-`A!zV5 A՚w t!c=cUYx|nw6V %*[ mJf6W %繠;JJJZm+V[ojgZݠT2ay3#ud_4KGv n|0?hEӱijE L.y:x;99"ǡ"~u7)o뷋$9wTA5}f}X`)sז 7Ŷyc. BQN`Tm^1twTQ>z^i"/ s< V!Ow&~0fTBO-νV_~8:+- K^Hv(Aҧ3V}uz &ؙ. Г}pT/RjRM]Ciwk]g-ݝz` _CxZ-"4Ek'4 $}WGֆ:JfѸh\]sD̷w6Ma&yMO[p5g7U>Ψ=UYz 3 %u7{=ӗ2;\h A !#ioFL^5"A"[Sz*S]U(Lϥ/[LӸSc"\ TϜ+biBoϯyOmk+͉\FiX?t)tR`SLyJJܵ!D"D $B؀1M<<[j7en1AA"DucSTIIJqA9;;ٴ3ا=$dڑ}8O5F衤NEul4ު꿜núQ*4 Y~TGxY" %RYaCщAb;iSB0!';:1!'MFcL6A`EQ0!Ԙ(ή ?;G _VQF!ѭBCSt84>#I05`DD$1!H$ԩvBM2RByoLLuY˲>>n)51YSB6Ye .>QuSB|^nnZD_PkTzxxr< k㒟$]#;(ec_ ۹5N>}XWk6ϥ j%z}u5S]ʼnOglvҩG7?ޜ0̓KGv n|=e,l㥓zwҲu3Yvz^qt y5`av#lMT/{(OlK=;&uvbTݦ%嘷p_\.j}@xtvj2ͼǭO/'Տ,XRk˗++W1aVZ+W(YΔBCQu2/|tZQAs Sߟr\6'K-\yUe:ܲ~r-ү'PG l^%rH|J WLiL]|(uP;ĺ`_fB|a/~z`zicc?)KX׻]5Ko]e8#uxd}wfak*̈"zdCǽ.]D![d,ElmocvkV|i8qN5}=p.LqYk?1%S xj z̈(wʴ/#*jG|+MyEDy*dAv pAsEکdJp0 @{,8gLe#9]*dPn)XmhkNc`kXZmCUެd>wKu &.ANUaCxcuӦr`e/G@(7Vxc #կ{勯ZTrgy*ڤ~j)*|ݝruFb7[h4{kl5{Yɧ/f]xBvܥm"_ozdԞJSaQyUSbI=Jfh4-#MrMC<]΄&B%!DSd*OWPh/yU`WZ;bn͸w-+ j*S]K21q{\\s<%&n7*Yl"f.zUX=heXt>PV U`b+Qfuڃ&k;wp׼,攑{*~$ &Õ?7nLPsn 4 ucPuzi‰[!\KEbrg&V! ņ&B+tmT!>AQ*{u:]aau:ݞdRYϺiz/ >]>bJKwNz?;:5&2Yܿk@엀v6Ӧ~a x;kT.}|'(g>G|%>D]vc^>nxf:z)BnhDFWq$$B؀1M<<[j7en1AA"DucSTIIJqA9;;ٴ3Mk񵟶H =uo| _g2H>f[ao 0t:u6oZ^RRju7[ۻOJ BiF~i;{or 98!!KD=R*\7)}ץ,hv%B0!';:1!'MFcL PBJ(JjLeggWꎝ#QTR(TPV)R:vhiEPӑ$RXXr0""ejTxxzItR; @RlX׼7&:,eYoWW7AE,ZY׾ SB6Ye .>QuSB|^nnZD_PkTzxxrM&̺_$y0 FHuӝ޳gK@=BMa`").nS^芐RZjm=УwMA/T%BЁ?zB˲$՚S LctS=F:BO8!d=Q!dhA}}bS .Kq,ڽǖKC4T ly 47b7‚KT\hn=J4wc /ǭP_.oP((Yv$*u3_turptt?mB*2OjУe|ҪYBΗ=:z^ jû:8k^3Ӳ r.npe>%_Fÿ?MҼz-K瓾7*B}l0ա`dKԬX<԰DjmϥKOojKj$2ĉWolZB ;OXRXy9wmn^V,+:so@Ēa2l36/mvK_vw.>\*T\8:Nj) )<4>ɥZE5:y*OwsskW[Tk?reN@ Ĕ>7Yz>24ɧ۝˃Z$W(bccWZ%cì\*66VPԳ}Sҩ[N´nsˆܨ1®C\{;my~v8qTpj~_h]77w7~s﷣Gmg2qE^{ygav s CTxvq Vwৱ105%;)4]y4?ƺuyM~>`٪ 󶁽/ZשY-ome'h ]6$]5=/敂CO/VG8<;~{?> OE3QeG=>%LࡹoǎI z&vبV:|aiϬc#U?Y5n9׈t3Vw: c>z$@аZo !<' "  s< 5_Vm&#C$\0k 6aBx_/_-y|xƼ7NnϰC&_6~U`g$[feJW%f)FV塂z0ա8~+wR+SbXBaTj!*%S">m~ "Ub"WqFk>MoE.%&Љ5#D\)n̋ _5_WJO rM3R/B-mF_Kx)=zh2Q^^vĸ8@/jQ65z?=鄒3R^хl߈3~{uŒ|Q{)u[7Ū $]KS^,/Mg $Zv9T=..9L{T'g9Θsx9vm;:;3X0geNvi쵊{ǺŃI!swWT2^==\8oTnmpu^0աEC?x\ |W^$Ug5ӝ1氖NpCy+/H{F(߈ul3~ɽ@vzMQuvrی|M&w(O: rol"k$g׭R0pٖ~K ־յ{:=s$R'9YӵnZINV*{TG[99`sn.ޑC¢]PSmkco}i/iX{/0bvS/.vtw ^hu3wIS ӈuFz?d{f:~=T\:`d1V3z{oun޽9{.Kʗrq;M5wq"||ɸg[煷F| oF{-Y1mBGu%HHS{c\v\/;7 i7Wղq[oɒ~,XJwpHJNRT[cΦy~0=xOc{+p&ӎcƿqB#Mw*SgV%%%VYwúQ*4 Y~TG"Y" %RYaCщAb;i1Nuw漃ѿ2aCSBOvtbCSBO*2 zC )?(aC1Q]A~;vBDQAJjaSB#ѭBCSt84^&Pӑ$RXXr0""ejTxxzItR; @RlX׼7&:,eYoWW7AE,ZY[Z!K,2 BM(ZFS< !Ky>/77-MW/@5W*CCC=<::98:9v4cy\=-s:mzk[pkcUqk„7;pEkw\3#dq2̈RFPCzVk0 V5lT'ߥ\]oJrJfZMl=`d2WNk#*3#dݝ ౯Pܚop'>+Zmsۄkúħ3m; ޣưoN@ɥ#yptrp NzԞ 2wIv iٺja:ב;~H$ñbBܜZ831`NzW3?U].QqtjHʪś~IDAT$/sSȊ P7'Gg>9YgEMǦ=fЦ5&0ܟ /jߋG{/T/wLnZ|MK1o]<肁 eyE[^N#X{ l8{#Ċ3;V[6t^R]=Lv؀/qˆܨ1®C\wAdJ[od3eEsvȨL$2KM 0ӳ&d]K)4M_4?ƺuqX*s ;v7YݮYؠ >3⾈yxzk6qo=K>QGn뷋$9wįyLޑ<7yvۭY!39=[ό)s^3M|֕NSז 7Ŷyc.P͍[eCg}ϋA5W&<""<`2h Yygr`gI 9"Hu2Ks8c=u3N2Rqi.e2(7TVq: mhkΖ`ͱáYq_om7.74+dD2wKu@LaKuBe=Є$ }UW(4tI^~jM׽WJ}ZiBklUCک9)b1sѫA$^..LƢ))D4?V>e4%̵]|LH-0LC|^:SF]QH|/_o(nsy Lp pi쵊{>"!~ݙaR݆9+sBF&ݡ8҄$B&\ΈM(1C@ M+WLۨ6C)R}FT*$'t֭Zt=Ju;iz/ >]>bJKwNz?;:5&2Yܿk@,àh5^k};no9{fvN9(^Ͽ;"d%7z:KIڱע3jgv}:w̖¬٣λ<;[%)ћ&䯤w_mmŴ91ޓ(;c6m'Bg:z)BnhDFWq""!l&-ly@ ":ر)T}WTII}$J𸠜lSg2H>f[;J=4ݩN[Zg GR@0{`"dQ!D[!dh'TJe뇩!G'>!8ZLu5FT:T:T4Me2R/~EQTPc(;;WWw |ZEQ:LF M9ұSFL($Ԕ,+TP#:KSN !5mʔJedDd ƺ11!dI,z ' (fYںrLuYð OzB1!TBaC!0!BKDIчDQ-e2qjLuxMKӕK7Fs244Ó˱mWcCd䦦_&a<C֥J$+O1!jJNwGL_@ `Y60(H!W:RvuSu5:PM||[#m_OxGշp2͂QIfM՘B=p!Tc2}nَCDBm|+^P:k\Bj= aC vR$,')5$ϝ=cYGMggZl!S՞)pGikǩD0T6Oi0 RVf a[p3ql!WxDY$?b,B!^N OS<1ޮ&OcƜ.Z}v'<) Y2Χ=k3 >"#8TaK("H D %0zTwDH2̜$\Q?];;;U.ҊeeƠPΞ2bJԬs 4F jLuG.LROp"*$ܭVގu5 7a-B_dR 籇̯n_ui5a51ge2:8UYrڋs>lgo/(I$B! ,H&8K+6oN:z&Mg1\p!tZSɹ~sg?y>Pݛ_שKLFloxbAg^>?kZK^?0cssMB}q`;z/ZM?.y=PVfn݅cDA HfIb)%@3~lX%lӾˎX{%.mYNGux(|S(qTTpzo$_ڪ^[;{Ц86y_>zXaEx&{}Z۹8nEo*)8+~'5L`B+R&~Z5KQPEI%Q$HA8*+*! l{ nڳQvrWOy|=Msшƒ|5%Îefm<_n}F'/;a~=>8Vf~;iݼXVu݈)}nP|dhO;q!$>WbQH9rJ3s J/\V~BBi>w˜c?oퟅ"1Z;jBZGkڸ="%,!$' (TgBDQ$knV*k4&,g×oU“~k"8mAC./?=wc.g%2ʸoK+0Znq\itoaEV[-j0v N<|•ٮ#BA{%4w++EMP(((A"HB&^V0 9jRcH'?V6\щ)@$(Pm`W=IQ$Q9ք]Okrg?ݶ {s&Է ueiiMjRrg~­o7)3߸+wuWP!s,םN 7Ɔ+`[OI s> cXB.icK%'  'JHN,-( MYʊX`` oy;8;\un\XιZm(Jg"sS DIQƲ$IU;Q$ QDc]OآN %]&x5Tnق_*(lQJsgvnOPV!1TݺP, TE`T.Jd,E٪"Ipr=>LuZ#F?q`n%~GQ6WLBV,eR  MDDIaXtoS)|zh|£UMJE~/(#z%m{Ųvq=]-$I IuOP1l MkYvb7AnP |GxBpqRWx=,򻳫"rƟtL犸fl Y̬kLu'0B~IxwF}_/rTp.aM-[vp,t n5JDd!ݛ~Tw<L^:%K*3Bhi|EߘW7W$K޽6Up?{n_+ۀa0!7A.h0$8AI@AN  !'mc00J{{C=y OK{{sw9Bx /ԥg/azC0׫{ڽ9QW)fg.WUUTTV|/]\RJB_.e+t=#n]伲m7\B? {Ԇ3_o,^핂kn-1IW?^Ԙ@'p`j|\eӗm>^3!E!I `:xW^ ,f==+iׯuݣ:tW9WDݦ 2#VdS=n]STx;e󼱑)K$v Ĕqj vJW@!jGʕs?KL1nHR}a~!=9ktpOnjXU7]DvpB*/U?ݹ~hB=&rIPf%l9}&];wQU\đΆ[7w(׽빰alA6mjڴ~xv5!$>afun!#>V͢mD L!'>·|Z߽2ƨ(( 眱6 뺯g7jgbs%Ec 4JvAK zd2MZ.xT g+?;vЊSm<{Ϩ=вG>;B an_|ulax@Y=q''Z{N[0WO秿x %T3<ڤXM!DP~Cf,%,M7㢳\B-إsܮCou[Gѯy?FYs"a/(͢B˿b3hR_Cpobi #]ru7DHOCYrNBCl0v542EybF5,}޴VӉ횞1y_9en ޱzbP"Ф4.uo|)LǩÛ~RuEh5)=v.ČX:]3=yxXdO~p^uېy=G{_7yo{M%ioG:)a#<>a4b͏aF@&*Mk,$44TQn< )‚c}dn T-6gĮs_>fKK;e={%%%TUt˦u b=fv٫whXkx:}߲yS ƍ3MT~^H$Mt͢i9w<:*T~>S3&3EJ fx1\ 1CSA -@ 2(Bo fhQ3!b3sd( l!=.S .$.<Ԕ?}Ԕ={0gV,Jwۻ z{17>+g NL'dyҾ{^mo7e o.~䎩7O>ٔ+qߠ)0H)TՇסmf/ wYG\m u3X],w~xYrK10=-x )Vw,KFmO}+_Lks;]|p:uAB1sxZ6\}mgnc U.7=09:*yQV]m6(EJ%WFZw7Лb̐ҏAS9aZD\-V]dK[{zX缘Q#⬚\[B71ĘqvjYZ'1/]y?RRRx(+ou\)+vHҪJY46%vSWw<~3poLhlzYz1eH)|5Ò0|tU˖m8Ƿ^l}O#&z?:yh_-u%2' "RPm:vV)Mp9E>x<#D f fxfM +Mmڴc}).Cf lnk#c Ɗ+6lPO6lHOO[| )RX{ 2rX|Eʠf:NiiTd 1}1g2 z}*{رc?f7ޤs<44K R̨&!l fhڼs37j *71@낶~aC}q1C!R'e֮^tpbBԊ6]#FC%3ꦴZ,:&F(  fڵ˭[j(3 9qKKKe3:j˭[r~XXXeKJJ W>KW}_(c' wnFc5Ũ)2Bobbb3\21B***!>'<=52K 3|3v\vq.fqs>ESٜ11@Ӧ QQS)Yz 1΅Q7 mϥ;cORZ1@ o1teY1h?}#6: )״3>಍jdiC3%/\l^@@Č Yp' ) zHޱҮB!¯^1,1>&*E߾s~rTA 7uWȾ1z̸*'ùoM^o۹Doܖ ?mޜ^My;X p:NGazAz!|Mu;]})Aq=䈢o3ky=ҝ{{GuOzUb׫i pٞb {ۂ{=ϩ-v~̨im/(e?oĔiY_yywAoy]Nz#Fw 9QtK˔RNGb b)Ō Eƌs8'uO;ZR.i f[cf.-pekK&LLh֬pT!}QꤌRV}]ae3KKKT(5;g^æ/2CC*YijTS[iJJvniSUX,uŌMI)Dz۳;///jL-GΉar36}9j̸Ғ?]c[l+)T8kfkDD.{\Qà)˵k׮5]S۬"2:O߾Y[6O31H1ASB4M5x1ѶSTU3ņQcƕWT)(boa2F;VJʳ'gKRШ1BIIqj2( _x31@ČJ 3 34,eHԂ4V.K+.5O>5edϞ}RqC:鮻 jDãղYBhooӤ?v{ew߯QWYCj۴F)R*2[ c~ )S/h|Е"Uo"K\B3 =ŌJgռ5*Ng@ ƌS3˖m<4=zjڎpş.1ݜNㇶԥN~!;w۟TT9EQ|×V&8 isA[!|`8uϥ}2y1iݣ)'z)u;G.+a '-X0.ଭOHF5r<*X'>ۆ(0c{ϛR#BM*fAG~ul!=ϦEnzYkBǥ|.efBo5G}wBHR j=ѥRb)C!,>?(Op3=>ѵY{* G#zQc?c¿Ό2*ix3ƲeK.su_ij`yҘ3g7cЏ@4U1qMkּO1Û4~1Ɖ\eR)5 1P JSAlvz334m3U\\^m٢ bpnjo _['N:bv{)W f0<m b) Ms3֮^`1㺡ãc^,f!N7 1y 蚮[)~OWE(J9:_8fH).Wvѽ{mttLRN].wE;GWXP[NPT_@cnj Ó}XV֖I=z3(8kkDdmR)Ec۶m>rDWO!v>t0sMLHh__\Q;ٽ{WRoQ1}6k)n !=lĈ+;uQO|E%*Ӕ_mEA_TW@#[JQPp*<,L4]Xt_-)MSBӧOwб_NΜ)2 w9:ƤUZQUQUUQzdf嗚Z,AiVh̘ϳ,GsWg; b 2(Boƨ_wD]hv4(]ԙᇪT>o 5=(嵟=o:wG]׬Sv<{ٌ;E麦[-]7o5UHt#xE(,Kç\Bvs];og9/TJ 5kwO}EQ7Ow993=ߜ=ڕs\߽RJ!MYvxNfI=j]֍_Y4kpWz*ʘյsB:kd9f/|6!vxTş\9;'d&W0YtnæwKZcF )}>襇J ,*}_JL/xg"a|ƄS,-k3|80@ 0uU2&3*&gTzK>JLnv1Cz7AJa 33|VҰS=!#fFUU)"L)UߟUU򲸸X4aiJu}3!JKK9vN+&feV5wQq<;;2*JQS:_>fֽ{?p8E%`(xv=p m[n۾v cF0џ~5k׮fjhzX9/"~N_D@ Aosު:׳} V@_B7@ s:-T;FvN6m$IJE<ʆϞ$wǸj4Q2>]nPRvWu]`0h $((P#ϊwݹkHALLluw"{w63g~;=ӿSk }ԅLB7@ Noa.C(--%,,Ąd,~!]wޛ믻Ԧ-cٛCZԳT LwD`0fcZ4j׋0߯^F4bc#9;li躎f'ߠ.*++عsr5ןvxXa=!!"!>Sf|׏uA,n @  ::.pQ!rgu]o#pNM1zÉ~=:^.b5Y[9sPF`j.Yp2bLd/~b\EŅ\4x(u:4ME4_54MdYl2ؓ)KqHf[YUqS\ѷk.<2gR|9{sHvJMj 87PUꎕB})ɢ= EQPU¢XI׈%$c @ tS @ a.|Va #!.‘b AHH(EŇקOh0R $@o|i, TUW߃a_9_u=yyfҿSLN_l7 1 I2PUqS=s.Nj$IxgUqJt9[D4 &$8W2:3oɮ=5p*jëEUU_Ѽ$%vlUZZˆܢܱǨKFQYY͛CFT\*!㨩SYGq%^}s4YV4GM-%QSJE [?|M@ u_OtT a =7v[89l6rr͏I9$:tKo:G-Vm߈E= SE%10r~/}>SFLElta<1קh^-!pɨ'%ogY+>fgMwb&vfQ_:y:uddyLyb`v*+uϣ~_e^1Du>YU#gBGdĪ%w M#.6Bup_.KSU/ZHHRÈ=tq]겇ڨBVd""}hXƥ.kԅWpp:jxˣw>~VpP+.w8MJrf[sa{>5,Sj[;>SXv.2_>O$3/Nl4U7@ Ρa q=p?;ލ;#{'IIز}+3_?n9>tGVRLyQR0X1e#y_s b(7u;Ng_VI1}{QK^oZ)YqhqT-% 5Ʋq22:b痪i0IjIH,Յa}ؕK239VEz>۰|wc}$DAvf挫'Рvn6k'x״0c@|dV+~޺-;r&OBeE'Oam72릯vUl .k`I蜻3y@ AgዠhH҆b1[ӫcG_X-fu#Adx$-&i,IȒĊWbJV\ŪYj kVeu\2^Eִrmg),l۵ (lǙI*(-l< \<7!nb1`%4$ER1(2JP IXo~'>(Beeϣ}qYfɒ,]%Kl2.]%Xd&Xv*֬_ɪ+Xf9+V/cέ~}RYYEIIcHYb9^ ?l`9ZvJ=tޝKSOi-dwe-]lrc|v'W_b±}y :nEz3,9iieh>?FNyc{ )°bvk~͊OoưfU>ÿC?R+*؈Dxw=oˤGт;sш)~Lհᙫ(юhԃw.G}Vֆ6S_]IQDEQDEQ:â[-OǓطhP5f̘B$~U ^|&ƳJA1ynrpoWxp.FS,MEw(;ȴȆj5B|DAl\gz_\?053GDD I w8N痢(L2EVPYVeqwņEfř 2Y[~> f=[^"QMb)\ ]+lgΜ9z3w\xoV͋?º/gP篿=4<y<+>>C+kU#yӜn޺?pߊ Fc.cq Ϯ\Ǜ +y,vxE3wgMyY]ojrَ3sHO+[/OKY΀Eㇹqg(险L+}@cxfk\býr;Wb6>skc3rXLn @ ү O^1&O6'ɾWI)eWrUw<$ _|GHDS_OU\k)ۛEp0)su>˳+:{[+HBz_{5|{|)m)^,|z?o~oV!J4$Yf,\.d… FF&ѷsTTS\RHa!1QY,ZÉߟjS*j&Nh#X1UQYUъ2J|}3?5#Be~9i7'XA ?Kַ㾶 ?ohgMc33bĚz9ؽ6WLZg$<K[w|Y?%|Mɜ.O`_{J2L͕ T}xeC=w'G臞b/p2 FO ;7n%ƒ!8! ɸ޸12},zUo"7uofdC05D6:=w{6{^Gьr3Vtݐȯ^}1H5 ~qQ$fC8Co~5A7a%Y95z[[k4("("( &gm[ =Я?F9l$UU|"9)#F+@Yn٭Pdђ>URILx-YHޜÁ i/t[o`hg0O=B[<"ܸjpk[/܁0Tˡ%z~]7sZlv4;a*}>*rWSh]KQEAQ %!rݬ^tMGG%kLVΘ8z3eDnNlذD-]ƈᙄwj6eֱu M픩iΑ/efh ؤ6+8X9q-^EBcCU `Ixb~Հ«nhjusWkZLo=H 9~2D"ʸMUqP30Sp*vSDN^?o_wc5[x'J꠫n<7ǃB݄q7)qpG(#),FTI9gSoG&u*L9ѩQQSazsynf媕L8'9aS$$&LpB㧿Nִ!;J@Xe5.}|> ?\wܵ+9iwb2YP(s@03A筠lN~"I_-ϡXY hiQo=m=Æҿ_tMG4n9poFT6nܽEbN;/aފqY >XHzó\zƽbY¾r|wq6G4;c &V }4[ȢaW\cm-5ip[oq}5i^y;f& lלEN j*U_DLyh747\2 5Gw{쎻H#rb~u8TU2'{’7/JjCx2Ufbğooq=_03A׳􏶍㭎sR[gE7E{@ Q1}-/#,,o&YddNط/!ܽ]/mc`qZ$ZJЫK@}Ca?5~;Qg9 `HN솱TWUU%\1&K:U?_Rs{c3ZG_?iZ3άiaXFJi\0Cߌǎ~11Y_, E E$ΜI'f[?ӄ=6xiEK +s7wMFe9**FϽTuzu =&̜xJb 47un gs;peL2*K^4[.y>&{W6s`Μ9l۾n 5SVd[ SxLqϠ7co[m]~M9~2=SuMb%DZBeǢT##mWs5\ ׌zr?SPlzlڞ)Fwz5^l\CSI=iMsqO-Q]C:+!ޱ=W #2O֎:Isy@ @3~EFt#;{'6}ؓn~FPP9لص{'i={{5ܘ' {P+CRlFY!BG'?lgԨK|mJmj+:js6W9ȲwMmҐdMsu˫—pYfܮzҗf^ jʫ/s٥WRtY$ L\\<:r5Yc޽;ƍC1@ٵÏ<W%uVN޸f^v6g؂o HJR?痪i0ΗN`R;Šc4?Vߋxnho[8yIR+s4r#iPݷS" ^ص;T{oOdS5V_xCCC/0`W_}EhhhyΘZSz/;ំeu9I;gO==Þ&{?;LL`B&7*3J Kͼ?3ypɈK\-n\"5 I9k_=IDNNh!?ϣORQN{).^x`qф1nR:m[k[K<Κn @ Rtt}5RU]g_|F,bc$g/ ^=;(((g-cnmM }#3G")oWV}/}w̞9ws`_6;Ş0)~b4Y^}O9Y[˖- 8vħJ<ܵ{ I"k K $95"7~{7B!7Lb 'zuwqt"~ys}ceȒ[}}&M=4.?6lndK/E 3% WIDATzoKw}^j,R}/}Lø>)8ǒ%K%Id>⮟nw.m&gQ[XEE_q_}%v{^o.rCBLWOx5#&?B7@ 3/_!̸t~ YYc%{v9pp?vC|`>t[ _Mc=7'z]{Pf8nI1LdY1L:EVPg\5 gc7&K˱&$]t/ߏ͈oaěQ;w ݬ6Gy~3~h(L2KKC~f>l6?NFնo<^h+x>3 o J7@ 6`WCaaa̺*>CƍKLl,{sɡC_0ozt@ߠǵkWq%7 ,AD&:1,L5,qbd+1!}(//>yRiNSP7&&Wc"A9҅;xs>˲|HDLy^ytS @ h 6vd}mV&Ovc2Npz˻iZȏ|E:͎ڜ4e0.[T,6m b)0æi2NAT$ YU$ M;c?4DUX!"<UU;5WWSTdi){36q"xA5z4å#zpϚW_ä HLԷ/5UUlۺnM9tN7iw,qˆ0Hw/u|Xl_P~u>KJ @ hqajkkE4g:X,fLITUk|^/hIUwk|mfPᄝ^%I"22JJא̦DGGįG4_e}8/x6M}#ozkJb__~=zP ,=B@-!soԔl6Mpֵ PӕkV9z;ء n @ ~>?lv"11/`jbX0 gx][niFrF0 Mظi#P{ gjhk2!zzgLGӴPM1I( |_ cL$֋䤔)A!""I;͡`|۸Ro}1-1ǤI;V& @,K}4doP[[Kuu5,D``@tf & k9jjuE _.d")@ t7h0DPP?W^͞%@ [7n`:t NtTT釧}I0FVk h4痶:\)],IoE!$$Nq;3Z__B&@ AgװN{oHK7$H`Dg< AeT=9ߐeoRf.LB7@ װq$0/3LSɊsN4izS~/mz_.L@ ڊ\$Ilv_aaA]STX@ bEElW(d"uS @ hJPPosw- 1L](x^nʸ : ̆ %00G4ÇYf j1TD tS @ &::Z߼i9ADqqW䨟9ڂ,˄3"s$I)TUV m:CyΦG;JY %==nQј-!M@ 8_ր,kuuNu GEU=?$$  sޛBM@ -?Gb{IENDB`gsequencer-0.6.37/doc/images/ags_server_preferences.png0000644000175000017500000004117712626272145020153 00000000000000PNG  IHDRw̄ pHYs+tIME26,tEXtCommentCreated with GIMPW IDATxw\GǟݽB;zATT,{-kFI45=jlލcX"A:m|?|tongv><9`0L!cC`0ڵkqqq@``0!Tp<*`ja*QnzfffA <T|0͝ɓ'Ϛ5c4<3l LU{UXXxm(ѱalIҢi8qZjȐ!G9|o7m4d##ڷo_ss󜜜'N>}Z},+c_~]^-^z&&&6l(.}*Jyر#IXh:̟?!4k֬3f,{…oM&wӧOtܹs(J?zӱcڷoo``qF++,ai(ŋ`nnZmxxxܹʪP+׫G/$߿R*C-_}9oݺρ΢7^'x!AQT.]uuu_nbbo>us! i(~AdeeY[[w)336大[[[[[['$$Ա9r%88x֬Y?cǎ9Ѐ\|JIΝ{+/_i+E0P* 266yFGn"v0Z011ymT).*413&`0B, +%I`0$IP `0Fl U``0РeۆT)*Z$R)P V qdAr{73hUjJZqtvCl0Xe4HϭPq{D~KgOnۮEWd;u C(߬.ƽ'?gnYc4;EG*[qޘA}{v+/8TϯGunӦإYq޸a}{rfv}3.4}l?5IL_e#\X=kյ7+̻eT1&ͽҞV>`Ng[kwc͔';tyN8i;()봧o8GOg|[s|(Κ&`o[WI7k62gZMkCtNȧYrXϪeoǷ9S X aϲ"RkwoO[= +r%I?'-_Tk&jي= OHWqƥUY%K6:S|WR-;vr#Pԭ;0BeT '{VG_:"#[{`np~ p;.А40^3"eNxdɉQ$ .S4]C;2k]CMJ38ԲюOv rLh#SHxB"baZZ݊HWHy堍^:=pEUٛw_xZ?b.FDc0/oxض}bY򁃘HA7itvv7'gn~:T65O=oO@P/ѹc<%dyXH 76's%ks!kߊmKa%,B]FI}Em)V! ^y*F^z(nIϺi 6xUK]2JUs"=J?S[[, @<( "D&=SuHBOHZN;A^%/}TVJ<hI ciJjqؿUrL\y qiOc 9DHz|uI93|::\8w\\jS) ,)z)OJVXKU^Z Q3]R^|L# iuٙ˪.H$R+kmj_v Vl7 _`n``0@eH2?04dfc`0{=MzQR˘`w+Dj`u1RP=;ewCGy'Rg`\Ϭݷ+&y9Wq35O+?5He2sv3ξk(`4^ߨ BKNg]cVǨ@j~7FG6Ǫ@q mȎ#1jFdd?!2j/Ɵ~wi݇n:D V(y~z-\=: W P<߾[%ؤ?+:cx>~ŬI++MǿӀ~z>#G8IJeW3]y2 _};Qx@nBc?)mLDȼEEGD(JKfG?x^ mPm!U!Ey$yWNOײ>evf䔤KŀJlyiKgrꍑ8`ؘؘظm!z@ _'G';L+*HxbŤ~}}T֒YO-Ҳn!)I+۸B]`hL7b~ ^_ F.p76n W;XZFxzbZ? bQct%^p8O \EAT[f V`1=K@L4\I$􋜲'8laF+AI, ̤ y/6fLɫ>ܥ{tBJShy~wucw oZ˫ t68m,,JXe0M&f=xgMqgnS o4o ioF3j68뛦4c7l5MhYp[/-<~d}SgŇMY4 g`02 UyB?y}Y1 @oBc`jG4pwzw j;p LtCRYV#V\d/d}EgNNΞCv_n:^^uZڹ͡:nug?О!\=ڏ?67L'tqurmck[h~?;fPng]xO,2{bs}3,ϫeЀ%GJ"|1W4x1nrgj: ?P7=x#˨erpbiy-i̧$BEAmK FL'ж/ B׭_Iu2>(QZ(ʴm7,ԞHI?lm*"?\ XT%7/H:F:-"-S< e ?oaJGQ(TJUԑU(`U,bR NFᘜ\6~Ӥ;KPQAZN;c}RM%G,HUQ];{|aTɌɤXtflHe- E-84҂Z5]5Q)ZK+Nz$0YqHAZM.)|{O[l-!YK l{]<&2N6yW=&{ŮB/ڻ|kV:C'q**3. v?!nGk[rd}WB9tqX!7|GD_.V?fĪ5O[Ò#W`n=䯿.kDnAC V#nMh3^テ~PXr*/]z_sHCx_g=nBQaElmm-ũ1Nѫoqq/^շ?xzy~g}e @@-HRB@RRZR9JIu+u^jR"M#iY*̃ x4zPi*9G E^^qPWW+\Ai{ e{Y(t1oLҴ p7 f}2/DJEJ|w_*j@Zp*~RKԗzeA A_./\l[@J IDAT z (kQA51w-?eZ[0L#e"­=Dk%g Ӑ*S7dː chKBƏI $f}@P%w_Ztu5\& eLL"50u:~YWgDj7Sd֓w'=ʬ~LQ7AH y2j/Ɵ~wi݇n:Q 3" ѦfY|tTp{GQ7n!e%'3rҮ}1cD`w237e>3t8+ޏvg|~*ڷ4"}[6v:ޱ6&"BdyТ{Js#TI'dZ@`yKу =B $2.J{Sl,&f q0-{ j:42PܷraŏPI yoU + QZբjv!vg}w&4E} ;qLP_&-+rNTIGNDL` ?Go?+( Jʲ HGKL,-` `j:dT+U\Z%+4͔6sJ/[Bm× UV؎OLxz8YVPyMėIѴcmwBb?IP L1gĨXUE6An|رy<vnnu")U{KYVブA30q+C&cFV- m,,ZxuUA=aVv\h;6i痟ܟ&'؋PIܑ,  \~ B3>6B"1xB]'TO@p uzc0*.^W*N*Uԯ_=L$O=yd g>΂^i؄"@Cis^Lelo߶BHwslE~縁+uow /LB@>W e%0r/?X{cV5$m5e)kWNP9/aJ5950xxXXY^`[ 歬2 +QJQ5TUC_Mg}F^[PBU '2M g}ӴFsVN oDx};lIiY4f"*h [Y6yTgL)Es:8&dU!KIjz>ZiM6[%Yx9inn%#~y=nBsL/&mfτLU:9wsvy3'c#`0ochQË*ӬQ,3 ݄]Z\t>1C[)D'Zy壅V?tCRYV#V\dvBsgb(15D*Ls:=bWoXxpG۞15eh6\u닋0{)(,g.xoY5l6srNP>bS|+ruK_5vKfd?#ca43(I;PQ)6aNekVm6j )In`rnj-c2Iuֈe].sҧR˧[?v8Q-3/s)շII3k VPf#/J!/)A ƺS EWgǤ6m? Ah(XXJرAݻ>(މx-\nR٨4f/6w7'rYʔr eOD"|0Xe[l&=*t*#: qGӎ?cX=Z 'G';L+{nګup}= u%2 tFt&/kaXcd:#[^fRY|0Xe(ym 8(| i~&kVm6j @׳'!BChV}u\vئ$"ð HZ j)ʼo4oMVdf)U(J0Z8|ez2uEOiBR@8\TŰ,P( $&? 2!iT  G*&FG2LQ1V7`l ~M``02 U'>˱s[BI%Ʀ~Lza&-55"q^n` xyy E"ljlԯWRRoݺ=3EQجo0O.]x@ ĦƦxSMexGBC\\MPq KjN}ljlj3uzL;8kxYe SgLإl@xZL I6il[)W%@>oijPDj57p&Qb߅ǿB e/yhV̨!]S݅[]` #|X(v b"#{`irts`y8I*==z;1Z9{-pqv;x'|zĄ BwW8??ʟ\^I 8dKyTOIt'_ya)ZB ;t?:5/F(:G?wmbPS#b#Zb69gnE)!SxFDF?]F8ߒK.rچ)h10,(i$MF^ˠ[GLNӬDžE=&k1kf%ui3l:!@:߈C[t0V [Y\)` ?Ni^r$z,&COnd/l;N[ eZB-CGS^vƷ"A2}-$-Tk8y"Y6vB@OvN  uz|}&\MKvl:t~`sn߮P Ԓ9u[xO|ZBȦs qh^[`ע,u1Wo'v)V8'IR#%SHߺ՘'JixXslΫoNFjN)8mAk >XSL|~-PB._2-wEGlPcC|ƙ'.S{`wʎ*d;ɳKtN}b2L yfp@?;w{yH%/FHm3T? O%YӘJu XW/rǕB!8g~% yʜsſ0rK"S{yaE'>=+z[1 \o{tMĝ\T΋o_~y|׊?=Za[ǧIJޓ䜨g9EyűIA*ęta ^SShG⇿ ?'4?6_*w(_|pi+Oyl. vXa4&"=˰g&euk{4enmY̋'2{vN.~d cqVrX۴@S!!22giϢC;55ݳ={wÜtiϗ5$4ZPBǟǩ%Tu(cych&.g@V̲D2[[}=,Jv7~ZL"#BPםtRkШ)^we gޕzG'׉l H I#xx(RŰbA㕟R Adh+Cy), ^=q-M.'گ7C=!t͸S t# ۊ[tewO4]FT[D2[)k.ٝVHcDt'|ƀ5Y1%dOۯkγ,\ň)ZB%%%KG:DW{;][W=}P_`A@g]OǜZ1~z9Qy.ePML6sa{萆 kra㊈g;ZJ}ダy6ܫkd9=QG1ڴ-BTXY}z g?'ȐVCv+ѭ eto?x#M#N'rTSba#[j_:PvjMM ,`ݥ&Ap˰,C36lˢ 9(υkS}j+5J[WO?K@,6ie7TlԠ}fM_b. t!@/jtiap\ۨTʾˎ@9Ih0|žSۇM3{Yvd vB5W5J̜z~P<ޤwd/z}B^];_'UY @.-m_y4 ~iYr ǎ~8}(!i;ywo; kQesss;Z:ߔO1Tn&t]ƻY=Nhe0";=/2:^rmүTV_S? r~aAڟS_jPz%dl_vEWG7kl78岊u ~ӱ+kj˻ov}W=:2|@it)i? HwjRE 5۳woݾ%/[a,u๖왲Cb-{6k1]4ZC2ƣa[ 4M#2H即u8u-t{+|Pq{2A2V(:B y=_n}֍[jm<|(sOOm#h45pXKzjZLƍayaFt ן(zS"H$((J P% \&MAe6y+q0RyRώd^]ڴj{׮mh4t~p%EsIWWg^p4 e2>_ y$IBP(B!q"H }/+jie.<8,Bz$O7050 u΍^ l'k<#!^}xᢖXS Bl73uCAIvsA$.U\xEqAIDATAîe /W:jIdYϳBS_S zw<ǫpEBOͤC… 0vXύOL[?_B 6CcVS`).^cƌ MVXlZOh6j@tIQߡ[BH0jԨ@zo,[ ooG`i- NS%F%fff2g5{uNLʀܿЫO,DߊqJ6%RtREE¶m$… }||(ںuBee˖-[LV+h׮rvt ?BO?UTNNN>>>Dzvҳ@CjR>gӯ#s~^jj]|!elݧ9 bM\Χtd?}t###tرǏoܸqԨQ˖-%97((_~˗O>]__?##ѣҽ1 //ѣGkjj?~\:J<ɓG'^G:/CnVXabb}իWWSNV222JNN>rȆ V`ډG?*[^YG=~1eee!Y8$HٙOS_Y,֌9K^~_Jua0-G~gcȠ7E  2I,@,"HnE L~dqʭ\ŝf[e1X1FNQEIj\6^}榥NLKN:,w0 iW| "ġ0悎iαD` +kl0|b0X~ ~RDe"[RS% )G7?ZG^G*ϗc@s_E1OzLz^^ޥK&L~JbF&bwӛU KJJrss377o؈q܌%)`Ӥϟ2eJ\\ʕ+W2nG')'740z*Ձ|5%1ջyȏML&H$󪗥Ӯ2"ڷ ]u6~ݝtkDʭuz5L{u/S P?nkia؟D~kiai$1搟4UV%$$,[+W'"ϔޝ:h5k!Dq±GߦdI^ȸ<,9G-3"?Ĝyl+xԅ Gn{߿{zM$1e1μkquu;[~E "Χ>|ew7rmy;~A>~=:|߾},Xu`h?JB"6p+%4fW.Y ?lӘ×oJ0LgͱWc0}=tCoǜ;l:Wv JG/%Hl5~s2~<~gϮY!K}4 o5lM!JoA >d:^1X#MtK_[oWraxbb@nT5U-?Y=7Q(C``;i)sww˗Onhh t;xx/LUC>ϝ:aXWkLǢC4bW#=2uQϙ'W! Zy,4ڧ؊LݥGX(Rd>Ż˻K=K!D¸'Wn}<yPqk&plʙBK*D>[/ Ïv ӴaESLm^s6]/}!irQFR/0(?7nح[7iToCmýVdy8T=ԴzNZw5NvL`a0q+wD,( j‡h4Ag0X~.Z"xNgXG$Ԕ\anA˵ӯX> ˯핖'?$+3K"6ihhhcݱ#%$bIjrʳgO8121kuMH{DQOaRwM#mLˀ7oSV615+" CC2Ĭ=TY41-/?` AOp\=_M8]|}ާer'gӜSH yYȤ{ ; V@?|Lzw{e^{u9=0 EH]nSœ@6{b8+_Eg2'>{z׊GE z6 0ni>\`pdv &vo^W0=~2;O>6#3N3M@S?1Mg(6Kuf*t<JN6s6$b1Iҭ0ؑ6ZIͬxWD$ sU$$!͝jŸHόobYXp?8$H X6sR$Aim^yRqHqq$ܤ<".([BK%7@uՐT޵x'w] KE4f* k͞ $t:Q,~Y/VՒ wDȜ\!MakvТ rdbT0yz*S> _?bkEB %5Ezy~Rȯ!q$L=^|ny^2]&R籀0$dyR’kacj4"C.+Yl2k3P_!xdxcи=gg8omrsYP4CEGC QbNQ2&t"jϴD DI,wor>M1;Q$[0d[9 Giwϲ0i*̈!=\-w,&_?m8C+bP55Vd$aOΊb'ʏ\ˆ]yޅ*!W((y!~h3}!BJ:_H))xrOjsDhR |xxTn*vK_Cm-?hK{={jNYз> H_㢫 yDHuhbJ:yz 6ț*/Y9۴lF<+P~yhrS&ޏQng&X~:stj:<MQitx[fiD #A<:kqU:rlD=Pjp(,(عcۢK5?/q_33x0 DMEos"X~cGv9Үo\c_}[ GgcaI'O(Dk2 Ɛ Rd/>.fkh4z|\>n6ûhMM-ţEE / ߹fsa8R۰{aOs: D@k.=-;MeT*ϚoJOOíZ ,.*Hĉ ^mGSS2 EgOwUG ֣'v>h,em0JQ\T SO߀7yyMv r]tԔWPcz D"B$6,@,&, FgXrx&BibL&t6˯f%9m75}rL %i 6V2BӶ165-,(Ax=n'?a07 MPխðbZ| P)?q⁁v3ߞۊOՃb02=DF{NNNp֭*; Jω bZR999I _cXM~ݺ6Ro-o{ NNNlm"#"#;:99 ^ለ;hNj3EdE`W}:"rkݤ| ^n,_@xijZ.+VnBTY׽/{>V K8!b1 Y9Oʹ3hbxWʨVٖ[#RTḺۿd2}9zW8jD!_n~e.#}BNÿYr-"zǔ8ťg?7C`,@Dp{`ӏ^@^j) u\=!)2`P,cE׾;aSȋrlY&mJ >> t+NY _cU^?,bcoT{Dc+Aef?=O"ƨbΝ|oU;@1<*Òt=胣"rYg՘\9ǀݻ˷|IX\e& @1It)9~l-qsh/ ~yCLqlYL[$ucp*tGQ]CQUyLL abK״b=7Q(&yN&+Z够+SQI̹˷^|'a0$8DA f]e1mdf,))97<:EڽCAA1o<0y*?q d\ы4&IZU@(4R17bף QL1)Ī,ȯ{DeQ;vl\>M^^1g>9㧘ۼlt%=z_(C6lDGBr}t4k^rJZ\TBHR[|s m:<޷7T!6Cx߅RTYNÇE2e1B^ Ʀchh .[Gٯ9ZPSt!MNl~wVϻc2H>ak^Ahꎿzi7k|N.}O=)hgDtkMe8{bDG[nUR**.TUUKA**u#t\$:=|1D FJxhH/~EE˯ǫ~xM@ט:zH֘8S/Y0 jyk.4VA{œ(( _MT,W4&2K`A~iS.iT]bav_3,i /`e L[%VBP!Nþ'QG J+-) ϾCBZ>nL ?SUhѬ}{b˯H6qo?`ŽRW"ɸ1ojW+A=88{sɯo-4z4_kv>3 qS`ȼ]DLInV_4)pmQԧ`++ׯ&2LS,? _paÆ6,8uUXӈ! qv+99[yDpJ$?"fK/]3Y_Aʶ sL  ;E(~2BP+Bω3@ [9 LHz\w#@`f{7C\O:"ʕ+7_?gyy9slX~ʕ5z3 #i3s;GGk2:{J"3,TthkVsZE>V$gEl:/z˭'L5K%/#VmghƏϟc2T>} `;ſ> zS_K N'l`cױqZt]E$޹NuAѿɪV͵BEO5t\kGIQ`h 6 x~ݱ)oߡCGUHGO%,^1Ƽ[Us%jMǴb2񕪦 rmy@L] `??O-2o긍)CLJz^+[mTJ~"ۢ^3뒜˳{76xꪀ Pa؍H=|adh.5_JNW+%Ş'IDATJ^ꏓ瓦d3i#l9*g%?&`Oa]~.ͨ$o⧶+b`͵b]x;IW풜|4Ǎ/fΜŻKJA+_rcAt ϒx񅳁u1jLJc/n\|i22 9Bw9A<&/:wxqySq M(5ؽIS/deK?:U䡬c~M^YYK:^~&N;KYYY 'h$z̿<퇸QZso'egm>g?'+E֊5Ag !%dM&|ij7SdZpTNqn}ϩL1irQFGix,T, >=x \TNy"' mIUc\O뢯t0s<Ǯ= Ҟ#2:yveκj]&o7K"S6lsW[9dibllllll>~!Uuq};1jyqOc=ioh4,Huhb qAE0bՑi+\YuMgȤ|~4ME>{㯆-3+Kϧ*4_ ,;SO@[[z4H~u@egg?}dA/xFtFDB[! i50Ro3٫qqQ ~BQ[3VpyLu* OS Qj?tp`0-L~d܎>O1^~2Z?_]IV쨣W36;U|A:pSv4૩uPciOmW2?sۓ i=1ѹeʯ,lӤV܋KMsG~y8'=eDt/V!iر$ig{""%˝ֻt;}[=1-R~ZJ8DowA[.vPSty("+|3 ~oqoSyu P / )m>U۷lz0 tK|NqdtQȿ Hm[c顱[/M6C^aQ2oZ~i}0-S~k~aIrJnϗ q:? eɵl Dq±GߦdI^%\6jҀ+lA7g_N)᛻ l^lIctAS3 I/d=D-ݽ80-~X>Ś j-y,^`2$ pgw56Ǖ DWp% R%U_F~a+Ty`;HG2Qtq.;W\=1צ 1==FMgktwkO{q1[ꉻ{K7kOnCE(0ɕ[ZiyY RqQ5{:zN6cq$.iհJd?رzTc1լmyW]. R~nOE".pê} ЗBZXF'/UC=55-]kSr6?wI\iiC41ө:^s~@WpB_}a}*m>v@c-5#urxEWӲo<`0̀<`Z ib G"K(JvnLSh4:`0$Ԕ\!~8(szz,6˯.!CL n̷_bcQ_$o bbꌟ4tdDxT[|],붂[?  긺`뇩|P(UUVl$wW c9"$ 7ռCrrNN99z~d"5fq"C>OR2S,ld?qNl}WPvtf2USPKdsRT3Dk,L$'+]ɩ=f/&M  򜜜f5Z?qVPRCHxZ pw@$σدKB/BvR^mvO#е/NZrcLCorB''NQQlmrz')Mi0׽L1@E=G!w 9/$ڷ ]u6~ݝtqËWDN>{qZg [mѢ*FDv_~mϸa؊l`cױqZt])(OqL٫^y)@o/F_>\DF_}T~t/># =͢E!N=~6([ɛ~qxXˣϏVt6o~`2p(Sf̻ ^WjFD]Ȟpƽ/DKMuG'yc~{ǂSWňi}rک]±!ۥ֘ѢjI}; PI ;Xk궮2~cZ]!DEFر~qahXT7yyY?)69]DICޗl>ʐ l^7W^Rd{N%Im cC%Tav6L5Skž ,T, >=x |냪Y'>|9R#̆vb鈞4J3fKnE }zvz# {ma6X?.{9((44cG[\n֯bmsϵpCt'gj!xN.v.k8Hkƶ_[_xvѴÇgx-VciwcמfiρS> l.]9Da;;}]y!;ozhhjJ7V'Gn\&5w>jyʥKR%Je}ƉtFDkcTHHt&0{AeI05ˮ_QQLznn.x:=2r]ӳG{H֘^n[p{h$-L^Շik'˯ɡEE ~S-: sDBa֮]d]F$3=MBѰj[Y[?}]MM-:Pxq.]Y,f.1 ( yrv骡)W,HGG xHc:Œy$ESdL&%cZ"՗`ڠZ"2KR`Ciky,Ii{TVn,IE@\TDfI :4`0g`0Mc3p)JDΨL[5OHV;U] B"|sFo=%oޱ pEMmD_p(m(T+:nko>$@tu*d[^w!i~οHwݻsl:g0,O9͞|&(9bb2wttMyq{}"%"d7e:Ko=N- II·+AUwף'vԿB%Q!@IG~ #%oWIڐEU#24(-,ΠL۝zAUz=t/ Z\eU~[*deN֢k+3xϓls[@(A t; lA7Öf0OgN-4Pw>T)! P#r/3CƉ>HJo^:}D1߸92r$W-LڦƱZ:`~E}Bp\> ']+2_RNpb0_$V]&(7WV]вª`ڠZ`Xrc0mR~-.zA19kaի`1LӃC-a0"-3WIENDB`gsequencer-0.6.37/doc/images/ags_generic_preferences.png0000644000175000017500000003257212626272145020260 00000000000000PNG  IHDRw̄ pHYs+tIME8%}LtEXtCommentCreated with GIMPW IDATxwXWl*HQ^{7ٍF1Dc{1[{)J"ew].};g3sP666 RaH`СhAʝ7nDDDHA|!h}ADQԔ")a}ЈNeUW?.Gq 3bY# |*#R:j $""7_СC)ѣ\|Q5BLNI>G B>Fiaa1qׯ_5q$%w#R𰉡I(/aaa/_DS 04,.\9uM+8b*N:VٳmBB±c.^w͛{innOQ_ΝmllO:uYyl 'N.]qZ^zu>},--7nܘ{_yݺuWTpZjՆ VJDz .[l/.Ify DIIl4P!D$2Cff̘A8qytRZggc* رq\2u=z3s@NΜ9YT,bRsҤISN0a˜1c4Z6f̘cDz,;`M_*_ tuuի׃|nЇ+OVydeeT*߅i2$g 4q%d ׯ,ܹ[nO]y攔rΝ`Νׯ_.];5,ƥjyo߾|ԩS5 t ֭[wmM__7odgg?x%3a{EElgϞ²Ve@bH8>啛p/Mө|fr! @s>޾} 666ksmmm`׮]%y7?ݸT-?~8wi*KKKxZ{ E|iӦmذA˗߹sNal;9תL(oDFS0 r>** @HbboBBBVƹy!228pرcnnn͛78qҥK}||#W^}EWy²s \%BʅiӦYZZZXXL6M3(lKw0uT}}}m۶}s?lcccll9[[vmj՞>}z P*>mʥZhQI(4 ysyw)gDB> .lٲr s9zh^]?SRR  رggϞ!C>}ZP[NS^Dk2e'q[t)ve˖k2WlwF!mN\n˽}wIT*߷S1.񄅅@ȗJ"˰,w"0 ,+ɴIYrYg%1R4 Q)-YݤHxo9/20x+!_4q\[֗)9?A2j ]A +T,Sȓ` KЗAS2()n[RO3R,FFժ{XXZ2m2dΐgVWZQo%@)":B(QT<_ HQfnws w:hcyʌZ242n R*##? x]²`9pIF^&w>BI Fp}%K=We2@̕+6] FAU/9m{[EQ"!dfcOB"QYxEw*/.aoc )r,3#{#3Kw~ᖦͽtdu4My\jj߼~u!Ot#"8m);) DRƨHĐȸ^5rŮ %=ENLΨU Mz>E{8۽MW`ADR E\- )5RHVEjJͪmĄBPeңf߿}f4iҬK_)uF-ry=UĿ`ﰇp|q*C rNH~ρ8'9ɷC7&wEU U3`C+SLOYPг/SR"]*l_Jv ռL珗5Gvr {~xszν]0 xy7o#/ [ZT?9a! n0kV}qb~lS|ː2}TOs}+Z @ؗ~yyr-cb4}S9`:xR׭W '=Ϲ}{Hɽ6?xu3>h\0xG[Cm|a_1ogZS IپEEAxLN3nݦMppPڪ>u`PMCFbRgqwb)FG'>yK +iG/otx灤;;H}=G5Q2elo K  'r!G8;ƴ=uie sxe2PG?]Ĭi \NZDgV75G:1"{S͍fS![ɴ>iD:1-KM@lB!04w`R̥|\Ԏ=3;3[zoTIErMQΘV6.Em %Ƈ%$@gQ']Qc*l_IQҾP<wS 1w2{Ozq]Q7O2bCGȘV6f&)SƤa/7[cZH!hT'EH̝Le޿\x (APg&$ff3 |r70k}*[F 1w2㢟%F K1i!wݣUKNV>ߊ2#/7*BDuJS#ܖ;X! s0iߏW"S^;}Ň9TsQkm&"0ɫ\V[f\{6,;X:4neNNrmyG`klbzS1273wfc\e@#VĶn6 7#.??LZu-N kkll^n9'#߻(BPV7<ػnSt* ?6潿ֿKRo"xjwNfK"Ӂ4=׹;b?tnl6Lk>ٸҧ+}}oL 9orb&Jsgn:y/.d&Uj>oҰU-Zߘt(ώ~x M@H}-JMn;nsFu \3f300(p̅^t%HzR T _ʔ߂ͯ2y sbF@M]ń[lω8o?5Wlɢ166ÿ Z)< ?|o., fgXޔ.bS ; R$ 24MHexD6| }o&EO2VfFc](eȇk 1H!ScR*,"L4R*Ӷqnk ESFz8bAT{;NV^ӗ)A2odgi& HELVOĔLTȈfp;3w"߼ Md 2 ^#G 4ڬzzzw{Aɷ7'Ӈk-rދ׭*rTPE-==  ;b%+3 HE I<A  2ʠ A"Q߁7"wox'A>{$ɣMbnsUTưz^xGLa\]]ܜ=F MN͓ʿpl̅Zy֪Sŗo?b6[:u=vɘPAZ!DbzB^ڬ[El>:K?L.[t' yAՍջO #W2GMLd4aث){3^};}Zb=t1U6G_8Mf<86\q:fs@vJLi:UR(rFMz\17WCN?~yI{n< x韪kӫS9#sCg*Έ}ِψ !clg%JzDoEc{*UFT+F!]aڠ̮tq_q,;uwv TA+$~ܩC7WTbf{T S _Iͯ#O[+#C禾.3o3OiʫeJ~Iir3FF.V֔kuĺy6M;6zMGlȗ6sOv7#= b[4< ߕ a[DŽ Hł*  2 2|N*CӔ([070JAT჻IIAgEA|YУ@ 2O6jl1-TԈ 3"R*AVATAPeAA 򅨌|man.nջƢkᓽ{up.՘aC%}2Ae³f%-U-"zT}syKҡM3f]IФ-wLZͩc=9$FnQ5j߲ijMIN;ml`7WVͥZvcHlA;8ңٲwj{wq#n^f]>J;~urf^^u=fމ$OM]Y}vF={f mߤa1T bso֨^#yBCOp'{n:~?-t:ؽy_9pe^E\_!  ןVp[ۻttc\elɇ}zoG?cvEq9N'tXy[C?/ \8t&ݿb?K"!kn-a 6W/tX籓g9:w]@6}`w|~=~NL|oNk7έOC䓪 ;~>RJj`&+ GR$7i^f|ˇt dٚK\blgԐ.jhf"ʬܬ4@blkF'-ӕ[iDtAŋ@To\G1À2C])SUZ4D .s1qɯRGtݥ"R4V⫼䓪  ؄Ĥi3YqeM֎X"c4׀.1"7{v*wcL}-Q|o**"1u0FM| *֮VsT#&goѶ7s53& S_=wEq ϪPBFȾ%;cP!EuF689[ qdyl]aK09unGI,M+0!ȧed#NkQ["pm5cAfR7}mۭk3)2;xӦU@e}g ~[Ѫ)wfE0- u\AԔ8.#s|#b 2  fEbU3"R*l)/0- `[` ;b TfEUAUATAPe * _UcipkQ!Q;l'MRH1WZ\=as._8V‰GcXI |̡GoHkO/dA9՟Kltsgֶ0ӌ _PKx!0Tң:-wc.MFMͺp4\q8TǖX/' ?t:ū+[Ww=vSfRJjpfK'#իR'Au>u(syrI}L1E2-hrIA}́cK6ؔ?`r!.*inNp/S C:4S-nM2xzQ\NuȾ ]jZT}|s~KV2~헪3wEC T2VT9E&E1/,Y%RR#KKc9C1%s1ٻ$ W/U`[};]l-]~75^Y/ % _?t%Eӗ!/.gI*B9hq'+HAvRvQdƕjSp[k66nαW&j+(AflѤM"E3,W+` łlԠ * ŵIDAT  `[A*Ve0- 2n |<?keeUiXfEBTF#4VV^ND# HAPeAAAAUATATAPeAAAAUATATAPeAPeAAUADKE)ӴRv@"(T2b`h"J$CA bxS*FFyWI:%ZBZfAރ(̌Ǐԭ*S,,,z? H@ FF^u-,Pe.4-R:A *   G^E~$E 0452u*q\\l'A)hӏظf͚*Udhj4WbUF;wnk0 lp"2ʥD89I$R457uTFsq6Ri5wB{wnh/%1TBUgW-<7g ?kۍ3;bFHXT*mӲJB  Qĕo:\ /H #_ܗ2>b{wW% N'ydn,,HWP(R(Yի`$`n~D$"unG_ Qŀ}v$%P/q&h~kdMe_Woҩ=PzSBB>H${Ȕy(%njV#铐8t^\ybK76B( D$Ar4E}IH ϪFwi?MNb*yH lWs8f?ˠB6[fS> aF#1/l;ťc 66uLLϝqB^&M3A!4~ԡs x+c>fy>" G>xK5%EBDH "gg;byUiIvOiG΅ꐹXl4aj(YQ[==DA H!ƝaϝqCVV{ *}@̃g~WJiԇD`TYѢNՕ|]M%DnU7Pov6یpE;KcEsƽ,'[ }TMb#MzH*Z*VÍ^V7z a)/Q7j*۟2@ (B(J) bμSk|2.Ȫ9 ?ګIL8砞A R ް o$&:yk,EZY~px|,nzl"in77j>Ve B7$bH)/j477}JBs[W5[\xroq[*_]E[ytstj9l<f.S*pD %Uu6 zwƕ Aeqf6@up|sIՖ?r{i߲<CM]])E (De83UJ%!RXQ>5Q%CTjqECi`U>V[6b(HuL]z쎍>C*:RR\+4PИ!6Ѵ[ě,~z?K?=`%.z}[e)Ղ 4 c_JOfPoS;:D/9kp\W>7)匘&k}Ȩ7!$5}>+F6$Ɵ[}o5]#knf>`bw|8O7(z=ݓ.\怋r)"xؗ.^ҳݼF*XE{;͸(AuȲn;^uYpzvy6TdR" 9*AB!A9+RgTU]?aQ/NtH+V\FwɲgyQ=ioR>FgdradzݻCS;kqYHB_?I<.YLЗəIYO_%EO{{ѻboL+'G%$ъ.>?xgpw+Ogӧn7nE~mJV!ʋ#GŪk{"_^}UaL33YY}]XP9ab KoݳZ,cդkW'o%rooJhKUfJ 15% جluV§0xѦ./T,DN JBHh+t, :ri|rI^[6Fp5*!ON|6z"1c-;NmhYM̕)Drѡh"Q iኋ>`O/Mhk_{cD; %1xX{E]51Bt:6 wP7Ȫ[Ѻ}p!R3' .>8u JL*w"SDPv>1M(/h<.uʐ\3866K9 ieS)Q^n8W!U-Sa4~"nrd;8O֍*LT(Ԝ)#xxx44'n_55%2ZP}tuuRL&e 7Xe9A5N4Hd2T&ӑuuuuuu% czu9 "0~ܢHybL0A/%*]ehRd14&T)gh%P244kgxMLM FSy5c +e2ٽwMLLsEMZMLL FSy 60R*(>zf-3 {-MX<& <ϱj9} EKR]"|K45 3uI1I$R_$fGUATATAPeAA)-eAЗA?-ZIENDB`gsequencer-0.6.37/doc/images/ags_matrix.png0000644000175000017500000002264312626272145015565 00000000000000PNG  IHDR$m' pHYs+tIME _tEXtCommentCreated with GIMPW IDATxw\].$lPDA.āUQ{?묣hՊjplڪ(" $GBH @_ǵM^䝻|͑޾D7ڶ'!#":jkÇS#Gs\q =T(8=j5!D.J e-,,,$Ra!\sÔ'Jm`$'_ {npppr%QfPlPZ)K^/z؉Sii鄐GRΜM,hi˓JfkQS̨u.5/gf~uHHhrr Z9KIM0TȩP.%$߇Oo޼|FUXyVN]X Ljc/J[3wnnnͺ~A٦'g͚hpKKE Κ5 ?]T*٨"'6ӣ2{N&?z>]EzҬ33Nzfk`)߮s0W;0`/_`:ϖ.6s#FC`*c3>ˋk%]Ѿݾ|Ku?KrI77o~Vo۠/[&zӧJwVmYл~B>lsz} d#j9/onk)o<4"P[<-mS?­~}m>9ŻʈۻBQ=iM]qKް6.Z)>9~ݚO>P(p\mOgSĆ r{.eo륥s)WJyyJqEz_2ItLAJwX=CUg rnDOMTS"3?|'Hdoȩ swkBŞxgp+ /P"(5!nnl5>2{?^([?+ka^'$*lsLCi ^ȿ_pv3,2C=W8 -? ^\ &|19T^l\ŵT0զ>KO_v䏦{xTz}d 2둝;4!YD<"ÂTdbc 113Y0SVqA+yOOϨU P\G`\5H$" C@)O(eYLƲ(P&}P#j;95nT$U٪i)W" =zR**0_rXut+sxɩaY[;'빺깺OYH.~jdmD"o`kg{"ԫ{u"V=z,,,p0 $E˸͛[J-JWqZ}RrpJ-s:vtvvau!P41l@ "G>M,cf&(JY @M.6,5nbgglzz`HTɩwpO/oB!{4+YYYe;8:׭kkgG )w. }1T@M-6BiW jRZYYysuS20gV"V0?"[I)SzNZIjfa5.ռL&SJ}ƣbY9EaeB #93Y{s4\o;9toT4!¥?&@,6̣ ǏS_<3`;{͛{XZ[02 kɖmc 50_ G) ={l{`DJuǏj/_BTBre2~~z&޾y|RB׷-,L߀cL[(!2^#%(cph߼W5 #ow8~#^MC$"Œ٠"[/cGcT*8  t1hh5IL9gkׂfee۷oȐ! [w!Rb_pjm Vjdr+5޽{~楴**J)Z@kD a&ڋ/Fq޽Yf|E%D@7#hZW1ߞISz]ysEPsN=k.= 0[RKi2٫9gϞ?|'N,uMRB7ov7c(DW:%*o xxT5lT\ l\S@D9۸[]v׮]gϞݳgOǎLRZz~alըR!.uMfʶQ׳TFŰsS,X`RWņSZ7~㜕CD'ӣr:tW_/]|lvo K47p o)P=zҥmڴ4VPb8|OsV jҨ_ر6:XtˠɇـI GVdqA0F]oXUᓦTW>!9w룵AM"lRrc&[6ijsOg^{y\ٹ?vlU57Ә?zTBK'>ˍ q $_Lnݦ!n! B z|͟Ҝ #/`7ZUݕ4g m=>=V[Cv&O(@M)" AҞBy燉$_.*%D\ǰ^mjǘ.*3[9a֨9WG~w W01bSŔmq::t|%f8Ts򄾼\jVΟBռJ 7:y~tVepbQj5 )3MfftGB! TcBBJ, ]k(+-ZV]lU3Of(wB?'G[>vڹD~gϮ;^[{֑:|ʖsRNɕ4A+nWY9Jm\ͼ]YѤN"#Zi* JoNqmf:Hj濬,Xζk][1)bxuA號M$D&l\v.{}ۋ|br8Y=M{߉+}[aԲ{_O8;8TP>0IQbA 1B\i˙., ^w\R b6]ym|P%!Pp@y|r/^$S 7 *^WdRS'I%R(ضc:lhG':#wy SԚYKukٳRպ Ԑ,r@wQpԫU W\ߞ2dDžǶx@a Q\N#[GlvI,+ˑQTj@͑sċLѭkw1i4p[:Bڵ=wk^FWpOt_5\f㶲>rPV깹OR/_NԩIr8T AvT MQd' +zΡll4so3b)GTyq :ԭ{(wAO>MJoha!1U.Q`q 1&1}iPŊ }Ks}ൎJ{.WBI9u:ei~0-Et*NV^UF";tvkemC1MT6 Aȿ!7WV$ ~=[7Guʑ[ zAPsbqCOOWW7/s ZabR.j BqO ͕>(^S ]]쨱M9 %Rb.+=CXXqe_0 +b1y.Ql*WiQ*4ZZHF8U 1NCg )>ZxrƵt;{{ww sb˨*upJQJRRb=<}E"`ݽsq* <=š$b.3zr \pTR!]v޾!8ίQ*깺qbIrq@uBq8TyQhZJ*5*ŋ,/o3||UxLS]U_lʐxNJ*W1#A(<a\x92"$3zd9!c A$7fiisǔO>5KV07l1b Mra@ !3#11Y Z`0s]FE(skXÿWRg8%`L94oZ'$u[]z&CUj*ާlj--Jd0BA+^mOsrsrs$j9CN\w|>l[ݮ7pWǟ8d/(7 Pd 39,g!\E3bu~HCN;jYupAq|mƇ8Zw`cߪv G|k?j @u>&ԏ, v\oP-~N<.O;R agL 0"}TZ0*J*IogJ=soL_AB]煇&7)KKe\{m898pmìOyVknDK"-[XRs-o׊)Yk`=^3~yTΊNǟi>&@d[מ+-*ZlTPJ"< OocQ]IҮ/ɥTz Oge>8Ӈ>%͑}qhL ?W*F߈͛" g>ؕR]>6\5Ѧ~,97'.y nlueӇan={nn=IDAT\JV_'m3/~n̉ `B 8; O+(*>ck7'F(%\%9Obݠ;>o&)業Wqv՘ʉK}bKR. LjA bL WFыD ?8BHF\VHHoR4WxʮSJ>А@z>Gi_*@ņ!OOM)ZrPk\lYgXL /6*1esrd"ՂsIčh0퓔GOQڒ䱃0&) ?))1#J_R$&7iҔ,L4ftò=A}3O}``sݺb\@)7GFqN@!}#~ٲoX-!DPyJaX,$3U}U8T AK4"°y6*%I" h\p T1kflTvhfTfb 61-.0K-+n }W1K-R9˨R:@B3 UѻOS' ޸yĵ~}nAT{a@B3 &(65HfΝKziRa+A->yr\b`` lja;̷.J]wQͲ}``s]N,/n@Dg,YbȈ!:"Μ<gJVyjjqq T}xEC`*!n!_ pHYs+tIME0tEXtCommentCreated with GIMPW IDATxwX-wG?M*jT4E]XbK؍]ޢ` "aB/•-3?**ygowfwn{. Tx裏  qk׮GAuA)͉eY&GAUAA;!FUF*?ٳ'AXb țŮ]GŞ2?{=tTU&t)33ܹsqGVV(III ,kdd$n۷͛蘐k׮?#˗t֍aΝ;'%%ߜ_΋fy+geet:$QJMLL,--=zdffV~7ofgg7kLwb3 Րŋ?|аvZ׼˗/OMM5w6oޜqƮ]vi۶meեKXvmJJ͛ӵkWqѣ0ER(=h4.\@IFgy7n,zMqbawyvZzz:t:ݻ}̙SΞ={Zliaal2ggDQaƥK gNrr2888h8)Wɓ TVumݺ5z8nݻwQƣGnݺaҋAK֯_ԩbҧOO?*o{4%զMCx՟~)&&[A^#:R Ϡ2 HSe  TeA,`6 ~ =<,sAuF PܳAy^@ABABNvL .||0VFA+yW H5PVM;^)Bljw;(ȻUC/l9AэijemӸs7QAI6Or5Lmv?gfd.-]{f`jܥ5B̳8.J ߾˾jĄΟ%4iuƪU~7hŒ /@+}'411z 011{kV]zUTeyXRZ-F^Y}ƪ^UVk2XH)%"^k]=e /+NJ+WJb HUeJ~mzU!Rbe@^$7筦~=,PR9TTKU H-$xE,^L_ЪD3cvBj]IExyUx]?g^^UZL{! "J5gvp!pk^C5ҠVZ^ﭾ;WhjV=7.6gJIl5fʈ@3(Ew_\B(f#5\m@\ߌZW}eTlʷbj&MT8(.Z1^nr/sRI!-{D\X?򮿧[Xx2Q"7[fֺ4};C:~{_RzĚ|6{[R"^4Ꝇ<<=}uW\ Y秴o/_@?u+vq^}k;ŇgiYǫN󾹎͎\quBp` Ta*b\ 23&ISxp;)Bn쑛 .PŒ7V.v'ExX(Ku WtY}n2lOۖog9Z׍WuS-ʡ/\;~ni~3k]Y(%tmѿ&} RCr=ϟ\fȯTwmWS>pڵ1aD TѬc.F^ݜ|п -ݰ?._qb%@A&uҮ3hO,Je0i_QWc"Lr?͘op`qK6,F%UFDcej| gUJxp3Ec~XZTascϚSQCacbjŗ;{qeE", od.l+5(ʺBE٬QW6D@ܢ$%QEBBc,eQ>HV̺ѡ_Ǿ`wk0u}[wPثc쿝-7֕A < lnEDQߪ_kA%P7i;b2%bQwRDeW׷/ (dDѺ.$X*d_߱6ylIZ hU~ZϜ\|%E&,+]:D},f{Ɇ=Q U.ƥ<+EI-v g ~^UÕ|]R۵^vW PAMG3B({ffꒇ ur&^bԡMJ)p&Vƌa#@ԉRJAv 9sG ȈO?-Q(I+`m #Ii jְOaafħԱ|fL [8/$ǥJZ3#kullI7pl킰ޛH*tk>pdeеB8JiIALpc0,* UXap95G#3 ˁ6SW+S+bbX^UR1L,*/wӌl3h正=`2?>khظS2kqʈ#::,M޶2-ˉSuS7Qn (ddѫgNKW2x=QOU $H"oT)gSN9!dxa36I0qy U,ff-,SwӥVI77֕Ass5-7Q` y㨐sS=aPuyɨ- ^P\峁r"2XU!_N;ʟ[;n+Ӂl/0)9_NblBЃ bp2sw̌̌ۧ0lW[zϜܻ`oN t(p6fQ_|FBFF:;ϒ1<[Pd%gpǂDo缰:pCCwGTLA||rښӤkuzS5҂R\SZRsd7S5qj޷1T+>:dFb6 ,85 X[DHSȦx(?:C6;Yn]y%4}Ua[w2 +k?4kw|j̑P Q;Z5kل[KCڎbFTd``eo*\٠oQtC? H9OaMH\=\}c4ŸQµ HUlj1\Kzg^pW*\٠T3Uf]TymS#+\īpg"RT+r~e5V AoZc2^2@lLteƪUZߋN@P{׫okgWZln~QlKAF޺u3҅FoڕʕJAAʃkWm[{wD! Hy#4oΝs%%&ֶYkT*+kȈ{AA2;qqGѱsqq$QRJABf-ZҲ;{j^j&>iPυaؒ^zawIH R(2Iq|Iiʈ:R[ZRR [0L]GA )ReAϜ9UJ-Zu޳ KµmۇOٽ [Knu`t޾ {:??t lIr92Z=*@̙SS255-===}ݽ{=cZ= Ru+LZ y ܒu9"-5Ż^vm Pe(*߿۷J"kŽ/߻ʫYs  qIfA$;:9E^x'kY<222{iӦhѢVθz;k۸::56~M-µy-:Ι;G۷oeD Bvo;7h}ڧo{,B&sl__Z|M9?ӹw~8l;Si-XK>\k[/jʛzFA^:ND&y]T^_aÆ~sVZ;,R+.=,FAyc}wGPJAQof]nO""u{if3GOFy=8oD X5g3~qvPJK94uwK/Al)"zھ}3(?#0)Ro0H?4:ML)P`MMs8uDt/Cf9Ф2( :!=onǤK(r,I{[m5gPaC=;EeAy#U?ɓ'7o Tv2Q޺?p,xtw_k|ojpRw@r"*@LD-],@rx,}p>YC)~ ؅ ٱA+>|x)E+ܨBHuM`wi.=ݽYRϬ[-=sZr]:kÀufJCZDo$;tU?W|SK:ިտ|6]j+\+# /kGh`BL)%T@ Ջ2T&JB)gϞy~U2333sppp]O<))VƢa\{=y,ƉC -'<>iqؓc`?+r?N,[P}96? &ȹGV: komAlf mEAg   2 *#   /twYmVH \Bs( ReUp ey_񺨟z 8;?fw-AܺU?~mmlߺU"72kHxvC0}9[--i5mSw7]/kcN_{r_~Br]\3ޯk ZoFEA*yuz:qD]'Nݫ׺늑؝I}̥s=4x(:wqZ^G?0Ww>N4]+rڅKׇ'쟖S#Rm@Y34ب HU咄 簏qM1#\.>@bk_Zrf^'}udt741kV9PzOquNオIׂq 0XcKc#ت HV\>I"oT{s[tZ71Zmz7ÊˑbҊL,A}'#ѦkYSK# A⪜_I2>?Xղ5qr 7O U-8);GeRTs6 S.^I5;%<una T}U3fO_3c < \եgW='S˖]1ȶgᆴQWEdQ[ܫ,'?C 26v䜙RՍ K <[jCr]Dٱը뇸)ywgGWYbmSװ׮ASχ-\NNΊOܱ2kM?kwiA6 d`[%qv Sdֽc혞{⅌ŊkA (AAUFA K,[UwrcAXAAPAydI P0dz0 Aקʂ(>92255=UmQ\]J%zA$K?Աcm7wYIn:v(!Gp IDAT^a8W P(i2T-U&2x78ݣPĮp_˛zg皼iv&.S ,3LcemU(pT5UvsG!u<="I^}Btsqż͛6|9Rx捣G[kȒ HRP ;n֢5>{WȲL)E1xBhms>Gѫc^vz~TXF6KŬKS}T/`p{a E{7Sޝ9e(NMM NOOOOO~Mm٢%,SiNLM٣G666=zwgO6悧4 U]MYXͷ8Aha#͎VPTh- [86ݓJvx:*^ܰ)n\2`S]ܳBiWcc>K7=5&s8fȐ5qK +ܹÁ&8Ý;w}SA*ʴBSO.ؒaΒ/=.]ۥyLKgҽy}/'S9w=+JSI&s:狙+SkQr֙J){t]-[cuokΌtx@­V=ϑ!΍ pvvꎔ6MULo= ua?hzZL[`OLDQP± uXQ%o?M,'_b$Ж @5ğ¢\XMLǍeWeƍĸԼScljW851~x%˴) MseI >&I62xW3s0 hGg5j|?&'QF#!D 11MN DQ$D58lQPVϹO[;-ںa_u[[N=,I~cƴTSQ6ݽ2;wOnY#Y2ض73hȵ7j($1!2{bHJ$Q:\%d>JfǖPrS*ɔ97Q3XDEAQ ,0A)PY?#!3EjlˆNy+䆤b+Mׂ8.XmDgKNmZz.SAEfmXi処@_mN{F.,Cz"RٖeK4}_4럿 0Ϝ̔fVfJf_6{]geM=]#LlMYCѼQ+}D1zuJ:.(Kα?{ޜ+d/jn(4'egKqFFƠ}ZѤkYSAsh4+W B-^:20xg U_sRB)^xDj?qXg5 kqc}-=bmj6z?h1TξkZw+sC)-N)0QG5|'j΀FAuU/- -weW{4p t[SSj+%߰`ߏŢ䔰gk|Ǯh3wb*4.mQGk\;n`6# ;Vvuc+sum4܍/L3oQ[Z޳fjKE!geÕW\=ʆ&\JGT^ 4dW6v5iVȢ(b"R5(/G;$6CO[~fp$2R6jDw!TiUP4mܿϭ \2ǑU"K Hq^+SX}˥VWov!II66 UQY~-G^u맥>L%D!DtxO URykmBHddDzZzzqeMs-^_9 (AT*=<%I9_aJ1Au2Rc\0dzW_%Y&FyGUA* 0TsVkFdѫ4Aʒ,=TxxPǎ_=0UIn:v(!Gѫ4ATe 2x7GOtxWxzץΝ=\73C>APRV ynG8,Iz R}(Sb}OB^}!*#  Ò2S`2@" +# ț+1D2Qp!}Э T2A@}(yz|}tn}q" Ր2zi9I&  D$Z\e,⍟͚y(WHi;LhlP6ލa-6ȪZϫk)d sBdY2OhmsÈy[?Lg_7SWܳ/N.MQ<e'N 4ImĪ񬒽r{a $/! r+JŌlRJd}drs% 3"G/*']O1uTМX1uk|[}1Kx(vqsӜM Tx>/KeQ˼WI Xh-lisdȬsc=,X~A/ZglPݻs%9b r1:խJL 6.9#K*%ghtKwӫqEةږcvpCSB[նkCs%tC3ݶ\3ijFX;3М)>ʜj걞.stMW@[[ϐ)5KyXS RBJ(PJYZyZv/PKbk}e˃.sR>v✠zNCn\L" N#9Aau 0 c6pQN^6LIeQ"]~ΎC3]x,Qs{`əY-ЂfZv6 Hw7c㦟~pcüSc4:L_ݬA=W]+< Ǘ0 RpUӖK# +ZZ>2؉/ 4Ajʒ$}IЋ&3Y#H*'#$ (QV+ҝu. (S +2pJY!K =9<;#z9PA@D DAQHaG 4qF5(Rk[:g_xVBE: AU9w*PAufI2uDTCKsk1ןdkJ)2#C<ψ0sμ$Qg`G4wBv?MdcwVh3$YrK?dZw^ ,7EJnFO9ع%%F_ЫМ܏*W @Hs/) v 2ZB|{WMFFF*#EfV# -Y?(5|0<}%4HT^˭9/Ğ+DҼ.ٽ|jV 5d*}j-~ֿvt$R(Uzy6Rwv䊷\ǫPWiyXRά>rOCMs/UI,K:VjD& 2RT JaV$^W,EFjK߷pړs3;9:98:9l4L6el;sK|ja!n➻ZR2[=.ڹAF,Pʻ ߺw!5ͭ{~禦DۊVYt󪜺k-;{%xk\])#0oPuWAD_C4If];;wa1b!LYAj$BdB:O7aL-MT;{˲,󼱱R|s_'9_WY<!kV3 z}^-E^}V!Tf٭Ga_v 2PçN %2fʳg,2$33ğ:u>~P`|!Dh4,zA4c5&&&Ǖ-Kf&T-zM!vXдjh{6$>" @Yʴk(إâU{epۥB066V(<_ hzZjBGe}~`k)ū*)=V6tBAPJsgFJeRidl^}A!*RɗSH_DwM*q-۴U[Zb"R-beJEYPpdB+g#^a`vV6MII  NII-3keB)iigO~}nE DJr cfyUXNKM  {5660 888-5eƧ9nƿ䛤򆕛4oRKDW'&[") HWeZx'l0gɗWc7CQ$Q9y;[TsN n@"Fn&}֖S&x9Kߘ1-TMwӼ%wmrĈF Z>r2* xL̞9D(P"7LM,!Q6;RIȹPD(%( "@eQ| Lʒ( )0V+dCvFv`^!7$!o-=Mz) HUV"3h6,CS qX/Ab #Z!NA)Ul2͌%C߄zS Z g[fJ3K+3%@o=yޮq2ǁ&]랮 &pfh^Ń>z= bEl%[=ӈii`aoΕ\2CL57vkpND 238#Y#Kc>-hҵڈLyh4V}dž !/6tIeR~ғt:<Ҫ |Muw3ZwnDMX'H(`MϤċkt6n gbm_P UGj WSN]Õr%J(%ї\`LR) P$ͼqͻV𴄒h%J68/' `IFnke\Hڧud3 ğuaTQݳy[\]7ϢD}8Q%JuZ-H~E 'JB;J)I=h[#1ї#.GFEEGm`ʳ"n-S/v{-Gc52(,kXq,4\+PM&,RN-[WKiW1 }ڔ^ C׼)s DDQIkLnlRZ.`e2ƒ AM_E06v3wֈOb¦-00P Vjz=QQQ~~QQQ{Qե-N-E^ "^Vcy7nڔgM_ U@{ȏ/<"8}ŵ>ÖP|eaq65O4ӈ*g5ڡp`r>~ [gF܀Ll» ۲+=C8XXXl:}- ɉ)5䕒oXbyArJXMZ>co4;e ev6nCTyra]utPwXzKo+S6lƗcSYK^Й--wmemmmc{neyjr¶%Hݻ=x)ϼOzYWX5k'l/AD_C4If];;wasVsfl@ű,ɕf-ZgyRZZXYYwU=z;_>rs͚_~aĈM+W7==rۖ~~~y)֏8If67 vvjX]3 O JdB͔gϞYeHffƉ?u ||\H9uQ^j>ʆ&\JGT^ 4dݲyӨc-]KABYsdh_G|;vHlDY+.dH_S7I ?y^kA*S( 6xV@U.눪 )` ڂ7A|ZQ²}[.jzIJJ!gA*,Z^q OKMyy:P([nup~[ۺsʌ&''9}:SgNm HUSea,,,?zn$&$XYY1 RՇXj+3ѱqgmmܱ{fFBVCJ2r~OjѲ},à!Ą37iT*TNBdND!R%Uj&DFF'YZZ6n8؂^;>233[RI@( EJC'o+WՏֿ:oH1t @-TY ߂juRK߲sVԆT `J|َ4#MV .:5riۙ)anwdcOgÝ/jNTS:K7r5IyNlߴn;bm}5~!5 '[o}@Wo߽ohT7k=qA,OoZ7Wiq =MG~@ kRVNS}ܗ[RBygf%U>p%ݪp[LLM!DFD!:h[)!ox[dI񆼺3/sJ_p\^%gd[Խ/]}.w7:z\7o^wS2FMn½'R{SNi֧S% zh-D1-b.w/T1"/x9gEw଑z=aSz=_8JHbݳɈ2gG ]­E]ƗU3©vNW3oW4UzŠ.=ll/>%%ِ_ʽ۷jrĬ塆PC0uޚ=[y !RʑbÎC9y 1[_I.;KMO~$k2?x^=l:4E!}b7?tY[ 7uQBeӿo kT6 !aYF>2{WCO:vy<^[I<۶WSh3(u2wϙhGo\ArNX+~O|Y>M-oC͛q/]I)؝uK0Дr?Y/::.%fm+yNUj`OWnΑ7jT7+N۩% gEש{ҏf{P{]"%'' !֯[+?w/o{dv p\^=vH:KQ=  9ӯʊj3UW QթO.*u\n;&Rʛ?`@ */[tЕC.iR)8N!,B!:%PJI)Cݷ~Kz>ԴiS8J /Qʑ08JBW9iͩn]j X)fz$oPt$U\(T'm+ۻm3;jV򜚦WGf,宔ZzU:KG~N!Vj̸n2Pk'w0>!akVCVIDATh0׬UJ*Y䵫8zpY)VjUשm4\.]-Yd0mf Pgjٺl,orP[N@ms'u0(!1?&$$'$meybzyy{vߠ'S \@dc-:x`Z)TkʥOkL+۶`HjQש_mk%gm{<*˓OMM۹G4üSyjEk_~ |GNHHhyo={R`<5Bى5yWUkׅ~ڬYv-}<,EAO8VoεWe]}!DjjZ?^` ^eKY I+/xn:1!ܲu_)ڶR4MhZXաcUNLLiƍsV25judvP`JLLJļ8 fPe@c;R:T4M7F3y&&aOU,k=֭9z(#Aubb2225jxLʑ&<=y_FppUgسq0}v/~b/nXfXKlRJ %"K&1O^)nÚiV;SQUP |a}n54cwM/ yIB&s^̌odQ-TxW_U|o\vxjyR6_qMzv\u:ˑnC=8c -&-QbW1OMgSzɜ˶>ܬAkmǘȰ~ٔZGbށZqnݲM~~ީ1\-7nY~l1RUY [/-jiJR8RRs8{nR67 #_~e#JKмy+6왜!6v#n4)??U ]7֬!xqeiCWm\f'/1q|~x^ 7?S77%ŧX[jm>~_a$?w']W;[L :z!V.=V~ܼ['NՂ5)LGX|ftq.孛1ʑe<+JH.Ѧ Co2=??o+S=MTJ)0=Ii.߱΍?KX9RJ:Ne6x{Q i(b2GޙY[R~n9qIF}*|2Eu&"{BsaՙQF7-xCޒV|Vqy]nӘ|fNnj{] l6毜4ugK{Qp_;>xwmٴ>-nCygg ! Cߥ_PN)7?KiE3?fSkm_|X:% zWtznroϾ{W%%ِ_`T1kyȜk{'}=#~.XQ\K~>Ougyb-6N_r)wS5$~_m&l28iGǪ370۴>m _ oynx}yJz]? 3'MOݞFWY؃=uޚ!hqQYmGeߵrGto9jpQC:+Nzwy ]g`o/_eG#1<sʦCG9r7G5h}]BX=WI7uώ/kr?W>~ϔ9/oxyX֣Fܞoo}׷<~y~vfLfPf7ksCe\߿ڎn1 sxVa:^q]3eރ]6q={ͽ継[3bƊ;~5Ns;'\p{zz~7n_t3Eon箬Ko!髺]7t鷵8_~*Wn;8ST RJ)q)-˪:;LZwx_WvX~dбXkk>isM3g܇ nWq'+~te;,i9Y k#Ib[_daw+EO#4w_㵚]6oyU/Kw)!4]t]M M*HHeK8J pzýR$ԉ8N}J_5g퍷\^}%RR*!8$%6KYI)p[:eU\ԻCCn;ߧ|7e.O+Q9ԅfCJgN)PZMUȗ*<.R BݣwMӄUrʸ34jM޲|F+9)iHn`Ōaѷcϸ>^-nHi^ޥ?ȎkR?ЅYxa#".f{ #zOTcnƱ|)"5!}d1,_kޞU}6Nؙskanօ [W.]8RF1o紒7қ6h@ߛ] wN셯|Qf\DCBwO/yյ`{%sQmۖR:^+E}AFpeY'_ry`S%y-T\8>#I56i9gc9 }^Î Kθxu0ox^7ǔؘT(UxO)^ Uѩo>%Ϟ\W/On|{w8gςd5,q%ZBb/=Om[1wB)%ć0Z8c-uja}۪־NQVu B~W^yB]Qb?'[A~f\ɏ# r}:޲˿rXwk/刹gg }L5܋RG83_>ugZo}Oymݘ C͈ocMqyTV@'>0uRJTun#nlg^~si"Ο[m(iتa;m_e 5taowOF٪ԍt#ft񓟼f}wT7sG6=G?1쪫͘Y\V+iZRJ۱5MYWE*}B4DZ-۶L%W˝}ڵޞmЋ{22PB~b ƶqL'BGvtw".EsaU8)mˢ ґnzJJ쀮i.Ku]CHPʂcIY.nP9<'#ٮW>ǿ}z\] N'u^87޷_`+7(jngf՚|&O[⿼} W',yS*ϖQWOcwQrؽ_ҔzKg'}{߿C:n#n>W)KçmwM誌z4wظֽi^1u?[GsRg6J{So7LsC6=7>szC'}3{C]Biv'?{Ѣs_?$r6kzα,sȴ,KӴf|l#5 |B kqǹer7ߏPouT ЧXBcfog[Ftc_#\yђ׭f 0wfU1qL|7rܜqc]);6;wO_m躮.+<<YmGqƀ:5sM}媡Ccb1rD9ki8&tǜ)ix[[5tٱi_{a)uV>1"}'BҊ^Λ9]5v;fv^ݲ%Kw%t~|ìz~ϣ#:uLD?Ku|d)Ӈ_*u=""2***<<0mZbs=wV֛\LE PR:E8Έ5s6MrZOmVGw]G)v88O%'i/]蛯/k뢇QEd.GFFLT2_7""rvlp .YB5;2s[U 4'_mΨ~_J)VLfz} ]St`nw_<Å+7y˲2d,vWֵ&eE8m0oX_\nYV%rm={ f0< 5Ms'B ^H]׋^鹶kxnw[EEQ2;:tB]||A!_ԵּґB G:Jz:?v,4br~O,;_|~L^ _zdy\K!x^e]Gcn.x¼pj_ ʊGk<94y0*zf[Uu=/?uW)_ pHYs+tIME1tEXtCommentCreated with GIMPW IDATxwXWw]TQ *jT4kXR5ƒc-L4 D, ["(yyrsϝߞ;wf(;;;@AG}@A7HXX؝;w šGAMAɋAE=   R 12*۷/AXYE o>}xz#V2VS}!RKTYnݺegg_xhvss8.%%eYDb``,k9r,Yboot?ֵk׆XZZՋݻؤ?~ѣ( ѣ]ZZڑ#G?^0~/E:tzO/(#G֯_a؃^v [A*ºu늬=ztE/*{xx?~\޽{=z޽{J2%%EŎ;J$$fn?k,BȔ)S&Mӧ[&LYnjsС;v 2d̘1Ç[T'NO>o߾ƍyĉ%رc\]FQ_|񅝝݂ """5jԯ_+W`"H`sA9/Eh ++K511iڴݻwsss۴iò:ʕ+]TwqE\2Z|ǭ[@Vc"KԩSOmAJ͛0sÇ׫W/))iͻw.I&4M=w޶O>ݽ{֭[u;. ׮]۲eKxxx{0`ɓ다);~ݼyq2A4 !UA^B *bM( AZt PA= `3 HpL5 (TJz7  [  R^ RS@A7W3Aow;{F{~< RU9γ\oV"yOs"y,y= ]UӲޔ -{xUA^UNNNs+.;+jjjcf\-YKL)f:ޤ V\jcc@WR䤨kjcck'Ԭ`(&'=coŌúygO8 Du~B!gb47oI'~s}N U< +H(Yc|MU|ݍQ SUTUæbӋ`zAPefgFtQR= {gn7~(%썽 / ӟ<‰1/@;:Օ'_;>K\ ʴiMvhU [/ZWPBxVet_^Uæb}C;F+WGvnN1MEBDյm[N:K=ȳgYa3?6bvVv<~˔!= $B`4׃لO޵d0?z)h1;[@hˎuh"//t9H_ӵYIW}{&#D̿̉c~aEd 5^G+R=?,;όEHOw׆^m>?^%"V_&n<y>TPr.ǯ_f]+quz6l!t䞜\0QCm;67r}5twm}UXKnR +%VRA^v'dr#ڍn?MI*"]nwϮHѴ^:xѹLW셌%%{BM% NI͝L jsg%dOc7@h ܳH汴<ϑO wz"rOZ3mLX*:j]rj@;c#8};毟Z]z\[ڴ^y#|w!nP [,8}j䵫Cr0l&r>,Bh铀~;.I,h"mư3D8sz."m-Gݼyh_O펶t5*%4" rn:nrA4t?m]Gr<'|~J'@8N$@} H$.28N0i1x}Їf/41]Z,(kxѭ>}&7g(ZNԥsRUB~zJ7*^8(pEx T8\r#8scbl.Tv>DZ%!U_ SU 6hX[sX՝?G8C/3ƒrNRoEOWr^ _ ,DZn߬א/޷)qa-,)z>~$ϪCRĸi~'*6 nhD 9`'g$kv` K7EJr .Ee)2-k6Iܬ%Y/zGElY0$TaoFiS{3JdIŲ1WDISyn4#ct s8$vUOtsFm=/\L\xrrٶ")ȳ%:NR󴑹![h4ۻe>fT Q/r*Zkcfg>^9$pCmAfÖ-T/sJ]CϘԵA IYiAM)6pi3 -BYeJuOqchdb(Av` 0L_#[IUƫ)U9q2yc&i!ϻQf`Je.ɷBl=S+4EQobI_Oo::ʾe`uMYc6j3z ƹHZR"^ӻ<rkń~F)/MPr^KJ'k-! &ݧ.>i1玞9oc͎löM uŕZZhsg%4ߘ)fUQp~>'w?up4w깧\T9 K ~k Axgܥ rn fyۓ}`욻?ܳzc+SDS ɾe{cE!%ے{׎xO PE^Iݦ\J:3Ԟ &3#g\Uk3%o8xwRo[݁ 2Aޏ|fz=0m0njvvֳ5HJyJb퐷h˼F}&/*u˩ص̥P{K%Df<z (J!%–sNdb9,%Vp=y>Z`˕d-W?q*ri/a uӇf5!P늖8 XZˌAplY퉨j¹wӴDb7YS垞oVtŰ+u{>۷ Y8Z_xC?²dH]?=7wY4hUv*E3"}Ua(;;; '=C\xbSWa؅sjoB,DƯ7o:"#R"#~@ լX^ߪ((˛̌HY EWί# b2˦7|ɱ_ūu`A^*K] [EE3UaW*SoEJ_W ATT392V AzUﭽUkUCFUSceVSC,ᾪ&jqfV+'F' Hi)<4.KYk<;V8 Ah׮xʺTU! Aڍg3q7Te8|`? AA*B>!.^\Zb++6m6h"-,"# ne*AAʍc'$ٵ{u+$O!Dy?ؠ !D,D T Nl޼GcD"<DZ,ѨjZllyD%*# H\vIyxUAALV+h)- SvNFJ%  RBG<\2zeiοgPia?IC*tlc3h6b}B\2`^~9ࡂ T;v Z4m Zm֭[{G@XX'MTv.\yL+k%7Q ơSoמq@xԹ\B1ѩKytIꏚ7njz ? Ksg϶xsJ&cNᡂ P KLLׯ޽{͛G(}Rp7 U'D]ru2K[ASR9#@w҃g 4 Lk&Md2[kYެ E4 ]F\n`# o*:fΜٶm[>|x /Rw(R);qĄC7Xߘֹz}e6V 6r`o'zRݗ&K>#1FGAXY'_~%="Y&6_=ܗ|^MOvǦKFto`L~n͚h~ 7}TS*n7ը떮es񱥻 Aj}}T(uC7*Qr%\= ̋>GNla=YqH)pؗg;bViޤSoW5i&|9yU!wzrD<Ay"jX^?/Qrv A)G e}{BrBAUUR@A}eAAUFAUAAPAAUFATeAAPAUigD AAU~>Mmf  CgAګ) {k~~9>J|䷁sئ H-Uǎ˻ӫ}vh^6pyֱ=m39)g)y*g$f9H{v}|%FAyUL<8o,A|OFtwh2sҽ1 B5kumШQKG񱥻=,]:25A|sW<3] 0/O*}'vz`?nӖ.R0z''xh0sl,?ev.M3ҼIޮk:UNmL(-X}Gavvb" uF’ AA+:ںׇb~b^f]/9~ܼ ӯdM/QDABATeAA Tc3#D#    He(xATiFB@ysrܓG##SuB[~}L@y3 GvmJ4:\B|PQ\2 @Z-rԬPE3ToAv(]\N: M3 =D\xщ11U%$ğ KNJago_ns __M8ņC2!$33+qmv:Z^Ǐ\z]w/HqܽwBCO)VCVr~)d IDAT׵saiA"y #q\Xڶk/ÆaMDB΅ 127967 PkҠ(&'%99;ya nnNA^?hބBDt5OOW\IkՍ Fberm,|!>V=8==[nǏFENʄTtNMw4`~ c4/c3o4--=00(00(--ܼoXEBDrZDppٳf͞5+8ǵkMDjU.yFyJvO7eZ7jIz%m`nbzFT.sm `4i-~ {?b0£'Vˠ̠ʼ.}xdnHKGGFwRu ~&y23gη ?p.\8gvU.7\]}Kwc+VJSUIN/nŻ>Cv<$Y-'V[X1 G)ӌܽ쥕۩|T0rZnߓ%+Yy`9#==((flX_ 57 xvƩGK61z[o+߿o谡C ݿ~OiAj*IwٮE>ots&u RkIK{\P Bo46dr31ǒfwи'b|m&~3գбζmfchc56mhrԴ+׏|VH^7 .l\ѺeqqGmMԤ^lj[nDvhO-{B:Cr./NsTʘo?vS:_/ nk.Nqttt>_6U~7̢>b--)9^b*Ҡ2|РAk֮f5k4H&(;4|VwS{㝣7썯x>jZBSAڭŮKZ}0Yk?De7U)s<.NDGa9֍lbDFM9{*A@ѻufB`b5Wלk**ݍm§eK\Mt(Ig\ڲ|ÿ|ZS ܽu!AS?I.,z<4w;;RBdiWsBohK,ŢG^8ёҬ[Z@̩QbW墺ldd8u-J$ԩS [!=6*RTԡKj I5.iSAr` ~MgYYЁ6`qi3.hӒlv竣N4OL[oi`qxJ#RUmU߷6]Gl¯Gwȥ?2pgFKmYK#!SvQ[5GR_ua~K23Ɣ&(nk~D(QRcc̐՜P2m&NbxN^sB(R/Dug™K\HhTjL~%\)I ~QTKTU gҗR~_ubQlddTўC!h5^4Al6[|9PHIJqbLu(Aj*{%"!S|Z9N|m,gLtj;QF4M!΁9=Mv-g%^%"-ҶgФZ?v~BD]~הU?\ղ{BufdzQ.(">eyT ˨]:4/dxX8B'D>O;7kC6Rm&"!4ց_La:-h״}UK;s_4m1څ`2'}ЩJC-,,,-:P*[ O~4݆=z}17ܭǝqIO<~B]w(^(;;; '<|ucƳZ$+cwk 1Qmu)= 077/# В%NN~̘*UnQVGF\cYT*= "?bo۶-_L<; A{ XH,5+DWyH,Ld._ypvvٿNw qTfU"^RYǏjܤ)MӯO?AIMM=\PAڦE={TINJ277(J.755U<~lu;{wGӴePnYYR[ AZʴns.<]{[[ E "!IυlJ&F^T DEAdg3QJUfz4T*[leggg~lVeښi0FNULS;y.!>th( n AVi bdDDn *YFȣ1!p9GG'Z9!*!$33 z\\C<Ԗ)39{%;OےҼ F*p_VQ5Z.+%PѾY]}yBR[W\Sn{KI^,Fh ^z -]8oEKR{#gS %V.޻hL Z-Fm17j\H.[kfRY߃}'o6D;I9ڥx000WŠ39Du~39r_M۬OL94=! ]!VSbPQ.5Pvdi5 d\\Q[gS)#5q[*t-׫Gnh߈ JrA$g$ nk.Nqttt {Z͜?OcW.愪u %XT2! Y9Z-+h]\Y~-NmԞ.n =+w;K] ݀J醦,z~hd~;:|)5ыu햛:..-NKX4xZ+,7xVK0fRkd(gBH!"H@IWK3`996Cl%ZGzWMfjزl{i^ld((P@Nuw~)^xIRrsKt;9ʬ57Yr9IU4AT@޵ƣ< D#W`'JSø突ZB iY8#@1y8RJH@V mb Ϣq^`«i u`*CZZQjZDr)EJFjy}D ?,"ʅ:oxdɌ;;9z>PVpm;ƅ6vҒɽ>߽⽘>mg' od )Bѻϴ:8ѷׇJx5_ƫ-FS1 {ֳʟv' IYw5~wM5pK.j RFL48zxϳԽǎm[nj)˲jyQQ>ȴ }%+G>}Z"H$ dsªs4럺@q}(@Ֆ24Z՗u HM?Y|,GPD"DayHDA$& ί<8;;_^͠".";QJ%@ Jci*7ȈB nVfru Kf77tڬԞ JRv@YWߜ?Aʤ藀 kqף݊AiIvRP*40Li7A33˖7}|fDb?YPUlN^Ųce]'zAj*4.I"HRKEQճ_(J$##cCCCm*IwwiJZ^oWAPe %_kdd0 + !OwS"`V V8F"`\LEiZe^EAPK}܌\eUADLPbCѫ KD"͕HӹGE; A2EQfffϞ=w@7Udsss}?zNCAUZB79ޮ-^"_BHrRsa-[dJ; AUhW(fiRٲe+;;;C##j  I]~93RdWt 2PdL9[Cy~JR4HhAޤ*$tTEPx֫_o"1UGaa]6pq DJ= x.!>th( n  Ze9BjKE #e Aj*%(խ!*44tEryGG'87W.<,9)Yc}i-,|}|7Je v2!$33+qmv:Z^Ǐ\=ٵsϧ}YFݽzL,< JC%츮= MyQHA p_ppڿ~aƽqsaFy͍ H-TeZǫ4(IINo"w )? W7S'Wo H _4oB!bJOK?uXFzF4ͼ[ o$V&+׶hȲ7 čs˲ڰδBFENʄTtNMw4`~ c4/c3o4--=00(00(--ܼoXEBDq>ߦ^|dfd6A"RU75fyM+](>ԖchݨMֆ'qꕴUQ\εٞW0Ӥ&10 _|Z-Ӄ233333^u1\Ž/>_KwGGzOgWoO!ܼMz \>7ccoeTXzv跅mj~HJ[Uv8-:8;j^"rU&E']YV}74M;ʥJΓL2m@3ijm(f~c%76% 0Rc gq+N| yMfѧGcm텍۴klzъRiWF%E*o&< ]u)!:JIR$[4ttyX \^r1~X!Dud_x_c\c}mUn`3EQ?}V?b[ZRBsTAerA֬]K3 0k֮4hL./#o1AyE~]D$/=U.v}Xz7\^Q'.Juq _F<$ I% `.[ndXzlʤCI">ҖMKԚRl 6w/M uQekW䡡MD:Xz'KNǟ|C[b/u=:ݠljwϼH,^f׊@dN}o缚(e##éSH$nQ"NbddXf7!2) [M9c^ IDAT &Oس,@S0 ŴKCiIibm`''-40B8H\r̥kw[(p'<"c%d?MSs,/d+XX^$D9cED฼dflbJiN]G٧!@^Z9 r; 8˴!7v .3#ƴPR GCzR@m -O{ɬEYR2l͚yGEE>tHP$Z nb< }aw4xpv"U~1Qxvr)QmlmuSS'y>ٶR]bX:(pX#{ޞv {Xǎ AHhaii[3hG-; !Wkʪjq ]`P2(\  zi벍< *eԮC_Zggff2pJ,"u'坛5! up6]Fjg Xkھ{C/T`S>O ࡃT(e-I{z|7ˇuuuq>뫙 ,\n]N~mPvvvp#&N=SW 4C'b"۴S{J`nn^F"%K^?1U\bttfff*=v6kLr۶-_L<; A{ XH,5{WyH,Ld._ypvvٿNw |fΜ=ρyx޳5naJdyIDSJa_;FjAC!@)iyݍЭneZ!PQ%zş(r0F AC!!eIS`R0!VF!Z\K6_ᘤczEbXBʔ{ xgO_# =cX>!rziY! ʔ"2\ ҙ-T2Q#nfx*zΙIvWۊJ UJG>5!0+WQUoU`DlWũG.(#8Zxr8'&~,])R)ju+kv,WP=Ӣj$W%y ٞ<*'ߏtIE !=TB6)@Eh߬}}Bc+ cBZ@T_FlJ8aRǹ9F1Jtuc^f_dSx5@{R+ٻcƬj3GF~z /wuUoU B/[<8jȢw`8ڣ+ hj_:*_H׉3d[;GGz{y{{y{{ռ=d{>5T|rĴO='^vpLYhl a.+ݘF1v}e[Qm]P(<^p~tSfmvƖV [Kb' RQe8Z)<묝~i11F1_?]2J.夙i1h^gAޠ!eHܐҷsFT!~=/f"*^}2[w6N[Y&.~Tt^|bڦqRK'ЌwUG&4(<;=OĶA潳 bx(I鋝oUgڿb7jJѨ5#ߎ.V1yp ݷ@ )RjK_^_-Z*()}]z)7t^jPl%Ա' D]<t6:jymr4JM9!1gNvfV&-jXTo-L3gdzLTó^ׅĒ[P.{48~(lZ niWIߌzyT((Z,Y ! !&2qL' :u6~cYeyj*}y/إDfܬVXsAN8U7͹O%y);vГs(uKlVśӞ u]P:'BJ(2-$$I$n?/qc{A qdN[) vy/ɔ՟jnullTO!jEV.$eAd2GGBXݵZ-qLŶUJ`|Msw[)ET+ć/!#+-ۿ(t:e@)|C,bVVƨ"wd9+)iQE!YyQV^(pZƬB 2[IBYeقGV!zACȸa,//~jBc1{vбS+(YY{v'iVRaT4¬ 7lD9|Pn83 mڴt* !0+TBhXht}sf 0Jj1w4¬ "O~oD!TdO"{zE>M=!j}Vܩӆ }||oN˲}v_ wԩ̶mYwzu~͐ ڹKoWNZߛO{}|˒cAJKRGm'{!PļbرG;v4pHbkoݹO~xH@)k/G3rn\IsOvbwƵ LSVGVd_!vVv+k2bc~y̨K6^gtmf9~5}>)-ôwVE?-vO!0+ߙ+@ ^ |D-gt 4liq%J@>SV6 ¬:1?XJ eƉ K6h/?jyŌkcrΥ\F!Yub1cFR2ЋKg,=[GWL[x| oƁ{Ѣi2虆)sS򆹫:UV;M;ODj p"zh񕝡sNW*=uǎ&He+BA9gWEi {wTݞ#nQZojS/鋥7FDNmqi`hOoF!T72*[Fx?^YP|ucnRB:hζAs>!yoQz}tLlpÆ*!SVŋ($u,Kii۶n%D k<l(Q`Ha^Ap!jUV& 9|&ShXc؉]'q8<oVP`NOO۽+9+3KQ{ r oLEqږ)9BB1F(qض[dYlnܸ!wߠ`^jn7&bIΝ=uO} E jWV.,؝GY'( T}:twa|xfݻ=P w7BfeZnv(!$+3AP}iv#ٔ)FhXؖoB= U~=J)!)>{v!KLVmr+߼VٽOQ%]TP)}G--Õʙ[&v2jxce7w7unq#ysZ&'Q- xyd?DhxY|Ǧf> \?Sjo4<4S6Zq5ڡ*zȐ!/xE2DV4˱+Ϸ0_=tAGV#7 A.kJ"+D!؃ YgrurLmyݲ|M??q||u zӑe-*/*q|3qU%c\0glF:f'mmv _|<]uyЪOYl᳉˟:>ORr-m}js-sbɟYr[FؒnWL3|.^wyk͙vL]vZvencP9xïm/]u:It^ǿƲ-2ǿi][2~U:R{e_eZ<;O!P+lEV䒷IӿCeǿz⤹[ߍX%% 8z=}I HY<6D @$"(Q5a.ջq_2$I&ۯF篐IF602v?Noݎ D)IEPJdI%DB*$,ܴbě7̠ }vUr-Q z IDATĒk^[ VЋ7.?v=M'4B6g;ΠfaC =Ftxcg/f/i=B&~!Jkg,HhE!-u  ڈgq<ٵ#aوQ_(%sx[_R{Gx.qK?5W.~"0D)cImrC:9nY[ߒ߮D#U~3O9}̙+Yuf8Gۜ685XEG[ 6h`#[z_ߟr]Ҿc0MEzt-zkYW^5vXI%I;vիl6k{9^7ϱH/]=x6LWRl6 %!{B:+r!ﳚLrؑ)GKa_K[M+ -@֯z<ˬYc٢rRJ^7i芕%'|›X*صha_O3^0bf&.7INf3MTDeNzkSRRcZNIIYv^w1oiڨC -r-"aPX4:+I #XEcc4r&cRp槩OE{yLԼ{e_8Uzs[X9RJ>q/hթ Vӽ^Q2~=2zIN5@rm;^OY{oXeγSw(}?2;AFRǧ~p镥[ܰgӁ,j;kZ{zz7h9`43]ۗپ=gب6ik5l&o&j_m}j}ᛕ#CJVʅڟ}|~^`p=4'͋8K۞z!5hcZ&gN̼zUKIO;al/P-cG`uOu3oOkLzLfK/UzZy+1O'Aq,pxRNNxyyw~;g'Oxؠl'wԨ[rAQ Ѯ%R)zII+|kҭyBƺ7z z, VQ.zM(QvWמyo۶@dT ^=VGRt's'(us2?PUMtl'D"IVPP)hGm畄<^'7GOrTkT۴Um!T2A>!`VvrDcBVZ1+Ʋ_siAv^Yeق{T"6ɾQ :vqz_ߦ͚swﲲ'(ׯ_߳{g/Ղ!T۲20Wb긬L///ajuX&~uzuy{z '5P˵ٽkWկ2 "fefٝܦm[J&ᑑQ։BbZo5QZy.a#BÇrsr0RuqMc6h= *!T;2TBhXheXT*V@U**a8g9TȊBGjxƠ!P]ʢ$]t*1 ڏbT4YYV/JNޣG{y L RzZڶ[ QBt SM0LU,/4hJ)k؀wwǨV-h!Y(9BB<Ͳ,cT4;ʹXSTƨV!h!Y!B,)w ,YjF!!\+kK6"plB|TBH +B!TYroAϴUK_r$gs G!PTN6 +aSBDQA:Q{WjYY[&v6jլc67TE9s1܎j[QjQ_C(ݧf f*"b7m l(8Ec3GONĤoW߽ųK\`y;@?8%R xe͎ gZcX]؟8$!G2(!*p\VB&R(훵OV/Q(Q}QX{ų7tQub[H8 h5ԃM)3lS87(SxˌRkl Q!tOj;{ZØUmF}oZX.J7- DZegG Y3t.ԘG{_vEM[MZG7 :qc pk_o/oo/oo/lϧ=ٞo_iGK"+!]>L9eXҾѨ4Юy+ʣ͢ Pr~B\ ]qLr*ay|~IĘa_W* Vk4go=m;&h4KFV4sأ1MC#,4Z RvШ8*RӯlҽCZ٫[fئ:iK>_o99Tb΋O^_ \4]_jڄ&ŕgs󞲧V?ȼw'fXG;Í?ɑ9y'msJT;4ѪyJRJ(PP@ J !4"V5e S=aґ?g^ /%)}>] `K9 kwSuϵV}*KU1 C`2ԞG~YdT⼝BcP"J.7G0^x~fu !0+ T͖?*[:v=y PB)Xf63 h4:KO>)8Cͽ-11V8VixH) .iMeO]pc@:s]TU~ߞ7|Y]FxQQ9i'Rb/o/WsB2zGGX^_Si4F_p?:Naq(6=PJm+^kosE Q5%?/kW//K :d2uA?k]}X/5(U?;Ղ>@eN?t'z6n\W$.U*[Kщ|JrCʹӌ̴QVWoB.(lz;K)"˲fXb֨jbiZm6,GrlH˂9ߠ=5nGD>ҮK[Ň'—&SGMX=ccqS.7ѰC)2rI?'2iD0Ym`ziu⬝_ɣV{xXr *e/zBuǏM=;<ͼu?12Q/JTEE"2!D!_&dA^nۦOr,˲,ZVR=6b'VuB&~ݯlr"'1 S Z٠!ЃlOk`=nMyQ!jiׄPow_7!ͼmٻ/DFT(VB2`?*rk.(tǹ*}W_y9)$/e~u.zsΔnܪxsU>sڳ JgQD!T W\\$I%Sqlv hZA8yAܜli>.o6<ޑ}7SqU* #PeIJ ,Bh#B˲:V8)J iγsk4jE!Pudeee\N,(~ȓeYҪ WUZ,h!T׳20W1LUUÏQBB2p,":fϮ]:vW>~EV4+3k6m۪T*jB!;CUqMZZ!feJ 3oΌaFP4Z-F.B^+v)T&(q% ,aw;BϬ,JҕK>z}tLlpÆx![Vŋ($v?795m[5yl6Q(}_by@P-D!zd k x}{ xwszz]YYܛf;wlLlxfRY BʔܜF!#8l-,lsig7n߻oPP=뻕L $I:w֭[<< YƽUYTŽcw;t.zW%~KxAQJ$I;uxÆw%{> nP-ʀ}׵PBHVffRG)% S?а-7Vz@/H{RBn7lܐS|$P7BݗZ`\۪RWy{{?%~Q{矢hKc{G ܩ:)m9N& l@'fJ)׮?G M?{qzܳZ]8n([ēGjZ|tZWZ T^!yv^#ѽbOɹ&*/2}@ؤóYS'?SGLOOi2$4L!$QHdTԣ0Oq"j{VE0[' c ;D%bK-Hjb(wrM&SlL̉11&)';ռY:vmL?f$4!aiTCq۸Ơ`Iou$D?iP-ʴ7yG*%&(zM]ġ&RVC Yx1/ZxȐ!*żY-_yń=T^:䇴@ R$PEVBO!Trόףx?|]#N 3}:vXeYft:yKPSSr|ZFدj[GjK3PLb'I#jȊ\6ID)P?tߝ+@$QQ&,I/6KdIR ,5$IHK4zmvVoZI \r'+~XzOY4lj*O|9>ǑJJ8ܞ˖XN%9դHǍk2o/*Ӣ5hzJtzjؚijE %oD Yۼ5u`RBy436tK;wKP_8:J+s$٬ء6uU'RS?3xR<7YVSEqͣn:pՃ',ah6j@Ys B=.2 x6\&;p^/zG$s)ZW4/mVKDjBJ^_vmJJJttL)))֮.-M5|Hã~E?Z$ 0*=|ZffQî\t,WF!HLJ`‘@ѰK3. yg_x=6B)PJ@^٧ʢs};G&=M )Ck~ɧ? RĦ|=i^ti 2%χ̣)8N kqEQ||3\p|xBdRS߲̝S8)>_WXcޜg\GY#9bk0~']g̼M(FmuAhǁ ODՕL]Yj`źmTMtl'D)!TW`SQ5m*,I"SP%%qGGUMiWBVƬY6e꥟K .6׮]!x!T+2˲&D4m} 39APui>M58eeOPJ_gnS^V5Beea<==3^ 0qY^^^ èѱ7,M5? 81z3/OkZ9k{׮;ի_e VD(ڳ;M۶* (!M##jýY6">|(7'#U7qg0ڴi-?h6ۃ`B3+J%FY:eAh Y^xJuˊ(tDQACEIrÇ1RUcb6ŨV9h!T׳ȗ/^ܕܽGF!Am[5yZ!fe 9|a`Y^hєRnQZB2PJsssy^w#$,t믛eYƨV9h!Tws)v}(JQBB2B!aYRX*B!BV.גǗl8&)D؄^VB2ނ*qñ7iӗrHBֻ*B:lZAVߧ2eL+6W9thvK(ղ4{;Ll[Yl@-^osbRGնRCբzQO@!UDbon(Q*V7bIl{!gvJpJ@ʚTϴhƩZ?eq|I^C;#;&egQB!tUry}M+)DQ*7kx_P@)0b+gko£q=jRgئqnQ R;]](^$Bw.~X1ڌߴ]]`n[n:=.(f?]n/e1=g?h@m3 ou ^^^z5/xٞO{F=߾1hgEVC|j-s }7Q-h ]_VGE ⅸ ܃┙8o[FU/,k1þTTNh 5:kFǿ{ںwLh O˭n9iGcF ZY7h!rm0 IDAT7Qq@)U_˷D{W_օ?3MuӖ}և{<;rr.@i\I74wՑ M+$==eOi=#6ŭ8yA=OZH_ 0t.v?~r#sN^whUP@) BhEjThg{dä#^$aY^z 0VQ1Zi4"2PQ^4d&^+#/Փ~P$QYIR(PYE%87JE@@7DW֌Oz}ˢTEeB)%z%Q@eIEQR(%hdbl6Y+ӝ+(,#K%xsn-$ ? пA{ (k|]6QO/Mzy\2 oa9R>du|Ne?mYӶݹja`KZ+U%>~| LY;G6u9Tx^x !; ֯{vx­y~Zc{e7^#<((EeBBHLo,N~ݶMXeYZJzx'l=Š OY,M_//lFENbDACٺ7z z,B(!*E % 3oB͛y;~ֳw_jv$Q#(fe&*~7U8\P(sU prsSxI^]"$c)?J[Uw<}ga]΢zB;LK? x&I$IK\(Aj p󼳃9ٮ} ]w4 C6m:FAC!*f4]ߜ92RiZ] !0+<ϻc9UBeV&B2B!0+#B+E>CGNB!Y'4fz_.#BfɞzCE;zCΦnO)2Bښ;waz۷Ӳl߾gÆ;u*=[k?݄^:D>_3dvnf<5}դez=XwTrGg mjѶC#>E!TK=1X|;v(ю; |2R[w9Ӱ^x~?PьWgo}}ܓ63xFqS}~ՑspE5y+ɍwƻ4"YYb@JɈqO1.xYfܣҵßz[]WzȷӲ_Wgr%Ztv'j>ű;[; !Pw&报d9-Q<)a wvbɳPԆy9*E _z{~ľqjܣ!^|'-Jƍ?o^R2خfؠl'2W/H_oXڽ'_kD W^{rΥ\œY-/6B=8êoά\{}zWYť3_2b+-jZr'YJEڄi2虆_MeeY/_+9{BB9PɲmVBа<P&y@wZB:(vbI7 ۻhlvJR4? iccbÛ6D|6BeeJinnNP mmYm6۹7n7((W[̈́︘@sglݺS (HekZ K%츮=v'ѾCgKޒ5iŻ2rf.ys)H]4@<~{Ǥ̲F7mllɔk2r/ 1M:<5u3utԩ͚/kڗ_~YNJ 4Bg;  hgw*nϰ_3oʷ; ` |/I:l)Y–6hI}1כ]b v ֤Qe #⇮_e7Xvm2bcbNHM1L9ٕ) [N_3]4]Ԣkܰ犎&?75k~,zZifn,֢,iߍhT ChWf*׷ׯVPԞ-Gm" Vk4Aź ,1: SoA4R ްefJAN_޽6Gl'ߏtD_!{cW2jKԽ夙i1h㍌1 R nwPy׍LxwO>pzc>+Tkmj3:iF{O{c4z'#ks-L3OwмoNيP4Jy\T3+̀#*kYj%)fy̥n[W{.Q^7Lani撚ʢ0ٞʞ;k^gΜy{`><9.ZWyzt^ѯ=I=CݵAS_LY]9cU|xs/ v*\2'AZt~Û}5O^ǯY~ev"b9vgF.\|oed3W"C\)'N9lٿ;Q}sA|^o< 5eҿ}1DMKzGO3Bɸ0SV]g6vwٿb_2[ [=<ޞ/;gһt"iq”P}N' |ޭjĈv('o^C..7J9U7MPz٩9^͚x9ծ hn.u-i\ PlYO$]^Ɲb^m1~m}ދ?~BLm^b-FN3!Y%шG<*ќHEE|%Cx GD)˙J s|)_NЈ(3b( _@D$) {lKC-F_|紸N{~v_Y,8UAha$QBFTDA$B.ODXH#H 2]tVZ[3IfLUFIaLDQHFLś^ Ɍ,x˧*U+pzϫ{w -Fzh*Q.\+w+w,wͪBOKʷA8æn F k֨KH2"f94bis" |&6w1"w ηZ.]/kOOsӺnZKYO11vgse'k-8*3h7|rMJ8OfGg<0L*ecjSm_QCEw,C>|+Xɂ梾qRTmH7vcE5צr1KOZ֥˖=cEQ͟?W]\\*;b0~ͮt3xיݯvK#t /;Kg{WlDVڦ@}\q) ao:sdF4l`?1NZZ9wq%"Rɹ QaL\6D纮t~qKb cd|eߧ'_[1 kC,7O9*REanLv7 ^>[Ofe9ugŲLN-g +VeZ4N)QU<H"5DBg+*v8Vurq.M>q~*9ㇹ[:ou;16byVtHm'_<9&Z?GrRZy{qEzNf21F cvl F߹SF~,+|™a+7Wkf~UassIWy܎ X<|GbzT孜9{5fVYu}xTm~m[ zλW?aPm&.~~N| uŝdڰqk Fèч?/‡OկmK ;6fE iv˗.I׹gNG6{8ϏM!- ^zyky֯PZ{e~w=K?>8E>y4pvoRNNre={VYy ڵe#Fn8lF}LxZش~]cf%gd) s RYan_;k~ޥ[w" oҔ*uRSF9֊6wu6~Fz>.۬Ρ[7h,uH""QO?ں" N*?HءySûM\YgOOzy!bp%)o|zX]#NmѲ,K7k NeF?={P><Ty^jIDJιq\+RJs3ufW;$+늧/xSYRܗKְqNj<84>!V<R+Wݳ'KW݆m Z*sq颿Te^l69tM#ݍ?|l=kO󼧧Ws]i4l5xRWM#"'||}Ub@ c3ղU+VKDLQ7AEv<|' TVuSC99Tdjٲ؂!8fKG3HX,IpW8V7P DDZ5Z K$ =Ttw;X4ʂ(^LplTFcDdTu{dQj $K.޵s ߁y4Hx̙۶)R_V+RY9|гυo2UjMѾ_X,nnjT&XnnN woIPj +b?Yo`TE@*=T,w +<} -ģhxИ&Cw!T5V:d]PU0*qd?.K"ܣ*>pkwQ#ks3sF|Q1oFĞIwnUvkS3դȲ.]w\/p0E.}V7bOAgD{?;q;mw\,\ #҅]Ջ>ыHlOҗm739쪜W񗕲P%+W4֪(!1E+;6\XnaGcijW>N^u ma}15E[""jҮ{GK#،^oZ8㵺2dKR(:dNKIܓKoua+nx-v@pi"}M.h*eN"|yQ&b5Z4 q#jy==͞fNs>;|z3#[:@ IDAT,K?٫{׷=T{ˌvQ[t) M[.KfDrξ tר5nuRv*͇~/ YKTUN"FTZ;42棓}"-KHϗJf~2apXߍ*-ʥXܽ}^cLV(야|C; iygվpQ}Zމv:Wg{׾tQ'O\YLD$gmӮ^5+cơ ߞFDֽ/iOa[ڮ8Wu߬]Ng3;ZQ^1m.mnթjL1b)10)SۄVvvZ8ec2WEDjh*gSVO} 9RO*^4ʥt]DA }gP8+?888O^r򕸧jk G?,JJKKk"7OD{]=!j"Ng>Ű)34+mUeV kIǑ: _>Жk󥷳Nye)U~;:@]j+٢T$pd.=G]Ӹ1"Hc jE'~\:䅮kdQ(ʌ$DxWV'!F$]\7ʅ+|"^Ź*SJTbjSѾ<\UD$d"1 k/? |a GYmcLaE?YU~Ki')M+,jEzJY.RbZ^-,wwz^s-7#K8Vv~0Ys_Ă`9ήxbbc|T+mlX?cGbO t 3_36սikĘ6L{cQ mud}Ig4Ko[LUQaUdlzJo'kd)YkU䫦26Н-@MP1FJ:ɲ,I6f)ѨuzNai$IK'(F7u]B?\7S_o-`\>tpXdc;^LdM۫=}HoOKi/7Ыx1uU&04l5uikmeVE^<_ۧV-zevrM*ç?_A_u+E8???":v4$lzׯmZ.ko(], `$IREV7sωL.a-^U*JV V}x/'l3i+ Q-[ڳWoLDªI=Ujd֯޳sz̬ݢl0EaΟvA*V"+M{sZ^OۻtNDMRe΃}KH)"[VGA6ϫ...ϗ1{͹OU8{03vZӲwVvU۬̑ NU~޿z@T_z%5QEQo޲M[k?Fc04 j9}*s0u+ySy?D{rw9TUS+;!ZU <\qI*J8O(.OJ^Z5Z6 m)Vy/^+بvU\v(7'WXF*@5 {7BU*J*((PpSUEqGFE233fs?Z WM#"'||}YU˙{j٪VEU]42jNz>|(7g2M&S˖ ..jT&"j5!!3CYTj7T&""Zr眂R 7_RU*p;LeA/]8rpvv6*UcƈȨ:ubG/}KeI/\ؽkW瞫h_73ijgl߶MQj9A{qVk"`tTVdCFG'yu0EaXj\ )fnu{֌.c􌊌 mH,mÝʌܜzAپm$I#L沄W/ݶs·ǿW(yԶm[=eIVG*J~tٵMGZe1&_ץmBew}R,І5xЂ2aw6(.yߗf߲'1nUp xbTV)9ղ,c#WfD+?j[~w~ssrEvOM&lT}eԛpӦn_țo㟰f3-u^ݹstWfW c ٻMݯqx=;w:b >A#epZez5 K_Uߤ헗gCz}{s zkbN/g1php_n_.ŽkVa]pssssssq߾΀n1;~,idYQ oq"58y/QOM/\vο9)T{ [?2gz6 GtqV4~:r_ؤlw_RݬW]Bkפ0JŸ*`oW .oj~O ws"#OMήRgYOF}Y[Uv:$:  lqE_TfX/ɂ_옽.ۙF=nicc'4qo/W~ٳA<HT wlrN޴rfJͫF^s~W5Iuڭ#L2FmNKq6q_ᮑo+m5j['Gê1G ݚM>Ȇa}퓷oK7ڼ6 S{TՍ#_w}KSNfbֽ#}|"6ev^idG'FEZ,nI%f=`ٟͦk@#gaUмp<:xaN7pEj5V/ZxZʐOvB S$CLa$+l |ri˜kѭ oռ_;ۓ?yaؖƟf_KN؉ُi.G~ڞ%Cp=Yl^q@ qJ S4nl;eG1uzDW_. bD֔eKj>5.=ʋ '?6fҾNYwoϞ=gɔ*j'gl5oVֳWnx{TI6ҕR@7'[ SBNKO;0#z#bڭ\v̿y x*Ux..6vQ\ PlYO$]^Ɲb^m1~m}ދ?~BLm^b-FN3!Y%шG<*ќHEE|%Cx GD)˙J s|)_NЈ(3b( _@D$) {lKC-F_|紸N{~v_Y,8UAha$QBFTDA$B.ODX$1b$ bd`k RXyk&Ɍ)rѣh ))( "ˆɢx$%QoT%\j%Q#;NCyCp/^𮇍$K]e(mG8N|఩ǭ=Qsڽ5һ xp5> 5cچ\Ⴁ-_ Mb`HecfsP˅e4cnZ7Mcr1멵3&Ʈld͵ZeTFS֓OIǘL茧:IvscLmm?jΒsrǝ/{+Yв\7.\TR &nHT.F=WbIպtٲ1G;O(ʼ˃X~_n_TOd}qY>#hd%o6JEED˧DLad7~ә#/Gu6a)qjZ7]̙+RO] co':u;4_S#C/>=?P$vg1gP-]wlbig(s(T9n+Qݘځo2}FX9:;ΖexZdgW2+񥟢qZHoߏ oy@',=C%_Qa_j??"7)R6IVw{TEYq1d2ouf[=r8ky~w̦k:?M/`M1 +˴ʤ5yFwWifl'І.*&]ݽhaxiMF`_ib`1 8\Ma]?i-2;4VDIܴ[N?ҥܕfmagˌ ?̍?/,;̻YF_j M w׏O{>rĀڒeF㦍#""6HNN޴qhd);-EF[}–|oa|^@*81EaVa,>[ݎo p.s;}#ǫv:nyOgv7c~\a9S)D˜&t1ƹ63wn+T2>Qm >p:hʍ8gfm:cU/\ҕ_#C1O//:c.wyUy+gΞs eeg~դe_V/&HG^py}:-<#lK{9l+_;dQ$OZkK|k$Ƌ(7!YYW<gxSYRT*ְqNj<84 ,ۼ{<r={tm2q.L5\f8N62͖^̾g `eKYyOO_h4jH2FDٽO8Ū2/gݳeVZ4 oݤ (lۯ;QHS(Aj&M&S˖ Ex0^22KcWj FY%npeIVAb{T7ԧn.wdmvfnޢh\8 fͺڈSx#)=-U~n}jRY٥kȕ~إ/F)(#,BWRxg'zΝ Y8w uD뒾z1'zQS\\f?] w{Y{//D̑aCS>~S&:>C"sdX-Olԩ5gֽ#}\pfv{eiYG>"3{uj/ut|7qN7w;{EɌH7ƭΓWaUn[VЯe!ˣ^^9xi:^_tөUeO#c>:i7*bt|iTn6q'#ݸ"٢\eۇ<1dR^w8s0w[ էh#yuw[M5|R˞jĕDDr֖1Z29+lڠnDd[O^{Z儽>xvIn:u362Vƴk`Щ#Ƙˆc Sˆ1HQXMnUKigʼnS?8/|UDDxvqٯ:ee А#uҊEi\JE$ mwV)EQ*84EA*(_{Vpɢ}Ծ&b?;xDdywصS5DD yv-Q{GVvsoD|.jA"C13_ǃDL8uj&4~s_ [2MrVn?p^fŨq9U myٻv),juoG@m;[4ʒ$~c4]ץ爳 U\u8FIRqLWSPK疼u, EAT(jʂ1R$[ܺIaLD̈I (3H2f0H6.B~L1!q3wε 嵭UL8FGD#bHv$Utf/v2#9MU*UMJa1K_y;Y4rѡ@7{Fq )).:]whr78vzU->ΈqjW$npDGhQ|*yrmߌQ.\z%(+VPS""!1gP-]w~i K8jUe +(QͪRQh')M+,jEzJY.RbZ^-,WSo IDATwwz^s-7#K8Vv~0Ys_Ă`9ήxbbc|T+mlX?cGbO t 3_36սikĘ6L{cQ mud}Ig4Ko[LUQaUdlzm5deee>nTX-@MP1FJ:ɲ,I6f)ѨuzNai$IK'(F7u]B?\7S_o-`\>tpXdc;^LdM۫=}HoOKi/7Ыx1uU&04l5uikmeVE^<_ۧV-zevrM*ç?_A_u+E8???":v4$lzׯmZ.ko(], `$IREV7sωL.a-^U*JV V}x/'l3i+ Q-[ڳWoLDªI=Ujd֯޳sz̬ݢl0EaΟvA*V"+M{sZ^OۻtNDMRe΃}KH)"[VGA6ϫ...ϗ1{͹OU8{03vZӲwVvU۬̑ NU~޿z@T_z%5QEQo޲M[k?Fc04 j9}*s0u+ySy?D{rw9TUS+;!ZU <\qI*J8O(.OJ^Z5Z6 m)Vy/^+بvU\v(7'WXF*@5 {7BU*J*((PpSUEqGFE233fs?Z WM#"'||}YU˙{j٪VEU]42jNz>|(7g2M&S˖ ..jT&"j5!!3CYTj7T&"Rj77UR{&(×;wBT`x R^= fvO.M\5k`5텖F9 r`tu(aLIxԁw`@H|LhhNFE AYFOçş~mq<iobz4'i"%~QgAPsR=f!u]V{p5 ;'cꀮ7d\kF79 "#7՛[F_;x_0s|pŮ,+==MFPṚnjf]o0ltoj?jDߧK[Ā{T[hwDž^غLSτ;WAn7Þ³Dk&;IR|nCM^]|m 5,ϛ`̈sYSڵSaQ=>1C""*88kPFq'lTv;φzwyoszㄴ:œZ/9lQA\.Wv=gvȚWĝ1u@S2r^5#tۛpxl-#S/^9[bWt+n lxw㓯)آPṚnjf]o0ltoj?jDߧK[Ā{T[hwDž^غLSτ;WAn7Þ®6l43ܲrM߭;60A$lSxX%&& rԘ͚Iu3ߟa߹<ɚk γ+$gf 1QO{ܕkk?bmdpM_cK]Sk-;.f8 '3g(:f:7dI/?gfS1"uBFVA>f)'-*_F˓, jJ*W%]0H\OY1ufCVs+Q+OrERow@93"1=qΪKULtK-G{Ozˡiϯ#?FT2LDRƵ 8)?ڗ+i41voԹgg,ݜ[6̍:trqROzou&[ 2ڵSaQ=>1C""*88kPFq'lEv;φzwyoszㄴ[_&/#na^>u]" XSB{;.WdZ&iB *wq4sΕh&;I3MVYm׊8v5Īy \| 5,ϛ`0]Pc4k'Ms>[dk'{Iځb1-Ϯ}!(\8 h-z Qa_0kt>^ȚY8hjP*'%%ӧrZv\JpNfPut6nȨS_H;z̦:bDě}RNZTު9ցq%g2bبPSR*LDB܇qGdzʊ /6ҵʞO^\y,Zm}&Yv(sV]*YIs&%i}QuYm <Fr#tQ;kq}ȗ+itacvhѾӳ֥sC]aʆݜV? n';VGprq;2o:kݷCkwokQ!Ud"1vAywǩN1crq7owL+|@؄yJm3V5\Hʉ d #Ud]É2&w He2 y0 T&`x R*wM;C:Kp (@*fڵ2+績2ԐTСn헞ȼy9#3^|)frՂqf>m&}4km#âz|cDDTpp֠,fçO /8w 4z7+7ʙ ivUIgc{E(@I*uYڶs=Cּ2$HNߜs4焃cTooY~T9ENO2/5+i+цM8wf̪zaK]%%%͟7/11`0hO(||ϭ #笺T]e9+iO'%Ͽ:}ޢ[բLDRƵ 8)?ڗ+i41voԹgg,ݜ[6̍:trqr!}8 jV*W18%n<:ƌEྱ1aM(uyUaV1rbb"v#Yp⡌1+R He2 (RHe@*  T2RHe@*  T2RT@*R He2 T@*R He2 T@*RHe@*  T2RHe@*  w|$Mn)h頃U@@FS)WA%ԫ^\(*\P. AlA Xm)N>$2*PU @UTe2*PU Te@U*2UP Te@U*2U CYxL)%SD U ,J %B)PHK>~[BU؇ϡRJeI6/+W, 49B%(!z )!. Tew7SĊʲUxrΜ>%BHJ5RiZ 0b;d߻9 0L`PszZ{Eu^ @Sf ''V֧$Xh))P`V[fP,1>Ax@NJJ~0NMKR{]7]o|{䮝;j݀8GGA<=PG (̞^:`Te0͛$]\} G-"m(7:ص[ S7 FВ$\sLlՖƞ{6M}]8,WSJ.wuoުZ Jh򽻙YA!a Tޒa:gS)!G҄E]LS +Do hr:蘚r-!b`Ppl^ƫ2)?(\cZ4W_M8VT9Tx+F,ˢ^_6rȸ}˷N'5z DX@Sx~T[8:9J|{qIIfVX%20V H5ؒ$fgyhӮߗl\uEB҅AW0ckhBϯIWʲ񂳫[`PpqQaݴL~CERYcT DW_M5V.`ރNC kǕ|-B6N*<>VvttroQX_?p]77=`hIUbҘfCd89sWUGxC||;s_HR+"c0/ŧ޸(b*,Ֆ"<=EDؿ?9r=}:@K@+W,70EFnٸXfkJUT(==f|0XcYՖʾ:]p;{)P ).*t14Ѫڕ+E!5,kccűb+8C^UP0o )bXC<[v ʒ$LJJˇ600MBC<$?7*c<}:6"2˧CoY&Iҍ?y!yHoTU&8!!~Pdd O)s)VIDAT',rJ&QJ)"zt\0#YNRt9!'7ֿ15E*Au_8zkm<;w͉>?$T1YWZ22ARZdUIN  5+/+ :Can.Uyk&I;eh!:x6/nWH4 `ƭG:H9KxʁeRץ"a2cf`HgyR|%NMIELsW>b:AQJ(e*a$H'J,ôFGגx7U?%70.9Sǀג$Tv=4xm àײeLDQ C-?R?;[Xweos`v XO#=n;ESl-8rl7dǼ76;Ќ}^* w .7r_o-(/ 6~|1c5szP@;v V>OiIXWl葤>l3uNn'׬MݦuL`o褢mFT+/UW9̯vI vwa}.[;{GPq _'{{{[%/8LET{}6 ;}w%W;QP{EH~pjkY o?h9MoEfM\"&FM o9~a>'_w.u8ېVg'lə9.,LsYYu~^^^^^_&Uw63440bSWoOL?yV]_zH{?_f5-iQߙΉoǚ {?~PA"E<&2xLDȐ1Q#ChlC|hV=oj&Jܔ9vӹ+7v=fs%w5|;..X~?DȐ41E8'v3.R+m/e[G03iA!T]~ܑ|71Y7) jߍ|uw99n]ќm<?wѱ{ruJ[B|ZF”̂Ի3ypfVփk)E^Чw׺>2PY" t̞|͆8{-Gm`" !D(0h !k2(ݒ_KG΍K} 3$KeJؔoK *3`#**}wF5a˚e~U-%^Yw܌{Ե Dž[clx?oMEv"bgivZEb\ ?J:QF$LELxRjdQ~"BփbO7 J,lбRₜ[MMDIuR9qz6=OLd A !l1!!$c,cYtWvGeױqaҲ4$zE[_ǽẔU)aWcN$264Zv2鮝-Rʱ̌݌/1s+EFN`_STvyeb(n=6;D͔qH E*Yjߌkc;y#K!$ܗTprRv#zTHw֨f [R!hٺHRO#?"#a"r]AUO-;L97*yIr*\ -xMθ} c?Х_ua4VKGy#=gBTJ2ZƄw0㐞InHp._7k}x)oNd ;ʟ>^ _/a o먾%%TE2d,,„yb3zUJmipU49hNC!};-}wAԕ,˄,cLy\ mI﹎>/f_!$f_Ϧm3~#Ovw_#꫽aoxcQӟ:uh>˫k JT E%_fT1x1y+.hpZ|qetT1??Pb'6=Ȏo3/xKj]Fh٭La섶?~=WE#Zkϭ|k.i(Utۛa?ʎ祟1W}kG֙09!igB0;\miVRbY~l=BFvxrn\`bwtt'֣N3oi i WNh~[r:|ppt6~ހ1%XTռ4~-ԔRܔƾ?_qMp;$ohD:>f`0ΗYF2<,XTo>he!ǯʝTwp]/{aӞQ$Y7p{TVXO=z %3ʕo^EEQ"XfF+IJEUrB"B `,K,R=_vjsu2C>T?{F{lf.]_?{Y9r\FשBe2LWJ@ j:2 ,˲,kt!A3ox8гWH{Bſ|8Xv?OpXqb ;;#OFUmv0x@ͺ}KGV4lrrH$aor~^Y*?QZ}4a9U> ¬P7oS=5~yg3lf2)n{ֆ-aqssC%'%ֹoټi$㯊aEQje {Qة{v޷eYyBP<_Yz_qeSyvn#F7"y a0 Y%{Չ xͯusŴ6r'_Il6,y3h9 7j`v_6 &>aEw71AY$;~y8K+-ՖL!Ըs+Ƅ\ZZ2H/bg;KN8TQՔ"UfW(,By„甽ڒ?M&q7,>\sA %6c4ēk'2nh@ü[Jzθ+&~kcf};HuO(}"VrDž5BH)eʱ,kÜxt\lXXW0w^FWV הR91JѣG,g=[ǙF`S3^$I4kvaL8M A8y+y;̓s|rLYlWml^EC(t{-7=Σ:[=І{oɿ^.+I1}ɠL?YƢ}"I>y w,e /A֎eBƝ=}*dݜƍr=6̲;o:T*:rPTL$l~W{,+ !$,V[ZYYYXXpg8|rgĤ.y"+_ Q>̘H'5,fM6X3L_Wޠe6b$)?SKTbxX#~$Muj(Ul_ѕH 3 #ÏP(|kɲl pn<0 B?Rʕc+&:X6_}/-mx9_G(!IE`J[.(>: {TaXOOG S#O<}*g둼aBP*=}F" ,rPBR*-,,,,,xnce G'4!yH49l\Y-єp, &!yHfoxUfkk{Zp.'+ޮY<$He'_1a|xs֬L?(3qqvvj%\YYcOv m"$CoɣW4lq|!.],,(ͅ8[[.a]\\]-j[C<[vg+9,zQ%xތAeaabf!yɷ9M)]]>sTf͚-Z|nxSUB.ߥ'y͕儐,BR(FFF/^hҤI˖-=z$:wT*߿w__ Z!$:::33&˅BӧO]\\]Fi޼'uf``}vea~ü|"J?^jxxxs BHDDJJII!YYYYBW8MyKQ+j!_x֭[9_ Po7fQARmm툈Pطo_}}}==WgG)-<@B ! 卙ܬY3SSdSSSBȋ/2M+99`V8v옳s=.\)/_.1w5˗/AA:t(<<ɓ'N:{lzzz````x,^lń={7wڴiӧO'V:+uuѢEFFFzzz={ܵkWyKQw_ږjڴi˃ !ظUBUwޕf<#Jj(!**tI&%''ݻE_uss+_(Θ1cᖖ/^8po>5YB|||&M@ ݷoիW\߂ YsڴiZbY6**oVrR%9yعk]kU]9BPT=Zdò꺹{<֓b`5j"!Y3ׇ 64j_P où9&&#SSw꼄Xk ]ۚSf1LQJzPzR "5^7aՓB6ZA 10@=ITO n6g7 8*xHqM4ڴVoF"!>`" Ulhrf}ˀR>rDxJj5i lU%iQSϕQH6~@aSIpCo7ߓm=Z;e/tiCdq>2()+xS-ұSS<{~\8!};dꓫJB~(YE)x[6O6Ǯ bS^R.6RԦYeyy61"H=~9/5*gK""YVYءXٟ$xQ`GU7r/)L|uoP@~+ytURBEfv_]y0Q\bj̞zupM?bOdLy0QU&>u6=jh|z?UYV:E U8xeg}JRpJu7‚ZrWıa|hذ*#![,7Tib3'sAVB[(_K̈ ߐ HVB꓿IJ)0񵄄v1R$_?CEk`k|BȫZ-mm!x^2&2^{*BDLEDFBR4)+N`G~b.lnEoVolyE]D^syU۷S2֢pWP5*oK<a$SKPHH" OT|YQ]~)S( WII EU*IPuPʋ$ihתNx-k$_ *2Lgg8Ĵ6Rm|<O [>]jo(|Ėo>c9ZXYXٶz^ys+D.2;6)ejۣO uJ# l 8Sr%oQ~~mTU9~{AMED(mHp/SgC>ʾURB)DPS݂?~ Ȇߓ[%t4yJXO['E\4~'}>†]Xߠ"!)-`y-G8%+I䅄B?QZ,gn% 0xF]LEļϊ+^^^^U.VM[å/j>}˷#r۵]3~?4Rq/u2bĄW"P*05C3S;n~|SD儎ѫGthW}7V&W|`>E>BX:x՞o;Z4ӉFToֵAEB(e1 PT*%DFBq;{iޝ;oSzRZֈZ|=lqJ{?xPwORO;hz9e̪5誉aBp,Sp*SJ}jS6KPQYhZ& ?ttJԋ;:~uFg6s'Ũex5j"SSkPb&BaF!Q%I/d&E-@Ȉ_zRQWX*Q(8x$[K3sbxܤ)x7dg4&Ecc ծy1#`nnatY cr@-|q7RSR̬s.ޝ (R}C|B!yɨXOܜ/.^0`@{{J)Wp=[:\۶\\\RT*eJ\Gc)lt2xKܵ~Z*1 aZZZH(7)r ?;chdDyuϞ8ŰRqk׮V0N׮>/NPDݹe}Mؽ=AZF޾4)~4w$<}bg褁&\vuٗkJ <~Q֮Z}x3ݰ4B4Äq9;;7pJYY[ 8>YeI6heee3&..n]v`L>Y}- -]~0B_Cwhl>#Y{X[{t~f0yW^HRUqY(|UK%SXZYӏxg6V6M$İL&+|bŊǏ/^xM>u_}{DJVo}f5Eї]y~ =VTd=d𤌴?1a[i7ӟ]Tkݏ*-KoIu7R?5gD BmDPh ~={|ȑݻϟ?⩔6͵-iOV9O!D9gn3!"ÝsBX4i5fl& euVfWMnm {L\=g,yc9IG 6`c**:thժUoGԘT6z2u '+3b,%4ёu_l<~q'|,y=,]̵ Z8[0OYbX8l'󢵬[J"! !K.ҥ !dҤIT&Y::{=P>vV&?HU !D0 _v2JB*#!S 5N%KBf̘QI$cݶӟ7LlHc1`pr:yyf.1uv.=dpz_dVn}?<|Y-Fis0%mxgj# U@8#lٴ_$W?/?]fl~24p;Urgw3Ϊ: [e1uv -zwbV:S򔣄TrR<:sav܅fT0˲qb.^NTLsoD`NWh-_|ڵ&M"̙3GWWwN.nǰߝ 5u2{nI+k1'9rX$'L0f[Ҳp1642p|J!78;L"+hmdgo"GQ<>gCSKN=g (֯|~no;##f\ƕ\-ZZ{ ]|vr`\TDƲޡw 'ϼ}V_gK#CK>/ٓ˥]֯y^qbAS&kgDX+ۏRv Ϗ.6;:@CaJECV OHK ^|+UaEY'LJ}rc;Ka?KK?>UeߎG%n.簤Ĉ#K{[m9SvY"/G|z{ ?}JԻ;wͼb4ǗSK+,PLO]F,/g8F~5ԽɅdŮؚfN%h dN5;گQr9vtNi6~'lO,ɣu1D "p4uZ I᪌R}vFIQɼq3b_DӨT*/oeTn4AXoV~%RE 7.86zէ?_{!^=y.&83J-CKCY{0B'=:,#(0>(0ãK( 7QZD"PX"Q<a!8E BtO 07pTSS\nlbn=_p.2"2bZey>%%%jp|l/"H<[y;sztU  &&{;::fgebl2pBy#] <,\nATda"Xv0b1fLr58%9K*īTbk B̙>C1Lq`ooI#,(Mmm9 1x,ϰ.]Y{˂E"Oirs\T-<ϧ$'7 .rJRe%8:9ed FYupUۡo(f@ 7rE[ácccCComPCaJy3tzZ2aAzh1|]{iN&'rg9w{?ʷq~NVBHSq:Yٛuyc7?ܼy w߽Oe_fꐾ=vB+Ү|Xڼs/FZ5{u5VLǻRKck<&⥔տoXQtvtÊ ֞YZz-v<*FLMzo:v=<2NDQ?BC~t:4el'xiޏ/y LêXŹfB$N>Cヂn(+SZ T7,uRS=p^0C_HHi_3U}6BL{̝i3ϧLҔP[J xjЮMdžVlMFlB&{BpTGxbK)maZ0D&dM/#lg|'4YĔx\~*SZhlg>M/8~LJ捛K-8dNeBxq?IQ4)*73WqrFu"R9pbù;K RVtlݍ-v~z07OVQ4AHl'nf7n 4)Y~8z{YoŶ64UmrEF󌖡X[spOkyloW} "SVF)gv~Q6Wd6t5,7n@@JƎ j I}_fC B=g.e Q|3z[Y"H_ĶϏ{MuWuc+{XYuOyHr!:޳z.qΫ~[#+o7vȆoܻD)\pK׬Ysܜy͚_,)Z\E k>泺t@;vu뿗owŘ( ao19!! fM?tzɯ;^S7Q_ߘeW pJ 5 O^_`ooQ%T@k C@i>g˗DxcX4,i;PBOEV߽XyCp@NU@`nn[12)&l 1؈Zztx\dD8ͅT&SRRBwK.oplZ$g+/}}sgN޵.xBt`oGG,XMnT(Ϸpvvw`k9\-nATda"Xv0b1fLr2a|bf-/MZxrvucJl-pP(ŦhcfضX{sy}æJMn{.`}ǝ7o"ʷ~ ͻ?Q#Ԓ"25,JYEE`Ghh1\"Q.߼{?dޞy+C BVyHދ^ Дɻ ۤKZhwxѣ#,n)ggdfe.K;9K ǯ̮o.X*~;Ğs0B{whJ>bcL.y>eJ[bUjTXSvm:6j\scٰ?68C*g#4 )Ϫ:ƶ?ƶF$IzOJؚfN%h dN: >6}}mOa.%8FXsa~"˱OտnX~iRTolg,&b4diWw`B Oe\G)")ޙs'6Lb!XeggW8) hc>۽j, ߷b[bC$]\73xB?U7ERC,_g3ZRcm!#daEɠ w$gf=;zQPjݴ(Bi@qp@=WxΪ=: 1ịf420ArB惿wfV~P[Tge#]cXmfҠk%J b~cecnpr@a7>.ZץaIK_˜<BF-Z"l:߯&6b! Uux->VGp ?o̲+z{R%zno$w{{wW,ZkJ<{x_H$Bw4;; wyVqO蔮^ M- S0b8\#%5-4;O,zG]B̅ZC+lRJ_|y-$d< 1ܨH$. ^KmCvYBt`oGG,XMnT(Ϸq1~ryvVbqR*J>` h @ b1 a0 @ b1 a0ba@  1 0ba@  1 0b1 a0 @ b1 a0 PUGϠaZ2rSR)J'A4@Ak@3) Pg) А5 3hHa0 @ b1 a0 @ b1 0ba@  1 0ba@  1 @ b1 a0 @ b1 a0 a@  1 0ba@  1 0ba0 @ b1 a0 @ b1 0ba@  1 0ba@  1 @ b1 a0 @ b1 a0 aTb1 a0 @ b1 a0 @ DqRrPjR<bC7??8N0H|EaM4xpDDwirR#_ ;0ZՓ'9P(455?`@3{7a#|QUIb{{u1 Pg=6qsXtJ'#4hZ# NtUcq|ŋwйKW-nK|-K+!??. 8PI\v _v{PgJ)qς|\M B)yq$vj˴OMNj0L1FPi'fb|Ѷ9ݰ_KAk@ 9ʯ'p315}0%XʏaByfp;iJT5 PC Y[EO(u%+w[zx\*JP͟'$<}R.W +qJ?  J8SSSSZo -V9YY[ ’cRhȭa)Z|3YMMNrpjnc۬.~޶!NmmbI8SFJ?׊J 5zxΪEW|)JmT gp;pk __zZG+]t1, sssKnf%:hpxR5ljjfemQ:k#MLL^HJ_KРcSHtBRR4yV1ܩs?/^trrlպP(-OI-lEh(-.Tw>0``uRQ ;"剡&w[N(-i.\n|dgLB 2nlV_,79o߃<J<MF}>=Z7OujIkvi۲[[-KFbÃƞfS6i}s LZ772-tϾ[E&/f.#xWcA=&N0Db?CGG0@As(uP/SJ,;6!w9l"[pUM,]=gkWGQg2- QlҵX$6n-zqg>L[,ֲ]jdF ԥGl69 +7Kik8迿ĠIg7;{Pgx&|#H޽)~n?||{ޮQ{_=c ?3fIM (n֖fsy !aBVGY2>K8))-'5#dJI Gξh:jJ;׃ҁDBͽ{F ;xi W-y*{Jq*DRJU<˲ocwmk$?8xAG݊;Ynn1xճD(Y1gճOZ|{33噲-skoF Tc8OmOВs)0}xpwщJMlߟ>ƿ_P"n`aos!!B~.7o%)]߷{r2$}yTrm/}qû 2 4ђߺ9GʛAG֌jˈ-& !SObWc|J#0! % O *rRJDBUHD6YfB1nfRl 23 *B an{J܀N"R[ǩ3XUA\4)B8NsT-6B mn8LUpۼY*-tgJFԵGO;1QO`i)3=roJRjn߮.XO/}uv[{$EԁbN]gu6]nd.H$`ͰJ("wm 3.,L몘',GzFZRBHHy %tkGb7nƲGbJe6|U_ũJ/)W3ü,{&RBsWK{*TҚj +UJqd*Pm1-PіrFE7"'5 گ瞗$Juy%Bӱ]5Gu24B)*BR0 x/hsǩ8eK؄pD˲1)ɂIM)u.2J%!햲iZv.ƴXI,GDFVMRQ)rkiF T1\ۏeڌhO- 9+.Zx;Z|hcؼS9d;vǓgUd8[.!ENQKtњxPŐuVM 6E(8I}~6o({"#;#OB*Y|uemUAgsށSׯLJD[hD%*y]POgw(Z<@u&|ʟ\knfBN!b+<ވCdNe*{JySqL:],˖g;LNVRs !D0{-fSQ)ʁM:WkmF4@5?hyЀ:}u&`ňrYk{Ш-|0Ţ # w7<<2x;vG䫏7YI)N~}JЧHqPWŁ퇺RJymx{Hb>OGcC 7O޺5k`%:94צBӯe\-ڵhd޼Y\u/6߮4Zl.0>zg)d,~jNե L{>s3m\[KUT<ϫ80,[Gh:0 q*Vb_Vq9kaE_RŘoc*8?9o.BJ"je3_*].pij#lB]oU3g+Kd5IY {?\Q"+½ <9+ -^:S^~][ Th?pD8G Y:#?yls_0wcζenVD*?Tx3"SV=[<%r!sHى3F[L4_$ݽ|~ae/]#jXlr㛲y> ?|q#cwF2wz{F,ℸa[ MG1N75@X,@N߆@#fo_&oF{2Q' \¾gf5;;U뺦 ^۫1nzh\/!uK ݚ[ao}5IFhDb%CYJ#Wޫ翴$勺>)oICiնHBjѝvONBHկUΙigBGjIz}͞ sԁܢ}yY۾8RQ=1<ɉ)W.|Ŵv>n0kUC#v}Zt`4 Y#l៣jLXqAJGXܒ43QScCPFX6ʬBis:ɾwQOıꚪr è۰1 9gz:,'GU%3{ʃ7mGDW(~W4Sn057Y=/koNwC*b馀U {f5`nސxw},(((J$,7;߻w)i5Ǫ6npn_^-!`VbJi3+.PU=#L(uX1ff`„FOrJ ٧%I6x5|0t27!x8۽uRQ 46ɘaNJS*3_T;u]OK>7e2&18sYj|, AdYAۺmT_hNlaAEeٻ(}q(ι؎z/( ];kmZbΝ2Θ#M‰ xdDdbjRcci6f ܎j JqcHϨ[bEX{gVUeEQTU?.C4M c\RJEQRYVZV*I60mP;ZEp8n#Ua2Z|UX.5 Q GNg磢.׻\]_"uEZ0gV!/^⊢ql6;03Uc\EԈ:&EE[0;Qb`µp((2 2 (ah`At-ȌIENDB`gsequencer-0.6.37/doc/images/ags_ffplayer.png0000644000175000017500000001365512626272145016074 00000000000000PNG  IHDR#O pHYs+tIME;CtEXtCommentCreated with GIMPW'IDATxy|&Ip&` TB o?KZVmjZ<"GSnBH cw3$ a1w~gWyxno M[_ٗS)Z;W5 z!<'絹yk\v|Rll ϝ΃9I|nLCcMIh<a4@= %74pŘ&pO@bLi O@bLIII|CKoh<1 $ $ IBp ' L14Jt޷V61)QrBvg_l<@& Nj㕗O|yr44'M.+44#@@@׃>eLrO tBxi<a4p֚522**:ZQP}]]1ӥ]Rl'JUjլTW;: }gw;]pgHg\]YYYUy;####Shwv{Im[#>!aذa}dF.Zg쥿>La4{TQyGNMIUN][rʏo߲[||JJկl%Ň׮]3mZ,+L?p:) F`s.)9*7GO0t]TU٣~]zML ɤߊ[6O6m=*4-;gbozLI72w4M[MMrja4_RSSkj54Ob4OV7``u7ORUsE7Y{[kT:iSń"$'M<640]?!@X' ]'!K`p\8EO lS+i MAf)z*tߧfL@V1I I2=ޮAm& >y  F'VNIA I#߯yb̤  n&OAǙA a4xA +]_ 靑1 <4xTޙl0LbQLÔŢPpMVȟ1Yx^`+b1M4u4MН5DrAۜ~ ~v7f==h汅Gݝmȟ1ōܩ@X])Ĕ>Rֈ ߞ;r/|{^VJU2jju7br\ϏMVQ”VSΪtӚ=9u&=?1s\|Ƙޣ- VE2jX-QISe-/aMgMVjzpØͶw6身펳%eO3&^Nzż% ӴUW4MYR)7^xVxClϋbKm%_}[vͥ+NiҠVs{U\m5ꍿ){mԨhgS4Hl^v a 4kQ+av'~iVVV.8r[X,?o0*%jJ(Y3/_4(bc qlOELОB.{L7OG2@QESgYƩs]5n7̛8~Q>Y}s٧—Ꞙ6x/0/y}{$uONN>妐BxZf=?}zs}㲳sy#fwa)SgLqC뭆6Rros1#s`Ot;r'7Ç_ܛ3/mu5t^y1~?Ss;^cBĤ1s\F{إk\4V놮RJE;qbѤn'~S}C{DGvK?g-?;-ו^FYكOWgu 7Oѣ?>bۉua\f757wۤuPaaaaaa >i4ޱnTͦΥW,t7_aox[H!sǒ^[]}ۢNv%OҊ/_s+ 玿\ϗ8vx/\#pq_ϭݽ{%׵ݢYY}9aw3xH̘6zM¹~mM;]Y[q[dڼZv1W }v]ɑ-/^̙np}?GVo{ص4e]u¢Kݣns߇I M&YzM;%zүngݯXp=7=n;[h!s+۶b_W_>bm‰wϜV<5XXXXXX|5]1atϳ,nsbEKߜQOBzO^/µ_7{[KP"zN!(~lזWZ̑QZ\jQQ-32vGãJZ>.'JgCoM-m%U6='*m܇k'%ؒnz貜xkoZw%Z=dHnQ4FqOaxOWYIf[3⓺Ǽ|uNJфfTqܺsljbMrKj>C> !LkhZ8uZRj0Dqc.-%1jΣ{;#uÒWlOwGd]_iR!B.oL)ajlrbbå[=|TF:6YoKߔ37<"]Eo3r.meP,^"7 pqzLEQRCedd*ک")5vB"5]iw34][qYTQW)eMMMVF?>rHmS6,F4KY4ظre+^~,uOoqiκh#Gק7+tz^_2 =%׶Vf7]P2->](2v?+JRΊk-|jMŚУgRZB3Aqߏ`44w,*&5mdD9fѲO_|)ZѤ+v,&uStp:]o޵łX-Ͼl=O뗰KlS1r㥟^;#͛}Gi<ˀӥژL%9j#VJx̞fISusNq[ʹo?kmy醴mc~]lIYN,jlث¥T!N{7q'w.U>rԶE׮RFEE]8i/tv.lRf<>fTR/bk~2z gb=^Wɀ(!*9'Y|?04k$.<уw^?yy͇/&/f+-o'C ZݶCqļC6w[Hz] .K~8{jO.}yMņϿh[?{ODuUUѦ¼i==wacM }"EQΟ0nwHoZ='VUVދ׊++[Ki>rƧ6Qsa.3B$&l_- Jo?R-^FahO&ISiO9g|e{,a#Fvovl34b [hH:^uĉʆ YwFE?qHM1[,{{CAu4`ōSoE,Yy}s#jqo >*vz)s +rԍZ4fƌ*ͣ{.9ȟ& F\5},Ʃ"r,8 Cc3z?$,1**PUUUP8L4 SJ4M0M8osLbFZPR@'>{ h6Bh']Wvo[ۡ[cS7  O̞Z9!VkD)}***:Ĝl5%!4s!tqNmjՒǏL XVMxHgL5nCQUkD5" FW T1)HB|4B+ƐB&i ZhOlw+u>t|1@#@I# hH1-x}42UlʻbRHO =E@@ɘB!ip |a~B fO DAЎ0|-ڑ46(d6X lF|Iz!_֐1 F֓F T7JF-gb!4`1S*Vs} (=R«SUfQG4C夡(JtLLU_m*...TtHIIzzzhL 8-iZZz{VUUdUrџSC_aJp=H(-)KJJ֭fȐs4-fL:ֈn{v]JQb 92Gꪪ|QZ1EU3de˖իCUOLѳgdT$@h& !'LS->1 tj肊Y,~2t(Y#"ToԨybEpBQ9Mp+O@bLi! O@bLIIIHH‡&snoh<a1  ' \1 hS74Ř4*MO(>"h<a1 К" UK,ij7͛7,z߶ϧ\FU+*̏GzūMg[2m;HIENDB`gsequencer-0.6.37/doc/images/ags_synth.png0000644000175000017500000010201712626272145015420 00000000000000PNG  IHDR$( pHYs+tIME tEXtCommentCreated with GIMPW IDATxw\I6Ыt. b z{o{;{grV=AE d7 P) }Ⱥl~ٝ k- G;r`/+?![rA XJ:u)s*4M2@!H6zK=SoU0h3>+;iijt]x)EZPXk{QޓAzl OabNzIwuB jSϹ9D߀ H6RԋUM|NN1-]ڸ?gx9q?)5%~Sd|&m\YfH;=C !+&mlcPrss< U2MwL};ū~^?52% \%1 *\d'u>>Bn#׋\\Ev̾9Á:cikegfLt|{^]ٵey8}#j8|xGO$V> Goe@ DHiܻ&\l4J8̂G"[NY\(jP#s6#eϜ9}l7bu i8#{ /Áu1~ozùG\}nbM(7++!)2y'qcvB5g) qbZ*am'{o]M%ӞQK_,92" V$Te`;a~1`)~z)fxe ߖ_/KC|AA1`ԩ&.j_OPs+F!GөgX,p|JL^~AA)1x ^[!$^ !Fl'[ȻiiB̷Y 7&)AfU.+x F$ʹ DK6m|`o<S‚rP$l ̤䤨Ǐ |$}wOO ˡطE*X˿y uQd#/7')))Mφ8l6+''7M]]z6;}N;vx] @J<QgC/M-M6`|w&ao !fI9~߄W+GA$0C %H6{Eb,hO6X,fl*Dd \bdcQT)LFQ$0*f<gjBHi@U+'';9)ɓǙR)DJ VZ: Pdȍ H6ewIw:gmK;)ė W.]bhޞ/Ѐ'l@!)ȶ6U ;{ѽ&fl@-&= P-XA2Dz ecc Z66C/($ l| AoT^cY#.!?sjO/Wz@GWSrXUūyұng!ɞ,29gٙk"oRvuԳߕc!32mf ElxzOrMpH6h,ƈ͆KȠ/N\tu -eONHZEQ /ڹk>M=f֫]lGf0hKKZ (E! #L+S/.~oKS1ʺj0@A-j17@nl5C%_ܔϹF=SvTa3.ސv,OhS1ƅ;\l?70F†z?~35)\[dƘY)|cc-r-ijk#J5*_!ZF%"93 tu, !蠶`TH랑1FYSbg-d㫎4r O4BdƛL#c&?yP1֡R` !D'~`t}t\Sr1:'+AS/2HFCQ n ?Z!jm*̳ѹ Al|9clŵlȶm7HsdL rZڱ'Nڔ #zx͵5eo<^aT:N9D=X l84!voPa:\IqmG֭ ܐْ&X9ob+v3,eӎW`OW~F.ǩ[p~ohQ)55r47 7[|Mw4,trunV-::La1<2#Y; )otg?X޳r1|uDg{Ll-v6Ѷ'.5M41*>yMG!${GœzC\t1j6fKq!)1ga֟gXH;Qtc{TVa˻Y75G'u9|nFf>|J~n>\[SW7тh$%r FßYi3"h<ӂ/a TP(O((cFAR$H#LS$ER "k.) ƌ0o˟[e +|/꾮c4MosoR럦Opltf4|G$Vߵ9KH?iQ摻"{hB$%gP55liw6X2lm+'겪 ( B Te_Cl?$s"NAo"C˫ֶM<Ƽh1fr-, PnVMV.qN>OqZ|n+rdD@6 lGbb0fC?PDw\J}#ߛpg5$,\c` $$<)&["Ky/5ƚ,%}@3F{>.JPܲ6)߇C+;}Yܸ2Ȍ(YAF6- 44 *i}}cT}/̛823OЪNvk\m`\=xWv̮=v24jmf4V$Y}=m F' 6>mD f0fm#!~&j!upÂɛ ib“Kzn^~d6@q WWW@;fLÇ;4]mȝ6N~ypOI0{i54ڤ٨]{[q0j0 D-l<ݛuPסU;'u 3dhŝ <͚3gw/v؟mj\%ZK6*ACSˡ~nح[i8d $;vH0ר:8~z:Ba9^{m/ut#ķ^u)xU̹ڻ圓O|y!`̒ZlQl [{~ڢg$EX,ŲgcckbA{a Si Tۃbl( jaj5a0)d@uV죉0ih-l6;''fC(@XlNdSSFJOMlhklT9Tr]]\š6704bC1j ,lM\ҊȈYYYGP$242 ! ƭ[:v ̒Ο@eXHSK\ **B(@=  0c-[,{wn4k>_^,1IRjYl6bHD|@Փ ewϞ={7  8/77U⽻i4M2b==7W7{GG>@M 4DdbЋdTO2uFEFQ/__kna %jl7 Ia?5Oq qp`|Ν[{Ca@$m3={cqׯ߳gw3h?qzZE|t1fXb"چ^̈́"QLX3Ul(MMM%N6 ldefߺI75mޢhU(4{Q kzMl;o6pqܫKYY un:<[y-vM '@J!E>7L+hf1*u[UVq.lGF䳃kx8ۀq !q92ӨNL^V5 n5; ZqኗܵQ3 XP:u *K|WRr4oFǩwzmyӏ^7 NE/k^92]r \T" $$c 2Z8Wd2@ PPp/TSǏxdy4d *٨-9IQOdJPfHW(tuu҆hS?}胇GB%]I`'@⭱[rE͈gسg 6<_ծs%LZn4abضFȇ4MK S޼~߲r?؛@. L~tNx@z6vA@B M|uF$Ib)(n\:e\.#x<& IS'fyO..}%L]8n}"CG/ӬGjγDEA Rl+=>ry[A(_<~Զ]BU;A982߿nbjV q^nn{wiV561ezznn @!AZ@0.6ǷХ2 lW`YֶPZjʥP.(LL|z1O*SΨP/[X"xE x^iZAQ$ :}? N9MuIa?5UZYET;!\ɀׁ_Ax%H 8g@YOOK3P .RVPp8~6ϳ,8X,}}ė 5g濚gI$  9ac0_#]>(: 8*<_˗.>o1 vۯi3! jЗG1R!QͺoNRiǎϟ? >_ꦣsٝ۷TqAIX[[d`7kɆJ+lMЕ( Tھ}{Phhe>-͉CR,x=ѣΝ;ϙ={РAv |YOw5MNo6D \=1 mkg_=0 I99pH6anB&C4B۷||QWzKE3K'/s7Դj9lɪ)TDž ̝;w%D=ZSSsܹgfcݥ?Y6|汈i; x^[:ٰ'sнz z N^#UO*8 JdC+~BУ, 3teffo}ƍT/jڋpaeGtu]Vd|!C^M&OQ=~)lS@>!}J4ťUc[L\DU' u~,[u;_Y9a G4je PkמYg{Nw:p@xn#sܙ{GԵ9oҸ+9iЯ6j㍻B|gS#ܚbcl6mթħz;h*8W bG-o{k@^y6Ȕ-Y}lϰcޥR\:Э 0a͛oz& IDAT2wW˨>v i%k{H5b!hM3f=0YFh[{tc>?0*#&4yѻv`77zGGNsRg1h`% -=eN}Z>Ii]57"<:s] }Ȉv^o~1nr+Ե1 0 2BUu\U\-((_; gl :fnUkYF|1,m+?LwAcYEgR/NN: ,~5ٞ+<5ebOk^29Ǟ6Joٻyk5*dѫL{+uFUt'G~}wzY϶ыBƤI ٬/V.r/Nw91#Yeŧ^n9h)CMYhJ>?+xUV[}4IDY?z9kT&@zbJe9S!$: },d?^cB}E<_}l.YXdލ菠Q :DoogHڼ_Gf J$F_YRv:VpUp5QT~< l0l9qwϧ̜.[znO#a#U.w>aϡts5}pD\wzÑ[N^}́_s ZPT`.JZh!(+(ؤA\1c 1E"A&ώyYUU.Mk??qBz͚!!&;jsY>>t?6`@Q>[C(o?[ZA+N=\2v:r~!똱i "R9GvOz,=z~";9Y0ˀPCBVSeۭ 6vۉ9΍>f*VpUpuQc*Vzuf< 5oF穈wz$XwkUg^7 pދKg9y/#M(7+&K o5-9l띥~>N\ΈN=]/9+rdDI,Crnx[cY EcB[_\ *bNzm۷;V0֯6tU"مi-EK)ײa+t۪hsvi ٧c>X ^+^D&N -+ *tO a~vr Xy0bʣw D觩 m!s]!??4:c;*( N\U\((L _fef޿L(}:VW3u=A|Z|yzbةy݇|<w }b7޽I_%ʦol:j.a!8k kϞ={wv*Ƙ2! ^\pk؈#IT~g(U b/BWp)>4vX");vÇrY]=]XZ}YZ} 66ozy^!?D>T>"6VSu~ ƹ99ٹ~*;-ۏLA"BebT:+5yge5f5EUaU_ӧO%^8G:nRG;)S!7eeJz \Tz Ѳ9g+?[((B1yYHdFMj6SxsɌjuˆwløl,Ø}H;}!>b#^=tiZ.Fbf^n/\] a|g芜1X(s'O]]ݞ3=ؽ "ffX(Գh<\]"9rnXGhxu0V^W~/91wm$N>%ӓHN>%`BlF`"ٔH{lSZ\ۑOL389H(2qۍ"1x=]vc!!po]ۅ-;߶c5WrBwBA{*1ᅻg#U ˔CFO0XM h/ 8R;Ұc:o8xԞ43ԷqrsT]Wٳf.^dٟ֭lٲxٳfwJcv-͙ov.WwOk,Y;DY4ڽ}K?Wą{:~$(\.M|F$ V뢟vvv(r"_T,:7NyJoaM<Zط-VMW;3ev7ȭ߼Q;&s^( 4RPTfhcTj$%l%uAm%_jM Wk;Z2)t^;}=ˠsVQ|Uv ]ݳNзRi!uzozA?!Șw_u'2|v*#,ﱫm}'Mv˵g ŋZcqљLi%'[[p;[}}[o^^-VɤF$SYl 5&8@-W+_\ LuRU 5MHY%+:H)Eʴ eĿ=/#YFc[<8|UiB1- !;ο<^a,BUFFhTOhJG'D<ߡ |ϘV !8N#Ƿ5ᔱVq59WggdC]pɆcX/,,-ե'0*ɏpZ:ka/?>3_K4U|T![Ep"ZJ/ro3ϱ݀+t(ʑjN{U8RǂaH8" QeN5:̏7 xf#LѩA7X~M/_4:J-7an5mFrx[iA;TFl)o>B!Ħ0bKq&,-^_NI{~jk1ǒiTrƜ}.w_/2-厔RT2`:::)MLLWZjH,fXuW7] ܾUŷĤ$BOO. :';Bk28kn-6qvuj7k=a~s;Fcۘ9y<VM B#cDXk,)oB,+Ijo%(Ql4\XuZ\$/uRu ;F=41574T~!#ͣ!dr8.aa~MՍ8-5N^^\|)fՉÐ$Yf^ 7rtwބ9tF<4ʞ*g!2jBciIQ ),΍?9o<ֲnCw6Bf =:Jъ熯wo|k-f&B]NkemZGzȕ'[3iA єea7r<ȇ4MK S޼~߲q68$lxV4M?ʂ2S;AE"///C##:1eu~k;^ʤWY %si5 W P$24b`,,,YpkC#Bϩ%#TABW_K}}m_ucPd[l l~cO 0q^C];5beǏp8QпOH}SbEzTî1)9s%}Ksrc's++G20lwJ99nƼ"^[2h4{[ۉX]@__ P^^U}WX{}?xy򆆾ԺgЂK)SλfvtDbsBSiʉ}3=Hhv¾<B[+{7zv~/f0!d=4H(2rjyeFwx:ev7ȭ߼Q;&xl ``M((Q.|n`3O7*N.[o4tcyՉ_$"sǩx7Fy&8Zzqrw'yFM1S3o UDKզH(v^VF >-3|{c&kK4='/ҫԣǯc\o!R_21-[c3*^@657ZSmdU<"..e. ^ojR^q74nImD"D==Z,x؟PqUv(PT/󯵾”mcN (163Sj-.cOyw"=6dЮWʺ,bU%.Ok׸wr^n]-)YQf4Xt뛶Q=zaSM4Fk!m`'Ct޻N֜duW1ʞeXkǭo|^,_s/.vs͍N8Q?XY)Tmz#+LW$ =.SYtf74u 쇍mi@ $c4hB4z /.B ifkj|iV79|H{ƢQ=7B =`!1@vū yYyH (85 T 8qptڭi䄶 v7#]gɸ=6wz\QN\x#.sB&->{B5޴{M!=ǦBݸ#ܝ׸nj{'S},}̔;sw5&B:9_`?BH## TMO1gV㝇ӽt6 YC 9tحMwL>զGgHܶKWæ;鲑nס>3&}#n@TAd/T:+ٲ23o$Iך6o! >:W5-D\*\e@!M0B#JF18l_Hʳc0iK6 k2ϱ+fweҞSOw;v7nS9 H>ɘzGKCWF{xLVd/BE`PPGe=![ހxs\ͩrw'[[_@!9Q"#Aʵh`)s`6ݍzmG)c`GN#<+ILDK7oR\M1,X, w-wR12iB?Kw20*jՊsqn~:gBUma 8Qdzj*..c|Yw*o7Sg^ɰBzcN׉8 AJ~)s{L})rgaߑ!ij hj2n! YˊMrbHDiw{Ɣ7s[kb@H߾/,pHͥ34[!K: IDATg_f菏wu@u^9QI} hk'\nhe_aFC9dDz\4’RPʗ޾Mf FcLfVvR~| ׵qoԼMS\M$BfS3Okh"[z\x&AVX~C'j,\y#MyMcut!e>|jg<6mmlllll\v{\ֱy=מsXCY3/^u[lYxY3j,h0YgdGm%zl%F84ʾD_^qTw6a/ xIdŅ=Bz{VWq^GhY!eE',S RGG1\.y63U⪦fMy BXR>A llr3*~UDH&l6a[RVOS1E9?aϳI=]!ˡ{3gu0ozXh{w7GH_rz}tϸmhƉ]{ Ow̾Gg2|ue_a~B.rE;eլO<ͣa\lo3KejzGvw4d׉rvq9tc6m`rŗk֦N&O=j=T@Wx/?QI[Al{3_g*h*'!Wl)BlPi]|`8H!0-}IVRgRߘWdF; ^tQꉗAzͪZJ/S;ըQŴ[NȬdRc]}3uEtVf?E~2_?!`B)2eUFMvX^jp,fX/Tjɷ)-=]O"aDcM'ս~WG?_?GzOQI:򾒽dU7~M/_4:i(3UZ[6an5mF:}nT^^_u_~ml_:WG] lb5a`Uzvo\Q-ϝ u^2Y^oB`ׯ/2S5&&/@ħIk:0zuv^ޣe.uW$xPu<cFeZϵ!Ѐx@Tgeӌ>ߪ ~8ZQIy`Lr+^d|>_ʡHVP_ p9. R C:_3L?xPǓ:i|qFFz%גH$nþR䲼䤤Lk ..V|չ@UЋ%NQsG +gdd o׾} Pڌ,9)9<얻LY,VNNnx-]5<"(J~tΝvm*Y(*e˗1Xqyp]\- QW7] ܾ>ĤS. :';p^V[ФLQgCmm-CٕcDW'-[{dC% m9J}p?nbjƅpԳ@UV/x j-ANK44\쀆b^T ǏYֶ߰ˡ t :t"W$5bYl6U;J0rJV p.KW5+*XP%?sTߤ7 {  zcf0**7з*W(P, bQ;}9l[ELٓٶ|s(o^scP$jP)JЙ.ݣEcOWwOWv,s7dC* jݡJ ?#vz,Pt}rQ\y9饿4H6T.L0'E=ǑKwn8fbs) a`GQ2!o=1 chƈpkj~dlD*8꤈,-jlU;}mj]qju *"RFBnrG$7Io ao4v2'nJ1vM bC;4ܗ61S&qߏhecH.]HQP# i@.KkRR?JABG+6BKfO4*a充寴x <*Rk^1nn'y "BNDP(n<=mT>2(ˉjŋ Wuy DlhBG]+6J}@hXBQzCTW& LLN?(QMqe[]r4雊jrssk,LL514j0hBG+6 ̞7)...laUJya!ڊVHnnn*_ J$!tBG]*6 0ns Q(x=r"C*%"#|sÆFeoBg]!ıˆtmСb@3v,ߜ4烖&pS彝{[[ZՁ*DFZ`Meņ"qmvUQCV_WVl`hӨ׿na|MPSw\p|>}Q}~{̴BO8.Vg]cgB8𓥝NBxeQRDȮCoϼ yeҖiﶴ0쒷{rdTˉ23jQc\lde`R<~XSJPU\.4Nf*#Ņ U," j.3mڢ{칪,}g_Vs({c4\WꅺBKoz z9z.V̾s͆]B=de~7zKon~OAbsZ.6h W}0ZJçKnKEѿ1/$sfF|өB6yY޸.*e.Gn61kWQw@^ jBSD`A,(6|WJ)+U[gbo*dy^|ems{O?ptw*AyR)jY֯1'g :z~" B0HG%H|t ͉ \G(;{(pC' uF҆⻄ºҌ66*ÈAbAqzֈ4;9wx>LlRBTiybgS="td檨MbLLD&6Ɯ?pƶqZ.OX>U@o6, &MK%(3)( ֘?2?JLZrbN] r<t+S)K!|fR`jبqJ3:euʣ'Q\ݺ@t.]Ý7^7h[[;oI^D9FWha"<:iMie;߃IǭG4dѼN50xmՆyd^пRk~=&pLi[rC͗?m1rnw޼N"JYO͜=Op[%_o`լYZ7byqpǮ, !E7DV2Eo+.&"1 ThB?]ByB)#q|kZO+<^A !P׊eY%ՂRYJPl+R(1 @(6 w6'NFS=w[7sKKÇ>|hF6h %FU+cm۶7|Gׯߪ!!mj3@oȚ`Mqȑ* i.Po D<,2Fpq1nܸ%KZSPxQz#;wl Ƙ/6^h`Xppۆj~#~bPl ::` tC^/ڵ3nǹbR_ PA@taPlhZ -rbbNNrLLM|}}YNh 9}knU|ҭ҈8]8J%^ 1,+RG_gPl%Jib¥]{zk"m:D"MsTT^X|'铏2ia,[;[P 8P BǹnȖN|XXXRRRXXX|+`SƯAijZ=*MGVVvnݺfees֍z̮5PI7>Bxxӧgge͘>=NiA56d0T[CW>9١]zf9ٺ0QW2v''_Ů^k[x@\ܶQ Fm+3fN &}vg~#n;pnTs_F~[^jd9Fstoť"BHQ⬖ mC !SGxL)}t@;[΁a7ݐSBTwWvu ]YrHm:|Bc?skh󓭷s4%}?2B[[&]q37SkǏPdt*B"FFF.[8h呑WlTڄM\Tt>~#WM({wCgB:ܲ5utkwrgw~oI/xo>^3!8%5I]u@@9+d#s**ooߏҶW`24 E?ggml{>jRǖ榖nn&3!N!ҾY)c|.:AWR IDAT,qp}(6scܬgO;zqCNe'MzJ.mO:O(""l^MA Ʀ w|FqSagY}^z%?^@ץh7>T(nb<.Jؚ1h2Z55^>tah(0a|R)2&74UӚj*+oB .8]4˗o~w;r>P>yߤ.=}'6Mig-.yAozkڻa\ Wr,}-5ׂ&i*ʬWfU>U^ٕgcgO3e]6j~~ЊI("]Xq)W~ZYҬߣ]ti)d_:rWҸ=O} 6lذ9^~U0{eܾMR|G|;'5‚%40Pģ1Ko;9Mmf~E ~l9=AD.;hV"Blڍy-W?mB?RTOSXg\> WS{P{R.P5c|#Ud}ZtQRTZJBΩCmcY6A.q>^Q= ڷwK\.[to!!Тbmgu+<5ɱy315 !сd"Jۧ~떼j_(TICseK=dw뭗 ]Iov%$$'$$ki9U5!ACS}yewzģȀ;~dzʜNOc #=KӞ|E$.]*Ewhx£K3zr%ajOVr}9%,"=򫝙BeI|u'~$^=ݥDg}"7Xܺx ,**RB5 zu+ x6n, #~w@*6MAnnRBd݃d*ƷIu鲰7BE٫̷AAIGnZ_rQn1mݓxr++7w̌576m9~Ē}lͱwJ5狗>ѝu`V~%̤$j_h!=QSּi͂9rH$)@͵:(6q h.1W xJ) U-@ ! M(6(60VVɷu%_S(R(ԯbec:ݸiN, VgX"noK+Mr/V[RJ333O<54T,BpTl0:q"J4333aoJ |M5bU"9ڭkA~nQq:gs֭ٱ,7t >}*((H$I+zóIS_e#GJKpabC1 "¥GeMLJ=T*^oaA>e]9<"aE"X"F(PlhK)ZIeV/׿be9H,Ժ)R1dXV,KRL~F] $9}Q#Zi[;[ЋsRVԃ!\lhp+ɷޣ3 -i/?Z]y361qtrV:?[mROWRlh7Ry^mC0UZHո@S"= ί6 FR(# Q*x^Y7wl8oεI]ObP\^CVt;>rHPԏ!:GD}F׊u.\=<;;;,,lϞ?ъ #jHƂ`^;}YVcYY3OtH_ pwpu%§u z>|omz*Իb5Syߖ>PDqϪP.9s9sbbbd2YLL9sfΜIKvNlb=0\Ra-<vlN>Q;8888uTZU'@Q ŕoeɾWFk$He%E *54*.n[n`{cg'NyJ{`|v 7b vN:e QO:m|(j}C [l(o,vyy1}wغYs>=L㳈@G;{/d !#z:ۺOB:ķB\:Mޟ%B4kԬԭn7yz/cbW8u[lʹʟq#8xKf~ATXܨӜc{u j}IU@yi=܃|lVF~NU?SwSFaU6':~B.Zx7SV:9y'Vsq7kqI3aĹtpooߢK) /N+ 's0L'n! J~hI]C WL!͌;r>^zCIH&.Ί~55-nžo1w 8?;b?w;88~jW +zuՄ@_KB>Gv6ji=+4{x}K5[B!ʫ^wέ(/^YǓ?jڛEշjʮ>+;}4:S@gͰӺ-9 -e=kh˺D9! ۧ+d_:rWҸ{xw͛e(G7Q r12 "&EF[*9.|w]o=қKܹ}|ˁ+( 8{qkoB,GG;!!"QӇZ i9n |UϻC,Ev==]|ȷ({ycBĄs6m!{g|ܴ&jǑ*L>0sOo[brC \@!!ӷ@5n뙟F2[Ns+qnzN\31GH/Gow'6駍OYv;˄%&[|eo+U|TLN#o!2w4+~єQ!CHJx*O9{",)|p},5Ŏ}sRijSٟvU?_[Ы叚U*jBuX((~c#31@Q(;`P(j*X3SMQV T{ MJT]9BX#K#bR*g%爝[v`Lڌ-\y4+$ʽB,li4/aAK؉VsBHE}oi2o71ʹnrTaF6skuXvTZ^¶ ;5d Q{,v(~KlrxRb37-0Y74b8B%R&E7P_{$RB2z5s2gw~yo-buv6T)BjpF^oX |tqjE# I{lWcuX,g]nf?&w7D.@&M ÖtU| QW 8(N䩉G3>0")'d,+ ~NUbKW |'r`랱{ w5I{rN2lՌˢdT'iAkMa.u J%{?!iaN*~t `!"s'SU'c!x`ytԐv?*KV@oxW+L ͡oNZXxzqDszժ+ξ3#6mhc&eY0ρgҋ(rO?ItI\4rU-s.A.->g >,=gZ >jR$Ο箂rSsR"ql%\=>W ٖSpOVJ/TsԩTBGz&o򬳶|e>Yg}"7Xܺx ,**R!"K=kDMKb8t5Eamظ1rJjlX_YA&Botq7u_Ʀ UaK騡P&ozVlZeR4(6Jﵻ2[ZzYy1&˺ ڽ[e45-L={P 7G[{_\]o[XecB<s3L\$<.=E\=UTmQ>xRIN؂aX[U36pwnNvu27=lTӄߜǵy}㏸HRϩ\ioٻ1c4C'"[]l=V:hMeyE#A/WaM_^MuN={Nlll~~ފ+fϞ3iW6h9!MQ%Ց+}ѡq\ڵWxUz}+oZ T- 8~b֮ZڽG5{}@D;FԂ7:]mNB._w'舄io‚|]TŒ;*|M4%+3n=pWW~~Z3Nlk`533ۺy_鞵!߾usD990})"4j>OKxJ T("10o˭ڴuiL+zI)R|]=5;l||}7o~̘e?+T2p)Bi9!RIP7jj&C,1a&A>GDɃhS!r*9|IkyϪqY^?Om6\wya ^IՃ6l4ױ~u zpZW`:v]+ oYXZ >ttMzpX"nW.'jLVЪ qJe:&u=A81+J |M5b3mckgW}^8ڭkA~խ6 ݧ+k)6 =<4eY9E (ʧ*}Mjp=/6vmE;[X"^P!$';KZJZVqIqH ha6 sgB&|BG)6jk)*^U" ӻRDsѪ|^|97'115utrUAG<RQOjuZjɓ'5 dj̔!$/?ƦNB藒ԴgtݣNRtC*890 @bBGHV]t1Y1'l(f-Z<~IZ#:P@'Իu ð ˲L G64A@[ѺB qʄ"(6-A*$PlhSAJ(6j ЛD" H(hzs@CT݄kڈ8UɃ"gr;$ǗVL$Dbc{#~Z<Ё>MRBs׹1: {c;DcT:q$^s7܏[~,hB{]g+{x#|פ}M@ B<2띉OYq6|νcŝaggJf4.̀foFC'5^19Ȧ&O?w6yb9ʧ|ƑG]PG6l//;ݏz6w67Lmv,F6t cwɝ}hdN27/ܔb$ƛ@zt2*y:Z!m2bRף3LƿƐ]F iêm,!JIu#UG68"gW̾PAk&b]ԗ#?CS|]^eikZv!_Zzpad+C̟i8 > :o|ZR$1m1vq؊ (6GC*Yf},3]AF,ABņvuhb>DR $PlhUO%X ,%!l,8yV==H(_Oe133+,,(VTZXX8ERS*,Cۃ4S33aCN(Dޜ8'O4mT&3Ʉ x^1J{F3Ps\jfZx3qф":VlHYY5OX244=7'EKPB*$&\:~hMM515 jhc+FM(bCK)GX8!Dr9* -:99|3 q"N!:P@W?vZt5IENDB`gsequencer-0.6.37/doc/images/ags_audio_preferences.png0000644000175000017500000004732712626272145017751 00000000000000PNG  IHDRw̄ pHYs+tIME;bytEXtCommentCreated with GIMPW IDATx]u\K=IsV@ T Q?׺vcحq FRipbc?qC y~e컳Ͼ<6@@@@h40'ND@@@hp~:::FFF" 4, ž IE! A@@ !2ڶm;qD---  \|$ :uܹsFL uuu@BB2B3e<==߿&&&8gffb&''' wڵkȐ!:::7nx2dZ1 sww۷vVV֝;w$Rp-@~j\w=|p D .\x!,,,&MԢE ~@~-=Z/MI62~~~E 8ݻ***qqq\.733Ν;htD4 N:\B8wٳgɓ_MLLfΜ{5kֳgϖ,Y2x`ooo ߿ӧϽ{$;dSϟ?uK,3g˼gΜ)$}-Z :Ǐ47r|#MO2B'*((dffrT%%%kk똘>"}.C)))SNIXÇgggK 8uTVVօ Fٯ_7nH&\>ǏO.YDؿRRߩ6EEESSS>~(`ѥϟ/E?⥐# @dddnn. ++K(߿[XX}6((`jjz֭;:tHOO/##qta vrrr!!!:::3gΔIgYc:˗}&ICC'H$݆jj۾}ҥKЀxE]6Q^xQQhHrJHHȷorrrܹs .FӰXtҥK%rJ%Kp\EEΝ;?~3B+Vhkks8Im߾}QQQ_ 7vZ#1$!$)I8yyyY>]6o455TM񳳳jW7aQ6{atӄE}Ui8d8{8'5&0ma#%K2,ǍwQ@tq7⇅fx_ frTebLuIs]o}䧛I"՛j\[-8FZk3{vVcIoZ?ӆuTlvJN7;&YYYY5mXM.S)>KX,"j.:vѵ7"_$tEUIf\H@<+!zp[ݺ6`,J#1EKsCчVa_OdL96͌`0L]}"DP3X|5NT-l%v;\k\c .oLQ`0 9-[{M(b.bk{"(x`_5\/8&xE '`0<5N=< ?OбR~B>q9mV۲Dim:bZHjn^V]CYAA"Զ=6%mώlUTS+MzoE]~'JN\mܣ-tgj'99M4"˰MٽQOoEtDk~A@r<|Wupemܞ ?>7ZQIG6)P) o#^nPM;~quCZq*mFny&y17/)kv:NZoٻS[sC+ϕ%^QE=U9j:֞$l7Z\m Ewqq*看@ItlVLqwqv067j`TB|2>{x+]E ;0>{p@) +40+7i9j RnoF&6KZX"+.ihY\]5m }ք yB$DfejAc2(J h9&o>󷜬7ھ[=dڝ BhܡBBBC???9"i Bȳ?sNi Mה{&J$͐, _M߈elgs3s 9؍Li-?<4-)i3t!O.7")^ UL6ZBkž1i"QA۳;.$*`<`)q\,ȉ{qDзaJWMe9lð/| 2F#0d鷷>MB(N~7fFX`8K$4`mϪ $v,wl(t<F/Ҍ͂ 3k}Yuh1~:d8]ٰӗ:9Lᨘwsd?o J2Th1uܑ"@Ťבk: B {l㨿҅8FwO.i ;'DŸCX]{H⬧Y,s7wχ>;=;іӦW# Bm=ic[]*,yC(zEsV_Yߋ&LCMW7l>մlU-#@f/oqq͉Etϓ5Z)I|Su޹ i }-;R_Ԭpeވ9\[7 y&˥pSNvmwo:"?/$ o+ z|"ﹳSgbd&Fhgsrr<O4x<#??'}mIپ o8B/H,pd76dJzZ"T?AfULZRe>G]~dڡaX J)˥cR-[.u*}+8V}I b)E\hhoaVX;J', +-aIK$J2@PXHQDL`4Cʊ$0 +>T H$D^C&2epI#^ $K2 saI8UB*b/$z)PiAH DƋ٦lſA?$ R6 (A:F|$ΪGFƖc|wmʌ0LEE%-5EGGYwAFz:ZQS|wi?p cK9|FwCNZZ4 ŵ5(33nԪoކ8me~/ۈBF[v V.,aR MyaݰEK>Ai׋Nrm:kkk+(4)ddwvh^Uaj+U;tM?De461#ŀ?hd7.#0Z o]顪"Փ pڶFQ@$(1[f $+u0&eQ _uFzI"::5ᩪ::8[Z =)fXs(d )S!tqۧ4ofQX~"(.6^ 1{vedq<.&*}AElkxDSSa*) +ͤ~ !eS~N@]YWϢ_% /mx"~_7C7T v}UZjNRc}:kM OyW[+U=#q@6#PTٖ^Nvt"hk >nŤF=ht"X˩#80f_3C>#*S0Q1|v}qGb ч2-';>n+r6v/h3ՄǢє̛eCY(8y+c V b(hyY)DZf腜 jhDh,v׳i?uaEݯe55%6Hڙ99o_4dssrKyװL2k+ǻYx   A>@ȈC$4oyL}cCԴҤ~&~_h\gյ<ۘt#rл%#‚MH2lidck"i4 g̹޻IQ1ٱM'8U,ZUD g"J,*NsH "tO%y׀Go67rЂ0l d'vw\}psy:w4+S~qnA'pɟ;R)hA s@BWlGCmͩ/wrI)OJdD&Ç'?>x%m:tqԾ Pd^C6z`5 تj-?-[k@x{*5U[ ܪu܀CӻkqU8Z .%[ҷo\8E3mE_^G+7)˔*ǥQHHꗎhcM8s}n&wd jjܼi]۹o-X63Ojb[G׾f<7_e cY5͈$SVI-Dik#+S>OM6JpRk7RrnUx  r^Qd IDATCklIj@eyeMwo/UGnt W^T2WٜsFC7tNrkSKa^z2Ys RZ2P*pdRe ׊ k'`f$]pWj)C9U_vz;}@'f$eYU3uX7@nAׯ\>O~@YǕ_A*B4rpC81@:\O)kW>!AQT+T 2-\ ORRd\j)C9t<3:nGB/,ɶ{o)IJ9nٖUM0]A#_=1y2M >,Ba,;t#qǬR+VXmmDcYµ΍SHHz㋰ȨȨ褴ȓnJ;J9o#Ʃih^S(??6 շ8?BLYF:Bޗ 9ɤѩuћKV٧NȰE! @U˭uljײrpuv~(Z ldws S_g o%cy=}]7ΡuEQYVsuuh?`ŭo#c wrtle߮qt~_S{YTq_3Wvڶw?'\ B/ԫKΞSKzCj @H>}Z2;+kʕ} Ūo]>v֐C7?&[SGoѯv|^5~[PG>?1HЫ.{ч̺|)0<ɑS%{r#7Da?۬A&N+ÖBVG}<#M NʼnKa綳7n])w}"Kw(7_}=SUHhܞ[ xs}]-|BP'FŌ_LX} ڬ V.ޣ'_kH[#===)*AB2%oW޸aÌ3g̘qÆիW7Zyubt&rq OZ15;XҵHI7?XWbL|αbn%?n:vfi) 0:S.RaĐoc#0E~]ZpX4b˞ )^^mytz |tVa,QLs!zS11<ǜ\tj^tM[lpa{ . 5f-#îM4d<^M:B+S~vqcK1cǍvj響e\=.dWrADܱKv.m-x%E28X^f ïe<@&W&N8PY\(rʐӯ"®jR}Wɵ.&&:xCX[#p1 iJ|QsUPS|ʇآշ: L:lH>I_|<Ϋ)1[WHA@rWS8mqnF)2??{s%/\#-}/DUc3:fObypQ_/\)%>MրL,`(:9TLU4s~Q̢ +x,9rˆX0LiE^BFt)jΜfx/(w3^hi,uZš#9=tTߒZXsDqZWq Ǒ/4y *QԼaLׯ\~ӷ,—vAjL94㏟6luCr`q 캌йƚg'Xe"Lɸ˸C3xq_֍{Q[CYeNƬw՟]m۟EuZڲi{'MX*,uEDSYci4d JgcrAηlp\\Wvtsk@౧bϻ5TZWTa{P,)"ic]v|QTЃ̒n}߻ ש$qm<3nch6W T\Ū-??|=e߀i3-]F ONy{'[(҉GZW&rQZDcJ*jnţrLޛ̖`XU8 SFgWU (ke_ANX[ڞC:S#}LJGRB(A0n)pĄ@"g O;% BάIq[_F TPDA]jk `\޽}W`N?4FSv5@"HSPb@vW[}6n7i t\Ud\,Y"gl͟WYc;2 R3@:[ 6P(]SOOُ˷wmjkn铓â14tTTN_jgOSosv1vr#&tRio#rѺIQ(rKQ3H@o V qPZֲeˋ|%o1! {Td !&ryP?뜐[#r yвGLJ*i Կc!S4ʭ0#cl 7,cniL$ePOHT?zo,S2'[&(k&R}P$k ty3Do Q-*"KG`lT~+4REhAo~Z')5Syo֬T@ շ^o) շfH1(׬XV}C@@hNLsU}C((rMf>Yniv.y&OE "C3mǝ]yT #'+Oy\h\g"O~it' ===}|rSbe58ְwo s̶]QH@}>xh; Ss#ސHϊcn3hϒ1<{z ۩WxMT~cke};>sd{XW__"3&[Z8& Ph,#3zY+ 3fTRc*!we~շdD[z(k蘯3TH0cޜ^F=ה'j{rӛۥߺ],{zL@$]7`n] mYK{4%DjjX(Vhcn4erdxܾvZnS2sz>3纗u#,EPK!7ejIo8jp%Mjzr̷cuF/1',N"^1Uߐ[óV` 6ϊH'JzvN o2_cԘSô] ^8t%:tΣܻZD^8|*c8#uhD_' %;qʠ̻+yC.DDߚ~KtԳ =ejIAωI)I)?a o9q|qMҟa *ᘊoHŭQ./R}kXfSo8sY Ӥ9+iI"zT ): xGwė] \v鑠ZW5xVB6}p)L2Ւis*:ʍBk1e::z/yĺ#$k9k0:9;rBn|]9gЦ%ɹ.Uk=/tUYi:Ӱ{/m_g9vv 瓥oSTwKRE$qʥ07f) XzhJ#q 9?gcϸ~qܜlq㮤J=ϿM{ h e;Mܜ6,4e8XXηz j+&ٚszTC!M&rv /g i^6o.jpUѐ[#2O?K0tu6Qehhp:LO?sGdsSը`;ےRݏ+Incm|l`jCѵESDqzTh⌯gc6,$Y5ŵr+24jM6gԄ3up\mo[W}Eq~[w06sߒ{>4h1Щ9t03q9u*m6hvZV%OnȽf,mBԷOPTaڃɎz3-[9xCzM\9K87y_vѢāa z#_9kM]KέJ 5M-Vq*h1/ʯbe:/`V! ` 6؍Zwr X̸vFժ;~ZGv$#&}vl{F/5+*&SsNJO{aN&$*bܔo2y9IBt7 U1[C R}q@o H ICf@o͏dv,Xy![R}kv,T$ HY9[Z~FM]->Pχ'R}ԪoZNQHg "o5mB7MM-MM-dRܿ{@,b2e A@@@@,X b2e A@@@@,X BX|L EՀ$ ZJ*q1B" Y^ A @E#Җ-,>~vvՓ8Sna^^ 6ML>z@8252%r)Is#S#SyM6BcV~ҷ Mzhe9\L !i2ұ*аpI =[,3MtHdU+-ԬQ/d2{$Ȱ`+{D4Ii$ POXGL7Z9rYS=WY^ uieaTB+ :IYK)ܛė?'> LRcaQ {9.//GXCffQ/nB`0${H%Ta?[Lm"B"mЩzO٧5Ǟ R'Na؟tv=uT.'*/ &Jm| [mMMAF%wX]MMlU_U[ۉˍY>LJ/a%nuJ~PL1lS7FApݗ"BaIH fԍ;bzuUs[tǡH{* [g`N%a[Qat:†/?v<毵mTUYF$(!M[1,,̷ P$k1R1 `$$( N ik< Tli|_vxh(̼Vq{YHA]&'gc[szm^vU*s o\]FSf;'=:>όk?WvSVaʜ . W:暻X|2gWǦwޡV"*D7oSN_ _y}ׄOO]bi"gOrJ#8>+Qضno +x^OPz3^)3!$K$$! Ip>s f]>2bԱx.~+VxϠ^()"րܢ&|]، 8˚cχyvRI)(=/*)kR^trnLJפY iiY9Q! ;SMlRLv&ze: ~.3C_~wnB ~DyˮwvX9e{f@H|4e`qD|0FWd@0,GTSlON,d_,,ȴ3^!t ~JԗwWAq]WXoUpL QbV=TcjvZy*s=BO$%CH3\#Q"I"I\,i-7MqRӔ&mpN"Q]:jB]F5Er塅]Rtls6Nif9Of[1Mp̊Ïoٯ  Fa4IIB! :MlF땛x-T%!$@ |؍Y5ɖc?m?ѪEK4Q$o8xFs ېv9'>( nMmp1sr̝78 \)S@qaH :Prmʵhn s% Q #2u&%D +WQaQzl|˖JXL0 K-V0׹/ 1'I u`1(*vgH(AIq嫷6KˌL44XtWGTe+~,k'$) ir, .,77uCA(&8 $ iPL @ 319&&ǤIv  ȱiY-ҶU"T<9[.h+Pbt5Mq-{}I;N:Ĩ+#B⸀. C@F9i;XF} _\WLU#uvE/N+?/N$Bא+~" s Pz~3MMEQ$AJ1)e`ɈI.O8^-NLC 6@5 yL(:l8WDa;bw%f 66ub4S/_wC5 >_@11 hHR`09>?toc$<֎kV9(_x*ɱE֋;a60uxrKߠ^7n|{Xfva|7j5:,%AAWN(#G^j % :F#P$#Y= P;4z Gѥ-mZ)@!|V;" )Ȋy}+VU!lب_v , 'u1TzZ,)"H0KMaI8Ab֦=OaOv[^]zYlt-sJP0+ի P{-r,K}e: NV;Kf&-5L ԋDpl?g_*3ZECGm ,S>]Z6dΜ]SLŧ !u]w!gix"l_[%n.kv$I,AikgvâU*ہzZ6.Kv.P:MJIl^le?gSw:(K21^\9qyb`Z:*d,'cKm.m1;Z2JQ8a&7$` 2et-htXx:k6ѻcL'/nLjɀ"XuYWe++ӕ ;R9;Ya!D/]6c&^]H9zn-ǶQ"'׿?˫$h*7?/  HB1kKEE _y셈z[/M /S¥e_c5-GG h?=EIU~V{sJ)".@ͮEk3 ↓we)?V~xBH&y{$sz`}4:8 0 !2J)k-3?sN'QM7_*SAZ߷m$qIyZfkA_dUWH vkk{UU TkfٜRU=e۩&P?TCzQj ?Z^u8:5.k~5DQ' aynDܗpݛ;QԙP]? j["rtd4ֹZRLjq94Mq&-R̍ R[B5TL瘌ac0u@5THR2 )2_էbIENDB`gsequencer-0.6.37/doc/images/ags_machine_properties-link_input.png0000644000175000017500000006613412626272145022316 00000000000000PNG  IHDR* pHYs+tIMECtEXtCommentCreated with GIMPW IDATxw\gK2žE@UVD n{:Z[Zޫiŭ DL@6TYG']s"PXBȇ~N111,!R60 Eu6yuA0`  &߿O5e10ۨǶo߾h>A̼z*!D,;99eeeqVE"ZFA=BVXhmmxg|uÆ }a& W^'O<~VvQ ѣwVVV)))ɓ' N?a=z珣}^FQnnncǎmԨ˲w9rHHH2@6nXdȄ *2vϋ.nnn'O_~Ǐ744|Qrr :uDqqqHbW|}}̙C)OOhWNN8ѣw1bĉ)ǎ+^zM6ܹs3f0`ɓ5ͩSJˉ'!%~(/Zxqhhoܸ _Upr.>ɫpVVR$dddT*FC)mРArr6mzm۪Ga1@vx퓭[j濺aÆT={Bŋ]v/޽{BnݚgϞ!C}碥RFQzzz=<''ƍ` >|x]v׮]%NOۡe !QQQ鄐R)?~vPBѣG;t`hh~z[[ۤ$` ~`^xAzY-,,!&))bnn^pҊ&l߾=L[[UՂC(j3g\nw]|+W|UV&/->R!uf``wEss{jlmm!666O6fbbbFLMMMMM !ϟ?HQIII 6ܹsbbֶwaWW׎;~'˖-ԩ/+.\(2K.U= .6QA<8p <<ѣGiiiSRSSٓ:2ꕙ3g͜9un7n !Θ1HOOSN6m*m.Wvvv%ZFQWvssw^pp0!DP`T0VU|.]񌕕S Eܽ{2{ѣG'&&n۶m߾}_uww_,O0_~ϟ?߷oߎ;f]!$ `۷_xĹ 2?666^dҊԩӸq5kqݻw-[ P#J%1 P~ Pԙ!j b`4@ nf !"G>Tk?arct90B+Pcr7JGF-z7 Pa1 yPNoݣ 0b1 qݷMn,E:r g Ik]ͷ+2 ѺE3S35_ޗiN\ᤤĘ{Qa-FLoCӗ ;}irZSh5|F,,,-ojJ$]Go pAڴm_S5%ըw^<g_#"óY=YiI bޝ;4h2ֵA15[ZR׬,@opHt]0ᬬ&&YSS[a5^ZR^WDj3vo1LQJZPZR *RZW1b?#hTx>Q#EۮaPDroE[U.VL PZ۰ݖg|= ;K"T׻Z a-ԒJmUEo%PBDffب!~% %^"W{K[srVaz~n(k>STI{Tm o.ț0>ЭS|"2G`9QbC*Mխ5wW׋7޾ݦHf*N3>ĭQ **pjLΊBKHW¸öxPӨkӼi#+wgJJsOxP>3䗾Z~-/TfEQY)o9s|۶rw{:#\fąڢԱ+Zw~nJo>򱷷w`ELe.X'n]u6JoؼkE_a ?)C3_RI5V'g%H_d@焨nLBz3tVGIMaAj˿ j,+\lEQGHZr弟9IG4rjisӞB;vf䚢)=HP*Wv i݌}wط瓹U\ܽR@ec۷[h&_k?otIRs"QgSP֦ח7o>%/o:wrxXZ^#vqW31bNMjxs(nUEU ֱs-_putl;xRAziw[;x5 umNW/o/o/&>ږ/./putv<[9Ն?xsySvغi;4wqvul;9P'ղXK|˴?Lʘ ?+FdCT[&L@6AQA%;Ț/:q 2.xJ_= O^-g'Rz:tLw߬giWg5*X%B={cv>a|3=6XTυSJfz" %TGn\~Z)m*_ΈqmlgD_zNP WLVgb_sN{Y|xt?؟B2jӬ )u7th@n v=he]˨qΉ 7SP%÷#/>YkmsF7SQ4忣r 1q"b't]}5:rٜ4ycj4P^q'PB8 ocsrPA裤Jr<%͎u>qIwsmJw]g{Ln|V7}ӫ$oNex5|J/G<2^ 72f啜G"^1Z*PӰQS)nxR qǬ#35enG+fV=Az3ywښSK{2i]§Nٶ}<;rBsOck3["9g։=p ZpdIwW[bFR {ZZL^)UD?a\'-M .fuka~9]W[\Έ;w?cժ=>ż?cG"ٞa/w+axӼ(0n ow76]x!; k֪#8{;KwgB(%"=3,1w2>ޡ;l%<{R,jFŪ X}KQߟOgEMO%iy.sxv6٠MV=a2K+B$fd{bq/Jqد?sVVQ6bJĦݖpnrcIуX){iJxr$*э TT%ϰffrX$*ܹ'Gf|Gy]LEVpƽyFD{A;ӫpy*oc5Xaaj[M]ۅ، 5 U, r˭+\ѷÕ%7:D@݋aä#'UjѯSR-F5w͊J=T0Uǫou7sbj>ߎc`]|k-XP1|'2WTh/R)o :~ Pܼ>z,Z 23N/P El[233/5,@=yW註fe0!Ch/øW&'%6Yv7vd&&B VdP0..(l^NN"X{7JPJ)^>t{=z4n@) ߧ7ExMgNnѢ[Hk48ZT*EN!ӧJ,1 8 ׶}Z 54+k:2ZޱcGݟt萯˞J}kOlc.eV]>[ B!)S;6] Il谮&2Xߵ̏]"<+Q xEM3M楌ٿ3cN"y7f@mVpO8 .Lywczxzg+eksUg=XX)8Jo^y ^,&9 e5nܧLڣT˝|d{\Ԧ4Kަ9r$!dڵ#=qm`*kŅm TJ2fwңX-7V'KV !DD%D(w^p{jr6%z !D4]o[oXijf"L0"\Mks]a[k*5fp{=]J.(ӳ֯WIhm~ߔڽ`ݳsz5d2hh+7jyvb=:T:b8?

߳2y⨖F]9B@R;SJSBxJ)/P*PPA+W.~ geekϯK/_,cBQkNO\Sdp١ `%"b߼ogBf}P;}z5rEtkЊcR*TR.P{~2FeʉaܨO}ʻVeEaJi޳~a6,D^MQo1ŬH,fpr@ W'5?}r+,,55Qof5Jh @ W_?ٓ'{Q,Mjbc əeIpx!,4=??G'gBvzI,f]^zֶ!6C5vpDSSffFrb;C]w\ Gטe%icX&\؄ee]>_73o>1˲ƣˇ}D3QxZϷc隻\ysu7hȲ믊;yW=en9TNMMKOOOOOuZvǰH=hl+n页{__q᳞O;Q"31/c[En5/2?fNQ(rz/;{XSf69:ڭ¥?skI}6d'Xv@15{;w{{; 5 nVE}ca|[{ڻ9Xk( [gLmZAS]7u_uS2%E잩le#ǮW4h1O\W" m|&H:cuzvPW&n][&U^Q՝M[~\ ~u2AC^=)`qTo[[[ޛj%D]H$R._LB EGsE!X1JLM^sx/gJvu $D߾ӴrrtۓR::t᎒d]_:UccD70iJ 9'Y;:fm7=髆-unԤ?of=-aTQdJeaÆ߰A̲b]aðaä2Yh hNjA/\u7z[-*S3nO[GbBZy\m_n[svrf IDATҾO5]u73'wnRB2 ˒&T^8ֽC%6=ug?9{=&Q)h 7ioaلPBr7Xm(ޟ4dߕ踛6M:8Kۆ\uY6b)!θ,abq_gQB4i׶o|)'#o3e3qJ=c[:_0jIaGG|p(ك 3eT^RA#U%O_ I1oLL(!T ^z. ~'"S$b> t˜ŰkԎf,!M~/CC{ۿ :-sv5< >1W\ok@ƵL=2蹚Ss/#v|b 5h9i@39NC%.)Zdձi֢8Io/]E:7mh`ls 7>Oy`Rzy-ySk":rjjѩks8iºO[8XD>#ydiGc ˎ^L~; %THlHEm+8^>!f?]#֐ NixJt~0S#CFq3c'.>WpZ#P*hK([)^!P^r?蜢X^EL]X7QMVi_6l&V& }v%~HW ߮إӣLe =[>9q, L(ՎSu}~ئwA_8/J 9z#r#"!$2"rǾ8vPET*;&LVoӽX{gO>W-[rK\Ek۾cV"!eLmꕂO'{e(Լ@jU5*5ї^ry˿wB5K SJ+zkpBFhc/><0-=-9ڑM0]Vzc"ɪ?^ ~;:mlB.eΈ[|o|zN5zvBĦnتAJ|`3^lIk-!0b&nhcV>mޤ2)S;.\_ IQ]sa֍mYB|橻#iSM7c #"ҕ'J 2?+{}c1ldgR>}ſ磧RFZ:w&XLOd$2p r1\w=<ц峕Y.Qf*XP2:Ur=RZ PcwXd]QURȶNڤɑfaczYSSY/.m#4mf7= pjP%=oJ !RaD]wr_w#[Z1JN"(޸~2aZD-ϕ؋N(t=Gk}nx5vJEsOX  MNL?C)ӈ۷ Ks~&F֭)6جے%%ŪӧW>-\VXlPP_ F&9=qM5Eg$H:::[ܽ!H;uNqWJS8!iּAW/Co9t-[y ǩ6B, B ^N Fb-"[= qGRriJpH:=|u:K%!))`ߎJ@Ed2f OزicںىbS 1\QApqudDkk J23#1\U*JU;~0@}a0T.UTj5W0e%`1bfpvvN\\쥋IIv강u4nĝSHR=䉀}ٽ㋯f1q1075,,p]q\pkߡz_2eY&.36;%h%BRbbC;`Vǩ qtrJKKu]j"(-t7C<<0`ٟ_KNO4sًƸ*V:VV&b_~I<*T?s~`k[[[8XU(p޼y.Y2e]])S|dɼyx(Hi.9&E׹BXKY'{]ɿ+*Leӎz|&Eܮǎ59dC\>u?_908pO1wysVEл;O>LKOK9vd~g^yC+zr*_~ΥoN[p)@; ?V?2.eΈ[|o|zNwnx !HlZz_ͩQ섥Xk׻|dZK!XGIخUcO7kԎf,!ĦK?חkB !B߆Xe޻ìۘXulASwGoF"]AtysuLPGkx=N63N)s{]_ǿS{f-;I5+#3v:%nUGn9x*L.9&/(]ɸ"]#]T dt uL/J){R0!$,FE/m8Iۓ#RiYzd1{K%wgSSY/.mS~Qb͌SB#bB!w6N ba* BÈ t!P7*&+F*23b!&DJ9s>:T8N{tq-rS-Piv xs#kU#<ơjnKIAXN.n1Qϟk4b{bh1!$2"rǾ8vPE233V/f6lX]T(BCjD"Ե;ٹs3f P FG?헡PW? D_z5_dff\/}!^הU$N- :u.J Pg~õ 9t-[y ǩ6B, B ^N Fb-"[= qGRriJpH:=|pJ$BRRҥ;+ ,):d^͚O7[;!`;]DeE˧mj?L"O.L4FyӶ.jyI2-isMc'!Kx Tkyx27:RWq5 XkA s6SB2#bUԊA#L?$%5XC6/N?^ ~;:ml.ri1F%m??-DS@/{'ywIrn7dJ|`3J=DKg3}FB1qK2bߎ{3v43iuG܄eB5ejG3bӥ5! \GCo 8VBcƌ賜B :?]5W8Z PcX UbԢPO}.s1͝Jfn%J{!eŰXLOL!X)r"bts9p>gwpK z :ĔR(Jk-@QFiє{|7+Fܳ=ꄻq#L+N.a!-:f^xE sSVpTQԢIGód&9999999l1,s2O?WRJw1Zupe[[{55B^OϬ+nh% OoI3 ?uoLhftrˉ{|4Ϯݻ 'ZD4i3̏x $Ț~q`ۈ˻ٚ7xҞ]~͉>^mڽ;gk 6FV[IRgWv|n߰נ VnR8 9_^xƍ^o/lPu-i7]xSRE=;Wdvha٠Afݖ,yKZIh0l>cN7ўwCΝ{<=ör< T6Jl ]=h l(%JZ$DbIƪ|k;0aJ_~B7N1v62C #UVtԩ;kbRY~o$W'G4pЊI)Y0bޢ.6[NFpR?JD,":u3bLG`W,nst>ML\Ƭ}/&,VrSmg̜`W^@ rOTvu.;xRfn?pk,ns =y|w9+JLP%.2RB)(R PJBf)ԿZv Bu{W7'Ovk>aNM6wՉٷa)"qc]wO6-[x,wR/3 `˭mYB*|Eol՝EsJ(,nc铗0>. ap0(՚n0 B! $bN)0&JbKgz~ =5ڜ"i']ńn+n$;):fNJ+s#` շ==|I[J> ?6o o.c*,ar} ^@W0 %! !2Pmk2^#bZ.hP|m[ؔW9Z-B +&ZPS"BQs @ C5p R0r#'HOC !?X$D2PvoX$,[rBJ9DK$I$:qV9 bid0b*7 aF  R[PD"QvvHJ4 1 chhomm(MRRqX@ CEbfޗ/^lIS4)1mHR4 Rc7j,BXXhzlU}b##֭XYY6h0T2Tdkk[-HR]]4 j?˲hŏ&@  1 0ba@  1 0ba0 @ b1 a0 @ b1 a0ba@  1 0ba@  1 @ b1 a0 @ b1 a0 @  1 0b}7Y?JҴ{QFPhK.phE@p\"zPş2^*(dRv)ZZJig#t%ONoNO0ba@  1 0b1 a0\i0J5G paYQrg9RPPJ5[vt:Têfge޵+>11(8DQTUزy3ZHh( 44F><,!14ԔʊRN጑{ۈ.. 44cEEA o 7CphMTUE)zVJc.cbMRp GkFwh^_KףF%O#PVa=֒_poȟ:_ڔû QϤ4kE(Ǒ'/e5V\եW9Zf{y4HsG^ue%n/k;qhb 74E-)j مcܢ>lZ" {}˱n-w2f̗//0jR'DU;o¢ފ13ր뛔ZJIfQMk@v:]1~d1¹Ō{:t*12@bCT9G_B! ! CWFõgY?h){=1adQJ̥&٨>GG>(E[LJk9!zlFK>xjpȎm|㦮U )9^<Vʓ&{d[9cnW%/<.y+Gݲ5F9)=$yDZ ?ٷ$J.>d90) -4eɯ#t2BcLX2Uuۘܲ){㴦pW>$b&NABKo'w3yXoO/˅RTOXw--O3f K!(Jxyƚo{oăL2/VpihcDȪEV7&gRFcQJ q&6@g-<N pp5c2FAce2JBpSJ)+c>QI^/1Jf-yEy팆߁-ɪXHBa 6m|0bƿN5`} nȗV|zq?}fȤ':L8+pӦy==bN;cC u4l SJeY6ͪRJ5J)DI2$NO)(,xyQt:8GT '1m[Đs+_?z^7_M!.YiT{K$I ({{qߠb2kޛ4{;v4qRnQspbN?(nH@@`Rk×/PMkDž54OJcì/ ׵-xvASqc~iFE -QVc4|!'ܨ5q|-ÌҪcsXjҒ=F  _qu^ >O/3Oߪ`? VfpZʑ‚! ZjʿWGUO^}q4-KdԵKb1lVͳϟNX,VZk0nU4%Z-/hA|6^>dazu?,|V@qx݅|WaVg3uI'mMSfsYIiVnvcSG$QQ RqJKJRֽ%Q5|Vn1{xU_Us z3J@ b'͡>L}(5J}1 ,dg=ZXPj4G+7ȶmI:JR!F 4ws>{ޤaÂC;nhԫ۲Q>8X%Khv S-55eh||XNFsH) cܾ{Z֑ (5J}ە1 l-uUUPj(X) ,kуF?JR~F HhfN={G] OzyJRoId2cFIq֤awTcG]ʭ~]£Z_ aZ_ȨO l%^y{uAenZF.C zq*%r/N1ܐ N?*IиQ;v"=xjDHb0) p#}rl؝#5kۑM;;jIc,x(J;u1ʊ k\LΝ"QL?^ \iQ&6nu!.]ʋ N$8lt鷃ge§ c!1ʈB2E#J,s9,5cɣ(28cҧR5k9ɓ;w8qhNc4 pW͸<Ѭb|;cy%% O5{.J'1.=l׮MPF{Vն8eDDDFIQq)韵)5etAl|/2f;(88>,lHP]m ~fƻ Le"y^HM?b[.Ћ،p+.noZR#n'3M blj3EQu]=p*dž\҈(5Rj04"ȻԋCEQ)!zzl*98'1,&ɉwa2e~q4F)c1pA83݌ JG:1 p-gs)|:gN$gpU'xGٽUKtvM2k䥩xmR7r>wV][/S #/[nGʎ}>FӃݝj=<5w^CϊbS__o)W~Yc ;l#^gp1sHɔ嗧ޚ"*4jTPBNFEt=w.cP٪FR#nW10^Im_fۿ +%閪i="; .W%zM=h!X&J]f!0BOm*K,=YN6H!̕hc !q/>\NsۜmOo.w<}k-~%o東+g=mɝ '2U(s)?0o~>"רsmk3(/dO/}+:|~Z?&&oqDU$qVcM2JuioZfƘ(؄0̧Nm몓CX8n=6#ܥ>>0:<ӘuEuwKB=?ٯ$Jlw'gb\{$UW[o#n羋+װd^NufU|%Z^w1?b9F}+ {Ĩ4ʜ^ʼq+N;vq=G_ڸ5K!Jo[ sݙƭQ#"D|T»ǭ0ɦ_ =ӒM$Ě[QZqyw_xBi|;eSmQʎY||ŧ:_x*+عKe'nڌyGɃqQ#Vvd}SXwS[fӕ<ӮiWbFd1jF(؇?£Wi˳,?p<ËJ‘3x,e_۩->_鳧*~}1 pV0 d}ڏ rs7Mx lKZk≜}D:hJ㇏Oz J=@8dTreX'O{žӧu;Ž_CHz IDAT37ɔX_:+t4-'Lԛ 3r_^`'Git;7"7o^;c}"dfp<nЫ !QMU+8 ҊQJ !*+JNc:xxr&hLeY&^4׵=Yшb- :"[.^h`??E1 gY+:aܻG t֜1yuh)2IAA?_yv?;V*K~lew=JT߻gķi:˜ ~k <%!D-*RIi'k헺~:+~ߐv^sy&U qSyD'FQrsvZ!=><}x9~3:֥bmb[yV@!R=s|ĻM? /ժRJ5U]W02)mnVftl≋2B䋧.2v~u^xk.RIuۘh3eЧxNgeI0r\9ֆ(Y9t|1GhOWuxeӱԔԔ9fUv?c1ikE]HB?v62Ƙt??1SZkPaS~~2&g2oƷXKݲHzUv^U!wۣoto 55#ov8I֊ǫshzu.[M9W6jºM*~]u׻ֿ[xr+6ԲPJUM8ά(UgK2X&8MSUUd❯SK44}Oc;Ppꃶ-u-ssw)عOR}auϵQ;?կ>8iKir_ޙ2:onAlb@ʗq/<^w!TV=BdK 3F/]v$O\6m|YD3tܡ1Z;ocV{t{ DNF}.ziKm),F:plƻ]Dm߈,>Ag-tDwWRYFc[Vor7!2&Պ"+q\3͘jW _%$`hTUQjm߱1/%Okt|Ȭ*^C&Qo)kSc^Bҏp (պr>Eq.!$e]у o{oח䌞]P~iZZ*v? =Zwڶmиa5tP[6bǫ͔zۼ!O|w]ob;۴ȣ**,0{EPJE} gܠwi  ($I5;OM^ǥ3y=I{hjgg!gKb罞Qz~\]&R&0@XR]9ic"엷ڻG גR`1v]E|McK݂TUU]PJye$I$(Ii:N;Խ{ٝ{}zz~uĽѪA%ݶm9;&& Ӓ1 pX^WfJn2ioye<VJ݂ZxwTMJ`mWjEQ"Dݷ R(1jEغeAoH$IzZW|E篼X9$at:$I'eT1&\WN_m9.uysc}-ejJ0QQߵGtQQ,Fh4#Aqo%*RʈtwֳNNN$t:^קW"˲hj{q :$tIEm05:^!;Q;Ԃ 4>M*#b޽nݺ øp,Mzzz,ˢǏڵkjkkvȑsΕ>e˖C0=z&33N]K]b8v߿ĵ*yݺu#FLLLܴiSsAi4{={(cҤI 6H$G –ϲu~qM蒕ޮ&.q)Q t ccXR!bhKKKC[ڷoh"BٳgΜKL>]R@>}f̘q2dڴi<ϟ>}{I݆.ckUMΙ3Eϟ5kִitZ6mڴӧ,;f][?/ vss6lݻw i԰SZgyh4j<B 222JeJJWttJ `Yɓ'x199YcʗݲeKVVn_~cǎ̽{5G)]j$qJ޲e˳g.\0|  6$%%jKS(ǥ޽{% aر%{)iEU߳gOKй#LF0LBBǍ7رcڵ366޼y]zz:qxaꊠ x<}hhhhɶ-ڵd]Pĵ*%4MYZZ{Zm:TQڪU,XqFA"""VZuMl8^OR~!DOOÇ tHP\vr߾}!Eᅩ+A *$==޾cǎiii[KHIIai?r䈻{``ٳ:`C.]TfON,.],t] (g$vV]嶟z1v$lFR:&&~]ը̣?@AҲOǑퟫLqaǯ,_O?ƍk}B(?''ѣÇj B— IgT}2wm;8QVn/*C򱝇)$$$;666ݽ̅J4`Y.RlᴂD.i[mid=th ;ش N"d^vT G kۙgbΝtqVX{hc5m ?vVMӾe3wƽMj[HJVvjj^P+~rr?/qgs+*hv&Jc+ϮvGvk#Wt\]LM~zsZm){b>cѐV<ŶݽI@̽m]|ڎ\r$VMGk7/7_]g'tLM[uqlۼp~t)b1G3tO~>GoVN1-2c ,Э!]bڹ gN$yU6nz-݌ ;4Q\;|vg3N8bԖrkkXl쌨?i@pq gwXtU,~"`#Oegu {;N-B?>kgOohX*FoMi>v=SK_ڵkbb"\zСC۷9sf HG_TG~YGQ>r8o#F{ Ǖѓry_+' }n;/\5tG *pz@Ҡ TԤښW`V7[)@U LN3rO<{ $-c*s>t¡R[Sn$7󦫌6&stԣ>gFpqG;\2\JI-N۱HMQ?!`z8f\>\4LJI-&Ty.=2zB{˲ Ɲng[Z(JfܼM}= tRB7|SIvoy3 La\*EI'9Rb4dqz(M&w& 380ɭ-Z _t8F eDepa{x{xzzxzzpQ*Br pjԾ+Wvy+ O,zn/yB ݾ8q3|vbռc|'mڴ &899U0x8Ȋz"965rF(nނ*Υ1uTrcF`S#D.fR6glψeDN 85\bsh~RJ*YRI߳x%Ir%Ub7g;OnP ?un3HvFyE쳸L@bh&kɑ_zڕׯ\rL2Ÿ/yśwίj(d1Rb`{oŊ)S$R}etyg޿BkuGm<ŠcwE.= Ƅ>L빏# D!6&L,+2ŝ:p>"C-R2kS=b(J>fFȥt#EC@d\LTa.I UI{ 7b?Qˀ֝K!U3E됉MW-nyr[рޱ[P.}W̹(s/%͍ b΅fʕէm8w?M1]jg|ڲܛӪM/8u.eO48Dius5qؙ6}ݿ0A޶fJۖm8Ėi)-8~s[sÖ ר8i#Jr)kkK]AO95 {)?]f+M쑥s>':ں/e͈w\Ӊd5L;Y3z}_{GO붱HżV|Ad&^F|xq蘛3i ';GdA+|D^.,V%yr7neEQt++/߮;E^^ {֯ʔ>^xg~wmK'CΕWZeݽ{*ݾ} k|T x_ު~sˊ|fĔ&& VA]~pWc1h#A^eEDh|[\'QdDiJ*[ ? TZV4))6:4.nnvo=!?g$0߉:8lڦG=&\Zb#U|,S-[WΆLWZ̏|9õ[ Jk6YePT}g7dYs1m~fZZ__Fl= EB/UTV*(APehDmN.g`RΪ 9VXKBË}U1.?u +wancY^J \vBXhLJV`Lܛ53dtT[W5_4!),VL (c3UO\yLr3zTZTp"rƧkB˕}8<2idÄl3kdZgW 2zwn˝,M sSF'E#C)[ 槐fݺ[Hvjc'-L{=jӧOxcN^KдKO+(QS Ģi[ϼtq¦'8a@ȋB)b.^˝"WǀPtϏj߭ ɈB`Ӟ+,Uy;<1lۂM}|VMy|J0phĸlC>Z8xXrIZ Ce֐ TŚD$ yBejY; +SB~Z䣬 O$1w47`5852*LɣJz2sW5ga/UW*I/6?~i˰a&{u)7I).ɽo52B'L. U‘h(e#0RZ^Vں(ph%:z^a *96/1"2:9#'jDB14N$@ et#*Ni)< ?w4< 5wj`GdV M|"h線)m$@C2BJ{H$E֭Q..*U|".=d]r>MEQR}DW!'D[æT?Xk}hoMA4#br (O %J CTaj X j2b󯨎 5Jg{ptV>SbJ*&[% Or<2[$"0 {;G"D 6V2/Aayv_L+dV~!.u`_ZO?g&f7dm|)}=&./컞P@9Ym̙7LG߉ ov2Q- vO\*WZ*⻍Q=sV܌ Wز$*"bP!Tabc+JncDFݾe eI]֓I$FVFt 7B'I$v :*IGHl.uˆlO`ǗǷ+ c"ac~9wOv\"Dk(}_H/h*'̜sӓJ$q(DyJZ__OBBDGd\|%r)CȳĮI;2 CSDxV1r<@n( fd^ 62@(N)l`DeKDrs6]e4[dd4` <6דPD$Dl&2r-ӫp9L^X9yKcY3l*Ny^ hk1qN=GOs8yځ kc8|6iTzj.nϞ"{+j[!Ք>-EYJ)W.(ܔ-ȭ<")^ ) WU\B'"Vk_oqm9@TA/;[N% y|B|=&E#yR['Ӣ.ł}W31Q;lݦdV͜=?tg]Cq$rF,Y0[-0& jyy⚌IcړY3Ѥ޿k]À o:UBΝ]":bș"zi<ܹȟz;Ӻ1*Q̏PC*ڮ SEVTYtʺӢ!*g_AUy?ٹ%9X52BK^A^G.O=&6O^z: zL&!5Y/cy.#&KߵNY +HL5 2o;,>չ݂%b}l M͚u 6byץgnǾ{{3rj9h] ==bQ+ǎV[[w[bf澓OZ`g慽Z+]ˈaosg+Z@lz 'JMȵmm{X=op.>~u>]}knm-ZXuܻgvw2sm9`h5Ƹ 6a;>=jCsL%$'%5|}; qWs1'д䨝#-ߌ<2TaԘYGbr<:6Na1,ڈC)^6dmooE= ]۩Wqs2D$mOiF/].~4uC( ?֋nYhۜ ;^{IW,hg!!l Z5l˝'׶h̲ hy] u4m<ٳ[J)u/9 );H^ڷ/cqhwW3B<\)VJt4V;Xb2`?u+huݟ"p IDAT)K&Okc06=Hg轿o8mle%3uk`'bm<-Ԫ݌ŝQ-y]qJ3N 9OTiqN_f:NɐPHI9e>ɑڻJtԪ5ɓ@1S%1nP* K Kx ' D{tWKh s4ιjQ抢9%lf\\ZOfD?l*"c .Ц'kR4Q3w6ϼxa-S -)HSG|l6X @شt4Ќ)ɥv҇'gO~PA;uݩKu?Wv-ږ|lOqS"W|vQs2=n#FDt|Qy{Ƥ&6UJչ`@Auc綇,TE2r|Ӹ 6J~|V+s=ѷl%Df>y6;LTF'M?6MuH]GGPzD\ym爂U\L<蠟n5erMmw}Խz]=dd/4ZokFw@$m~|v}#{릁#9FOAVsU\VL Y>sw4^ծO 1ܷlg퇭AjNlk28RzU2R%(8,Œ+Xjm j1ұ5yBp/ *CӔ({7sge#kP+3觍]h.ӋWT3T(+*ۋ",Tԅ*} , l"R*ӽM?p] ES~ND.U2 ">cz[VJA%xiJ:AR] NIM%'oƤ<  ~;a./ 2ϭە/5moOG^*FQP䅍}QqŁRnUK;jt5m?(2 jq!ߏF]X*ɫu9G'z9x?I;v8J+)$Q}'sz=}[>jO?N\/3*CI.3aDR9P9_g.mXpp$XtBPG<;-ܓOdt33)%h=qf{?75/0㼦P6y˷;^,u8b֢9}gFvZ‰ ]LlzMیm-4ׯYsKi.3>8J E1xyQ .

] 4u45 d`Jfg.Fe踺B$J{o;ZQ/]6; @M8LHI--M PuȤѫ}7]K@a#rsp]"#p<+_ATAPeAAAAMRDQD R_*04NKMA R_*y \AWⱿVVM}EDF!R*++\^9OF@:1! * *  2 2 * *  2 2  *  H*Sc=i U yb_n}iS? cF'1[,]ٹkW'N66~Jee16T4̈́Ek _iXWeօO$unEQ/ /R9 57u.?]Cr|vS߻Y6lD"㩀?/(aMTm?GLFQ Q$B 0KlXP &Pf;yqq]tC "4odQa 'ҚIL%Dnk/Ŕm6StiidD_ѹ+׬ߏW`cZ(PˆYTަmX7%/qҺ{/^bkoꔴ**_P (B(J) jɲ7f4iWKkWV!ZNAޯ`KJ䀁ptVr'm9k8u!⊩],ǧҲΫwtJd+>@n\iAbu'.z9'i[| }o)PJg/$r=x>"Tr}pq[\lԁ̾n*+@ݠm]hnae7EjgR" *CB!A9a&|O#Go}w#bΩV\̦&ϲQ'wҽ9o\EW >X5N.E()qRnӜIُ3SS33 =I#DOnƦǴ.]NH?p= ެ?*_]xGx=ݳ ל<,>&QK;{(.{Oko&s֡uMgd0v]zݹ2Vm:>z:6ť\>Ѡ64a~]{g?LR2.hW5~ٗ] (UV 3[P!ǟ $/Δ݊Ql-M;M[>Ϙ|&mwgD3l VG~hNr{vp.אָ'K[M]pn*[w]OyZ̨9g EMP( ^$@B@ZחK^^9I`셝 3s4%I9<Q|g7.[l];c}pMFLFmh][9%Q˳peO y}rV;}Q(eˊ$ ZXwfCQ΃:w雃wbCQ6=Y,[4" ]J'W9 br \aٗYuO<~( H(3 " [QIjT|!9NQ4H9Vn67\l?6ĵ(*h8Ȋt«9?7]J]z}=bk[{M {.r!R3g y/_݋i+.PtTU"((sxxr^iCy^EtT)DeHqI_ן8lXMLcشiTJ4ޝVڰFtk|Muʩw] U*-'g@OJI)&<  (H& Moww.]=s֫Yaхok^; dHm>Lp>#ǖt4sxR;n }677.YJ2Ä|*9^}FE\b! 1ʆnυ< y8-uRu̓B S8ݹD֨g[gY~ !D>vF/zZ$:3SUnG7|fkPHxbTKe9Qy(JqK;M:a(yjim1~ے!y{񆧾1U^l%s_Y$EQyJ2֕_u˄^> :s%%#ވl:XniͪEIˆ!/bbW (Ԫ_8t)Yk'H.!6鹲M{||&{M_ԍ/SYAF WGL5X&Ru>FuMK xQpKw^UU13|.sf{v[4.(yMѸ@/8ӶJljIZh' 7u6yM7RPGO2oҴqAAm9ːJF8\V|+V/#`t1rl7}ׁv%xm{sL3c}{ ]9{q剅@tͅ/&47  P&={DW?  eccaCcMp:WUHF-W?e}9;2Q)a>#J(Mkk6m{OW_;5Nb,ͱ9BahteGמhhuJ-vI+2j˱ǿ&>5epgclA2jE{re7./F_49‰+7Ofܼuys#AH\AS$4<@YÆuPaԭs2eVad|o`YBCtoU&娑oin`ߟn-^GN]IZt+*S'Ϊ [~Un7oi1b Kt޶4MϞa6b\.E#Qn=˛ ӽ;qcE8Qmҍef()aH$ H2IխͿj5PJEQǃ 0SקvItۖH$pmM [_q˭[b4!b8H$R_]T(zN Gݚy+FQ`WvV(4ME*JRD"JAdoӜbbi긼%Q@'e/鿄8o/}Rr("Hu_Гul߁8TF}9ST9hv1ҭ9GQM3Ro= EQRFmu8i.y(45uaj;{( N݁ D$66M[4eY 2Ed2TZ_BR&ݾuK450PFIZjך4S*M+zFS}7U0(Y_aLLLZ4oaem_C453st?:|[ƯY./+\eDDDDDDDDDv3}4M,IeEQ`db{Ů@UhZ(DNxCDDDDDDqi,ee |s8%6@iePq5=?TEe{ YGQ_Ь:(񈊊hdѣS8:D=SMޓ3b `^@Q$'MG[=z i^Dt``<aȫ8*\DѭC^ :D {h ѹKWhvE]vťb2a<y36"Q(n; D}sy&䙛\In@\`0@Qj3O:NQS5 VpU칳q^BQ}DD E>у7 ""9NQcdIٳg{7~"!wčX']{O3NbϞlkXa<ǟ!8$0 Ԋymԫ@R$ƍ!Cy}zt a}5;DD I""""jF;ʹ99;xȲT]vEAA>o@@DD~1r$"""ePbS>!nߓ;Zq@q@R6N_<.~vWo? ?n\yWC?WոqqfwywTVq>xΛ{d$"iLHD\[\ \F!oΑ/?&E>]t)V\ l6cXr%.]ڀoe^%ř'p40 :SOCqqvXep0g: &\Smcuߩ<\lVG%ȲouCo!cȠ4p];C aOqqRO'j텅8zQ9oH#^xŗj}<2O/_rt҅GW⡁("K;bPZt\2}:AXx' 9|YuWk{xd3;/DDDK0M*%rp낿`vSy9'%ObCFV{n,؝v>]̞.MرT;{qj*رs٬6"|:&ܢ% jii7~!vȲCoQ6 Rڠ_RIRODž Y]]C4^AVN&.d#dfg 7/y(TA`#v R#-= 99YmO^578F?Su]zz:&L%K@ BgbRu컲LXqowaއ3<1ٕv_[_q0wn Nͮy;qE?YHMqlގ_f_"90×¼ 1po;bkxL/ oȁX.o|#c",<Co!c@ԘYy(i9Z;GEva<@ߔl#3. AZ.a֥;V+b~~M,(TY. SY״4>P~y ,(Y9AB|_dԓǑk& _I dY$Kt:= z  z# DATѧOuA _o{~AdYi7/**ԩSq,]CmzXq Ĵi0x_uݵvg:_J>5mڢmǞ~SQ~װiST࿋‹lճݵ閪˸>GzMCF>lOjr;>O.=a {Qk r~K^܅ sw|.8{I[N<>7څGt X+g<һ;~Wzcg_ǰțW10@ܓ/Ȅ o H"gр>V/BDDDVUUfX: \ڝ!K}{ψwg4ўag߿vUm8'^\H›~&bѡx@1_gWO!wpAplǯms!l%I8oEWakyy"""vڊpV:vjh0yZYk׬Ɯy(帷Ok 5?ČC 0"|$l|x]v=z'L!u}9OF"zf]ir8>=Vw}}IhdK!,@JQ4#(@b+TQ;>ܶO\AB]\Y;w^;aaa$v;LD+~Iڏkn ׻~ l-/}ſYٙducLN.5ZP5FI^o w9:!$$Qu/EQ-~ Fȅ|UePf)Ep 7!bi{jˠ; yݹqyqFضmcǎ>|8zFvr;6V<(߾86v~n\ߛrt&H=t #&( cP> { $ePR mxp"+d'*B{U3K8i'm'w Loqmb<6tA[={W|ƄVHk;-mB~}:5 4D@(*YVs畟v{5{.f̜]>_Oж{8glض a!Q!p*:E;ސhlS6hRtLf=V.!9Ol_]M0ÊbZhEVߑ4~!qXc $X:ڮ-2UUWUcZs%":F!WBl 0 ӹ9[V\L) ,a%juD=Νmп_Du( 7YPGH:؆KI8f][:m<>4W'KKKj'>_8F-9e?{JVvIT+*(Enyp=oS} \L 7cl̜=(.../~͞So*֯.AUKe{FV|i8 O.^э`uf*ڋa`UhP!lȔ\gdLK?x wvۥvs./5[mAii9_Vk&h,ɐe $#!ts]15*c+SLQl20QXXM~>wL ={(uTgT/A@zsԘ|Uγf4a6@QQ!6m~StڞTq d=?)wӼVkfL?mH-Q%cp!L1:mGu^K'k;}< B`Ej;NvA`̾>>g$}}bJy;}*sdX3[Wa[Xs\cVeO:@߇5˟w~_<*_}IΌ*f̚/3}CqAJ΅1 Y1Z`D#p!l_W#/dp~~]>݆oһ'!$ OV.dlč{}t d3Gu3Д.yOk4`)HL܌_nIt-'NvENq#ڹ!aḙ0ͰZ0?^ygQ\x4`P=Ĵ 1P@,T#Z[j⃏eV4v0( EiBiT_ [r*Tk`嫲Ȩ**N㖛"44 (ۮV)`M͗;bjRj)ѹs禯 6ˣ1:a v}ظiImmwݿWJOgâX5-cꫯar{m@lO& jX?4x@c[vB<=4s%3bFޏ|$g NFa򃷠px== ֺϵ>8qkl>x M823n9Ox#ol CsDt6lc˙ pB>,܊zs?C{ 7z>; y7b^d12(BEn34?;EE E)/ >]C!x#.W_#Gdǎ^<[w$:r2[6#!!{Xcl6|u -XYrm/YEt:g_|׏ĿvgwܩO^wY 'lnQg<oO;?c}ɕx~~Eh2|`̘[6 EiTT΃(uut:G߫iS 'ǭcnE^qPvhVw@ =<0A?qGL WPpH[oKZr"?N_H*d @|Bg>8GDNChhn=;wFiIia<A'?k9j/!RU]ŢWx'I$Iuk^V0`<ǟ!8$@ji&@Ifdz.м1x)"DDDDDޡZLUĊ@oco{QQRZ(^W~s1x)"""""" haԐ]@hiPy%o! D֯С !'+ !0({Ei% ,CUի"YX>Ѷd\'dL4XpY/rsr(Ͻ Z>$4} GK%,I8{ vODTT4A9q#I޳,̩سg7[FǨhH6K%$Iػ7C$hLErIDDDDDD|r|MӐQQ>MӠij,K>ߥkWC2K"""""""owE߿iPjtz#zrIDDDDDDmDv۳`ر8}4Ǝ5"撈\W갎iSxXތ4 ZHJ:q%K"^ƍGRA2ZS_rIDDDDDDDn=gHƮCJǿߎ#_^ giXt)V\ l6cXr%.]XƕI֯l ,#-x`a7"'9$[K"""""""j0+|7~vbb۳Н=;_ P+.۱c;zg{0ujy7¦}_^lX0|^ 4p]N֪^/DDDDDDD3Xq Ĵi0x_uݵv)/ e0oh?܁_f#dYbCb/0 :l;-ym4 tqu=W$zVrbāS%hNҩwx](xv,\Q]Rԙxϴd!v̴iB{Jag߿vs!MvQ# ćVbqLt{3]yJPܞpP /)x-Ƚ?-?Ģѵ[&,tv_6y0DDDDDDDxu֠!™|;Xl5#CKu< TRT qr@$X:`\^U`XO.5Kuu=4W$t-Ю]hO'bǴH8Kå@8t]7< vH5!>_^Kf<yNUS;0g!DR …{0)贽"(% Vgýc#,iv6l؛1cZ'y/ؕf$[WCWf@4Mi8r r?ǩ 8| 8sՕaU|ܫĕy3ۇ}EW n[7L>iӧcSbb\nJLĴӫ=GDDDDDDDWw 6ˣ1:a v}ظiIF?G\0o:̌1 [>yI.=>Yό#blh<z8|EAXpdef =- 0 IӯH˄y0vx情dv™ۃ`h&Z|"K2 %%:u 7W[9=Q3.z4)/ >]Cv@'.W_#Gdǎ>{y̛ee L$`0qQB/uâGCqQg`\9rwNB-P-DDDDDDDW1]peРjƀ; #GAU$2ǖ͉͉\5}i5/m4P;dYbp._AG""""""+s0cO<̥䒈[y.&:ŞݻOv~t àѹK͇,yh2h4A"YB$H6;c$"""""""O3"4椋IENDB`gsequencer-0.6.37/doc/images/ags_drum.png0000644000175000017500000011014612626272145015224 00000000000000PNG  IHDR# pHYs+tIME4tEXtCommentCreated with GIMPW IDATxw|ϔɦtҤ(;"W,HWQ(*׀ %! eʹl6!ew.̞yegofyTϪ?/)yJ֮^[$I ,;˘eYRT1ρ%(A JPr)%E Nqwv#iΛύMƜvi2phemȞ&ť3UpDp%Bl2dIT6%T+qC0* ;5 SR\TPifA^/0n*ɲ,ɲLPׯ:ٵVoU(G8}zRBJH )58RL?5[תVdZq۳Ǚ_3>w<1wsklY9->qVOY<Ɋ@U6nCg$Y%+,_^$?x_V![i!D$(IrAa~`pP3gOe\KkP8lRBJH )!%9%=OL))." Cr]咾RQd7 JI0ɱ#\/CnCJH )!%; )Y(=P!d`W1 TdLhҨ5;u-**:xh_`xXNRBJH )!%ԨSK z$I:c9Nh=LYjJFug 3!oGХEI{-w)`l޹p j]ݻ?):EDxoN %RBJHR榥8~ƍ:OHkՊxT7*jv(5g2$Qܿv&CddjOVT",kdY.߹( T( adY [|VQgRBJH )!%)KҒw1>>)v,$'򊌊.,w5%'v4+RQ,=A)-**h%U%a0E}>0Zm0(+\BT {Ť䝝:t kƱlKCJH )!%;/;v4c'9gҭ[.JFu2_d"JєzUyWSds^@0c^TJRe0ܹ(JRqnjϲ,˔(RBJH )!%3%Ys4xxNqN7';a\Q Ҩik7K=1|$yG]c+̃XA!a7ڔ,4 Øw.JR0 ~[9QZFQf#%RBJHɍSb2,2}'qA%J^eBeՋ}1mҶhr>z:A(1 ,*xRi74I@$IV^剔RBJH )!%T˪pc>T4{%EeKRu,|Rb# g2lf Wxzx9rh䡃 8X$A)#%RBJH=S2WPΖ*3\L ҸkZ4,6no2Y.L+ܹ[̫g'a@m3eY3׮W>M}Rپ\ %RBJH )jb}}+:(Zt\+iC"ò,K2,aYea'6dY%RIeIeYr;4(L)1矙:8A0זRBJH )!%wNf ipJڶ5{wgNCpȉ(}` <ȓRQܕRBJH )!%tKZ}bǽ* ǝ6P(ɵeXRYg2٧ %RBJH1d> &Sr(TUOkj|}};t`n9>ԑRBJH )!%)?(3^k>~s޷q~捝g߇~ZqČku|{{E7Cʻçwh !╥nyG\7m}lqj,C/=g w(TLϨV(s3vH )!%Rrߔ$I C)aYBLN{wW`?Θv& 5ݘw߿Ef/->gZpI E|ŗ(JPI4]8) %y7W~=&-* ,[\\\uL%(A JP\S^*?0]ܼ>_Ql3nJO!cpQcQJM6v)YÚkBZz~zu#śXو1a(%Ǎ zWfՔ*S,e^Kn\7 %(A JPRJaH}}33+ȓ"*½??['ҠJeὂtq`OhS2Ք;`߻Rl׶kd:Y2vŵjRi%(A JP\J츾[T.ӘQ 4e+Q"S* bXXN~%O,]l+DR)8(Rq^&eon2ɔʔRd`'bzJ}*,"BģG9ŕ8N:5 jC)%(A JPr3IeD7_+njѢ]_d8j\+" _Mfϯk-S.(>ΝWlNk6gRf'lVuۊ *T7aóyئ!D/ ðjZ %(A JPjJ07+b&}4#O}KfȘ{OpLa >jw |Gx}4:>m lӣglYQ=+t!U?*ʨZRJP%(Aɵn[lfB1hG>|#S>9RK^v͹ ! RFl̅_B ?Fٳw(<{ߥBRS֑sw mv]"JFwC\%(A JPr-Gئ{>3nRɳ^P]P MAkH˔]Zb2^ZM%`c W2<==X`G H )!%Rrqao>Rӿ]i;cUtÜu߲ͳɮD1䨫Xqj9GN[9W6Me?\%h?>S"%RBJH )UNK*^DI i82xA=: m9hLBw yx4%l%) wT wZıyD-qN9g90̑Ç{#K *}Y_n|׮yq5^K;gnjv́Y]=nM>q4'[|yKV6^ў%YJ RBJH )!%UJZG˸:/䤤7;؎8!CFGE J8FQG>;'=eᗇ ]M˿:=S]yBzᝁ,;v׮ڛ}^ QhzZF/$)!%RBJ*%a8i0YPJeI6ӻ@Q3|6Qx"j~pgޅ.i|Đ/IKG:O^+|RBJH )5$I$ѥ\P Ka͝9<롊?*@]kou(%GbJ;tB:{Te˶H )!%Rrp[n>Uvf( 96+#ݵKĢSKr'U9S" D)`0H )!%RBJ4"x5`#<}BGiMkqif ?7-U`!c ?1[ >jw |Gx}4:>m lӣgl檈=+t!\1%(A JPK)Ua˰,˰ gxʋ*$I6=2˦>@AnSlfB1hG>|#Bsʧ=Tj>tЫ9w2!PP( p%(A JPJU_R_mzT4lӠZ-ݽRH)9;RӺCP%(A JTEA(~}t}܏޾P$Q;YwbuXyɄO %(A JP\S"KvoP9;;v0}ƔtftZxI mq3sMi¡5`YO/Qk4}۰H)%(A JPk)U^(9/oPjU@}'=6k*8I/*!EY@GDTB郟smF5]K=_YpKAMCVpi Gq0G٧$P%(A J.TAT3rˆޠ⍿3i>]e];̞[yhuu|ٲ'̗5]60kJ<&=ASqǪ1nYױm֦gU>F;}GVuIoܸ8CFEŘL&(A JP%RKB |ByČ=Ƕ98Nwg̟8k ,)Zn]O/չS7ynTbYX[i0 a6"2::&qdY,d(A JP%RI(PJX!.4`hR:]EQT*+ZO~kWxg0 E$"E;N||8cWzs{* 35%(A JPr-. FXJ)!4qo*!xt=ie]=k@ {|Ѻ~G=oGK1ʳL IDAT~"PePG')/u_[˪eovf LiPB;@a?{?6{]6Gd?E tajCQ#,5 Bwv[}ÙZ2p:??ѩĎCtJlѧa.4dayU|g eԧqsEb|}!]|#+?[qEףG@pr4 U/ K/pӞJǏ^1P{, dJIiQ6ԧ)!zsOŊU_{L!wTO׾Ǣ@}W0u,DBTz=]6W7J!Le>@*/oyFZY!RB|Ew_Zy@g#_jQ˘zz܉+[i$%% :̚%7lX߫WP%(A J.t1:!BR" Ri4Ԋ@c-jBI6__U9R_a^={5P%(A J.T 6byVc2kȆ15A¹#jӶZZ$cDDDN.]DFFZ.cǎcdI0%(A JPr)%3ӧO6# %/_qg 1Omْ}BYO8ѲeKZcE6+csQ-JP%(Aɥ!F!=-MQ¦7J+ A\yzzH+}JBq-JP%(AՔ(jCJʵ?eyJ#G-T(z0Ī*@If=IڷW|WdWV̒ FPB~_8zdWIII&M3sq %(A JPjJ*Wwq5o8? {;cח_xyyyV*qײe ?@+?+}X:Uya֯w %(A JP)<7S2%;4,1 %%zQ4YZaU*˦<_}TUSRRj]A JP%(PVl[q-JP%(A \XDp81­B}TTr oCc 6%(A JPJ{* BHqv*Re2n%(A JP\P `OA)**5B JP%( 846oQڴ my;8ʷ ?>Ycw 8K)!%RBJHɝS<\i'@-^Obɣ9YB(!f]k/r?F);r><^{եRBJH )!%)/Ok;„OĹϞJD)s`5>8_/T5XbJr+WeRBJH )!%;TLN48 eӳEUUZB[q1RBJH )!%91gOBiﰍٿm_\#Ĕv>4m8VŜ%\J )!%RBJR8Jc5OB(MDB+>6wȌ)wxi?p]#/.{/VEU:'x;Vl\H )!%RBJ%0`3;M]e\qAAںZӹ7RGgJ{|sS _{ХRBJH )!%)UX&~ZdcPl}]qkWJ=n=G3_o7ρ%(A JPr%c+P%(A J.0bSS^,Dn %(A JPJPiPiPicpfr*'%(A JPm 2FxXǗfԗ%(A JPnG%=Ơ&߶%>xW3%(A JP4}-JZXI򄃕%(A JP\J `YiX F%(A JP8 3 g%(A JPRJ<JJJwP%(A J۹Ҩa8%(A JPK)4oN%(A JPr)%=p#P%(A J.ȠP%(A JW %(A JP<xxBuj^[bۡ%(A JPn/%`p(A JP%+ %(A JPp|A%(A JP402(%(A JPJdz9 g}>IJP%(Aɥm`dP(A JP%@-)TTw֊%IڿoSFB7'hZu֝8(A JP%TT6=4[xÁ~QOOO*˲,L&Y%YsN_=o JP%(A5#ȑONyG%JRjvm˖myy%(A JPn%=cg dY%Q%I$I$ItJP%(ARSi`dP(A JP%+ ;O%(A JP\J `OAȠP%(A J4όTWfB JP%(A TuO>$h4t%(A JP%nk0F8)(A JP@ w4+U;(%(A JP\J 1%(A JPK)4; g9u頄%(A JPr)%=F= YJ(A JP%RSi`dP(A JP%+ BF%(A JP 4JCRSJ[@V3 %(A JPJq;7۪u?~-77ʷ߻?Uke|;%(A JPr1%L0YnN#kn_ߪV۴mR%(A JPS q\=ڴmWc=v6DQ[#h ]LFCzz S)..ޓ򊈈0L՟ӯ۷wQ-8p1mۨ$GEG 'KlX#%RBJHɝS),))JFر ϱUc{xweOrRL5tr߀1[ϚXIxE8YmjЦ>RBJH )!%9%ܜ i/Rrs o럛ò54??/:'y‚QZ>RBJH )!%9%ܜ:0 ˰,Xy&Ì$I,feWi% $VcEvRBJH )!%wN TxT 4ԇ\m"RBJH )sJ'v^=usBJw)!%RBJnK"\cEfgT+BJH )!%;{RO|TZd~"-ZNrwyW\|E,iHy-9-yRa=uw x.MsO>RBJH )!%8%PibS[v.R?2 u0wdgvͩ#O|2U0Xxe1eaٌҩ`Omz}ۿy̿|HGo#%RBJHɝSWO/LK'_o4tڲgﮝkfO<:Xl˙!l@i.>i;c4kd{v\ǦڷY~/VYRBJH )!%)Jۯ|"Cryaxp_Jܲ>hDS1=#s6}+|Ė*ơ/߹SoփdRBJH )!%wN T#I(I B񅿒 UΨkEd**+ZO~kWS adBdQ0Y,iSXH-uZ>Cu~n#%RBJHɍS2, o]|B񟁽Cf)>* OF%gs~f@ KX.RxKץ=)!%RBJ4ٹXnG')/7C]זjٛټl'(yݧL)!R.ާ)wz=Żb6ws޲v6>Wui)!%RBJnn _݋L!;-ݾc-jB8 SbdžI)wFt"S Ϋ;k(-,\ +3KGKYي+=uٯ %RBJHɝS+ k.T tcYj v ܴiiaW ԣSr!SJJYeN}BY՜_sbE*/wчw;{kc}RBJH )sJua͆BɔSyu,DBTz=]/Ԋni;e<-H+گrEw_ZyRBJH )!%7N 4HYO/}6m@7]RBJH )!%)Jî-JhTYnK=)!%RBJ4=Q'"RBJH )sJҰ(0DbEZe9Jm{ [WdkH )!%RrpgOaѮ G0:.#jyʼ0>RBJH )!%9%n-jXbmL&cj4#G)JkY%cw)Ib[=!J>>ZOBkdfddܾۛ]/PԾ{eEvRBJH )!%N 7byfMa[6%WXXpgV4׽G蘢EKO˳f8/o︖qAAA:~ERBJH )!%wN eMWJTXDYM&hfaIM&( i0BP6iZ"GJH )!%;V6N)(Vַ"ð6mˢ(&ˊnmaYP7wXDe|g%L>sym_z]QaY.@RBJH(ݲ/3 )dz\9~~;th2N$B( i'O"r۶mn)!%Rj)l479}(**ڛQRR~5}߾iFGpܟ۷˲E)!%Rj)q{wߺs(a;D nN7"%RBJ5%}RBe*)rRRن3%_==SὦOL paճ=yO/* DO}.O {aАИa/ XFJH )!%kJb} w唔IvOvQ/SJ)5^C;&t>Yf G=_{]yv%S{c8x4h Gz7kªbSxvk 1Ik?9_r}߻?P靺׿iix42RBJH )m۟$Ia(%,ԯ4mn[ςC^|qꗡ+.,S}ʷ/NhA*8|heYTEQ{-/j;z݁[m?~_#xt}Q_9) &d( L Lκ )!%Rj)44\ O>Ә>!~'N{*V+1_3CTvÙl1vB)l?eHT& qA4Ŀ {>RBJH )!%),+ kMiG 7rQ1ѿv_SExM.]OLsٖ,fEg IDATY3 !vi\c+ֽф`o/o(U|&vJ{[cUeu9#R8h!7; RBJH )!%S0a*/"% wD -GHO[bY=XeYaSk|tLQx5:ǵPm_ )3@vb?V,埾t&X8,%rށy3>X}"GT~9Cv|W__ǟb2Qʒ~)!%Rj)yy{# ʋ.c<[ըW~/{ Ba0wLv)!%Rjm|(،j)LjАRBJH )!%* v08aEJr<)!%RBJW48 Rg,[TTq,2$#%RBJ;%PҰa|||KZlG0 ,S0:.#jhf>>> %RBJ6%[aRZ1#~~~ =fXEcw!J:֓!x!Hط7}xo_RBJH )!F#ʋfC?nN= kޝuٕjΞQ1EI/_tz ~锞B}e*JO7HI!*P}Y©Y:}mΐ%zo@C},XBPsD4_ +pfuOkߡih3BAQu~<(ۏ] CHFȲ|#3}wk0֯IPfce=8AݾPG2- tٚ=oTWJ#v az}^'"Bn /$Nx  _Փ&^h<<ڶzK;+|1k)w…'MPGe O%,|<%Xaʽt$|`9$oTWW^E@}`}EMCBQ x⪲J~r^x8pƣ$(|K=ׯ@RW-Pxt^ {AY2$Ouh$$}ﭿ`#mWYPO0K/:|D KusqkWJ=ʟ[7'vF|AA>/[=ٌ{|8$SYr` 0 ˰lRQDA+aXyR@JQ4#bzz'rssզW۶m"8SnϿ}DItm&* !ߝ?=wf՞֕|b[u l}\U߻~r`nue,ii0p@TLss߬ ΟsvY$I!!Ccu ݽ˫YXڕ<m:+ 9..{sWVڱFM?ߖ֏ tPwT>rc[:MBѲUkJBBBeY>~h|BGΓ93To?]ٽ{ñEE'R0 EKB,cZ2=x`_HH(Pmr\C.@\mL %vlIpL؂Q(99Z-qiq1o^}oᆔr˿Q}s_hk#5"7e!t繇"_w(EPg_WOx7O<[ Wʒ2W$4>dJ n߱cOLi"VT*U-b{bJ [n (:)j<kwqWN8N)\- mi R(R(奅oq)P N@μ\p1 3ٹgvv1*TS8\ʰ_]+8BкM;мy ;t萞aÆy!ڶ{5ɽy6몿?uC~8 owW*W*$}9Z!6 'Z+E4< oԵ1)r,3>w|VABf5M> |&ʈ~^P#[3jm9vn(hJR|ЧOMHz|{)]H5? PR'Ѥy, {,Y!~U]gdf8::!:1ƸACBNI ˼.aWZ,H LZbB~+XkRz…j߁QŦFh.g'z(\"6bq`|sgkk;fI<"7xe&-:tn{Ϣoi.?ƧB[}SN]ϊK[vz^.6N]<'5l&c~ش_4PNVUk2Y:Xڇ 59PvdLMb4$:ۄz9ZZػ{8KM jj"Bފs[3%Wg( c^ عsΝ;"! i+ʺ$|c=FNȄX6 0%ocbK,,~?M$8be5_z~;;Nbo~7LQ٧yo͆\KM峓}#AӮMpWH+0dz\tؼ`jK﯈\j:߾v{C@[a^]vݰaC]"=.)}/5Hg؞:Pz9.PPEP!>Lx׬I7̰No/4tg{[ ^Qsl[ZM՛v#k\ `^+` pVr^ާN1cBpЙOy,1!rJe2+|qW{1o(hܦ& =-HwkRR++f,jӝ?TYSqI9>Ё!y چDy{޿wѨϟ?ǎF6ngl?H?'Z;Fd[䦍9e2#\8(PǜƘ<,E!Bؐ?Tֶ7: B*U&*eG8."X{Eh5JZ{1%JW0QB@(J@KǎE=Զ]''gDQOğ>yB&+2,B.+TSmEƝOZ煩p: QoeffדbdlH3棺M*+7j>*MvPaa!Yps݆^m4t0R<=E#{{HHq?ޑ+77鴮$2v ""^zჩ(X6n** 8KNCĤ11a\\Vy'0&NNΐEնIE0뾳J40l/}9?DeG; 5;PXL;˂ ұ 8ay5ԼAo"YCֆЃ mDQB4iF3 E!yiTTъ!W}=#5!\H<UxZ|ڡO{tOfZyLGkJeCY?ٿ^4mv䲉)1h P? BrΑVG{8vTa U& ʼ]U} OMpa?eqcVm+'3C¸]A0^yg{P4qT*E",}NnQ j>xi<~bLtԷV}cS33F^^X: x>"jOiBQ„]Y鼼|bzI]wP<~HT=)z;ݶuWSx>cǎ;8FQ'gȗNge贆RYEL1 ELhBF(ӂ|=}jFcDQɉyx)I&&&EMxG(ݺlޢ;EPŲgCoLH̅ hР[0,^A=8IfhlfٖccLp ?uNI-}-B-0hJėG}4%h/7dIs+?mw:ܓpQ <7'Uqrri`k/|PͲD*[mlӸ~z׮222trfZ.@0F24rN`ssORrQrf᫪X~ekkcD u^^2m?EYö'8wD1R<\7yEԸ%Hx).NՁ ((˭E!S)XcY+/kvVp%B0A]q{3vĈ6l֭!_ԓ-W߻{a4-<}|}uҢ; ABə-F( p.X){#|kڳ;:xfܻpf<|8Bhzzz3gܿo\a3R_?~ԤgގNΈgϞ>uv֮ S9}NR>{uTfż+ ?q-Iv_eAR.cfœ;b gc?D65eJ4¨ ?QB0lffBAX+'lFNʈBY_g?9/sGui,--3rshfM6_=F,cW!yqŤ/JLڠyңwNct1&&c;SRܼcǣC:u*wtxwpWrqt^#&x}E+*?jWM~eO/mm `}jc"2(c\2( re 1ztN|{ZAbbbbb|8;.'>>H!$倿.\ߞCNsxK}{蹈@Gaan^4Ð*WC۶w.YrP.uug9XY;wA!A)/l_oߪI#Ϡ^{=KPoVi!1ā??_/x!f l`mc:QgRU/!adW:O˶fL5o#0 C3šd 䇺\&ﮙYIQLXzzzׯ^HTΊ9tCa IJ$*h15}v \%V Bza5\ܪᑓ#Vk [lwaFמx~iy_@Fq{oZQ.];5Mob u4G6''xdwi޾wm` $)=y~{5ϋvAra]magz؂)|o#P-U/sE IDAT (۴Sڶ{X JB'UhvŻNӯz"n y @P\U:P%D-MCguQ*P(e)`}#tE ^>B6zXEBP()x , FD"*!X) y/|s Y2 Qga_=)1MĴEqR ;u0,,XuN17Qi GE!8~&BMGO{=FTFGTD&APaOyPUC+qakuBdpr!E7eBʦEOZvowR"+".gH7jcA)S bӐnܿ#M,٧wBwߐ~V-l㦗u_~zã8BGa(M *"J*:=#xpfNf/Ҡt^MWrް0&!#}ZiT҅j'&G=u*{&&DVXT- ^>0 mfjcO/ =qg$91vMP4eexhyӠ[,g}.L4oiT ^>ѵn:e+c|?Y6uk7tJ<(~WKWi+[1kH(@[ NlX%*v:>o#% s`ы:HW&}%t!?f6Z~S\SĽؠ5߰&6"ɵ-wtgJ_;Ǯ ' m`mD^~^HQ %?ryLVr9I9Z90_S[Y2{5h@em >u:qߓ!Wr I9e~y|yziQpk㖇C ћ]iD/7)Rh^w29hNѐ-9E?ۗodYJ0.,KyXV_PTI+cbj!翗nUz{IHN28^||GD.\V¨6=䉪ZӃ;zx߅Lt㪥RN<{3wMz=9R,{+:';nʊck[[@7`@S8M;b$1q h7bA;饾_nZM؆=%F8%b˄pUn@;ƒ|芐ߏ \G_3yVφ_!CWpw)i 8p֭_۷#p>9v4*c2[m4/7GeVLĢ83B~5ŽAwyݮ;X4[:;)I]_yz0ה_\mw7(ѿ '3;33/'U$Qx3{)cS^t4۔ uݍHb۫[#9)WQuf=@3yҝCzn~(Ŀ{ܨpgV*uX_NqJԌ.> ܅gg|mx_2\x2ʼ}u>%_B\Y3!6ƽ^@ E[8rkvSj[co? 8c,۷tqXGmuP.II'd!"䅅t/8GKpz6T^Ԫ_TJ?4Pg){ʡauWJƓүJڌ0/>rN#+3NRTGj OGclaBVΕUf%:|OҎؓᲾl4~3Gȩ+Ž仙 CqG86+ q#_|o:n'Vp/0,c6bk׮9|055UkM充 P_*#<n[=NiF)4MS&11!"X1bv֎`j㾦b{ cצnXq$ımv z$ijWb>߷.6]RpM7Dw():j>/ m?t4qRS'X~S ADQ nҤ)00i:JMK]P4Q]܎,*Br`BbTqhH t^<)[{G8U3/=xGCҒ=1zsw:Y͋chj~wV o0!>w賆bYN@5;|UQ wQS.WHhLquBL&+sCfZtU2EJN" n]FFFJ{zzr iԹC%+_z4u!*kR:9߄E}~1U?" bۨ-gAzm?3/ߧSY j,,,?rpt|743ss c6i2i```e EQDZ N9 D4@D^ ԑڃbA"`d_-5d JtP)$wϴ׊>LY, ;gG:AC8 ׼E#Q-,z0 o  #] h(9[i8ni1Aꁛw>pmbw?jфMߵa4VS5tl?lb;nmEi`j"/vPfUL%fQI[4 4Mٷjo7ͺ犓\ua+~"5742<|~mlm+0ffa;Õ:At^~C0dkn.1㫉249{5m0P8|j{Og/jdH-KU)7NSŏ;Lzcd;r_)L `,{x4V(`3iParb}>/)&&&!lv:3\Q61&Bj?mi%SkTH1cOEUաMȕ"W2A~@|Ӡ({1Bfͭmojɋ䘘萐jۈx7mt8fli8$$F"B)[&fMp+NζE,I`5m\kli&@,+/E1 Ͳ'[2x`: B=מ4Myy SD&@}y #=h ssW7O__}]e@)4h>j䤢ڬ POmFZj}L{ѳWYsϜ=[/ٕiwq4~YtXA:Wv uhr>[yZ{B iUB(27&BbsQUiNLH}ۛe9mք @=,;v<* 8xD"{x3Q`бcQ'Q:vbg޻s /~?rVLx5>I!bOGH1i KZaY0Ђ hJTu>Y!߻kff!Sa;?tՀ LVnԾIˢI\%ƖL|uךO[leߋ[AM% rh3cM:O|ek&@=CP.AvmD@C[O8)S}Sq|Yvj=z#[v۷m&/Oog`3Pyj=B4DZVC!*t͚ "8#3I]G'DQw#L;.;Styw_}5~MO<%ėN]}0I%% LY1pPB2j5s8VNx'%%ފ̬#0Z Pߠ(1Rϼqvtf 7L/tTiB=|p hդi07h655{䱇 ϞcOQx,|ߋq{^yqzK0=Q.ϴp?S!ЁZ4pͼNp8 DnlᅊKU6ñWCoɕK1vZM8 ]t]6Iׯɕo[do;3y&/;8|~nvwуoih^mYV}%wǏ"Vk5q7${w عcGC7QUݔa,<@5u4(z-56fj6wy~&GH߱y%'JJLz 4@S I0-ڬ P(JO_sǏ~mNNΈm]|TQmlCC7*r8KN b`Pp& yEnnQٚ8 .@j)!Ɵk&@,dj@[U2*پi]MX|>WX⿵c:,#| &: kudښUeMţ_7v6fXsh2ttM [TҼz\d,U'B~nċH?ݺ ;0Ԟ&,zO5%^K6䯠5<\3cg?ણ.|c>3Z9$ta6 eYv>yM-Zh׶-N-@4u,] l׍,s*Ir7>B(4hEߟtoAw_|c?v @}Q"87|! Eox#{,0!X+<&<F\O>iiBxYbBA wA׻( wkfz7jd$*oey@!ENZ1^@!39r]U7WG9V!{NGTkX( (NEB!D: |N/冞 w15I&uLtQaVXdz:h*k =-Hw;_#"@t@&tN#M5Q85JXVLibe^$ Bu\,8gBcT]7jB""advfl x~)Ю:}M4_EMq>mt㨆w3ZhN}M!!:S:Q}*aBHؼ!ϥvLK6?HiTٔrk>.rʟ3H7K kԦQZ+d \`yaaGKt$nQ#8֋{Y>uuݦʙE^x2Vc㯃,AQɉ dlbBQVkǒc3TG\3ۗ!:_p_g_D c =ll6gH!4~&IJi7= N]=ވp !__ߘTqrrŘ !!!,i&dV4C=}KegO(/r]yqz+o""/`tqG!}ꓦ{YM /! 0d8 V({G'L͛7ΞMXYp BH5[e=:y\8sd`p+ʗ1&]*WbBⶁ65ݴgj{)R$zSw͘],=zf/{-*ذ@~VdOPlkk/|{(eY@I8ݻ{hTXe;_ڸInNN: ^ f l81+,<\8=ݯ8Lkb2rdʑ.NW:hZ" $M}t:wqڶ(ɓ'OdCEbYX'~N+hRnv_k( 8 *n 49zk>*MPphh& 4 JWIDATܸq3aEy^ i)Z4<"D&d28N_nyT˫.!P@XԂj5EQJ/dNQ,ð[BJPh8 6W(nLOOgMM< R*))VܭJ;R4::ZN-(&%&EG 4~HQ(77/yC#c{{I/^1՝e5QN;::!-ѡhcN&/_vNAiBl썀 C#Ce&fG?7txDAA~\\l0w/XjErr='@t@GKt$4@;/T+ן }}aXs3̌ AٮnU; w\QAt@Gt?SPYx^E Ax@ۡ(BUc\aYR,a? ::ڣNZpʥ˗/UI=)?¡МԖ$Wi!._4ceⳲӷoysf' xwfB4A5U@t@G{tiT6ٳg|gK%J4ifʖ::%.<5CvvgΜ٢E ?'ap+;;{V~)Ts 6s-]x!.,`H{ DUrh8j_z֬YO<:uq4ҡ7K >!{{>c߱N[ p!>TATYZRNC'DBd۷OHH@;wnݭZ0a&KIm'm0DmWO"q1 ƴŘv76M%dW*Ń耎v&j4?;wΙ3`JM**d<̊.ĺ,B57)grbKH`DTutAAt@G{tJN :!4mڴ͛#\So`̟!TlƔcB)RP K)BHKb`ʖ}&^C!PBBUOO::N-o!YُK=wy?X4/{8sR:yMVFR6vp rUT}b88e6vRK~)syNʧ Gl8ڍCW $c>3{\h|9TFUIQ3::ZN(FNJnU1X48 q Q- zާdEQjbeْ&͢Pu]ѬMIՐ!-5X59:~;HJL^eSS B)x֭*k;8fCӴT 4Ee "h8 `QLJL>DUi ܼvI.^^CcxN;8:Q%5E!ӂ=}=D(DUnE\1aRbC#9)Ą("p@EF썀 C#Ceie3ƍϟ:< V\l0wO/88/oɕ1#54h8}GOWO4<{3S2Y!Bb-hzX/^ aXt@tJFbG[BPVf>0,1L+fFeggU=1ˁPQI 7F׬TX_X_#\՟G6((426z p6up xP^+s[oO% hV6T^S-H?dSA#Mz i53M5Vc&[*jZh P4@ w͏PS-'s V4;u=Tr)itSCw4PO4픤.N꘺uu9T[ScB+{Vĥ="C#P;.ȿfrNBv:wBȯ/9V,?\yNB wsf4 Gq]]2fΕdvT\EBQ G-',ho(<;p̽tQSAPAcD;Gpȼ~k៹UՔ^7W?oiE <2rm!^軫єڼߴÝX40ϲ.D^+ȓhӀ4W4mUsj;jQq.VFj6H,9fӒ| "QNJ8u|l]7SZUFrM7|42mJ gͤYoQ@(Qn7O[G.uUx_{[ "04plܙ4q&U5xo&ٲש5D6k6a K&ƨzRhQ)Ƒ|or/5`6Bm;!hTW4iu@o,5Ѩhshͥ^-.B„ձ44M:<ڇ-bN_B099ޡfSRRML(211)(ׯɐ)ff梈BI <$qM;o4]O(Hq/:}}}/]\kPE'>O00ߗdz|_%A ؖ?*bńI [/&<{s8&>7x,ѪeffA!{GLpsgԌ i#c㐐+kcB ϟKOOyN]\\ܲ23QMv$uD>I);v.׮\342Vv&922{_: BNה#(aX- W`./XVX5uehC)'ޱ037k8QNv6 };9i);v!#cЦtXV+:~BDQ -=<J56RIENDB`gsequencer-0.6.37/doc/appa.xml0000644000175000017500000006711512626272145013122 00000000000000 GNU Free Documentation License Version 1.3, 3 November 2008 Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. 0. PREAMBLE The purpose of this License is to make a manual, textbook, or other functional and useful document “free” in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of “copyleft”, which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. 1. APPLICABILITY AND DEFINITIONS This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The “Document”, below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as “you”. You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. A “Modified Version” of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A “Secondary Section” is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document’s overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The “Invariant Sections” are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. The “Cover Texts” are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. A “Transparent” copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not “Transparent” is called “Opaque”. Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only. The “Title Page” means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, “Title Page” means the text near the most prominent appearance of the work’s title, preceding the beginning of the body of the text. The “publisher” means any person or entity that distributes copies of the Document to the public. A section “Entitled XYZ” means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as “Acknowledgements”, “Dedications”, “Endorsements”, or “History”.) To “Preserve the Title” of such a section when you modify the Document means that it remains a section “Entitled XYZ” according to this definition. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. 2. VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. 3. COPYING IN QUANTITY If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document’s license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. 4. MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement. State on the Title page the name of the publisher of the Modified Version, as the publisher. Preserve all the copyright notices of the Document. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document’s license notice. Include an unaltered copy of this License. Preserve the section Entitled “History”, Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled “History” in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the “History” section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. For any section Entitled “Acknowledgements” or “Dedications”, Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. Delete any section Entitled “Endorsements”. Such a section may not be included in the Modified Version. Do not retitle any existing section to be Entitled “Endorsements” or to conflict in title with any Invariant Section. Preserve any Warranty Disclaimers. If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version’s license notice. These titles must be distinct from any other section titles. You may add a section Entitled “Endorsements”, provided it contains nothing but endorsements of your Modified Version by various parties — for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. 5. COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections Entitled “History” in the various original documents, forming one section Entitled “History”; likewise combine any sections Entitled “Acknowledgements”, and any sections Entitled “Dedications”. You must delete all sections Entitled “Endorsements”. 6. COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. 7. AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an “aggregate” if the copyright resulting from the compilation is not used to limit the legal rights of the compilation’s users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document’s Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate. 8. TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled “Acknowledgements”, “Dedications”, or “History”, the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title. 9. TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License. However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it. 10. FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See Copyleft. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License “or any later version” applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy’s public statement of acceptance of a version permanently authorizes you to choose that version for the Document. 11. RELICENSING “Massive Multiauthor Collaboration Site” (or “MMC Site”) means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A “Massive Multiauthor Collaboration” (or “MMC”) contained in the site means any set of copyrightable works thus published on the MMC site. “CC-BY-SA” means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization. “Incorporate” means to publish or republish a Document, in whole or in part, as part of another Document. An MMC is “eligible for relicensing” if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008. The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing. ADDENDUM: How to use this License for your documents To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: Copyright © 2013 Joël Krähemann Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled “GNU Free Documentation License”. If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the “with… Texts.” line with this: with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software. gsequencer-0.6.37/acsite.m40000644000175000017500000000056512612232514012407 00000000000000# check for the presence of help2man # if it is available then set MANPAGES to # the list of man page files to create # # AC_PROG_HELP2MAN(list-of-man-pages) AC_DEFUN([AC_PROG_HELP2MAN], [{ AC_CHECK_PROGS([HELP2MAN], [help2man]) if ! test -z "$HELP2MAN" then AC_SUBST(MANPAGES, $1) HAVE_HELP2MAN=true fi AM_CONDITIONAL([HAVE_HELP2MAN], [test x$HAVE_HELP2MAN = xtrue]) }]) gsequencer-0.6.37/compile0000755000175000017500000001624512621000377012255 00000000000000#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2012-10-14.11; # UTC # Copyright (C) 1999-2014 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: gsequencer-0.6.37/configure.ac0000644000175000017500000000633712633221753013174 00000000000000# -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ([2.69]) AC_INIT([gsequencer],[0.6.37],[jkraehemann-guest@users.alioth.debian.org]) AM_INIT_AUTOMAKE([foreign]) AC_CONFIG_SRCDIR([config.h.in]) AC_CONFIG_HEADERS([config.h]) # Checks for programs. AC_PROG_CC AC_PROG_CPP AC_PROG_INSTALL # Checks for libraries. # FIXME: Replace `main' with a function in `-lX11': AC_CHECK_LIB([X11], [main]) # FIXME: Replace `main' with a function in `-ldl': AC_CHECK_LIB([dl], [main]) # FIXME: Replace `main' with a function in `-lm': AC_CHECK_LIB([m], [main]) # FIXME: Replace `main' with a function in `-lrt': AC_CHECK_LIB([rt], [main]) # Checks for header files. AC_PATH_X AC_FUNC_ALLOCA AC_CHECK_HEADERS([argz.h fcntl.h float.h inttypes.h langinfo.h libintl.h limits.h locale.h malloc.h netinet/in.h stddef.h stdint.h stdio_ext.h stdlib.h string.h sys/ioctl.h sys/param.h sys/socket.h sys/time.h unistd.h]) # Checks for typedefs, structures, and compiler characteristics. AC_CHECK_HEADER_STDBOOL AC_C_INLINE AC_TYPE_PID_T AC_TYPE_SIZE_T AC_TYPE_UID_T AC_TYPE_UINT16_T AC_TYPE_UINT32_T AC_TYPE_UINT8_T AC_CHECK_TYPES([ptrdiff_t]) PKG_CHECK_MODULES([UUID], [uuid >= 1.0.2]) AC_SUBST(UUID_CFLAGS) AC_SUBST(UUID_LIBS) PKG_CHECK_MODULES([LIBAO], [ao >= 1.1.0]) AC_SUBST(LIBAO_CFLAGS) AC_SUBST(LIBAO_LIBS) PKG_CHECK_MODULES([LIBASOUND2], [alsa >= 1.0.25]) AC_SUBST(LIBASOUND2_CFLAGS) AC_SUBST(LIBASOUND2_LIBS) PKG_CHECK_MODULES([LIBXML2], [libxml-2.0 >= 2.8.0]) AC_SUBST(LIBXML2_CFLAGS) AC_SUBST(LIBXML2_LIBS) PKG_CHECK_MODULES([SNDFILE], [sndfile >= 1.0.25]) AC_SUBST(SNDFILE_CFLAGS) AC_SUBST(SNDFILE_LIBS) PKG_CHECK_MODULES([LIBINSTPATCH], [libinstpatch-1.0 >= 1.0]) AC_SUBST(LIBINSTPATCH_CFLAGS) AC_SUBST(LIBINSTPATCH_LIBS) PKG_CHECK_MODULES([GOBJECT], [gobject-2.0 >= 2.32.3 glib-2.0 >= 2.32.3 gmodule-2.0 >= 2.32.3 gthread-2.0 >= 2.32.3]) AC_SUBST(GOBJECT_CFLAGS) AC_SUBST(GOBJECT_LIBS) PKG_CHECK_MODULES([FONTCONFIG], [fontconfig >= 2.11.0]) AC_SUBST(FONTCONFIG_CFLAGS) AC_SUBST(FONTCONFIG_LIBS) PKG_CHECK_MODULES([GDKPIXBUF], [gdk-pixbuf-2.0 >= 2.26.1]) AC_SUBST(GDKPIXBUF_CFLAGS) AC_SUBST(GDKPIXBUF_LIBS) PKG_CHECK_MODULES([CAIRO], [cairo >= 1.12.0]) AC_SUBST(CAIRO_CFLAGS) AC_SUBST(CAIRO_LIBS) PKG_CHECK_MODULES([GTK], [gtk+-2.0 >= 2.24.10]) AC_SUBST(GTK_CFLAGS) AC_SUBST(GTK_LIBS) #PKG_CHECK_MODULES([XMLRPC_UTIL], [xmlrpc_util >= 1.16.33]) #AC_SUBST(XMLRPC_UTIL_CFLAGS) #AC_SUBST(XMLRPC_UTIL_LIBS) #PKG_CHECK_MODULES([XMLRPC_SERVER], [xmlrpc_client >= 1.#16.33]) #AC_SUBST(XMLRPC_SERVER_CFLAGS) #AC_SUBST(XMLRPC_SERVER_LIBS) #PKG_CHECK_MODULES([XMLRPC_SERVER_CGI], [xmlrpc_server_cgi >= 1.16.33]) #AC_SUBST(XMLRPC_SERVER_CGI_CFLAGS) #AC_SUBST(XMLRPC_SERVER_CGI_LIBS) #PKG_CHECK_MODULES([XMLRPC_SERVER_ABYSS], [xmlrpc_server_abyss >= 1.16.33]) #AC_SUBST(XMLRPC_SERVER_ABYSS_CFLAGS) #AC_SUBST(XMLRPC_SERVER_ABYSS_LIBS)$ # Checks for library functions. # AM_GNU_GETTEXT AC_FUNC_MALLOC AC_FUNC_MMAP AC_FUNC_REALLOC AC_CHECK_FUNCS([__argz_count __argz_next __argz_stringify atexit clock_gettime floor getcwd localeconv mblen mbrlen memchr mempcpy memset munmap nl_langinfo setlocale socket sqrt stpcpy strcasecmp strchr strcspn strdup strstr strtol strtoul]) AC_CONFIG_FILES([Makefile]) AC_OUTPUT gsequencer-0.6.37/COPYING0000644000175000017500000010451312612232514011726 00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . gsequencer-0.6.37/README0000644000175000017500000000063612612232514011554 00000000000000jkraehemann@gmail.com You need a realtime kernel in conjunction with ags in order to do more computing expensive synthesis. Please visit http://rt.wiki.kernel.org for more information. Following site gives you advice in configuring ALSA http://www.alsa-project.org/main/index.php/Low_latency_howto If you have pulseaudio running you might run `gsequencer` with pasuspender like: $ pasuspender -- gsequencer gsequencer-0.6.37/configure0000755000175000017500000073447412633221770012626 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for gsequencer 0.6.37. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: jkraehemann-guest@users.alioth.debian.org about your $0: system, including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='gsequencer' PACKAGE_TARNAME='gsequencer' PACKAGE_VERSION='0.6.37' PACKAGE_STRING='gsequencer 0.6.37' PACKAGE_BUGREPORT='jkraehemann-guest@users.alioth.debian.org' PACKAGE_URL='' ac_unique_file="config.h.in" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_header_list= ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS GTK_LIBS GTK_CFLAGS CAIRO_LIBS CAIRO_CFLAGS GDKPIXBUF_LIBS GDKPIXBUF_CFLAGS FONTCONFIG_LIBS FONTCONFIG_CFLAGS GOBJECT_LIBS GOBJECT_CFLAGS LIBINSTPATCH_LIBS LIBINSTPATCH_CFLAGS SNDFILE_LIBS SNDFILE_CFLAGS LIBXML2_LIBS LIBXML2_CFLAGS LIBASOUND2_LIBS LIBASOUND2_CFLAGS LIBAO_LIBS LIBAO_CFLAGS UUID_LIBS UUID_CFLAGS PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG ALLOCA EGREP GREP XMKMF CPP am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_dependency_tracking with_x ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP XMKMF PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR UUID_CFLAGS UUID_LIBS LIBAO_CFLAGS LIBAO_LIBS LIBASOUND2_CFLAGS LIBASOUND2_LIBS LIBXML2_CFLAGS LIBXML2_LIBS SNDFILE_CFLAGS SNDFILE_LIBS LIBINSTPATCH_CFLAGS LIBINSTPATCH_LIBS GOBJECT_CFLAGS GOBJECT_LIBS FONTCONFIG_CFLAGS FONTCONFIG_LIBS GDKPIXBUF_CFLAGS GDKPIXBUF_LIBS CAIRO_CFLAGS CAIRO_LIBS GTK_CFLAGS GTK_LIBS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures gsequencer 0.6.37 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/gsequencer] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names X features: --x-includes=DIR X include files are in DIR --x-libraries=DIR X library files are in DIR _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of gsequencer 0.6.37:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-x use the X Window System Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor XMKMF Path to xmkmf, Makefile generator for X Window System PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path UUID_CFLAGS C compiler flags for UUID, overriding pkg-config UUID_LIBS linker flags for UUID, overriding pkg-config LIBAO_CFLAGS C compiler flags for LIBAO, overriding pkg-config LIBAO_LIBS linker flags for LIBAO, overriding pkg-config LIBASOUND2_CFLAGS C compiler flags for LIBASOUND2, overriding pkg-config LIBASOUND2_LIBS linker flags for LIBASOUND2, overriding pkg-config LIBXML2_CFLAGS C compiler flags for LIBXML2, overriding pkg-config LIBXML2_LIBS linker flags for LIBXML2, overriding pkg-config SNDFILE_CFLAGS C compiler flags for SNDFILE, overriding pkg-config SNDFILE_LIBS linker flags for SNDFILE, overriding pkg-config LIBINSTPATCH_CFLAGS C compiler flags for LIBINSTPATCH, overriding pkg-config LIBINSTPATCH_LIBS linker flags for LIBINSTPATCH, overriding pkg-config GOBJECT_CFLAGS C compiler flags for GOBJECT, overriding pkg-config GOBJECT_LIBS linker flags for GOBJECT, overriding pkg-config FONTCONFIG_CFLAGS C compiler flags for FONTCONFIG, overriding pkg-config FONTCONFIG_LIBS linker flags for FONTCONFIG, overriding pkg-config GDKPIXBUF_CFLAGS C compiler flags for GDKPIXBUF, overriding pkg-config GDKPIXBUF_LIBS linker flags for GDKPIXBUF, overriding pkg-config CAIRO_CFLAGS C compiler flags for CAIRO, overriding pkg-config CAIRO_LIBS linker flags for CAIRO, overriding pkg-config GTK_CFLAGS C compiler flags for GTK, overriding pkg-config GTK_LIBS linker flags for GTK, overriding pkg-config Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF gsequencer configure 0.6.37 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache # variable VAR accordingly. ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## -------------------------------------------------------- ## ## Report this to jkraehemann-guest@users.alioth.debian.org ## ## -------------------------------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_find_uintX_t LINENO BITS VAR # ------------------------------------ # Finds an unsigned integer type with width BITS, setting cache variable VAR # accordingly. ac_fn_c_find_uintX_t () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uint$2_t" >&5 $as_echo_n "checking for uint$2_t... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" # Order is important - never check a type that is potentially smaller # than half of the expected target width. for ac_type in uint$2_t 'unsigned int' 'unsigned long int' \ 'unsigned long long int' 'unsigned short int' 'unsigned char'; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !((($ac_type) -1 >> ($2 / 2 - 1)) >> ($2 / 2 - 1) == 3)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : case $ac_type in #( uint$2_t) : eval "$3=yes" ;; #( *) : eval "$3=\$ac_type" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if eval test \"x\$"$3"\" = x"no"; then : else break fi done fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_find_uintX_t cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by gsequencer $as_me 0.6.37, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi as_fn_append ac_header_list " stdlib.h" as_fn_append ac_header_list " unistd.h" as_fn_append ac_header_list " sys/param.h" # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am__api_version='1.15' ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='gsequencer' VERSION='0.6.37' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi ac_config_headers="$ac_config_headers config.h" # Checks for programs. ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Checks for libraries. # FIXME: Replace `main' with a function in `-lX11': { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lX11" >&5 $as_echo_n "checking for main in -lX11... " >&6; } if ${ac_cv_lib_X11_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_X11_main=yes else ac_cv_lib_X11_main=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_X11_main" >&5 $as_echo "$ac_cv_lib_X11_main" >&6; } if test "x$ac_cv_lib_X11_main" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBX11 1 _ACEOF LIBS="-lX11 $LIBS" fi # FIXME: Replace `main' with a function in `-ldl': { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -ldl" >&5 $as_echo_n "checking for main in -ldl... " >&6; } if ${ac_cv_lib_dl_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_main=yes else ac_cv_lib_dl_main=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_main" >&5 $as_echo "$ac_cv_lib_dl_main" >&6; } if test "x$ac_cv_lib_dl_main" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBDL 1 _ACEOF LIBS="-ldl $LIBS" fi # FIXME: Replace `main' with a function in `-lm': { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lm" >&5 $as_echo_n "checking for main in -lm... " >&6; } if ${ac_cv_lib_m_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_m_main=yes else ac_cv_lib_m_main=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_main" >&5 $as_echo "$ac_cv_lib_m_main" >&6; } if test "x$ac_cv_lib_m_main" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBM 1 _ACEOF LIBS="-lm $LIBS" fi # FIXME: Replace `main' with a function in `-lrt': { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lrt" >&5 $as_echo_n "checking for main in -lrt... " >&6; } if ${ac_cv_lib_rt_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lrt $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_rt_main=yes else ac_cv_lib_rt_main=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_main" >&5 $as_echo "$ac_cv_lib_rt_main" >&6; } if test "x$ac_cv_lib_rt_main" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBRT 1 _ACEOF LIBS="-lrt $LIBS" fi # Checks for header files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5 $as_echo_n "checking for X... " >&6; } # Check whether --with-x was given. if test "${with_x+set}" = set; then : withval=$with_x; fi # $have_x is `yes', `no', `disabled', or empty when we do not yet know. if test "x$with_x" = xno; then # The user explicitly disabled X. have_x=disabled else case $x_includes,$x_libraries in #( *\'*) as_fn_error $? "cannot use X directory names containing '" "$LINENO" 5;; #( *,NONE | NONE,*) if ${ac_cv_have_x+:} false; then : $as_echo_n "(cached) " >&6 else # One or both of the vars are not set, and there is no cached value. ac_x_includes=no ac_x_libraries=no rm -f -r conftest.dir if mkdir conftest.dir; then cd conftest.dir cat >Imakefile <<'_ACEOF' incroot: @echo incroot='${INCROOT}' usrlibdir: @echo usrlibdir='${USRLIBDIR}' libdir: @echo libdir='${LIBDIR}' _ACEOF if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. for ac_var in incroot usrlibdir libdir; do eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`" done # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. for ac_extension in a so sl dylib la dll; do if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" && test -f "$ac_im_libdir/libX11.$ac_extension"; then ac_im_usrlibdir=$ac_im_libdir; break fi done # Screen out bogus values from the imake configuration. They are # bogus both because they are the default anyway, and because # using them would break gcc on systems where it needs fixed includes. case $ac_im_incroot in /usr/include) ac_x_includes= ;; *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;; esac case $ac_im_usrlibdir in /usr/lib | /usr/lib64 | /lib | /lib64) ;; *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;; esac fi cd .. rm -f -r conftest.dir fi # Standard set of common directories for X headers. # Check X11 before X11Rn because it is often a symlink to the current release. ac_x_header_dirs=' /usr/X11/include /usr/X11R7/include /usr/X11R6/include /usr/X11R5/include /usr/X11R4/include /usr/include/X11 /usr/include/X11R7 /usr/include/X11R6 /usr/include/X11R5 /usr/include/X11R4 /usr/local/X11/include /usr/local/X11R7/include /usr/local/X11R6/include /usr/local/X11R5/include /usr/local/X11R4/include /usr/local/include/X11 /usr/local/include/X11R7 /usr/local/include/X11R6 /usr/local/include/X11R5 /usr/local/include/X11R4 /usr/X386/include /usr/x386/include /usr/XFree86/include/X11 /usr/include /usr/local/include /usr/unsupported/include /usr/athena/include /usr/local/x11r5/include /usr/lpp/Xamples/include /usr/openwin/include /usr/openwin/share/include' if test "$ac_x_includes" = no; then # Guess where to find include files, by looking for Xlib.h. # First, try using that file with no special directory specified. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # We can compile using X headers with no special include directory. ac_x_includes= else for ac_dir in $ac_x_header_dirs; do if test -r "$ac_dir/X11/Xlib.h"; then ac_x_includes=$ac_dir break fi done fi rm -f conftest.err conftest.i conftest.$ac_ext fi # $ac_x_includes = no if test "$ac_x_libraries" = no; then # Check for the libraries. # See if we find them without any special options. # Don't add to $LIBS permanently. ac_save_LIBS=$LIBS LIBS="-lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { XrmInitialize () ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : LIBS=$ac_save_LIBS # We can link X programs with no special library path. ac_x_libraries= else LIBS=$ac_save_LIBS for ac_dir in `$as_echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` do # Don't even attempt the hair of trying to link an X program! for ac_extension in a so sl dylib la dll; do if test -r "$ac_dir/libX11.$ac_extension"; then ac_x_libraries=$ac_dir break 2 fi done done fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # $ac_x_libraries = no case $ac_x_includes,$ac_x_libraries in #( no,* | *,no | *\'*) # Didn't find X, or a directory has "'" in its name. ac_cv_have_x="have_x=no";; #( *) # Record where we found X for the cache. ac_cv_have_x="have_x=yes\ ac_x_includes='$ac_x_includes'\ ac_x_libraries='$ac_x_libraries'" esac fi ;; #( *) have_x=yes;; esac eval "$ac_cv_have_x" fi # $with_x != no if test "$have_x" != yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_x" >&5 $as_echo "$have_x" >&6; } no_x=yes else # If each of the values was on the command line, it overrides each guess. test "x$x_includes" = xNONE && x_includes=$ac_x_includes test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries # Update the cache value to reflect the command line values. ac_cv_have_x="have_x=yes\ ac_x_includes='$x_includes'\ ac_x_libraries='$x_libraries'" { $as_echo "$as_me:${as_lineno-$LINENO}: result: libraries $x_libraries, headers $x_includes" >&5 $as_echo "libraries $x_libraries, headers $x_includes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned int _ACEOF fi # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works # for constant arguments. Useless! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 $as_echo_n "checking for working alloca.h... " >&6; } if ${ac_cv_working_alloca_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { char *p = (char *) alloca (2 * sizeof (int)); if (p) return 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_working_alloca_h=yes else ac_cv_working_alloca_h=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5 $as_echo "$ac_cv_working_alloca_h" >&6; } if test $ac_cv_working_alloca_h = yes; then $as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5 $as_echo_n "checking for alloca... " >&6; } if ${ac_cv_func_alloca_works+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __GNUC__ # define alloca __builtin_alloca #else # ifdef _MSC_VER # include # define alloca _alloca # else # ifdef HAVE_ALLOCA_H # include # else # ifdef _AIX #pragma alloca # else # ifndef alloca /* predefined by HP cc +Olibcalls */ void *alloca (size_t); # endif # endif # endif # endif #endif int main () { char *p = (char *) alloca (1); if (p) return 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_func_alloca_works=yes else ac_cv_func_alloca_works=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5 $as_echo "$ac_cv_func_alloca_works" >&6; } if test $ac_cv_func_alloca_works = yes; then $as_echo "#define HAVE_ALLOCA 1" >>confdefs.h else # The SVR3 libPW and SVR4 libucb both contain incompatible functions # that cause trouble. Some versions do not even contain alloca or # contain a buggy version. If you still want to use their alloca, # use ar to extract alloca.o from them instead of compiling alloca.c. ALLOCA=\${LIBOBJDIR}alloca.$ac_objext $as_echo "#define C_ALLOCA 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5 $as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; } if ${ac_cv_os_cray+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined CRAY && ! defined CRAY2 webecray #else wenotbecray #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "webecray" >/dev/null 2>&1; then : ac_cv_os_cray=yes else ac_cv_os_cray=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5 $as_echo "$ac_cv_os_cray" >&6; } if test $ac_cv_os_cray = yes; then for ac_func in _getb67 GETB67 getb67; do as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define CRAY_STACKSEG_END $ac_func _ACEOF break fi done fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 $as_echo_n "checking stack direction for C alloca... " >&6; } if ${ac_cv_c_stack_direction+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_c_stack_direction=0 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int find_stack_direction (int *addr, int depth) { int dir, dummy = 0; if (! addr) addr = &dummy; *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; dir = depth ? find_stack_direction (addr, depth - 1) : 0; return dir + dummy; } int main (int argc, char **argv) { return find_stack_direction (0, argc + !argv + 20) < 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_stack_direction=1 else ac_cv_c_stack_direction=-1 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5 $as_echo "$ac_cv_c_stack_direction" >&6; } cat >>confdefs.h <<_ACEOF #define STACK_DIRECTION $ac_cv_c_stack_direction _ACEOF fi for ac_header in argz.h fcntl.h float.h inttypes.h langinfo.h libintl.h limits.h locale.h malloc.h netinet/in.h stddef.h stdint.h stdio_ext.h stdlib.h string.h sys/ioctl.h sys/param.h sys/socket.h sys/time.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done # Checks for typedefs, structures, and compiler characteristics. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 $as_echo_n "checking for stdbool.h that conforms to C99... " >&6; } if ${ac_cv_header_stdbool_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifndef bool "error: bool is not defined" #endif #ifndef false "error: false is not defined" #endif #if false "error: false is not 0" #endif #ifndef true "error: true is not defined" #endif #if true != 1 "error: true is not 1" #endif #ifndef __bool_true_false_are_defined "error: __bool_true_false_are_defined is not defined" #endif struct s { _Bool s: 1; _Bool t; } s; char a[true == 1 ? 1 : -1]; char b[false == 0 ? 1 : -1]; char c[__bool_true_false_are_defined == 1 ? 1 : -1]; char d[(bool) 0.5 == true ? 1 : -1]; /* See body of main program for 'e'. */ char f[(_Bool) 0.0 == false ? 1 : -1]; char g[true]; char h[sizeof (_Bool)]; char i[sizeof s.t]; enum { j = false, k = true, l = false * true, m = true * 256 }; /* The following fails for HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ _Bool n[m]; char o[sizeof n == m * sizeof n[0] ? 1 : -1]; char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; /* Catch a bug in an HP-UX C compiler. See http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html */ _Bool q = true; _Bool *pq = &q; int main () { bool e = &s; *pq |= q; *pq |= ! q; /* Refer to every declared value, to avoid compiler optimizations. */ return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l + !m + !n + !o + !p + !q + !pq); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdbool_h=yes else ac_cv_header_stdbool_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 $as_echo "$ac_cv_header_stdbool_h" >&6; } ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" if test "x$ac_cv_type__Bool" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE__BOOL 1 _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 $as_echo_n "checking for inline... " >&6; } if ${ac_cv_c_inline+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; static $ac_kw foo_t static_foo () {return 0; } $ac_kw foo_t foo () {return 0; } #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_inline=$ac_kw fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_inline" != no && break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 $as_echo "$ac_cv_c_inline" >&6; } case $ac_cv_c_inline in inline | yes) ;; *) case $ac_cv_c_inline in no) ac_val=;; *) ac_val=$ac_cv_c_inline;; esac cat >>confdefs.h <<_ACEOF #ifndef __cplusplus #define inline $ac_val #endif _ACEOF ;; esac ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" if test "x$ac_cv_type_pid_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define pid_t int _ACEOF fi ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned int _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uid_t in sys/types.h" >&5 $as_echo_n "checking for uid_t in sys/types.h... " >&6; } if ${ac_cv_type_uid_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "uid_t" >/dev/null 2>&1; then : ac_cv_type_uid_t=yes else ac_cv_type_uid_t=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_uid_t" >&5 $as_echo "$ac_cv_type_uid_t" >&6; } if test $ac_cv_type_uid_t = no; then $as_echo "#define uid_t int" >>confdefs.h $as_echo "#define gid_t int" >>confdefs.h fi ac_fn_c_find_uintX_t "$LINENO" "16" "ac_cv_c_uint16_t" case $ac_cv_c_uint16_t in #( no|yes) ;; #( *) cat >>confdefs.h <<_ACEOF #define uint16_t $ac_cv_c_uint16_t _ACEOF ;; esac ac_fn_c_find_uintX_t "$LINENO" "32" "ac_cv_c_uint32_t" case $ac_cv_c_uint32_t in #( no|yes) ;; #( *) $as_echo "#define _UINT32_T 1" >>confdefs.h cat >>confdefs.h <<_ACEOF #define uint32_t $ac_cv_c_uint32_t _ACEOF ;; esac ac_fn_c_find_uintX_t "$LINENO" "8" "ac_cv_c_uint8_t" case $ac_cv_c_uint8_t in #( no|yes) ;; #( *) $as_echo "#define _UINT8_T 1" >>confdefs.h cat >>confdefs.h <<_ACEOF #define uint8_t $ac_cv_c_uint8_t _ACEOF ;; esac ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" if test "x$ac_cv_type_ptrdiff_t" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_PTRDIFF_T 1 _ACEOF fi if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for UUID" >&5 $as_echo_n "checking for UUID... " >&6; } if test -n "$UUID_CFLAGS"; then pkg_cv_UUID_CFLAGS="$UUID_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"uuid >= 1.0.2\""; } >&5 ($PKG_CONFIG --exists --print-errors "uuid >= 1.0.2") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_UUID_CFLAGS=`$PKG_CONFIG --cflags "uuid >= 1.0.2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$UUID_LIBS"; then pkg_cv_UUID_LIBS="$UUID_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"uuid >= 1.0.2\""; } >&5 ($PKG_CONFIG --exists --print-errors "uuid >= 1.0.2") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_UUID_LIBS=`$PKG_CONFIG --libs "uuid >= 1.0.2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then UUID_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "uuid >= 1.0.2" 2>&1` else UUID_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "uuid >= 1.0.2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$UUID_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (uuid >= 1.0.2) were not met: $UUID_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables UUID_CFLAGS and UUID_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables UUID_CFLAGS and UUID_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else UUID_CFLAGS=$pkg_cv_UUID_CFLAGS UUID_LIBS=$pkg_cv_UUID_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBAO" >&5 $as_echo_n "checking for LIBAO... " >&6; } if test -n "$LIBAO_CFLAGS"; then pkg_cv_LIBAO_CFLAGS="$LIBAO_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ao >= 1.1.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "ao >= 1.1.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBAO_CFLAGS=`$PKG_CONFIG --cflags "ao >= 1.1.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LIBAO_LIBS"; then pkg_cv_LIBAO_LIBS="$LIBAO_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"ao >= 1.1.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "ao >= 1.1.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBAO_LIBS=`$PKG_CONFIG --libs "ao >= 1.1.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LIBAO_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "ao >= 1.1.0" 2>&1` else LIBAO_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "ao >= 1.1.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LIBAO_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (ao >= 1.1.0) were not met: $LIBAO_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables LIBAO_CFLAGS and LIBAO_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables LIBAO_CFLAGS and LIBAO_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else LIBAO_CFLAGS=$pkg_cv_LIBAO_CFLAGS LIBAO_LIBS=$pkg_cv_LIBAO_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBASOUND2" >&5 $as_echo_n "checking for LIBASOUND2... " >&6; } if test -n "$LIBASOUND2_CFLAGS"; then pkg_cv_LIBASOUND2_CFLAGS="$LIBASOUND2_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"alsa >= 1.0.25\""; } >&5 ($PKG_CONFIG --exists --print-errors "alsa >= 1.0.25") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBASOUND2_CFLAGS=`$PKG_CONFIG --cflags "alsa >= 1.0.25" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LIBASOUND2_LIBS"; then pkg_cv_LIBASOUND2_LIBS="$LIBASOUND2_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"alsa >= 1.0.25\""; } >&5 ($PKG_CONFIG --exists --print-errors "alsa >= 1.0.25") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBASOUND2_LIBS=`$PKG_CONFIG --libs "alsa >= 1.0.25" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LIBASOUND2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "alsa >= 1.0.25" 2>&1` else LIBASOUND2_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "alsa >= 1.0.25" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LIBASOUND2_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (alsa >= 1.0.25) were not met: $LIBASOUND2_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables LIBASOUND2_CFLAGS and LIBASOUND2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables LIBASOUND2_CFLAGS and LIBASOUND2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else LIBASOUND2_CFLAGS=$pkg_cv_LIBASOUND2_CFLAGS LIBASOUND2_LIBS=$pkg_cv_LIBASOUND2_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBXML2" >&5 $as_echo_n "checking for LIBXML2... " >&6; } if test -n "$LIBXML2_CFLAGS"; then pkg_cv_LIBXML2_CFLAGS="$LIBXML2_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxml-2.0 >= 2.8.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libxml-2.0 >= 2.8.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBXML2_CFLAGS=`$PKG_CONFIG --cflags "libxml-2.0 >= 2.8.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LIBXML2_LIBS"; then pkg_cv_LIBXML2_LIBS="$LIBXML2_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxml-2.0 >= 2.8.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libxml-2.0 >= 2.8.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBXML2_LIBS=`$PKG_CONFIG --libs "libxml-2.0 >= 2.8.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LIBXML2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libxml-2.0 >= 2.8.0" 2>&1` else LIBXML2_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libxml-2.0 >= 2.8.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LIBXML2_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libxml-2.0 >= 2.8.0) were not met: $LIBXML2_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables LIBXML2_CFLAGS and LIBXML2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables LIBXML2_CFLAGS and LIBXML2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else LIBXML2_CFLAGS=$pkg_cv_LIBXML2_CFLAGS LIBXML2_LIBS=$pkg_cv_LIBXML2_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SNDFILE" >&5 $as_echo_n "checking for SNDFILE... " >&6; } if test -n "$SNDFILE_CFLAGS"; then pkg_cv_SNDFILE_CFLAGS="$SNDFILE_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sndfile >= 1.0.25\""; } >&5 ($PKG_CONFIG --exists --print-errors "sndfile >= 1.0.25") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_SNDFILE_CFLAGS=`$PKG_CONFIG --cflags "sndfile >= 1.0.25" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$SNDFILE_LIBS"; then pkg_cv_SNDFILE_LIBS="$SNDFILE_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"sndfile >= 1.0.25\""; } >&5 ($PKG_CONFIG --exists --print-errors "sndfile >= 1.0.25") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_SNDFILE_LIBS=`$PKG_CONFIG --libs "sndfile >= 1.0.25" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then SNDFILE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "sndfile >= 1.0.25" 2>&1` else SNDFILE_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "sndfile >= 1.0.25" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$SNDFILE_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (sndfile >= 1.0.25) were not met: $SNDFILE_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables SNDFILE_CFLAGS and SNDFILE_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables SNDFILE_CFLAGS and SNDFILE_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else SNDFILE_CFLAGS=$pkg_cv_SNDFILE_CFLAGS SNDFILE_LIBS=$pkg_cv_SNDFILE_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBINSTPATCH" >&5 $as_echo_n "checking for LIBINSTPATCH... " >&6; } if test -n "$LIBINSTPATCH_CFLAGS"; then pkg_cv_LIBINSTPATCH_CFLAGS="$LIBINSTPATCH_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libinstpatch-1.0 >= 1.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libinstpatch-1.0 >= 1.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBINSTPATCH_CFLAGS=`$PKG_CONFIG --cflags "libinstpatch-1.0 >= 1.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LIBINSTPATCH_LIBS"; then pkg_cv_LIBINSTPATCH_LIBS="$LIBINSTPATCH_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libinstpatch-1.0 >= 1.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libinstpatch-1.0 >= 1.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBINSTPATCH_LIBS=`$PKG_CONFIG --libs "libinstpatch-1.0 >= 1.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LIBINSTPATCH_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libinstpatch-1.0 >= 1.0" 2>&1` else LIBINSTPATCH_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libinstpatch-1.0 >= 1.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LIBINSTPATCH_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libinstpatch-1.0 >= 1.0) were not met: $LIBINSTPATCH_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables LIBINSTPATCH_CFLAGS and LIBINSTPATCH_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables LIBINSTPATCH_CFLAGS and LIBINSTPATCH_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else LIBINSTPATCH_CFLAGS=$pkg_cv_LIBINSTPATCH_CFLAGS LIBINSTPATCH_LIBS=$pkg_cv_LIBINSTPATCH_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GOBJECT" >&5 $as_echo_n "checking for GOBJECT... " >&6; } if test -n "$GOBJECT_CFLAGS"; then pkg_cv_GOBJECT_CFLAGS="$GOBJECT_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-2.0 >= 2.32.3 glib-2.0 >= 2.32.3 gmodule-2.0 >= 2.32.3 gthread-2.0 >= 2.32.3\""; } >&5 ($PKG_CONFIG --exists --print-errors "gobject-2.0 >= 2.32.3 glib-2.0 >= 2.32.3 gmodule-2.0 >= 2.32.3 gthread-2.0 >= 2.32.3") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GOBJECT_CFLAGS=`$PKG_CONFIG --cflags "gobject-2.0 >= 2.32.3 glib-2.0 >= 2.32.3 gmodule-2.0 >= 2.32.3 gthread-2.0 >= 2.32.3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GOBJECT_LIBS"; then pkg_cv_GOBJECT_LIBS="$GOBJECT_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gobject-2.0 >= 2.32.3 glib-2.0 >= 2.32.3 gmodule-2.0 >= 2.32.3 gthread-2.0 >= 2.32.3\""; } >&5 ($PKG_CONFIG --exists --print-errors "gobject-2.0 >= 2.32.3 glib-2.0 >= 2.32.3 gmodule-2.0 >= 2.32.3 gthread-2.0 >= 2.32.3") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GOBJECT_LIBS=`$PKG_CONFIG --libs "gobject-2.0 >= 2.32.3 glib-2.0 >= 2.32.3 gmodule-2.0 >= 2.32.3 gthread-2.0 >= 2.32.3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GOBJECT_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gobject-2.0 >= 2.32.3 glib-2.0 >= 2.32.3 gmodule-2.0 >= 2.32.3 gthread-2.0 >= 2.32.3" 2>&1` else GOBJECT_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gobject-2.0 >= 2.32.3 glib-2.0 >= 2.32.3 gmodule-2.0 >= 2.32.3 gthread-2.0 >= 2.32.3" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GOBJECT_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (gobject-2.0 >= 2.32.3 glib-2.0 >= 2.32.3 gmodule-2.0 >= 2.32.3 gthread-2.0 >= 2.32.3) were not met: $GOBJECT_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables GOBJECT_CFLAGS and GOBJECT_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables GOBJECT_CFLAGS and GOBJECT_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else GOBJECT_CFLAGS=$pkg_cv_GOBJECT_CFLAGS GOBJECT_LIBS=$pkg_cv_GOBJECT_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for FONTCONFIG" >&5 $as_echo_n "checking for FONTCONFIG... " >&6; } if test -n "$FONTCONFIG_CFLAGS"; then pkg_cv_FONTCONFIG_CFLAGS="$FONTCONFIG_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"fontconfig >= 2.11.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "fontconfig >= 2.11.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_FONTCONFIG_CFLAGS=`$PKG_CONFIG --cflags "fontconfig >= 2.11.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$FONTCONFIG_LIBS"; then pkg_cv_FONTCONFIG_LIBS="$FONTCONFIG_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"fontconfig >= 2.11.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "fontconfig >= 2.11.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_FONTCONFIG_LIBS=`$PKG_CONFIG --libs "fontconfig >= 2.11.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then FONTCONFIG_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "fontconfig >= 2.11.0" 2>&1` else FONTCONFIG_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "fontconfig >= 2.11.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$FONTCONFIG_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (fontconfig >= 2.11.0) were not met: $FONTCONFIG_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables FONTCONFIG_CFLAGS and FONTCONFIG_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables FONTCONFIG_CFLAGS and FONTCONFIG_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else FONTCONFIG_CFLAGS=$pkg_cv_FONTCONFIG_CFLAGS FONTCONFIG_LIBS=$pkg_cv_FONTCONFIG_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GDKPIXBUF" >&5 $as_echo_n "checking for GDKPIXBUF... " >&6; } if test -n "$GDKPIXBUF_CFLAGS"; then pkg_cv_GDKPIXBUF_CFLAGS="$GDKPIXBUF_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gdk-pixbuf-2.0 >= 2.26.1\""; } >&5 ($PKG_CONFIG --exists --print-errors "gdk-pixbuf-2.0 >= 2.26.1") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GDKPIXBUF_CFLAGS=`$PKG_CONFIG --cflags "gdk-pixbuf-2.0 >= 2.26.1" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GDKPIXBUF_LIBS"; then pkg_cv_GDKPIXBUF_LIBS="$GDKPIXBUF_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gdk-pixbuf-2.0 >= 2.26.1\""; } >&5 ($PKG_CONFIG --exists --print-errors "gdk-pixbuf-2.0 >= 2.26.1") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GDKPIXBUF_LIBS=`$PKG_CONFIG --libs "gdk-pixbuf-2.0 >= 2.26.1" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GDKPIXBUF_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gdk-pixbuf-2.0 >= 2.26.1" 2>&1` else GDKPIXBUF_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gdk-pixbuf-2.0 >= 2.26.1" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GDKPIXBUF_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (gdk-pixbuf-2.0 >= 2.26.1) were not met: $GDKPIXBUF_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables GDKPIXBUF_CFLAGS and GDKPIXBUF_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables GDKPIXBUF_CFLAGS and GDKPIXBUF_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else GDKPIXBUF_CFLAGS=$pkg_cv_GDKPIXBUF_CFLAGS GDKPIXBUF_LIBS=$pkg_cv_GDKPIXBUF_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CAIRO" >&5 $as_echo_n "checking for CAIRO... " >&6; } if test -n "$CAIRO_CFLAGS"; then pkg_cv_CAIRO_CFLAGS="$CAIRO_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cairo >= 1.12.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "cairo >= 1.12.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_CAIRO_CFLAGS=`$PKG_CONFIG --cflags "cairo >= 1.12.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$CAIRO_LIBS"; then pkg_cv_CAIRO_LIBS="$CAIRO_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cairo >= 1.12.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "cairo >= 1.12.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_CAIRO_LIBS=`$PKG_CONFIG --libs "cairo >= 1.12.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then CAIRO_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "cairo >= 1.12.0" 2>&1` else CAIRO_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "cairo >= 1.12.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$CAIRO_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (cairo >= 1.12.0) were not met: $CAIRO_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables CAIRO_CFLAGS and CAIRO_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables CAIRO_CFLAGS and CAIRO_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else CAIRO_CFLAGS=$pkg_cv_CAIRO_CFLAGS CAIRO_LIBS=$pkg_cv_CAIRO_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTK" >&5 $as_echo_n "checking for GTK... " >&6; } if test -n "$GTK_CFLAGS"; then pkg_cv_GTK_CFLAGS="$GTK_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-2.0 >= 2.24.10\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk+-2.0 >= 2.24.10") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTK_CFLAGS=`$PKG_CONFIG --cflags "gtk+-2.0 >= 2.24.10" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GTK_LIBS"; then pkg_cv_GTK_LIBS="$GTK_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-2.0 >= 2.24.10\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk+-2.0 >= 2.24.10") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTK_LIBS=`$PKG_CONFIG --libs "gtk+-2.0 >= 2.24.10" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GTK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gtk+-2.0 >= 2.24.10" 2>&1` else GTK_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gtk+-2.0 >= 2.24.10" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GTK_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (gtk+-2.0 >= 2.24.10) were not met: $GTK_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables GTK_CFLAGS and GTK_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables GTK_CFLAGS and GTK_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else GTK_CFLAGS=$pkg_cv_GTK_CFLAGS GTK_LIBS=$pkg_cv_GTK_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi #PKG_CHECK_MODULES([XMLRPC_UTIL], [xmlrpc_util >= 1.16.33]) #AC_SUBST(XMLRPC_UTIL_CFLAGS) #AC_SUBST(XMLRPC_UTIL_LIBS) #PKG_CHECK_MODULES([XMLRPC_SERVER], [xmlrpc_client >= 1.#16.33]) #AC_SUBST(XMLRPC_SERVER_CFLAGS) #AC_SUBST(XMLRPC_SERVER_LIBS) #PKG_CHECK_MODULES([XMLRPC_SERVER_CGI], [xmlrpc_server_cgi >= 1.16.33]) #AC_SUBST(XMLRPC_SERVER_CGI_CFLAGS) #AC_SUBST(XMLRPC_SERVER_CGI_LIBS) #PKG_CHECK_MODULES([XMLRPC_SERVER_ABYSS], [xmlrpc_server_abyss >= 1.16.33]) #AC_SUBST(XMLRPC_SERVER_ABYSS_CFLAGS) #AC_SUBST(XMLRPC_SERVER_ABYSS_LIBS)$ # Checks for library functions. # AM_GNU_GETTEXT for ac_header in stdlib.h do : ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" if test "x$ac_cv_header_stdlib_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STDLIB_H 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 $as_echo_n "checking for GNU libc compatible malloc... " >&6; } if ${ac_cv_func_malloc_0_nonnull+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_malloc_0_nonnull=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined STDC_HEADERS || defined HAVE_STDLIB_H # include #else char *malloc (); #endif int main () { return ! malloc (0); ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_malloc_0_nonnull=yes else ac_cv_func_malloc_0_nonnull=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5 $as_echo "$ac_cv_func_malloc_0_nonnull" >&6; } if test $ac_cv_func_malloc_0_nonnull = yes; then : $as_echo "#define HAVE_MALLOC 1" >>confdefs.h else $as_echo "#define HAVE_MALLOC 0" >>confdefs.h case " $LIBOBJS " in *" malloc.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS malloc.$ac_objext" ;; esac $as_echo "#define malloc rpl_malloc" >>confdefs.h fi for ac_header in $ac_header_list do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in getpagesize do : ac_fn_c_check_func "$LINENO" "getpagesize" "ac_cv_func_getpagesize" if test "x$ac_cv_func_getpagesize" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETPAGESIZE 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working mmap" >&5 $as_echo_n "checking for working mmap... " >&6; } if ${ac_cv_func_mmap_fixed_mapped+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_mmap_fixed_mapped=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default /* malloc might have been renamed as rpl_malloc. */ #undef malloc /* Thanks to Mike Haertel and Jim Avera for this test. Here is a matrix of mmap possibilities: mmap private not fixed mmap private fixed at somewhere currently unmapped mmap private fixed at somewhere already mapped mmap shared not fixed mmap shared fixed at somewhere currently unmapped mmap shared fixed at somewhere already mapped For private mappings, we should verify that changes cannot be read() back from the file, nor mmap's back from the file at a different address. (There have been systems where private was not correctly implemented like the infamous i386 svr4.0, and systems where the VM page cache was not coherent with the file system buffer cache like early versions of FreeBSD and possibly contemporary NetBSD.) For shared mappings, we should conversely verify that changes get propagated back to all the places they're supposed to be. Grep wants private fixed already mapped. The main things grep needs to know about mmap are: * does it exist and is it safe to write into the mmap'd area * how to use it (BSD variants) */ #include #include #if !defined STDC_HEADERS && !defined HAVE_STDLIB_H char *malloc (); #endif /* This mess was copied from the GNU getpagesize.h. */ #ifndef HAVE_GETPAGESIZE # ifdef _SC_PAGESIZE # define getpagesize() sysconf(_SC_PAGESIZE) # else /* no _SC_PAGESIZE */ # ifdef HAVE_SYS_PARAM_H # include # ifdef EXEC_PAGESIZE # define getpagesize() EXEC_PAGESIZE # else /* no EXEC_PAGESIZE */ # ifdef NBPG # define getpagesize() NBPG * CLSIZE # ifndef CLSIZE # define CLSIZE 1 # endif /* no CLSIZE */ # else /* no NBPG */ # ifdef NBPC # define getpagesize() NBPC # else /* no NBPC */ # ifdef PAGESIZE # define getpagesize() PAGESIZE # endif /* PAGESIZE */ # endif /* no NBPC */ # endif /* no NBPG */ # endif /* no EXEC_PAGESIZE */ # else /* no HAVE_SYS_PARAM_H */ # define getpagesize() 8192 /* punt totally */ # endif /* no HAVE_SYS_PARAM_H */ # endif /* no _SC_PAGESIZE */ #endif /* no HAVE_GETPAGESIZE */ int main () { char *data, *data2, *data3; const char *cdata2; int i, pagesize; int fd, fd2; pagesize = getpagesize (); /* First, make a file with some known garbage in it. */ data = (char *) malloc (pagesize); if (!data) return 1; for (i = 0; i < pagesize; ++i) *(data + i) = rand (); umask (0); fd = creat ("conftest.mmap", 0600); if (fd < 0) return 2; if (write (fd, data, pagesize) != pagesize) return 3; close (fd); /* Next, check that the tail of a page is zero-filled. File must have non-zero length, otherwise we risk SIGBUS for entire page. */ fd2 = open ("conftest.txt", O_RDWR | O_CREAT | O_TRUNC, 0600); if (fd2 < 0) return 4; cdata2 = ""; if (write (fd2, cdata2, 1) != 1) return 5; data2 = (char *) mmap (0, pagesize, PROT_READ | PROT_WRITE, MAP_SHARED, fd2, 0L); if (data2 == MAP_FAILED) return 6; for (i = 0; i < pagesize; ++i) if (*(data2 + i)) return 7; close (fd2); if (munmap (data2, pagesize)) return 8; /* Next, try to mmap the file at a fixed address which already has something else allocated at it. If we can, also make sure that we see the same garbage. */ fd = open ("conftest.mmap", O_RDWR); if (fd < 0) return 9; if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_FIXED, fd, 0L)) return 10; for (i = 0; i < pagesize; ++i) if (*(data + i) != *(data2 + i)) return 11; /* Finally, make sure that changes to the mapped area do not percolate back to the file as seen by read(). (This is a bug on some variants of i386 svr4.0.) */ for (i = 0; i < pagesize; ++i) *(data2 + i) = *(data2 + i) + 1; data3 = (char *) malloc (pagesize); if (!data3) return 12; if (read (fd, data3, pagesize) != pagesize) return 13; for (i = 0; i < pagesize; ++i) if (*(data + i) != *(data3 + i)) return 14; close (fd); return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_mmap_fixed_mapped=yes else ac_cv_func_mmap_fixed_mapped=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_fixed_mapped" >&5 $as_echo "$ac_cv_func_mmap_fixed_mapped" >&6; } if test $ac_cv_func_mmap_fixed_mapped = yes; then $as_echo "#define HAVE_MMAP 1" >>confdefs.h fi rm -f conftest.mmap conftest.txt for ac_header in stdlib.h do : ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" if test "x$ac_cv_header_stdlib_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STDLIB_H 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible realloc" >&5 $as_echo_n "checking for GNU libc compatible realloc... " >&6; } if ${ac_cv_func_realloc_0_nonnull+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_realloc_0_nonnull=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined STDC_HEADERS || defined HAVE_STDLIB_H # include #else char *realloc (); #endif int main () { return ! realloc (0, 0); ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_realloc_0_nonnull=yes else ac_cv_func_realloc_0_nonnull=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_realloc_0_nonnull" >&5 $as_echo "$ac_cv_func_realloc_0_nonnull" >&6; } if test $ac_cv_func_realloc_0_nonnull = yes; then : $as_echo "#define HAVE_REALLOC 1" >>confdefs.h else $as_echo "#define HAVE_REALLOC 0" >>confdefs.h case " $LIBOBJS " in *" realloc.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS realloc.$ac_objext" ;; esac $as_echo "#define realloc rpl_realloc" >>confdefs.h fi for ac_func in __argz_count __argz_next __argz_stringify atexit clock_gettime floor getcwd localeconv mblen mbrlen memchr mempcpy memset munmap nl_langinfo setlocale socket sqrt stpcpy strcasecmp strchr strcspn strdup strstr strtol strtoul do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done ac_config_files="$ac_config_files Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by gsequencer $as_me 0.6.37, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ gsequencer config.status 0.6.37 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi gsequencer-0.6.37/config.sub0000755000175000017500000010577512626272145012702 00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2014 Free Software Foundation, Inc. timestamp='2014-09-11' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches with a ChangeLog entry to config-patches@gnu.org. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2014 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 | or1k | or1knd | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | riscv32 | riscv64 \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa32r6-* | mipsisa32r6el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64r6-* | mipsisa64r6el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | or1k*-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i686-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; moxiebox) basic_machine=moxie-unknown os=-moxiebox ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i686-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; c8051-*) os=-elf ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: gsequencer-0.6.37/gsequencer.desktop.in0000644000175000017500000000036112612232514015030 00000000000000[Desktop Entry] Version=1.0 Type=Application Terminal=false Exec=gsequencer Icon=@datadir@/gsequencer/icons/ags.xpm Name=Advanced Gtk+ Sequencer Categories=AudioVideo;Audio; Keywords=audio,sequencer,notation,editor,midi,synth,mixing,effects gsequencer-0.6.37/midi2xml.10000644000175000017500000000372012612232514012500 00000000000000'\" t .\" Title: midi2xml .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.78.1 .\" Date: 2015-06-15 .\" Manual: midi2xml v0.4.2 .\" Source: midi2xml v0.4.2 .\" Language: English .\" .TH "MIDI2XML" "1" "2015\-06\-15" "midi2xml v0.4.2" "midi2xml v0.4.2" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" midi2xml \- midi2xml converts your MIDI files to XML format .SH "SYNOPSIS" .HP \w'\fB/usr/bin/midi2xml\fR\ 'u \fB/usr/bin/midi2xml\fR [\-\-help] [\-\-version] [file] .SH "DESCRIPTION" .PP midi2xml takes your MIDI file from command line and outputs the resulting XML to stdout\&. .SH "OPTIONS" .PP The program follows the usual GNU command line syntax, with long options starting with two dashes (`\-\*(Aq)\&. A summary of options is included below\&. For a complete description, see the \fBinfo\fR(1) files\&. .PP \fBfile\fR .RS 4 Open file from command line\&. .RE .PP \fB\-\-help\fR .RS 4 Show summary of options\&. .RE .PP \fB\-\-version\fR .RS 4 Show version of program\&. .RE .SH "BUGS" .PP None\&. So far I know\&. .SH "AUTHOR" .PP Joël Krähemann gsequencer-0.6.37/depcomp0000755000175000017500000005601612621000400012237 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2013-05-30.07; # UTC # Copyright (C) 1999-2014 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: gsequencer-0.6.37/INSTALL0000644000175000017500000003660512621463700011735 00000000000000Installation Instructions ************************* Copyright (C) 1994-1996, 1999-2002, 2004-2012 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without warranty of any kind. Basic Installation ================== Briefly, the shell commands `./configure; make; make install' should configure, build, and install this package. The following more-detailed instructions are generic; see the `README' file for instructions specific to this package. Some packages provide this `INSTALL' file but do not implement all of the features documented below. The lack of an optional feature in a given package is not necessarily a bug. More recommendations for GNU packages can be found in *note Makefile Conventions: (standards)Makefile Conventions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. Running `configure' might take a while. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package, generally using the just-built uninstalled binaries. 4. Type `make install' to install the programs and any data files and documentation. When installing into a prefix owned by root, it is recommended that the package be configured and built as a regular user, and only the `make install' phase executed with root privileges. 5. Optionally, type `make installcheck' to repeat any self-tests, but this time using the binaries in their final installed location. This target does not install anything. Running this target as a regular user, particularly if the prior `make install' required root privileges, verifies that the installation completed correctly. 6. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. 7. Often, you can also type `make uninstall' to remove the installed files again. In practice, not all packages have tested that uninstallation works correctly, even though it is required by the GNU Coding Standards. 8. Some packages, particularly those that use Automake, provide `make distcheck', which can by used by developers to test that all other targets like `make install' and `make uninstall' work correctly. This target is generally not run by end users. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you can use GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. This is known as a "VPATH" build. With a non-GNU `make', it is safer to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. On MacOS X 10.5 and later systems, you can create libraries and executables that work on multiple system types--known as "fat" or "universal" binaries--by specifying multiple `-arch' options to the compiler but only a single `-arch' option to the preprocessor. Like this: ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CPP="gcc -E" CXXCPP="g++ -E" This is not guaranteed to produce working output in all cases, you may have to build one architecture at a time and combine the results using the `lipo' tool if you have problems. Installation Names ================== By default, `make install' installs the package's commands under `/usr/local/bin', include files under `/usr/local/include', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PREFIX', where PREFIX must be an absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option `--exec-prefix=PREFIX' to `configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=DIR' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. In general, the default for these options is expressed in terms of `${prefix}', so that specifying just `--prefix' will affect all of the other directory specifications that were not explicitly provided. The most portable way to affect installation locations is to pass the correct locations to `configure'; however, many packages provide one or both of the following shortcuts of passing variable assignments to the `make install' command line to change installation locations without having to reconfigure or recompile. The first method involves providing an override variable for each affected directory. For example, `make install prefix=/alternate/directory' will choose an alternate location for all directory configuration variables that were expressed in terms of `${prefix}'. Any directories that were specified during `configure', but not in terms of `${prefix}', must each be overridden at install time for the entire installation to be relocated. The approach of makefile variable overrides for each directory variable is required by the GNU Coding Standards, and ideally causes no recompilation. However, some platforms have known limitations with the semantics of shared libraries that end up requiring recompilation when using this method, particularly noticeable in packages that use GNU Libtool. The second method involves providing the `DESTDIR' variable. For example, `make install DESTDIR=/alternate/directory' will prepend `/alternate/directory' before all installation names. The approach of `DESTDIR' overrides is not required by the GNU Coding Standards, and does not work on platforms that have drive letters. On the other hand, it does better at avoiding recompilation issues, and works well even when some directory options were not specified in terms of `${prefix}' at `configure' time. Optional Features ================= If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Some packages offer the ability to configure how verbose the execution of `make' will be. For these packages, running `./configure --enable-silent-rules' sets the default to minimal output, which can be overridden with `make V=1'; while running `./configure --disable-silent-rules' sets the default to verbose, which can be overridden with `make V=0'. Particular systems ================== On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC is not installed, it is recommended to use the following options in order to use an ANSI C compiler: ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" and if that doesn't work, install pre-built binaries of GCC for HP-UX. HP-UX `make' updates targets which have the same time stamps as their prerequisites, which makes it generally unusable when shipped generated files such as `configure' are involved. Use GNU `make' instead. On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot parse its `' header file. The option `-nodtk' can be used as a workaround. If GNU CC is not installed, it is therefore recommended to try ./configure CC="cc" and if that doesn't work, try ./configure CC="cc -nodtk" On Solaris, don't put `/usr/ucb' early in your `PATH'. This directory contains several dysfunctional programs; working variants of these programs are available in `/usr/bin'. So, if you need `/usr/ucb' in your `PATH', put it _after_ `/usr/bin'. On Haiku, software installed for all users goes in `/boot/common', not `/usr/local'. It is recommended to use the following options: ./configure --prefix=/boot/common Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option `--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified `gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for `CONFIG_SHELL' due to an Autoconf limitation. Until the limitation is lifted, you can use this workaround: CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of all of the options to `configure', and exit. `--help=short' `--help=recursive' Print a summary of the options unique to this package's `configure', and exit. The `short' variant lists options used only in the top level, while the `recursive' variant lists options also present in any nested packages. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--prefix=DIR' Use DIR as the installation prefix. *note Installation Names:: for more details, including other options available for fine-tuning the installation locations. `--no-create' `-n' Run the configure checks, but stop before creating any output files. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. gsequencer-0.6.37/NEWS0000644000175000017500000000000012612232514011354 00000000000000gsequencer-0.6.37/ChangeLog0000644000175000017500000004311512633241254012451 00000000000000ags (0.6.37) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed missing GMainContext acquire in ags_gui_thread.c * fixed NULL pointer accessing by moving code * fixed buffer-overflow because of swapped indices in ags_recycling.c ags (0.6.36) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed introduced bug in ags_ffplayer.c because of missing mapping recalls ags (0.6.35) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed SIGINT while accessing recycling_container being NULL in ags_channel_init_recall() ags (0.6.34) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed wrong acquisition of AgsAudioSignal in ags_recall_recycling.c ags (0.6.33) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed restore of AgsFFPlayer * implemented AgsStartReadFile task * modified startup of thread and file launch as reading from files ags (0.6.32) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed missing offset of loop audio data with lower frame count ags (0.6.31) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed loop audio data with lower frame count than buffer size * fixed memory corruption with freed list in ags_notation_cut_selection() * fixed toggling toolbar editing tool after restoring from XML file * work-around deleting GList notes of AgsNotation ags (0.6.30) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed AgsFFPlayer loading Soundfont2 ags (0.6.29) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed dead-lock while selecting notes within note edit * fixed integer-overflow in ags_delay_audio_run_notation_alloc_output(), ags_delay_audio_run_notation_alloc_input() and ags_delay_audio_run_notation_count() * fixed wrong-lock order in ags_play_notation_audio_run.c * fixed buffer-overflow in ags_audio_signal_create_audio_signal_with_frame_count() ags (0.6.28) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed non-atomic access to atomic flags of AgsThread in ags_start_devout.c * reverted ags_gui_thread_run() functionality * fixed initial value of LADSPA plugin as reading from file ags (0.6.27) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * work-around in ags_notation_remove_note_at_position() to fix memory corruption ags (0.6.26) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed NULL pointer during key editing in editor * fixed race conditions in pattern and note edit * fixed missing reset link in ags_notation_add_note() * fixed access to invalidated pointer in ags_notation_remove_note_at_position() ags (0.6.25) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed ags_thread_find_type() and ::run of all thread implementations to be safer * fixed dead-lock while pasting notes that caused application to crash ags (0.6.24) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed dead-lock while open XML files * fixed misconfigured port ags (0.6.23) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed REVERSE_TAB to escape focus of AgsDial by forward control keys * fixed _File mnemonic in menubar ags (0.6.22) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed relative path to gsequencer while applying properties ags (0.6.21) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed restoring and allocation of AgsLineMember dimensions * fixed SIGINT while reading XML files including AgsRecallLadspa ags (0.6.20) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed unrolled functions to have correct stop * fixed selection in ags_pattern_edit_callbacks.c and ags_note_edit_callbacks.c because it used wrong context * fixed ags_recall_real_cancel() because children field might have changed ags (0.6.19) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed accessing NULL pointer in ags_synth.c * fixed accessing NULL pointer in ags_ipatch.c * fixed accessing NULL pointer in ags_ffplayer_callbacks.c * fixed missing lock of mutex in ags_playable.c ags (0.6.18) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed volatile thread tree accessors * refactored by removing AgsAudioLoop fields and replacing with ags_thread_find_type() * work-around for resetting link and causing crash ags (0.6.17) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * enrolled built-in functions ags (0.6.16) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed refactored code of ags_channel.c because of bugs ags (0.6.15) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed crash while unlink channel and then do playback because recycling wasn't updated properly * fixed dead-lock while muting pad * enhaced AgsMachineEditor to be thread-safe * modified ags_audio_loop.c and ags_gui_thread.c to process in parallel ags (0.6.14) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed NULL pointer in ags_line.c as accessing mutex manager * fixed NULL pointer in ags_drum_output_line.c as accessing machine while setting channel ags (0.6.13) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * added even more mutices to guarantee thread-safety ags (0.6.12) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * added more mutices to guarantee thread-safety ags (0.6.11) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed race condition caused as stopping the engine ended in a dead-lock ags (0.6.10) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed startup dead-lock * implemented ags_main_loop_get_tree_lock() ags (0.6.9) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed missing notation due to refactoring of 0.6.8 ags (0.6.8) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed super-threaded scope audio and channel to be thread-safe * refactored ags_audio_set_audio_channels() and ags_audio_set_pads() * improved ags_channel_set_recycling() to instantiate AgsRecallID * enhanced super-threaded scope recycling but is probably not yet ready * enhanced ags_recycling.c to use mutices in view of super-threaded computing * enhanced ags_audio.c and ags_channel.c the use of mutices ags (0.6.7) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed crash related to XML IO of AgsFileLink * implemented ags-envelope recall but it's not tested, yet ags (0.6.6) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed modified default thread model in ags_config.c what caused certain crashes without ECC * extended AgsFileLink with field audio_channel see next * improved link editor file chooser to let you select audio channel ags (0.6.5) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed ags_pad_play() to contain cancel code instead of playing again on toggle * modified default thread model in ags_config.c what caused certain crashes without ECC * implemented loading GTKRC from $(HOME)/.gsequencer/ags.rc ags (0.6.4) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed audible feedback of note edit to play actual length of note * fixed not connected line member * fixed missing value_changed event in ags_dial.c * removed built-in styles ags (0.6.3) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed to shrink of notes by keyboard to enable initial size * improved user's manual docbook XML documentation * implemented AtkAction interface in ags_dial.c and key-bindings ags (0.6.2) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed buffer attack in ags_buffer_audio_signal_run_inter() * fixed NULL link within link editor to be shown correctly * fixed playback of linked input * implemented file link in link editor * implemented audible feedback of AgsPatternBox, AgsCellPattern, AgsPatternEdit and AgsNoteEdit ags (0.6.1) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed crash while clicking AgsPatternBox pad * fixed toggling all selected pads of AgsPatternBox pattern * enhanced prelight of focused AgsPatternBox pad ags (0.6.0) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * Implemented basic accessibility thus refactored AgsDrum and AgsMatrix. Further enhanced AgsPatternEdit and AgsNoteEdit. ags (0.5.12) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed ags_channel_set_link() and ags_channel_set_recycling() * fixed unlink while ags_audio_set_pads() and ags_audio_set_audio_channels() ags (0.5.11) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed time calculation using absolute position for AgsExportWindow and AgsNavigation * fixed fundamental timing issue which caused the engine to be delayed ags (0.5.10) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed grained control range * fixed more precise time calculation * fixed AgsDial wrong arithmetic expression * fixed time calculation * fixed crash while open unsupported files * implemented AgsAsyncQueue interface in ags_task_thread.c to avoid race-conditions * fixed AgsDrumInputPad playback ags (0.5.9) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed cliped LADSPA data ags (0.5.8) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed auto-scroll * fixed time calculation * fixed copy & paste * fixed ruler * fixed crash during extensive scrolling * fixed export duration and difference to playback time ags (0.5.7) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed crash during unavailable audio file * fixed buffer size preference for thread frequencies ags (0.5.6) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed memory leaks related to GValue in recalls * fixed memory leaks in ags_display_tact_launch() as well for ags_toggle_led_launch() and in some GUI callbacks of them * fixed memory leak AgsReturnableThread to clean disconnect handler * fixed thread frequencies and delays * implemented code alter macro AGS_USE_TIMER ags (0.5.5) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * enhanced thread-safety * fixed ags.conf per file base * reducing thread-cycles per second in order to target performance problems * fixed allocation of ags-buffer ags (0.5.4) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * implemented ags.conf per file base * cleaned-up recalls allocation ags (0.5.3) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed export duration * fixed improved AgsDial * fixed dead-lock for to many calls to AgsChannelThread ags (0.5.2) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed memory leaks accessing AgsConfig * fixed dead-lock while stop playback * improved drawing of animations ags (0.5.1) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed ags.xsl removed wrong division, note use segmentation to adjust appropriate playback rate * fixed file open dialog callback * fxied calculate time by segmentation * fixed pattern mode hint for notation * fixed reading bpm setting from ags.xsl generated files ags (0.5.0) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * implemnted first super-threaded context for AgsAudio and AgsChannel * fixed replace deprecated GtkFileSelector for opening files ags (0.4.2.92) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed crash while hot-link matrix and synth with multi-output * implemnted segmentation ags (0.4.2.91) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed multiple occurence of recalls * fixed potential infinite loop while reset recall ids * migrated away from hide references to recall id status * fixed proper unlink as adjusting channels * fixed allocation of ags-buffer * fixed selective creation of recalls in ags_recall_recycling.c * fixed remap of recycling recalls for available destination in ags_recall_channel_run.c * minor bug-fixes * note speed may differ for now ags (0.4.2.90) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed led in sequencers * fixed missing mutex in matrix tact callback * fixed cut to nowhere * fixed ags.xsl notation translate * fixed redraw of piano * fixed redraw of matrix * fixed deny output pads to be resize for mixer ags (0.4.2.89) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed bug in ags_recall_channel_run.c that caused destination not being mapped ags (0.4.2.88) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * improved auto-scroll to be loop aware ags (0.4.2.87) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed auto-scroll ags (0.4.2.86) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed version string from autoconf * fixed chrash during removing not existing machine selector * added experimental auto-scroll capabilities ags (0.4.2.85) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed allocation of piano * fixed grained mutices for accessing notation * fixed cursor in edit widgets ags (0.4.2.84) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed dialog owned by machines to destroy * fixed make machine selection dialog modal ags (0.4.2.83) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed playback within AgsDrumInputPad * fixed thread-safety of editor with AgsMutexManager * hided playback button of AgsDrumInputPad open dialog * fixed spin button in AgsDrumInputPad open dialog ags (0.4.2.82) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed default device as reading XML files * fixed floor to round in XSL for reading MIDI notes * fixed unlink AgsAudio on remove * fixed termination of sequencer in ags_machine_play_callback() * fixed crash during channel resize if not shown in editor, hide widgets instead of remove * fixed destroying of machines removing editor widget * fixed paste notes * added flag to AgsDevout to fix unavailable soundcard ags (0.4.2.81) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * removed useless controls add/remove in machine property editor * fixed navigation duration * fixed seeking * fixed crash according not properbly cleaning up after playing ags (0.4.2.80) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed renaming * fixed audio channel bug in notation recall ags (0.4.2.79) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * renamed binary and project * added missing copyright notice ags (0.4.2-78) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * implemented distinct between sequencer and notation loop * fixed unnecessary return if notation reaches notation-loop-end * fixed selection for pattern and notation editor * refactored fix auto-scroll * added exclude sequencer for export dialog ags (0.4.2-77) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed possible NULL pointer in ags_play_notation.c * fixed editor crash and missing notebook * implemented AGS_AUDIO_REVERSE_MAPPING flag, it indicates channel mapping should be interpreted in reverse order * implemented invert tool for notation editor ags (0.4.2-76) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed boundary for matrix clipboard * fixed paste to mono or different audio allocation * fixed piano shift to correct direction * fixed reset vscrollbar in editor widgets * refactored ags_editor.c * fixed already selected machines in editor not to add again * fixed audio channel resize for mono machines, disabled it in machine properties dialog * enhanced LADSPA browser refresh ags (0.4.2-75) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed deactivate led in AgsDrum and AgsMatrix * fixed multi-output * fixed adjusting audio channels for tabs of editor * implemented shift piano thereby fixed piano allocation ags (0.4.2-74) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * fixed AgsPatternEdit focus, selection, coloring of selected notes and a crash related to wrong function call * added exclusion for sequencers by using "exclude sequencers" checkbutton in navigation * added copy & paste pattern context menu items to drum and matrix * fixed AgsMatrix input * fixed NULL pointer error in ags_count_beats_audio_run.c ags (0.4.2-73) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * back-ported AgsPatternEdit * implemented basic editing key strokes like Ctrl-c, Ctrl-v and Ctrl-x for AgsPatternEdit ags (0.4.2-72) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * implemented basic editing key strokes like Ctrl-c, Ctrl-v and Ctrl-x * implemented seeking for paste if position tool is selected * updated clipboard version to 0.4.2 ags (0.4.2-71) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * commented-out two unimplemented menu entries in editor's machine selector. Add and remove tab you may do so by using resize tab of machine properties dialog. * implemented select-all in editor * fixed multi-channel editing mode * fixed refresh of GUI after cut or paste * fixed crash related to XML IO ags (0.4.2-70) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * minor bug-fixes ags (0.4.2-69) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * added XSL file to transform output of `midi2xml` using `xsltproc` ags (0.4.2-68) [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ] * added `midi2xml` the MIDI file to XML parser gsequencer-0.6.37/config.guess0000755000175000017500000012355012626272145013226 00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2014 Free Software Foundation, Inc. timestamp='2014-03-23' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD # # Please send patches with a ChangeLog entry to config-patches@gnu.org. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2014 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case "${UNAME_SYSTEM}" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval $set_cc_for_build cat <<-EOF > $dummy.c #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` ;; esac # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW64*:*) echo ${UNAME_MACHINE}-pc-mingw64 exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; *:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="gnulibc1" ; fi echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-${LIBC} else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi else echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; openrisc*:Linux:*:*) echo or1k-unknown-linux-${LIBC} exit ;; or32:Linux:*:* | or1k*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; padre:Linux:*:*) echo sparc-unknown-linux-${LIBC} exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; *) echo hppa-unknown-linux-${LIBC} ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-${LIBC} exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-${LIBC} exit ;; ppc64le:Linux:*:*) echo powerpc64le-unknown-linux-${LIBC} exit ;; ppcle:Linux:*:*) echo powerpcle-unknown-linux-${LIBC} exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown eval $set_cc_for_build if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi fi elif test "$UNAME_PROCESSOR" = i386 ; then # Avoid executing cc on OS X 10.9, as it ships with a stub # that puts up a graphical alert prompting to install # developer tools. Any system running Mac OS X 10.7 or # later (Darwin 11 and later) is required to have a 64-bit # processor. This is not true of the ARM version of Darwin # that Apple uses in portable devices. UNAME_PROCESSOR=x86_64 fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; esac cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: