From a76689801d1544dfd2fbbb289d121c0d24228e3a Mon Sep 17 00:00:00 2001 From: FrogAi <91348155+FrogAi@users.noreply.github.com> Date: Tue, 27 Feb 2024 16:34:47 -0700 Subject: [PATCH] Alert volume control Added toggles to customize the volume level for each individual sound. --- common/params.cc | 8 ++++++ .../assets/toggle_icons/icon_mute.png | Bin 0 -> 12576 bytes selfdrive/frogpilot/ui/visual_settings.cc | 27 +++++++++++++++++- selfdrive/frogpilot/ui/visual_settings.h | 2 +- selfdrive/ui/soundd.py | 21 +++++++++++++- 5 files changed, 55 insertions(+), 3 deletions(-) create mode 100644 selfdrive/frogpilot/assets/toggle_icons/icon_mute.png diff --git a/common/params.cc b/common/params.cc index 975e846..bfe0e95 100644 --- a/common/params.cc +++ b/common/params.cc @@ -212,19 +212,27 @@ std::unordered_map keys = { {"AccelerationPath", PERSISTENT}, {"AccelerationProfile", PERSISTENT}, {"AggressiveAcceleration", PERSISTENT}, + {"AlertVolumeControl", PERSISTENT}, {"ApiCache_DriveStats", PERSISTENT}, {"CustomAlerts", PERSISTENT}, {"CustomUI", PERSISTENT}, {"DecelerationProfile", PERSISTENT}, + {"DisengageVolume", PERSISTENT}, {"DriveStats", PERSISTENT}, + {"EngageVolume", PERSISTENT}, {"FrogPilotTogglesUpdated", PERSISTENT}, {"FrogsGoMoo", PERSISTENT}, {"LateralTune", PERSISTENT}, {"LongitudinalTune", PERSISTENT}, + {"PromptVolume", PERSISTENT}, + {"PromptDistractedVolume", PERSISTENT}, {"QOLControls", PERSISTENT}, {"QOLVisuals", PERSISTENT}, + {"RefuseVolume", PERSISTENT}, {"SilentMode", PERSISTENT}, {"StockTune", PERSISTENT}, + {"WarningSoftVolume", PERSISTENT}, + {"WarningImmediateVolume", PERSISTENT}, }; } // namespace diff --git a/selfdrive/frogpilot/assets/toggle_icons/icon_mute.png b/selfdrive/frogpilot/assets/toggle_icons/icon_mute.png new file mode 100644 index 0000000000000000000000000000000000000000..3e31a137877bd88839f0c9e13019eaf2c659cd9e GIT binary patch literal 12576 zcmc(F`y$>j8bzOFKwp%8nECT>oMzXhY z2LK7bBEb?V_)mEH^)&n^bbB|<)ZQ@M`Ux(mg+Yik0Rmf)xo z|9%2SOA@F$#;dHiA$EDb>4|+bO7lLlZ0gZ?|EPJ?_;`T+s`cbMQ?r6Qp9%+~CqInZ zLx%p(KGXyEcpy4_YA5cyMo<(fJWur3h&1IeeKptOpUh=|+N9_Q2BHs<;vEUwIqUJ? z@0^U~Zs2Q?dhHu*IK$-HN2&P$&?N*-x0s?vrWNnA_n08|n}BH(YXN}2#XxlXNK5nC z^D3fiStdLD+j*7C0l58`yF7e~x#iK%O8$n3*j>V2Gyu4IX8p_zH~PqvJW)obU_L#JuF8BoeA@n0JyGHOP(t!7=`|Hf(DeQKZecC2g?{$R%H8q_cyMP~-qGJ-nMjHEQ&G+VIzr zbC#4Oo*kCPMX|U=`g}W@Y2vH<7%{=P?9Zs7P0OZ642&Q{ht+SPsm#u+lvKvC;%YWa zlICn!y|Q~70DC=-D^PparRFu`u-g3nqY3K3pBlCv*x5=4ULFR3r9QkH`2K_SU%Egw zy<-iC7s zvBU!)r(1>`>P8T3AV(M4Du7-xrpw3y8nTnK0w@f`qlm}=i}cxd&>uqhJLhx z0(szXI1uefvLi)iG9+-{Z#)>>GQf@1qc_6gVECahxHoCpbVH9f+1D`K8xHv4*ql32gSf{?I$u zOA3Iru^LbNfD771$ttYU2E?*~=x|cD&d7)X$=jh}fIGFUA?EjeJwQ857HRS&y3Hfu z26dID+DDQ?FWtfUd=$)}M$6r^9D&CG7Z>f$@h+(rCP3RzI5Bky@1s<3=$bSR8%*A8 zBV9pyD@mkX8%$Vz^9;=wuY&+BoGbGo88t^KStbM8e05`{Il*54z7H~oGk|j8@NVpt z&5{6DzD1Zkf);qJvOA0=SG`hq2F=PCA)iiRD2SJOxCEJF6fwA$lZyW?S8&AQ_*J3I zhqYh8FNbBE z>aZChk}5NWNwia0LZ{@ym{UcJ_jn&&ewcBT;X3WF9|h8+1_Gf~$?`b4%qE^l9*90Q z@h|t z5#_{^Zw<_8Mhsd`e21QtHBG{7>4S+meonZg+EX9*ALki*X)<)1MnM^fq z_b9?+#8x_|OO>>`VaC8#T6f1vNn$a|Mq1Y`e4^Q@q$9>B@{+CHmZ@)l!rdOqn?`r0 z3p)jt0>-i)PY-}|AX3t3PRzgKMLhXDhiPrK#!4*j35N%;X9^ifXN8{DPV}2dbvI;j zTn0TJ`o{0Lg2F$_<*jq@^i!w|Nz2H!dM%zlh%_BU_qMRNpF3jPLK>okTi&}}QrjWT z>m$+3)|j1JCrhLMeke{5<4H-_zst(sM&nP z+=$f?Ukdor$zGEse92QqH+FJU6EIh0Wmw8ND1ZOvzb^ea0!aMXOIwqIx%xtnG}`ijmEVZVxTiNRk-XEyUQyJ_r1Zh0!)zz+A8Vn^WJEZ?1$gl`is;)(dl(}=B zmRkJwZVmZ&E}Zyc>!nype~Z1CayyU64R5Mi=85v;T89$9P{EZ~w5|$4OfV%uqXYzl zbSfdIUxqYl|BI(bRAY}>k}9tX{V7>CPMorVx%%#HmlBbN5>Cjk{$yEPqjv`Ie8P^Q zcmJ$+|DafR##VjE}hjasr8nWsfhc5SFrnKkN!XKAjWG zDzhE6|FU^t?hhop4Uq%zbW8?#eIqxfU{%4|tEm&^Ln~xh7y1-jr6*C4+^Gge^OaXu zS-WYL9|fzhIAuw?#2C64 z_ddd@1jc4aay!DFD(@=o0RBBljvx`dh8s5zQ6dJ-2{tGhqGkq_;EHrrFrG@9SrF`6Q^KYWl~@atk!gK3$>+rCHi?uB*ohx< zaznbJjkj2H?25xFW01Bc!KO$DSPW5!STiiOEnkbD$dkjq+rg18wiaGSb}3AvUZ1l- zls~WW3x-z1x$eQ8!*^>;Z%6P}Eb8(JTaYc3BDF&q57*kJqVInCu=n|Db6oJ!+Y%}g zZnDNRS#6Ogx+=?QttbzGtkR}q#?VB4_Sk3ItCUyW*G0pE_qOr&$w;{ii+i4!ugTxi ztwFf|fH7saFp#jQ6o0bIzrt74=TKq4oFfLc2{sOjRR2Y_NEkD%IcGC}GFbgIORrz; z=WqT+Y&}e_<#1iz@;X2N;cc}rcjh=mSl!dz_T0EyQebIUB3-UHV_hmGXv${9;pT2K zEH)9Wn@&!MVzzUvX)!u{Xdt5-{hV)XxM* z_(y6LmP&NkMkqJHKBHm0+yCf7??wnif9>MrA2PErcpuVPT^nc&@4t$i8aOlC}}(y(`_Qd zBJSFcjQJ{vx0B|};{8t#MB62s3L3A+w;x;2FB+JOh^*T^&SvB1vKTWZ)s!K{h(UdV zO|}k@*d2uK+s4_E0c=923h>c8IZ2U^#`H*PC#F8dJk2PK@nd;shz7@#@pJIRY;Xfo zcRBJ^mvs=lTxN(qeE(*rJ7kr_O;j3 ze3ev(LmYfCX~H!mcyw~Q^hmKQu*K^YsZOrQuSE2c@SBX@9r1x@`?!P3*y5w)$vVbE zT~YJ<*6z})-%-j65qiqbvw9 z(%q`dS2AYm5$yd2<|N6dtSKq9O``7u72Va^mjtIs2Aiv+;G)mD5t)=YhJJCi(~yJl z7CpkVx*Tvg#R741Xr$=bxwg+R9qde}++&8U!7|p9Cq0Hmr@7YQzQxypBGm%H+8g%% z*@H^PMS(A;^Lwhpv@In8eZ>2q!*r6T2~76yd|wUk2(9+h{*;8fIsNNMR3yCFmorFf3)4%aZL)M2rCr*f6d|(`!CUs|ZAXLM z6Te|{_1^B{m~D>Uq$lIRPMn6=O+lcyEj*)S>!}H4SlxN(KtQx4M6bp6!^NyXHygS@F-e-)yNA9tI zcjwH}c4v+hkS8zm_ML#K$K6X^3)R!kyHN_F6j*pp?y11#faDeNg7N3v4>n@1%l2L%)JeYU~BT) z^W~Yj(cAu}T-*Gmk~?SKt)V51pk>*_D?JS+g|eqTx!G2 zBc9ynjn&c_D5M%k15Y*hG_HG(;Ut`{gBbqF;)X-hfOu& zxaG3~A4mLme{w1`=oB=#0hhR(CsK5l_PqP|*n|m9YEGxu=+S%b)Mbp(24m*F5UsuD4sKsYy4DA67J0SKe|u6$ZOiR zF-DU`E3zckjS8A^{C`RBZ36gRC&;G`P!dkm&-|wODi)NK?ozf;{&Sb7?vVpL6Z1q@ zI<8VQV6tp!hnX!X&8LESnI#F6- zn?0g@iORfIOAGOl9S5c;gpGSRQ6<(+LwY0^7zkeC=E#%;T}7%x=*0L^JpEut$^B8s z1`UFv-G>nYb4R>Vd@lD^w})f6an2DSLzJxh8<8UKYGmxK$=4wz!6@gyRvcmuB8yTm zhL@t_?=K}HbW~HPc3x_g+QVia@8#`}Kv&8YjtdN+vTwBGxL9m4KAqx3SprqP$#fRq z+QLfA?Z>xGUEkExK@*;Xy9iMj+NY)jgO_O-p9%nW>Bu= z`mDmD=EA02>?5O~2i4zLtx#-T1JR44HUEUR^Yrw$ZV2)=j?!EQ6sX%nC)AdvEP4CQ zf)*nWt-ZPbc16H*c9z3*D^FGbm=>S@0>%ww=TbJh5QRoH`0 zqdTOPp02pMIsmO69{fjT6ExTt+|H}Q5$N|$Z!hV6I}hWTionv5Q$P!gY<_%ylAp2m?yize3J6yW+T-s~z8O@RIwq-M_h0Anm{#_yE12#}Of_*bud1(?UGpH< z;=|~UY6Bo>DzIhla&hk>$QU9Vh>`=*R>=;;6sz#c&DE=6bbHDjwfE8sI!?)2g)yqW zHT}rHHVO>P4GUtf+Abe3vmThes-3cAH;dh*%a?`zuqKr`u7E9GX6(J8qBk!{8Z$O? zz8^AY)y0Kw;v3D^K=;cZRF?*{l#d1(<55Uw2vJ-zu#*m~m_nv?n6+_ZNt|4o?}`FR zdzk(|G4W{cwHsA>YC$`7>{Wlj^)t@|9dKh$dvZ+4wZ)aPm>A@cAP<7B_-OBeSvONH z#PAIDS3YvAoTdFX`6(M_?X^(kV2z62(yVQ(AtQTBq^3qc)vfu;VoJ!6$-SiMgD^A{ zD8g(-PvUl~x-6BM#}r++jXlk@8AU|4;ON2i&WMy#Q#(tnYchJ=h@{AUMXOczBVa@$ zHMo~(2XLP?MoJ5%_TC#OG`#Q5;`^_CyEqJ4v1B_STWo_|Z(f-PN+ zO{azxtibv^g+O4`b^`S@WXEXWfz1(vwUtTBZh%drPL*$XCmMn64J}0FWz2bJ2raen z~V4{{j- z7mX(n9UJu}ERmK zBmS5|uEdLHKWVG#XN-&E{KLq#o}4lmm_NQ4k+jXMD%AA&PyyB6a4pB%=nZVj(@ZWbRHgkQ-#pg-1^f5~w}81jb^DN5Q`?ZwJ;>h_%e zV{PN5CN#=n3N{6r5xqna#+aJiC)l8AHDqJOe}AkE2k*5RM*u(;C~^C_Y)f9O;>c zHLm|mqP~1@rwI}<-R{RzgFA!NSgIsuS(AN{0<}4#W>;#j#J^7qsZO~t-4!Xp_}9p_ zC@XvDs~rUIHmeGYrjd<`klHRz-gMn6SMw~1U%#L8z@ZmpHEOPf#)6?{xB=YUIoq|% z0N)7xqNf+HFW&KOkfG@q3U$>l1JLnKi| zUAWkh*;`SWFT>hUVQIDtar$_1r(_x?3VCUG8lHe*VUnM-3Zi;F@Yb5%4}y%)N+|;} z#9!IH6rD0OtJ*y}^d>T`=lylKdGV6Vp2j+O!8`0l3&=bX;o1O;C*7k+o^(6nF?$T1 z?CYDJUK{xeX_FYW*rbW2gq0Rg&J zb)tEs>fHrBDZdY^yp^W|#vfPkyaXlGhNh4&L);Jra58{;?tlx?N+7o2``B;jFPjiK z*`KU+0nmE9;;}HS!3`f35sfsD_Dg@{7Y{jc&!E=8r^B8g%nRA4_dFg}NGa#!)0~|p z)yp4Z$D^&|~t?T`*U2jBl;hV5#Eg{pm9W$Ny2g@&aF zz&<*PvK|(wdb#>gMQ*_TtPb_-37e`dsnBo_)XH;j%fARhQ+HCq{U)yRtIq?@WYZiO@f^)1aEV$=gR9*vF4@~xOVzPMXOBB?(+(iq7@sL18w_7<>bA5>fTTW8_c|4M} z)D3B>S2j3bdR7aBFPIc?#W}F1-2lfQnfA#VLB~5w-&T=SPllQyW$n@d;L`czb4Rni z5vTPCtfj-75ca>!0->ZD2jqWDz=A>Gfzn(Hm;ztQS=iQs_9Fo&SD$ufeJxxGHz42F zC%*?Z^mD-we*M@%8r>1kThWdX!ITUdm-@^5GLqoMQwNf^qZhoX+v!PP308sc?SCsO zeUt^VZv1hT0cmJsZ(Tm_%`W6#Oj>Ocrt8UC=nVTdF6X?@xMO( zQcTmy1L?fm2Tvb~mxN58Ru@mEDyqq--wDFgZwyntrcnEf&wi+ys)p7Y41=GfGXnfE zfWU5CZULUpZ7V?;BJ2;55|@_(@J|Wq^<(xc&oy}UGUN|7d_&Lq=XFH@6V;`+tv!$* zt{=#zG8YW&Ln6*`y&|9kI1-nu-&N(vauE--qlQSvhn55CNl5De3(vxH|AFUv|0KY@ z-%COOneFKEr$k4VME#>BFSwiCEtex5?#~;*^LtA^dINRYP=Y`9n!F(+`J5Fjkv=h{ zL9}M6Mb6hakCoJX-z5me_#VVbr9M72|E;L+^5A1wT74<*1&DyNx1Um2oO4+`r;AVZ zK3_T5G6C5Nb-B5mjD&ay#C()q6jIfse3^Hk>*6lBF8g1vHNp3L5S^9iQ%LiGt_-@6 z`|E*~v#=htK&OvApDh7hiuq1Jv)He@3sGkdos*J6JL2RLFU;v@Y{9pmk?F-i#|Kfj zLsb$b6%Wx|l%DiJU(ZRc5rG!J9|q|cM-}L~7P|Zt#iC{Y8&y}_w(hh;iAv&+QjSQI z@*o;;y_G$7)l;qT7l|s$f{xe;;^FaY99h3FTQxhHCyUZ8z08jw>ehV>kjRmPSIe%R z7S=cUm{Yxwvxf_jV#rS+#*~T?!_1ebP<4!P?LPyar=THiFO+1lkGuJXTteOyR|w=c zNDq+7<`%QxFG35eGZ~IAi%}U`tq^Mo-&S>vw`oVzf1iqU6RTkZkQF~q`H@d0;Gn@j zBuwXj8Hn~EMcIr7YINeoHP#SPgYK{ipu|ItQyht=Ffz;HhVMg|`?$-QbFURZ#a%TV zak5WoZ+wcW)P{6n<8k@lpR&aplbUN$_)8q9C26#n6`(jJN;*WP|=Uol)W zUvxII@Da%ApQBl3P7~k^937+JjBM&Zk^egE8oPu!WB-(Jlwt-FXu0 z4f+!!1D;9g3WF|3gkkj-d_hm^13*cFRhpI@)NPtDlXAIXSg^(6-3I87jwn)FitN1x zKK}-k3vh~;GxDx+b-cXYS9j;;IY<0TVC=2OkB;_PPJ9Sgxc(fc{_v;BQ5;d~`mM4( zi^MEk_(d?5@mJPDoXq(M$EO-qmEa*)nXa?1gd4CsNSOWgrDdfoeG9CSRGlNS!iFEr zTRC!K7IQdzTCR@)zozMb6ADSJJsZy=y57Qs=8v=5YJMYtQ{bT$+3r^%Zay6xihcXD zZ^$w3)0J;jcvhnyrY2p0V(5N7kiC{lS?7x}d-!XZIv~Sp7qhv)bOXZ42-d@W_4z5~ zOM%uNei-ZQ8>VV#UM@b?!Kc-C1!Q(SZ=b>PS4sKc1zSL)TsUnB(oCQ{fiOQ$dIc|5 z<9d8^$S&{uu)}q6y<6)qfwbH%0Abh^luo_o00~AA)E^GchZE+t-*^JtOYwC{oit?w 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 ATmS$7 literal 0 HcmV?d00001 diff --git a/selfdrive/frogpilot/ui/visual_settings.cc b/selfdrive/frogpilot/ui/visual_settings.cc index 1b52cac..8ba0fe5 100644 --- a/selfdrive/frogpilot/ui/visual_settings.cc +++ b/selfdrive/frogpilot/ui/visual_settings.cc @@ -2,6 +2,15 @@ FrogPilotVisualsPanel::FrogPilotVisualsPanel(SettingsWindow *parent) : FrogPilotListWidget(parent) { const std::vector> visualToggles { + {"AlertVolumeControl", "Alert Volume Control", "Control the volume level for each individual sound in openpilot.", "../frogpilot/assets/toggle_icons/icon_mute.png"}, + {"DisengageVolume", "Disengage Volume", "Related alerts:\n\nAdaptive Cruise Disabled\nParking Brake Engaged\nPedal Pressed\nSpeed too Low", ""}, + {"EngageVolume", "Engage Volume", "Related alerts:\n\nNNFF Torque Controller loaded", ""}, + {"PromptVolume", "Prompt Volume", "Related alerts:\n\nCar Detected in Blindspot\nLight turned green\nSpeed too Low\nSteer Unavailable Below 'X'\nTake Control, Turn Exceeds Steering Limit", ""}, + {"PromptDistractedVolume", "Prompt Distracted Volume", "Related alerts:\n\nPay Attention, Driver Distracted\nTouch Steering Wheel, Driver Unresponsive", ""}, + {"RefuseVolume", "Refuse Volume", "Related alerts:\n\nopenpilot Unavailable", ""}, + {"WarningSoftVolume", "Warning Soft Volume", "Related alerts:\n\nBRAKE!, Risk of Collision\nTAKE CONTROL IMMEDIATELY", ""}, + {"WarningImmediateVolume", "Warning Immediate Volume", "Related alerts:\n\nDISENGAGE IMMEDIATELY, Driver Distracted\nDISENGAGE IMMEDIATELY, Driver Unresponsive", ""}, + {"CustomAlerts", "Custom Alerts", "Enable custom alerts for various logic or situational changes.", "../frogpilot/assets/toggle_icons/icon_green_light.png"}, {"CustomUI", "Custom Onroad UI", "Customize the Onroad UI with some additional visual functions.", "../assets/offroad/icon_road.png"}, @@ -14,7 +23,23 @@ FrogPilotVisualsPanel::FrogPilotVisualsPanel(SettingsWindow *parent) : FrogPilot for (const auto &[param, title, desc, icon] : visualToggles) { ParamControl *toggle; - if (param == "CustomAlerts") { + if (param == "AlertVolumeControl") { + FrogPilotParamManageControl *alertVolumeControlToggle = new FrogPilotParamManageControl(param, title, desc, icon, this); + QObject::connect(alertVolumeControlToggle, &FrogPilotParamManageControl::manageButtonClicked, this, [this]() { + parentToggleClicked(); + for (auto &[key, toggle] : toggles) { + toggle->setVisible(alertVolumeControlKeys.find(key.c_str()) != alertVolumeControlKeys.end()); + } + }); + toggle = alertVolumeControlToggle; + } else if (alertVolumeControlKeys.find(param) != alertVolumeControlKeys.end()) { + if (param == "WarningImmediateVolume") { + toggle = new FrogPilotParamValueControl(param, title, desc, icon, 25, 100, std::map(), this, false, "%"); + } else { + toggle = new FrogPilotParamValueControl(param, title, desc, icon, 0, 100, std::map(), this, false, "%"); + } + + } else if (param == "CustomAlerts") { FrogPilotParamManageControl *customAlertsToggle = new FrogPilotParamManageControl(param, title, desc, icon, this); QObject::connect(customAlertsToggle, &FrogPilotParamManageControl::manageButtonClicked, this, [this]() { parentToggleClicked(); diff --git a/selfdrive/frogpilot/ui/visual_settings.h b/selfdrive/frogpilot/ui/visual_settings.h index c021e80..389b816 100644 --- a/selfdrive/frogpilot/ui/visual_settings.h +++ b/selfdrive/frogpilot/ui/visual_settings.h @@ -28,7 +28,7 @@ private: void updateState(const UIState &s); void updateToggles(); - std::set alertVolumeControlKeys = {}; + std::set alertVolumeControlKeys = {"EngageVolume", "DisengageVolume", "RefuseVolume", "PromptVolume", "PromptDistractedVolume", "WarningSoftVolume", "WarningImmediateVolume"}; std::set customAlertsKeys = {}; std::set customOnroadUIKeys = {"AccelerationPath"}; std::set customThemeKeys = {}; diff --git a/selfdrive/ui/soundd.py b/selfdrive/ui/soundd.py index 2546a15..8b4150e 100644 --- a/selfdrive/ui/soundd.py +++ b/selfdrive/ui/soundd.py @@ -153,10 +153,13 @@ class Soundd: while True: sm.update(0) - if sm.updated['microphone'] and self.current_alert == AudibleAlert.none: # only update volume filter when not playing alert + if sm.updated['microphone'] and self.current_alert == AudibleAlert.none and not self.alert_volume_control: # only update volume filter when not playing alert self.spl_filter_weighted.update(sm["microphone"].soundPressureWeightedDb) self.current_volume = self.calculate_volume(float(self.spl_filter_weighted.x)) + elif self.alert_volume_control and self.current_alert in self.volume_map: + self.current_volume = self.volume_map[self.current_alert] / 100.0 + self.get_audible_alert(sm) rk.keep_time() @@ -168,6 +171,22 @@ class Soundd: self.update_frogpilot_params() def update_frogpilot_params(self): + self.alert_volume_control = self.params.get_bool("AlertVolumeControl") + + self.volume_map = { + AudibleAlert.engage: self.params.get_int("EngageVolume"), + AudibleAlert.disengage: self.params.get_int("DisengageVolume"), + AudibleAlert.refuse: self.params.get_int("RefuseVolume"), + + AudibleAlert.prompt: self.params.get_int("PromptVolume"), + AudibleAlert.promptRepeat: self.params.get_int("PromptVolume"), + AudibleAlert.promptDistracted: self.params.get_int("PromptDistractedVolume"), + + AudibleAlert.warningSoft: self.params.get_int("WarningSoftVolume"), + AudibleAlert.warningImmediate: self.params.get_int("WarningImmediateVolume") + } + + self.load_sounds() def main(): s = Soundd()