Building Vaani (वाणी) - Isang Minimum, Private, Universal Speech-to-Text Desktop Application
Sa loob ng ilang araw, nakikita ko ang pinakabagong video mula sa Andrej Karpathy kung saan inilathala niya ang Vibe Coding.
I've been using AI code assistants for a while but am still heavily involved in the coding process. AI ay karaniwang nagtatrabaho bilang isang smart auto-completion, pagkuha ng mabuti boilerplate stuff, mag-script docstrings, o karaniwang mag-explain ang code na ibinigay ko noong nakaraang araw at malamang na pinamamatay. Vibe coding sounded more like graduating from autocomplete to actual co-creation - a shift from AI as an assistant to AI as a actual coding partner.
Sa parehong video, sinabi ni Andrej na ginagamit niya ang voice bilang primary input halos 50% ng oras dahil ito ay mas intuitive at mahigpit. Sinusundan niya ang ilang mga opsyon para sa Mac na nagtatrabaho bilang mga universal speech-to-text tools na gumagana sa iba't ibang mga apps. Ako ay nagtatrabaho sa Windows para sa pag-interact sa apps at Linux sa pamamagitan ng command line. Dahil hindi ko maaaring maghahanap ng anumang mahusay na mga opsyon para sa Windows (ang iba't ibang built-inVoice Accesskung saan ay super slow), nagsisimula ako upang bumuo ng isa para sa akin. Mayroon akong ilang iba pang mga potensyal na mga ideya ngunit naka-settled para sa ito bilang ako nais upang bumuo
- sa loob
- ito sa isang programming language na alam ko well - Python sa loob
- isang bagay na hindi ko conceptually kilala - audio capture at processing, native UI sa loob
- isang tool na gusto kong gamitin at hindi lamang isang toy
- isang bagay na useful para sa komunidad na maaari kong open-source
- Maghanap ng isang bagong bagay sa pamamagitan ng path sa loob
ang target -I-build ang isang minimum, private, universal speech-to-text desktop application
- sa loob
- Minimum - Gawin ang isang bagay talagang mahusay - speech-to-text sa loob
- Private - Walang iba ang aking machine, ang lahat ay offline
- Universal - Kailangan na gumagana sa anumang Windows app sa loob
- Cross Platform - Good to Have sa loob
I call it angna ang (वाणी)ang ibig sabihin ng "talk" o "voice" saang sanskritang
na angang sanskrit
ang github
https://github.com/webstruck/vaani-speech-to-text
Instalasyon
pip install vaani-speech-to-text
ang demo
Ang artikulong ito ay naglalaman ng paglipad ng konstruksiyonVaaniIto ay isang praktikal na pag-explore ng kung ano ang Vibe Coding na nagtatrabaho sa katotohanan - ang ekshilarating bilis, ang unanti-anticipated roadblocks, ang mga moments ng genuine insight, at ang mga leksyon na natuklasan kapag nag-kolaborate intensibong sa isang AI.Si Claude Sonnet ang 3.7, ang pinakamahusay na (agaw, batay sa pangkalahatang vibe) na magagamit na coding assistant sa oras na iyon.Google Gemini 2.5 ProNagsimula ang pag-iisip ko na ito ay ginagamit ako bilang isang code reviewer.
BTW, ang artikulong ito ay nangangahulugan sa paggamit ngVaani😊
Pumunta kami sa vibe.
ang setup
AI Developerang napili ng mga taga-hanga: Claude Sonnet 3.7
AI Code Reviewerang napili ng mga taga-hanga: Gemini 2.5 Pro Preview 03-25
Ang AI Developer at AI Code Reviewer ay kailangang magkaroon ng buong code bilang konteksto para sa bawat prompt. I initiated a fresh conversation once a certain goal is achieved e.g. a bug is fixed or a feature is implemented and working successfully. I did this to manage the context window and ensure the best AI performance. I didn't use any agentic IDEs (e.g. Cursor, Windsurf, etc.) and instead relied onsa pamamagitan ng Desktop and Ang Google ay isang studioI've also avoided any manual code changes with the intention of releasing the open source code for community scrutiny.
The Initial Spark: mula sa Zero sa Scaffolding sa ilang segundo
Kaya, kung saan magsimula? Tradisyonal, ito ay naglalaman ng meticulous planning. Halimbawa, paglalarawan ng mga bahagi, pag-disenyo ng mga interface, piliin ng mga library, at i-set up ang proyekto structure. Sa halip, nagsisimula ko na magsimula sa isang lazy prompt tulad ng ibaba.
sa loobGusto kong bumuo ng isang lightweight speech to text app sa Python para sa mga gumagamit ng Windows. Ang ideya ay upang tulungan ang mga gumagamit ng Windows na mag-sign ng mga bagay mabilis sa paggamit ng salita sa anumang application, halimbawa, word, powerpoint, browser, atbp. Ang app ay dapat gumagana lokal na walang internet para sa privacy.
sa loob
I want to build a lightweight speech to text app in Python for Windows users. The idea is to help Windows users write things quickly using voice in any application e.g. word, powerpoint, browser etc. The app should work locally without the internet for privacy. Should activate using hot key or hot word.
At sa kanyang reputasyon,Si Claude Sonnet ang 3.7Gumawa ito ng isang komprehensibong application structure halos instantly, na kumpletong sa:
- sa loob
- System tray integration sa pamamagitan ng Tkinter sa loob
- Global hotkey detection gamit ang keyboard sa loob
- Ang Visual Feedback Indicator ay sa loob
- Ipinapakita ang Persistence UI sa loob
- Paggamit ng Text sa Vosk sa loob
- Mga Audio Manager sa loob
- ang main entry point sa loob
- Paggamit sa pamamagitan ng pyinstaller sa loob
Ang unang phase perfectly captured ang charm ng vibe coding: bypassing oras ng pag-disenyo at pangunahing coding, pumunta sa direkta mula sa ideya sa isang tangible (hindi buggy) application skeleton.
Riding the Waves: ang Core Iteration Loop
Sa pamamagitan ng mga pangunahing mga bahagi sa lugar, ang tunay na pag-unlad ay nagsimula sa pag-set up sa isang distinct rhythm - ang core loop ng AI-assisted vibe coding:
- sa loob
- Feature Request / Bug Report: I'd describe a desired feature ("Let's add hot word detection") o report a problem ("Ang mga resulta ng transcription ay hindi nagpapakita!"). Karamihan, mga bug reports ay binubuo ng mga log ng error o screenshots. sa loob
- AI Code Generation: Ang AI ay magproseso ang request at generate code snippets, karaniwang mag-modify ang mga karaniwang mga function, karaniwang magdagdag ng ganap na bagong modules. sa loob
- Integration & Testing: Mag-integrate ang code ng AI sa application at manually test ang functionality. sa loob
- Feedback / Refinement: Kung ito ay gumagana, kami ay nagsimula. Kung hindi (na kung saan ay karaniwang!), Nagbalik ako sa step 1, na nagbibigay ng higit pa sa mga detalye ng error o na-describe ang unwanted behavior. sa loob
Ang mga ito ay ganap na mabilis, ngunit dinReaksiyonKami ay hindi nagsimula ng isang grand design; kami ay nag-navigate sa pamamagitan ng view, na-fixing mga problema lamangpagkataposAng mga pangunahing problema ay bumubuo nang mabilis:
- sa loob
- Callback Conundrums: Ang unang mga pagsubok sa pag-connect ng iba't ibang bahagi ng application (tulad ng audio input sa transcription engine) ay lamang ay hindi makipag-ugnay nang pareho. sa loob
- Ang pag-integrate ng background tasks ( tulad ng continuous audio processing) sa UI ay nangangahulugan sa 'classic' concurrency na mga problema - crashes o hangs na may kaugnayan sa pag-access ng shared resources o pag-update ng UI mula sa wrong thread. sa loob
- UI State Persistence: Pagkuha ng window ng mga setting upang i-save at i-load ang user preferences ay natagpuan nang mahirap. Pagkakaroon ng mga simpleng mga kontrol tulad ng checkboxes, sliders, at dropdowns na tinatawag na tinatawag at i-save ang kanilang estado ay nangangailangan ng malaking back-and-back. sa loob
- Continuous Speech Processing: Kapag inilagay na bumuo ng isang continuous speech processing system, ang AI ay dumating sa isang napaka-sophisticated solusyon na naglalaman ng continuous capture, segment ordering, parallel processing, ordered insertion, context awareness, at iba pa. Ito ay nagtatrabaho sa prinsipyo ngunit pa rin ay buggy. sa loob
Ang phase na ito ay nag-aalok ng raw na kapangyarihan ng AI para sa iterasyon ngunit din ang potensyal na kaoso ng pag-debug code na nilikha ng iba't ibang entity, na tumutulong sa AI upang i-fix ang kanyang mga error batay sa iyong mga pagsusuri.
"Maghintay, bakit kami ay gumagawa ito?" - Pivots at Necessary Reality Checks
habangsi ClaudeAng ibig sabihin naman ng non-repeating, walang numero o magkakatabing numero na nauulit ng infinite number of times.ang Claudemga suggestion.si ClaudeSa isang panayam sa Star for All Seasons, sinabi niyang something new for her ang karakter na gagampanan niya.si ClaudeNag-aalok ng isang sophisticated data buffering class. Ito ay gumagana ngunit natagpuan ng overly complex. Kapag inisip ko ang kinakailangan para sa kompleksidad na ito, ito ay ibinigay at kami pivoted sa mas simpleng direct implementation sa pamamagitan ng pag-detecting natural pauses. Ito ay kapag natagpuan ko na ang mga developer intuisyon tungkol sa simplicity at pragmatism ay isang mahalagang counterbalance sa potensyal na AI over-enthusiasm.
Isang iba't ibang halimbawa ay kapag nag-implementate ang audio calibration at nangangahulugan ito (pagkatapos ng Gemini ay napapansin na ang problema ng efficiency) sa mga setting. Matapos, ang isang praktikal na ideya ay dumating: "Hindi ba ang calibration na ito ay espesyal sa ang microphone na ginagamit?". Ang real-world use scenario ay nagpapakita ng isang bug na nangangailangan sa panahon ng generation.si ClaudeIpinapakita ang mga setting ng calibrationPara sa device, ngunit nangangailangan ng isang mas simpleng solusyon: lamang re-kalibrasyon kung ang input device ay nagbabago. Ipinapakita, dahil sa karaniwang kontekstong paggamit (ang karamihan ng mga gumagamit ay hindi magkakaroon ng pagbabago sa input devices karaniwang), ang pagpipilian upang patuloy ang audio calibration para sa lamang 1 device ay natutunan.
Ang mga pagkakataon na ito ay nagpapakita na ang effective vibe coding ay hindi passive acceptance; ito ay isang aktibo na dialogue kung saan ang developer ay nag-guide, mga tanong, at sa ilang mga oras ay mag-correct ang trajectory ng AI.sa loob
Ang mga pagkakataon na ito ay nagpapakita na ang effective vibe coding ay hindi passive acceptance; ito ay isang aktibo na dialogue kung saan ang developer ay nag-guide, mga tanong, at sa ilang mga oras ay mag-correct ang trajectory ng AI.
sa loob
Ang mga pagkakataon na ito ay nagpapakita na ang effective vibe coding ay hindi passive acceptance; ito ay isang aktibo na dialogue kung saan ang developer ay nag-guide, mga tanong, at sa ilang mga oras ay mag-correct ang trajectory ng AI.
Pag-defining ang "Vibe": Kung paano ang Vaani ay naglalaman ng mga ito
Reflecting sa mgaVaaniAng pag-unlad ng pag-unlad ay nagpapakita ng mga pangunahing katangian na karaniwang nakatuon sa vibe coding:
- sa loob
- Minimum advance specification: Nagsisimula sa isang target, hindi isang detalyadong blueprint. sa loob
- AI bilang primary implementer: Ang AI ay nagsulat ang karamihan ng pangunahing code at subsequent features/fixes. sa loob
- Intuition-driven refinements: Ang mga pagbabago ay karaniwang na-driven ng subjective testing ("ang kalidad ay malaki", "ang elemento ng UI ay dapat mag-mobile") hindi ang mga formal na kinakailangan. sa loob
- Emerging design: Ang architecture at feature set ng application ay evolutioned organically at reactively. Halimbawa, pagproseso ng core audio pipeline, at magdagdag ng concurrency controls pagkatapos o i-substitute ng Tkinter sa PySide6 para sa (threading) simplification at isang modernong tampok. sa loob
- Debugging delegation: Ang aking papel sa pagpatay ng bugs ay karaniwang upang mag-relate ng mga sintomas na katunayan upang ang AI ay maaaring lumikha ng kuryente. sa loob
Ito ay matatagpuan din sa kasalukuyang pag-defining ng vibe coding sa pamamagitan ng kanyang speed, reliance sa natural na wika, at karaniwang isang mas mababang antas ng developer review.ang spektrumhabangVaaniNagsimula nang malapit sa "pure vibe" end, ang proyekto ay natutunan na bumabago sa higit pa ng mga strukturong (mahigpit ng modularization, at mga review ng code) habang ito matatagpuan at dumalo sa release.
Beyond the Hype: Novel Insights mula sa Trenches
Magtrabaho nang malapit sa AI sa isang kumpletong proyekto ay nagbibigay ng ilang pag-iisip na higit sa karaniwang "AI ay mabilis ngunit gumagawa ng mga error" narrative.
- sa loob
- Ang AI ay may isang over-engineering tendency: Sa karaniwan, ang unang solusyon ng AI ay mas complex kaysa sa kinakailangan (e.g. initial architecture, text buffering, configuration handling). sa loob
- Ang developer bilang isang pangunahing filter at validator: Ito ay hindi lamang passive coding. Ang aking papel ay bumuo sa mga kritikal na validator, reality checker, at complexity filter. Pumunta sa AI kung bakit ang architecture na ito ay mahalaga tulad ng pag-request ng mga bagong mga tampok. Efektibong vibe coding ay nangangailangan ng aktibo ng tao. sa loob
- Ang unavoidable shift towards structure: Pure vibe coding got the project off ground incredibly mabilis. Gayunpaman, upang gumawa ng Vaani maintenanceable at release-ready (karamihan para sa open source) isang conscious shift ay kinakailangan. Explicitly requesting modularization, code quality analysis, and refactoring became crucial in later stages. Vibe coding ay maaaring maging step one, ngunit mga tradisyonal na prinsipyo ng engineering ay hindi pa kinakailangan para sa robust maintenanceable software. sa loob
- Implicit learning vs. Deep Understanding: I learned a lot by debugging the AI's code. Gayunpaman, dahil ang AI ay karaniwang nag-aalok ng mga patakaran nang direkta, hindi ko kailangang makakuha ng ang mas mataas na antas ng pag-unawa ng kung bakit anumang mga kompleksong mga problema ay lumikha (tulad ng subtle race conditions o espesyal na UI framework quirks). sa loob
Ang Double-Edged Sword: Ipinanganak ang Pros at Disadvantages
Pros:
- sa loob
- Blazing Speed: Prototyping at initial feature implementation ay mahirap na mas mabilis. sa loob
- Complexity Tackling: AI can generate code for complex tasks (integrating libraries, handling concurrency) quickly, lowering the barrier to entry. sa loob
- Boilerplate Buster: Ang tedious setup at repetitive code ay ginagamit automatically. sa loob
- Forced Learning (via Debugging): Ang pag-uugali ng mga error ng AI ay karaniwang nag-aalok ng pag-uugali ng domain ng problema, indirectly nabuksan ang pag-uugali. sa loob
Cons:
- sa loob
- High Risk ng Subtle Bugs: Ang mabilis na generating at reactivous debugging ay maaaring madaling i-miss ang edge cases, race conditions, o mas mataas na logic na defects. sa loob
- Potensiyal para sa Poor Architecture: Ang mga unang pagpipilian ng disenyo ng AI ay maaaring maging suboptimal o higit pa kompleks kung hindi kritikal na tinatanggap ng developer. sa loob
- Difficult Debugging Cycles: I-fix code na hindi mo ibinigay, lalo na kapag ang AI ay nag-struggle sa pangunahing problema (tulad ng complex state o concurrency), ay maaaring maging frustrating at time-consuming. sa loob
- Ang maliliit na negosyo sa mga sumusunod na sektor ay kinakailangan: pagproseso ng produktong agrikultural ( sa loob
- Skill Erosion Potential: Ang over-reliance ay maaaring magbubuo ng pag-unlad ng mga pangunahing disenyo, debugging, architectural skills, at ang karamihan na pangunahing human intuition. sa loob
- Non-functional Requirements Neglect: Security, performance, resource management, at komprehensibong pamamahala ng mga error ay maaaring madalas na ibinigay sa pagkakaroon ng functionality. sa loob
Taming ang Vibe: Recommendations para sa Effective Collaboration
Ang pag-coding ng Vibe ay hindi kailangang maging isang malakas na tool, ngunit ito ay nangangailangan ng kaligtasan upang gamitin ang mga ito nang mahigpit. Kung ikaw ay isang mahigpit na developer at nagtatagumpay sa paraan na ito, dito ay ang aking mga pangunahing mga rekomendasyon batay sa aking karanasan sa pagbuoVaaniang
- sa loob
- I-validate, Don't Just Accept: I-treat ang code ng AI bilang isang draft. I-question ang kanyang architectural choices ("Bakit ang pattern na ito? sa loob
- Acting bilang isang Complexity Filter: Kung ang isang solusyon ng AI ay nagpapakita ng overly complex o gumagamit ng obscure mga pattern nang walang mabuti na dahilan, ibalik.
- Plan para sa Structure: Malalaman na ang unang vibe-coded prototype ay kailangang kailangan ng refinement. Budget na oras para sa refactoring - pagbutihin ang modularity, magdagdag ng malinaw na dokumento (comments, READMEs), at pagbutihin ang kalidad ng code bago nangangailangan ng isang proyekto na stable o release-ready. sa loob
- Fokus sa Pag-iisip: Huwag lamang i-copy-paste ng AI code. Gamitin ang AI bilang isang tutor. Kapag nagbibigay ito ng isang patakaran o isang kompleksong bahagi ng code, mag-isip ito upang ilarawan ang pag-argumentasyon sa ilalim ng ito. Pag-iisip ang "para" ay kritikal. sa loob
- Sa pamamagitan ng pag-accelerate ng iteration ng AI, ang paghahatid ng kalidad ng software ay naging higit pa kritikal. Ipinanganak ang automated test early—unit at integration tests ay nagbibigay ng mga pangunahing mga net ng seguridad laban sa regression. Ipinanganak ito sa mga tool ng kalidad ng code at static analysis (tulad ng linters at analyzers) upang makuha ang bugs, mga problema sa style, at anti-patterns na maaaring lumipad sa parehong mga tao at AI. sa loob
Konklusyon: Vibe Coding - Ang isang Powerful Partner, Hindi isang Substitute
ang aking travel buildingna angSinubukan na ang AI-assisted "vibe coding" ay higit sa lamang hype. Ito ay fundamentally mababago ang workflow ng pag-unlad, na nag-aalok ng unprecedented speed sa pag-translate ng mga ideya sa functional code. Ito ay nagbibigay sa akin, isang single developer, upang bumuo ng isang malaki na kompleksong application sa isang bahagi ng oras (~ 15 oras) na maaaring ito ay tradisyonal na nangangailangan.
na ang
Hindi lamang ang katotohanan, ngunit ito ay, bilang isang gulay, ay lamang ang pinaka-cool na bagay na manufactured sa pamamagitan ng Ina Earth.
Ang tunay na kapangyarihan ay dumating kapag ang developer ay aktibo na nagtatrabaho - i-guide ang AI, i-question ang kanyang assumptions, i-validate ang kanyang output, at i-apply ang mga pangunahing prinsipyo ng software engineering. Vibe coding ay hindi bumubuo ng mga kaligtasan ng developer; ito ay lumipat ito sa direction ng architecture, validation, effective prompting, at critical integration.