From 6054bd378f76c8cc33a29393f2337221ed1ce03e Mon Sep 17 00:00:00 2001 From: Andrew Ward Date: Sat, 22 Mar 2025 11:06:07 +0000 Subject: [PATCH] further code tidyup --- utils/__pycache__/text_to_mic.cpython-312.pyc | Bin 69095 -> 66338 bytes utils/app_text.py | 58 ++++++++++++++++++ utils/text_to_mic.py | 52 +--------------- 3 files changed, 61 insertions(+), 49 deletions(-) create mode 100644 utils/app_text.py diff --git a/utils/__pycache__/text_to_mic.cpython-312.pyc b/utils/__pycache__/text_to_mic.cpython-312.pyc index 1a6b8ef3b23918c3b45b15483b327ef3a3b399d5..fba07e691f0a1ad94fdd2cfe49caf5a0915a90d7 100644 GIT binary patch delta 8731 zcmaJ`d3;nww(jb5cRCwc$U-Nbq(c_cNm#-v$eu)514wXYKo20SR9qM)h#9+ec z%zz4_B}7?N9DE}`7R6>pozbVLj4+HyMlpCng;7C-5i?JHDmuLL)y<0jUjOl>Zq?c9 z)TvXaDi^kyp8Tz8z_FN^NCW*!AN{bV{nCR22C>=$Lx!~XYTH*#1OBWk#g&8Y}NQIDPggA z&z8rwiyv)6SdJ+7*g}(2&$CJEz!P2-sH=1PJ-dzkKKkb1+s*h!`s0k^MIfTCgHZ{SeH_BcNkwOHrR);!Qv&mlkF7e?b}JqW8d0B+tXh+vByN^;AG2A zFg+-m2cOPGQ?oX@x!1kSr|<{q)0x1{=nbz^{0+<8oTrQC?AOTRDLKPqd|+(^m6jn}Wr)f7$>M<_*0i@V z97oV<_{5sjVJ&L67Cl{Y(mIlZz5Jp4?Bs(q%3lIqA2A2T`1~R49pTQmNkumCaQ@Rd zQ;4dZ>>LP|y@08JSitQBP9sgB(wS(HQ`jq-oawAXJmQ={GK!0A;y?Gb3SYrYwo?45 zz(F4EC>X~+6tRURUE{t&mB!8%rsx8WiysSZX`hndzEg0tTOCiNp0pOx6pD*l@@I4@ zraxK?SA6cEw^4D`yMwj;qGX0RRb-a{PZJ>=!m@XU6WLPj_H7igRM7}mq?G-~FRUQe)= z-%2!1(G>x|;+W4BRS8a@m~Wq*%I*`FXFuH1J1NP#0TP+c6k8Igt9MrghgD2(2nGXw z(u#@l4+u2VLU*IWKLNQ(pV#*ogEqN+IBdIEigBZ6sa3o+wLuONr%5v|tI>?rHCmk4 zFRsn85B`|CHIrXeR`&CS^fER*KO-j1&0xjiwz+>OmQICU&EgHZecq~W{c=@%7MZk~ zRIf+j8^q}HeDxZC4xP`Q!zk+e^r*7?}%9 zGBR{W_xS1i==nbPYR9w&k2m1RzZeeTT^S3D-fv;#T-ZkOLwN?v7isg>#>gCiAaJzu z!D9Ek@wWHK1a$!QeA{Yx*3&U|R{Pjl?~a{AJLc-VB~dbVOt8`}-1Dc~GtkTgWPz_+ z60!4a@yh(+>;rLSeoAQ$EGgx6=r01e2($#RzrG>p@+gfIvXr|$$|_!oQ8yp}Pyl{F zm6)|)%0R5FX7L3AcQn-VU!i}q*uEewEgelS2CWn$ii?t{X7YK}Ag>YsSa4TjJ%+;T zW$3AVIjA2Io?FHzFT}tA#pA_xaj8Lfkd~oMgl^e29@&A<0;JL0G}AJ&P>U#ARi)Gi zy#c>wuIFBVko!O(v+xiOck(r2)53c!tI@nOlv=?VrK=5#ChCbPDBfO_&i)np*P_gr z1@de%(*fcS_DeVp(${3`&ESE0#qUxnRH|y#Ky~nAxEh(W)o{j|@IdVP*b{?BpR|sl zHCkG=Aq{ioHxkWHQuB?%>?vU9#RyM2rA<2S#N^bVF=!P#-?E$57=ui#c)%{cOpO&2 zw1E~+*k02flQ=Lu)#fpK%zG_+u)OqRh9L4Fequp*lBJn>!kd|h%SsBf?g;}!izi}l zCuTYSFKTPyV@HfwHE!exZz&1mzoRZaH{Flc1At8cBs(q$oY8u~JdBRs zQ#Or0wdk4U3oC9}R8lc>Uim`485COpZ3YKn1e%Wka2WGP2~-p$4jlgC+$x*cz5&w|g)NG;A zB`fUFd!xEtye3?nXNX4codq%U_6W?rJKDkRypFevOC@{``m}>D1+?%+EiL^DT;sG^^T@%~X zp;1(dtP1;;VI^}WiFee=B70@wC<{do6^mwUNrjHF7zA_+pcNxV{sW2EYb0aWpjf*y zIqT2u0T`4%y2Rch)~kg;FsS*#}>oe@;;+_kFE z;)Lj};+a*&dV&av^Q#<|Z-`0NMD*&lF=sMzJ2J+!XN*}l?<-4a%j#^#O2nU=M&*q* z9tuyGk!L<+v(6Z8Jd$UgF+Ac(VK~~O6K6)7k47;QC^Ue(2f;UA{^AMINCNBHY7K8}))PIvC5 z)iLRbZz}q;2sBo$n&>ZWHS9I9rkINO!)v}|S&&k}TM2mvU@J-C+W^}M%6X=Eucc@) z43i4@4h+TNb1qtu)Y2l<+Q3SM^8nYvD8W-vC1)@dRQCX~0FQxwFo9~JPgo*txvka7 zMuvXdI?!m51~iMuf1Q%_0g;d#OiZ&VtLWTNDNv66+L0+m_Xxz9;#d04E%NSSHZ3&q z?t@0lAE5Cy@y&14{GDh%N#Kmti~&`%)F?s4-^dTcvcCfMgW@^y;BOO`K91&708EeH z29UG;J^FSL(6aSTQO>C+k%4##LEnO(l)2pXUe_JU>e(UV?|eq8j05YlqXvU`8Hm$F zXF;M>KX}z@@#6Y=T4}nNh?09dr~V0Qp9lOmfodiOIFD8m{2s~Qdp1E?-*a58Cvhd> z`TK^FNWF4j>o^3?HvmTndebm^juD6}1({KIQeNbLM^{eh==~+kQVttRM8d{`1Udb` z!5ktYb116HHx6NUi^h#hNYCv@ZJ|pWubJqQbx9PmcSXv>ZHZAtu9+KA4{K&=BHt!n zdwAZQNsueciy~;d7oW&wef&QhpT&S0kW>LG0d9a?7-`+@V(I2Ic1*0^oXd8J$2Z#( zuyW2weZ62XUnkz$tfb0S!}`LL`cL=g-^H9QS?vChf6Le~)-IlUbOP=%k1nC2VdB=I z?5J42bpgu>y|ncm3o8w6+DY60V{!1ww}zCGa4kj+2I^h)Q~@q?SKXnRg5Elstm;#g zdj0~mzbKym{k-8aoTR}r#9+S`*5s|%Oe;}9V=v1<iBI$baP$vOY1L18+zxpD}T|pzXr|5if(H&LZpnpM{BY_0*Jn_om6v{^(haDv5+rxi$Wx)TYt~>)5 zzXXu0(p3>uf>C-uk~H)=H_`teqV9Xk!Aa6{7pxAvCF0-w+gPb1jF%9t7E84t54yNQ zHz5ygVt$Nz$qzF8k5IeEUJ-w!*myEblpZPUn)3Q1rHS8>RwAE4l(JLET#fOnqn7HE_Tq1 zp<|}33HfIg>M5%7&3-FJiB(v@0~RcVHZcdbmVPlS{J)LgRbFR4Ww8IWl zv{>vs)m=w#*)G-Fr08omO}u$Jvqjo37gU~kG6V*aC@n6?-F~%-dzUFLHy)q5ZvoOu zSt}s-Ubp9GQCHKTKF1xBSI>qXMwbQ^xBgbcsYJ)Rh%+%lIddOPqw~y-VeAVr^lWCT zye~z;6Ym1v21EcNMfKTQHb}gEc4qET>YxY2zvGXQ%Q6f}LT-Up+5+%YwwQFTnB6V{ z=j^l(?mxG$MIJ*k2Js@zPZGB_pnIC~%}3=OP$gGw5{4}v#Yd&ResjDRW9tEO%S&G& zNAo+eTEymqIeE;# zuKhEUO$=pzoNY{&hV?yApr=m!@>9EAfp6pK8_(An9kE62u|@C14m)8T)^)J>3de{K zKfN)f2zCx7klyMlCbT56;CzxOJD-*2g&Z6pr1T*#NRGdq{zu1B>{aEa7B#yESIeiOFqMLwCCBxgP)bhUq6>; z#FwAtCpE$ZWGI-B`Ut&!IY{}?i#xO5rA}IL=?9t7uAd066`dD{u_od8yr4^u=kqN& zwKU&ys&*u!mxS=jpSVF}T$;^V#PUnyi1Eow2lI-t)KZJ&SPqULmWdjM?ka4wXuh1z zej~PCE+RI1SPGrJT*cxZgAUMXVG1R+cWK6nqUMXz;qt&U>UR%3e9~;DgSIDr@luP9 zY|_+JES|WMDZcw6fo&1dSJIc{VB|@Ha*8r(pL{%(_KktLi%BP!g{{2Uj6&ZYqVL|l z(yk@cOLqx+NR`_c5l1=mo+~%9d&R3)*3&#@eYs6vM@Z>6UoL+5(!m}P>75z0aVK_; zG`Z_xQ~{ubKpW8Y3`>U@9`yD9L3~al{odWrfPMpDBSE=ykiIrP^hlq74b!D)F5dn+ zdF&jF%!cJrHQei=tb&V!{!h7bjLioO0oPo#<^d{2+BfMeD8_#?I7MCt^J%>MMM0h< zC4zr5DO-9RkGy?r^t|ovBjvsZEFr=-%i8njej}z^2^!<^#y+mhUt}~7TM@^yJ`bL zdM@b~$uryjXd=N0Z6BG~+%CaB3;RXe4l^5Ce3FbV-`$mJkSun0J<>Sj3eaf(yVAI} zt7ewVGTX8&thiU&hK%C3H?*aMvmq?EZAv&B*~|5dwtt4R8!|fnKi2VW zH(1I1La^G}?zA$STy~z(w$;jtTgr%+F9vJ}sDS-|gMhsNyv*?9fEj=wzya^ce=aZ zi(>igv9_3tW+D&5cK-gVN^J{aDC%=<>uK0nz7;zY1nS60ns^_;Ct)D xx`3y_r%dKgkz~w6UDdWchPg98Fbw{;#mMr$vd&IqLpK@Q%nzEsHlQup{|^j<*g*gQ delta 11669 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 LPgu1&wf27jfr!;` diff --git a/utils/app_text.py b/utils/app_text.py new file mode 100644 index 0000000..2140188 --- /dev/null +++ b/utils/app_text.py @@ -0,0 +1,58 @@ +class AppText: + """ + Class for storing long text strings used throughout the application. + This helps keep the main codebase cleaner by separating UI text content. + """ + + # Instructions text displayed in the "How to Use" modal + INSTRUCTIONS = """How to Use Scorchsoft Text to Mic: + +1. Install VB-Cable if you haven't already +https://vb-audio.com/Cable/ +This tool creates a virtual microphone on your Windows computer or Mac. Once installed you can then trigger audio to be played on this virual cable. + +2. Open the Text to Mic app by Scorchsoft, and input your OpenAPI key. How to set up an API key: +https://platform.openai.com/docs/quickstart/account-setup +(note that this may require you to add your billing details to OpenAI's playground before a key can be generated) +In short, you sign up, go to playground, add billing details, go to API keys, add one, copy it, paste into Text to Mic. + +WARNING: This will use your OpenAI key to generate audio via the OpenAI API, which will incur charges per use. So please make sure to carefully monitor use. +OpenAI pricing: openai.com/pricing + +3. Choose a voice that you prefer for the speech synthesis. + +4. (Optional) Select a Tone Preset to modify how the text is spoken. You can use the built-in presets or create your own under 'Settings > Manage Tone Presets'. Tone presets add special instructions to make the voice sound cheerful, angry, like a bedtime story, etc. + +5. Select a playback device. I recommend you select one device to be your headphones, and the other the virtuall microphone installed above (Which is usually labelled "Cable Input (VB-Audio))" + +6. Enter the text in the provided text area that you want to convert to speech. + +7. Click 'Play Audio' to hear the spoken version of your text. + +8. The 'Record Mic' button can be used to record from your microphone and transcribe it to text, which can then be played back. + +9. You can change the API key at any time under the 'Settings' menu. + +This tool was brought to you by Scorchsoft - We build custom apps to your requirements. Please contact us if you have a requirement for a custom app project. + +If you like this tool then please help us out and give us a backlink to help others find it at: +https://www.scorchsoft.com/blog/text-to-mic-for-meetings/ + +Please also make sure you read the Terms of use and licence statement before using this app.""" + + # Default license text as a fallback when the LICENSE.md file cannot be found + DEFAULT_LICENSE = """ +Scorchsoft Text to Mic License + +This application is provided for personal and commercial use, subject to the following conditions: + +1. You may use this application for personal or commercial purposes. +2. You may not redistribute, sell, or include this application as part of another product without explicit permission. +3. This application uses the OpenAI API, and you are responsible for any charges incurred through your API key. +4. The developer assumes no liability for any misuse or charges incurred through use of this application. + +For the complete license text, please visit: +https://www.scorchsoft.com/text-to-mic-license + +Copyright © Scorchsoft.com +""" \ No newline at end of file diff --git a/utils/text_to_mic.py b/utils/text_to_mic.py index 78bb6bc..b552762 100644 --- a/utils/text_to_mic.py +++ b/utils/text_to_mic.py @@ -26,6 +26,7 @@ from utils.tone_presets_manager import TonePresetsManager from utils.presets_manager import PresetsManager from utils.ai_editor_manager import AIEditorManager from utils.settings_manager import SettingsManager +from utils.app_text import AppText # Modify the load environment variables to load from config/.env def load_env_file(): @@ -491,40 +492,7 @@ class TextToMic(tk.Tk): instruction_window.title("How to Use") instruction_window.geometry("600x720") # Width x Height - instructions = """How to Use Scorchsoft Text to Mic: - -1. Install VB-Cable if you haven't already -https://vb-audio.com/Cable/ -This tool creates a virtual microphone on your Windows computer or Mac. Once installed you can then trigger audio to be played on this virual cable. - -2. Open the Text to Mic app by Scorchsoft, and input your OpenAPI key. How to set up an API key: -https://platform.openai.com/docs/quickstart/account-setup -(note that this may require you to add your billing details to OpenAI's playground before a key can be generated) -In short, you sign up, go to playground, add billing details, go to API keys, add one, copy it, paste into Text to Mic. - -WARNING: This will use your OpenAI key to generate audio via the OpenAI API, which will incur charges per use. So please make sure to carefully monitor use. -OpenAI pricing: openai.com/pricing - -3. Choose a voice that you prefer for the speech synthesis. - -4. (Optional) Select a Tone Preset to modify how the text is spoken. You can use the built-in presets or create your own under 'Settings > Manage Tone Presets'. Tone presets add special instructions to make the voice sound cheerful, angry, like a bedtime story, etc. - -5. Select a playback device. I recommend you select one device to be your headphones, and the other the virtuall microphone installed above (Which is usually labelled "Cable Input (VB-Audio))" - -6. Enter the text in the provided text area that you want to convert to speech. - -7. Click 'Play Audio' to hear the spoken version of your text. - -8. The 'Record Mic' button can be used to record from your microphone and transcribe it to text, which can then be played back. - -9. You can change the API key at any time under the 'Settings' menu. - -This tool was brought to you by Scorchsoft - We build custom apps to your requirements. Please contact us if you have a requirement for a custom app project. - -If you like this tool then please help us out and give us a backlink to help others find it at: -https://www.scorchsoft.com/blog/text-to-mic-for-meetings/ - -Please also make sure you read the Terms of use and licence statement before using this app.""" + instructions = AppText.INSTRUCTIONS tk.Label(instruction_window, text=instructions, justify=tk.LEFT, wraplength=580).pack(padx=10, pady=10) @@ -552,21 +520,7 @@ Please also make sure you read the Terms of use and licence statement before usi # If we couldn't find the file in the filesystem, provide a fallback if license_content is None: - license_content = """ - Scorchsoft Text to Mic License - - This application is provided for personal and commercial use, subject to the following conditions: - - 1. You may use this application for personal or commercial purposes. - 2. You may not redistribute, sell, or include this application as part of another product without explicit permission. - 3. This application uses the OpenAI API, and you are responsible for any charges incurred through your API key. - 4. The developer assumes no liability for any misuse or charges incurred through use of this application. - - For the complete license text, please visit: - https://www.scorchsoft.com/text-to-mic-license - - Copyright © Scorchsoft.com - """ + license_content = AppText.DEFAULT_LICENSE # Create a new window to display the terms of use instruction_window = tk.Toplevel(self)