PageSourceSearch

https://picovoice.ai/component---src-pages-cookbook-on-device-voice-memo-js-a44338c458f40c87799b.js

js picovoice.ai collected 2026-09-24 09:31:37 UTC 48,908 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunkpicovoice=self.webpackChunkpicovoice||[]).push([[191],{71283:function(e,t,i){i.d(t,{Sk:function(){return l},Ul:function(){return m},WW:function(){return u},Yl:function(){return c},ci:function(){return r},hY:function(){return n},mk:function(){return h},pq:function(){return s},yP:function(){return d}});var a=i(66658),o=i(17437);const n=[{value:"15%",label:"fewer word errors than Google Streaming STT in English (10.1% vs 11.9% WER)"},{value:"40x",label:"less compute than Moonshine Medium while being more accurate (0.08 vs 3.36 core-hour)"},{value:"1.6x",label:"faster than Amazon Transcribe Streaming (590 ms vs 920 ms word emission latency)"}],l=(0,o.Y)(a.h2,{title:"English Word Error Rate",subtitle:"Lower is better",note:"* Average of 4 public datasets. The lowest-scoring (highest accuracy) model is shown for Moonshine, Vosk, and Whisper.cpp. See the benchmark for the full comparison.",rows:[{label:"Amazon Streaming",value:"5.6%",width:5.6},{label:"Azure Real-time",value:"8.2%",width:8.2},{label:"Cheetah Streaming",value:"10.1%",width:10.1,isHighlight:!0},{label:"Moonshine Streaming Medium",value:"10.6%",width:10.6},{label:"Vosk Streaming Large",value:"11.5%",width:11.5},{label:"Google Streaming",value:"11.9%",width:11.9},{label:"Whisper.cpp Streaming Base",value:"19.8%",width:19.8}]}),r=(0,o.Y)(a.h2,{title:"English Punctuation Error Rate",subtitle:"Lower is better",note:"* Average of 3 public datasets. Vosk excluded due to no punctuation support. See the benchmark for details.",rows:[{label:"Cheetah Streaming",value:"16.1%",width:16.1,isHighlight:!0},{label:"Azure Real-time",value:"16.4%",width:16.4},{label:"Amazon Streaming",value:"24.4%",width:24.4},{label:"Google Streaming",value:"36%",width:36},{label:"Moonshine Streaming Medium",value:"45.1%",width:45.1},{label:"Whisper.cpp Streaming Base",value:"54.1%",width:54.1}]}),s=(0,o.Y)(a.h2,{title:"Word Emission Latency",subtitle:"Lower is better",note:"* Measured using 100 randomly selected files from LibriSpeech test-clean.",rows:[{label:"Azure Real-time",value:"530 ms",width:26.5},{label:"Cheetah Streaming",value:"590 ms",width:29.5,isHighlight:!0},{label:"Moonshine Streaming Medium",value:"640 ms",width:32},{label:"Google Streaming",value:"830 ms",width:41.5},{label:"Amazon Streaming",value:"920 ms",width:46},{label:"Whisper.cpp Streaming Base",value:"1,240 ms",width:62},{label:"Vosk Streaming Large",value:"2,000 ms",width:100}]}),c=(0,o.Y)(a.h2,{title:"Core Hour Ratio",subtitle:"Lower is better",note:"* Measured on AMD Ryzen 9 5900X.",rows:[{label:"Cheetah Streaming",value:"0.083x",width:2.5,isHighlight:!0},{label:"Vosk Streaming Large",value:"0.12x",width:3.6},{label:"Whisper.cpp Streaming Base",value:"1.67x",width:49.7},{label:"Moonshine Streaming Medium",value:"3.36x",width:100}]}),d=(0,o.Y)(a.h2,{title:"French Word Error Rate",subtitle:"Lower is better",note:"* Average of 3 public datasets. See the benchmark for details.",rows:[{label:"Amazon Streaming",value:"9.3%",width:9.3},{label:"Cheetah Streaming",value:"13.6%",width:13.6,isHighlight:!0},{label:"Azure Streaming",value:"15.8%",width:15.8},{label:"Google Streaming",value:"18.5%",width:18.5}]}),u=(0,o.Y)(a.h2,{title:"Spanish Word Error Rate",subtitle:"Lower is better",note:"* Average of 3 public datasets. See the benchmark for details.",rows:[{label:"Amazon Streaming",value:"6.4%",width:6.4},{label:"Cheetah Streaming",value:"8.6%",width:8.6,isHighlight:!0},{label:"Azure Streaming",value:"9.4%",width:9.4},{label:"Google Streaming",value:"11.6%",width:11.6}]}),m=(0,o.Y)(a.h2,{title:"Italian Word Error Rate",subtitle:"Lower is better",note:"* Average of 3 public datasets. See the benchmark for details.",rows:[{label:"Amazon Streaming",value:"11.5%",width:11.5},{label:"Cheetah Streaming",value:"14.3%",width:14.3,isHighlight:!0},{label:"Azure Streaming",value:"18%",width:18},{label:"Google Streaming",value:"18.5%",width:18.5}]}),h=(0,o.Y)(a.h2,{title:"German Word Error Rate",subtitle:"Lower is better",note:"* Average of 3 public datasets. See the benchmark for details.",rows:[{label:"Amazon Streaming",value:"8.4%",width:8.4},{label:"Azure Streaming",value:"10%",width:10},{label:"Cheetah Streaming",value:"11.9%",width:11.9,isHighlight:!0},{label:"Google Streaming",value:"16.1%",width:16.1}]})},24366:function(e,t,i){i.d(t,{Am:function(){return h},CO:function(){return d},Eo:function(){return c},FR:function(){return s},GE:function(){return m},Mz:function(){return l},Vt:function(){return b},X2:function(){return r},k$:function(){return v},k7:function(){return u},mk:function(){return n},wz:function(){return p}});var a=i(66658),o=i(17437);const n=[{value:"3.1x",label:"faster than ElevenLabs Streaming (106 ms vs 335 ms first-token-to-speech)"},{value:"7.8x",label:"less memory than the lightest on-device alternative (41 MB vs 320 MB Kitten TTS Nano)"},{value:"5.5x",label:"less CPU than most compute-efficient neural on-device TTS (0.065x vs 0.36x Pocket TTS)"}],l=[{label:"Picovoice Orca",value:"209 ms",width:5.2,isHighlight:!0},{label:"ElevenLabs Streaming",value:"504 ms",width:12.6},{label:"ElevenLabs TTS",value:"1,548 ms",width:38.7}
1,{label:"Amazon Polly",value:"1,614 ms",width:40.4},{label:"Azure TTS",value:"1,656 ms",width:41.4},{label:"ESPEAK-NG",value:"1,717 ms",width:43},{label:"Pocket TTS",value:"1,812 ms",width:45.3},{label:"Soprano TTS",value:"1,813 ms",width:45.3},{label:"Piper TTS",value:"1,830 ms",width:45.7},{label:"Supertonic TTS 2",value:"2,717 ms",width:67.9},{label:"OpenAI TTS",value:"2,925 ms",width:73.1},{label:"Neu TTS Nano Q4 GGUF",value:"3,059 ms",width:76.4},{label:"Kokoro TTS",value:"3,764 ms",width:94.1},{label:"Kitten TTS Nano 0.8 INT8*",value:"10,587 ms",width:100},{label:"Chatterbox TTS Turbo*",value:"48,401 ms",width:100}],r=(0,o.Y)(a.h2,{title:"TTS VART",subtitle:"Lower is better",note:"* Values capped for display purposes; actual VART reported.",rows:l,collapsible:!0,initialVisibleRows:4}),s=[{label:"Orca TTS Streaming",value:"106 ms",width:2.6,isHighlight:!0},{label:"ElevenLabs TTS Streaming",value:"335 ms",width:8.4},{label:"ElevenLabs TTS",value:"1,470 ms",width:36.8},{label:"Amazon Polly",value:"1,540 ms",width:38.5},{label:"Azure TTS",value:"1,580 ms",width:39.5},{label:"ESpeak TTS",value:"1,614 ms",width:40.3},{label:"Soprano TTS",value:"1,702 ms",width:42.5},{label:"Pocket TTS",value:"1,713 ms",width:42.8},{label:"Piper TTS",value:"1,720 ms",width:43},{label:"Supertonic TTS",value:"2,612 ms",width:65.3},{label:"OpenAI TTS",value:"2,850 ms",width:71.3},{label:"Neu TTS Nano Q4 GGUF",value:"2,952 ms",width:73.8},{label:"Kokoro TTS",value:"3,658 ms",width:91.4},{label:"Kitten TTS Nano 0.8 INT8*",value:"10,483 ms",width:100},{label:"Chatterbox TTS Turbo*",value:"48,281 ms",width:100}],c=(0,o.Y)(a.h2,{title:"TTS Latency",subtitle:"Lower is better",note:"* Values capped at 4,000ms for display purposes; actual latency reported.",rows:s,collapsible:!0,initialVisibleRows:4}),d=[{label:"Orca Streaming TTS",value:"0.065x",width:1.3,isHighlight:!0},{label:"Piper TTS",value:"0.35x",width:7},{label:"Pocket TTS",value:"0.37x",width:7.4},{label:"Supertonic TTS 2",value:"0.52x",width:10.4},{label:"Kokoro TTS",value:"1.3x",width:26},{label:"Kitten Nano TTS",value:"3.1x",width:62},{label:"Soprano TTS",value:"4.1x",width:82},{label:"Neu TTS Nano*",value:"7.3x",width:100},{label:"Chatterbox TTS Turbo*",value:"13.4x",width:100}],u=(0,o.Y)(a.h2,{title:"TTS CPU Utilization",subtitle:"Lower is better",note:"* Values capped at 5x for display purposes; actual CPU utilization reported.",rows:d,collapsible:!0}),m=[{label:"Orca Streaming TTS",value:"41 MB",width:1.4,isHighlight:!0},{label:"Kitten TTS Nano",value:"320 MB",width:10.7},{label:"Supertonic TTS 2",value:"450 MB",width:15},{label:"Pocket TTS",value:"610 MB",width:20.3},{label:"Soprano TTS",value:"700 MB",width:23.3},{label:"Kokoro TTS",value:"1.9 GB",width:63.3},{label:"Neu TTS Nano",value:"2.1 GB",width:70},{label:"Piper TTS",value:"2.6 GB",width:86.7},{label:"Chatterbox TTS Turbo*",value:"7.5 GB",width:100}],h=(0,o.Y)(a.h2,{title:"TTS Memory Usage",subtitle:"Lower is better",note:"* Values capped at 3 GB for display purposes; actual peak memory reported.",rows:m,collapsible:!0}),p=[{label:"Picovoice Orca",value:"7 MB",width:.2,isHighlight:!0},{label:"Kitten TTS Nano 0.8 INT8",value:"42 MB",width:1.4},{label:"Piper TTS",value:"61 MB",width:2},{label:"Pocket TTS",value:"242 MB",width:8.1},{label:"Supertonic TTS 2",value:"262 MB",width:8.8},{label:"Soprano TTS",value:"280 MB",width:9.4},{label:"Kokoro TTS",value:"341 MB",width:11.4},{label:"Neu TTS Nano Q4 GGUF",value:"507 MB",width:17},{label:"Chatterbox TTS Turbo",value:"2,980 MB",width:100}],v=(0,o.Y)(a.h2,{title:"TTS Model Size",subtitle:"Lower is better",rows:p}),b=(0,o.Y)(a.wj,{title:"Audio Quality",subtitle:"Listen and compare — grouped by peak memory usage.",groups:[{label:"Peak Memory Usage < 45 MB",samples:[{label:"ESpeak",src:"/audio/espeak-ng.wav"},{label:"Orca",src:"/audio/orca.wav",isHighlight:!0}]},{label:"Peak Memory Usage 300 MB – 600 MB",samples:[{label:"Kitten",src:"/audio/kitten-tts-nano.wav"},{label:"Supertonic",src:"/audio/supertonic-tts-2.wav"}]},{label:"Peak Memory Usage 600 MB – 750 MB",samples:[{label:"Pocket",src:"/audio/pocket-tts.wav"},{label:"Soprano",src:"/audio/soprano-tts.wav"}]},{label:"Peak Memory Usage > 1 GB",samples:[{label:"Kokoro-TTS",src:"/audio/kokoro-tts.wav"},{label:"Neu-TTS-Nano",src:"/audio/new-tts-nano.wav"},{label:"Piper-TTS",src:"/audio/piper-tts.wav"},{label:"Chatterbox-TTS-Turbo",src:"/audio/chatterbox-tts-turbo.wav"}]}],collapsible:!0,initialVisibleSamples:2})},32137:function(e,t,i){i.d(t,{Eo:function(){return r},OL:function(){return s},dN:function(){return n},f3:function(){return c},jt:function(){return l}});var a=i(66658),o=i(17437);const n=[{value:"99.9%",label:"accuracy kept at 3-bit, vs 83.1% GPTQ (Llama-3-8b MMLU Score)"},{value:"94.5%",label:"accuracy kept at 2-bit, vs 38.7% GPTQ (Llama-3-8b MMLU Score)"},{value:"100%",label:"accuracy kept at 3-bit, vs 57% GPTQ (Llama-3-8b ARC Score)"}],l=(0,o.Y)(a.h2,{title:"2-bit Quantized Llama-3-8b MMLU",subtitle:"Higher is better",rows:[{label:"Float16 (Original Model)",value:"64.9",width:64.9},{label:"picoLLM",value:"61.3",width:61.3,isHighlight:!0},{label:"GPTQ",value:"25.1",width:25.1}]}
1),r=(0,o.Y)(a.h2,{title:"3-bit Quantized Llama-3-8b MMLU",subtitle:"Higher is better",rows:[{label:"Float16 (Original Model)",value:"64.9",width:64.9},{label:"picoLLM",value:"64.8",width:64.8,isHighlight:!0},{label:"GPTQ",value:"53.9",width:53.9}]}),s=(0,o.Y)(a.h2,{title:"2-bit Quantized Gemma-7b MMLU",subtitle:"Higher is better",rows:[{label:"Float16 (Original Model)",value:"64.5",width:64.5},{label:"picoLLM",value:"64.3",width:64.3,isHighlight:!0},{label:"GPTQ",value:"25.6",width:25.6}]}),c=(0,o.Y)(a.h2,{title:"3-bit Quantized Gemma-7b MMLU",subtitle:"Higher is better",rows:[{label:"Float16 (Original Model)",value:"64.5",width:64.5},{label:"picoLLM",value:"64.5",width:64.5,isHighlight:!0},{label:"GPTQ",value:"53.3",width:53.3}]})},15828:function(e,t,i){i.d(t,{E:function(){return l},FT:function(){return r},io:function(){return n}});var a=i(66658),o=i(17437);const n=[{value:"0.6%",label:"CPU Utilization on Raspberry Pi 5 32-bit"},{value:"97.3% ",label:"Accuracy at 1 false alarm per 10 hours"},{value:"~250K ",label:"Custom wake words trained and deployed in 2025"}],l=(0,o.Y)(a.h2,{title:"Wake Word Detection Accuracy - higher the better",note:"* 1 False Alarm per 10 hours · Tested with noise at 10 dB SNR",rows:[{label:"Porcupine",value:"97.3%",width:97.3,isHighlight:!0},{label:"Snowboy",value:"68.1%",width:68.1},{label:"PocketSphinx",value:"48%",width:48}]}),r=(0,o.Y)(a.h2,{title:"CPU Utilization - lower the better",note:"* Measured on a Raspberry Pi 5 32-bit",rows:[{label:"Porcupine",value:"0.6%",width:.6,isHighlight:!0},{label:"Snowboy",value:"3.8%",width:3.8},{label:"PocketSphinx",value:"12.1%",width:12.1}]})},50679:function(e,t,i){i.d(t,{DB:function(){return s},Lu:function(){return r},fD:function(){return n},s2:function(){return l},yy:function(){return c}});var a=i(66658),o=i(17437);const n=[{value:"97.3%",label:"Average Command acceptance accuracy (vs. 84.3% Amazon Lex and 77.3% Dialogflow)"},{value:"6x",label:"Higher accuracy than Big Tech average"},{value:"5.5x",label:"fewer errors than Dialogflow in high noise (94% vs 67% at 6 dB SNR)"}],l=(0,o.Y)(a.h2,{title:"Voice Command Acceptance Accuracy",subtitle:"Higher is better",note:"* Average of 7 benchmarks at 6, 9, 12, 15, 16, 21, and 24 dB SNR.",rows:[{label:"Rhino",value:"97.3%",width:97.3,isHighlight:!0},{label:"Amazon Lex",value:"84.3%",width:84.3},{label:"Google Dialogflow",value:"77.3%",width:77.3}]}),r=(0,o.Y)(a.h2,{title:"Voice Command Acceptance Accuracy at 21 dB SNR",subtitle:"Higher is better",note:"* Measured at 21 dB SNR (Low Background Noise).",rows:[{label:"Rhino",value:"99%",width:99,isHighlight:!0},{label:"Amazon Lex",value:"87%",width:87},{label:"Google Dialogflow",value:"83%",width:83}]}),s=(0,o.Y)(a.h2,{title:"Voice Command Acceptance Accuracy at 12 dB SNR",subtitle:"Higher is better",note:"* Measured at 12 dB SNR.",rows:[{label:"Rhino",value:"98%",width:98,isHighlight:!0},{label:"Amazon Lex",value:"85%",width:85},{label:"Google Dialogflow",value:"77%",width:77}]}),c=(0,o.Y)(a.h2,{title:"Acceptance Accuracy at 6 dB SNR",subtitle:"Higher is better",note:"* Measured at 6 dB SNR (High Background Noise).",rows:[{label:"Rhino",value:"94%",width:94,isHighlight:!0},{label:"Amazon Lex",value:"76%",width:76},{label:"Google Dialogflow",value:"67%",width:67}]})},84207:function(e,t,i){var a=i(28007),o=i(41693),n=i(16074),l=i(17437);t.A=e=>{let{count:t=3}=e;const{pathname:i}=(0,o.useLocation)(),r=i.replace(/^\/cookbook\//,"").replace(/\/$/,""),s=(0,n.n1)(r,t);return(0,l.Y)("div",{className:"related-recipe-grid"},s.map(e=>(0,l.Y)(a.N_,{key:e.slug,to:`/cookbook/${e.slug}/`,className:"related-recipe-card"},(0,l.Y)("span",{className:"related-recipe-card__tag"},(0,n.R$)(e.products)),(0,l.Y)("h4",{className:"related-recipe-card__title"},e.title),(0,l.Y)("p",{className:"related-recipe-card__body"},e.description))))}},94864:function(e,t,i){i.d(t,{A:function(){return c}});var a=i(96540),o=i(33091),n="recipe_widget-module--readme_step__title--af927",l="recipe_widget-module--window_dot--b20ea",r=i(17437);const s=e=>{var t,i,o;let{recipeId:n,meta:s,statusText:c,tabs:d,defaultTabId:u}=e;const{0:m,1:h}=(0,a.useState)(null!==(t=null!=u?u:null===(i=d[0])||void 0===i?void 0:i.id)&&void 0!==t?t:""),p=null!==(o=d.find(e=>e.id===m))&&void 0!==o?o:d[0];return(0,r.Y)("div",{className:"recipe_widget-module--recipe_widget--cd751"},(0,r.Y)("div",{className:"recipe_widget-module--window_bar--e8cc8"},(0,r.Y)("span",{className:`${l} recipe_widget-module--window_dot_red--34708`}),(0,r.Y)("span",{className:`${l} recipe_widget-module--window_dot_yellow--fa488`}),(0,r.Y)("span",{className:`${l} recipe_widget-module--window_dot_green--01c4a`}),(0,r.Y)("span",{className:"recipe_widget-module--window_title--e4b43"},"recipe · ",n)),(0,r.Y)("div",{className:"recipe_widget-module--meta_grid--acf88"},s.map((e,t)=>{return(0,r.Y)("div",{key:t,className:"recipe_widget-module--meta_cell--6376b"},(0,r.Y)("div",{className:"recipe_widget-module--meta_label--563ac"},e.label),(0,r.Y)("div",{className:"recipe_widget-module--meta_value--cc807"+(i=e.variant,"blue"===i?" recipe_widget-module--meta_value_blue--cbbfd":"green"===i?" recipe_widget-module--meta_value_green--e4172":"")},e.value));var i})),c&&(0,r.Y)("div",{className:"recipe_widget-module--status_bar--fa9b4"},(0,r.Y)("span",{className:"recipe_widget-module--status_dot--45e71"}),c),d.length>0&&(0,r.Y)(a.Fragment,null,(0,r.Y)("div",{className:"recipe_widget-module--tabs_bar--79c9f",role:"tablist"},d.map(e=>(0,r.Y)("button",{key:e.id,type:"button",role:"tab","aria-selected":e.id===m,className:"recipe_widget-module--tab--626a7"+(e.id===m?" recipe_widget-module--tab_active--ece88":""),onClick:()=>h(e.id)},e.label))),(0,r.Y)("div",{className:"recipe_widget-module--tab_panel--27d20",role:"tabpanel"},null==p?void 0:p.content)))};s.Step=e=>{let{num:t,title:i,children:a}=e;return(0,r.Y)("div",{className:"recipe_widget-module--readme_step--43889"},(0,r.Y)("div",{style:{visibility:""+(t?"visible":"hidden")},className:"recipe_widget-module--readme_step__num--587be"},t),(0,r.Y)("div",null,void 0!==i&&(0,r.Y)("h4",{className:n},i),a))},s.StepTitle=e=>{let{children:t}=e;return(0,r.Y)("h4",{className:n},t)},s.StepBody=e=>{let{children:t}=e;return(0,r.Y)("div",{className:"recipe_widget-module--readme_step__body--a1ea5"},t)},s.StepPlatformLabel=e=>{let{children:t}=e;return(0,r.Y)("div",{className:"recipe_widget-module--readme_step__platform_label--ddc5d"},t)},s.StepCode=e=>{let{children:t,language:i="bash"}=e;const{0:n,1:l}=(0,a.useState)(!1);return(0,r.Y)("div",{className:"recipe_widget-module--readme_code--7e267"},(0,r.Y)("button",{type:"button",className:"recipe_widget-module--readme_code__copy--58caf",onClick:()=>{"undefined"!=typeof navigator&&navigator.clipboard&&(navigator.clipboard.writeText(t),l(!0),setTimeout(()=>l(!1),1500))},"aria-label":"Copy code"},n?"Copied":"Copy"),(0,r.Y)(o.A,{code:t,language:i}))};var c=s},48316:function(e,t,i){i.d(t,{A:function(){return o}});var a=i(17437);var o=e=>{let{useCases:t}=e;return(0,a.Y)("div",{className:"use_case_cards-module--use_case_grid--a87e1"},t.map((e,t)=>(0,a.Y)("article",{key:t,className:"use_case_cards-module--use_case_card--960ec"},(0,a.Y)("span",{className:"use_case_cards-module--use_case_card__tag--36509"},e.tag),(0,a.Y)("h3",{className:"use_case_cards-module--use_case_card__title--aea8d"},e.title),(0,a.Y)("p",{className:"use_case_cards-module--use_case_card__body--ca075"},e.body))))}},40545:function(e,t,i){i.r(t),i.d(t,{default:function(){return Q}});var a=i(96540),o=i(85902),n=i(28007),l=i(66658),r=i(23675),s=i(58226),c=i(15696),d=i(
159468),u=i(31630),m=i(50073),h=i(74813),p=i(57377),v=i(16074),b=i(84207),w=i(4052),g=i(94864),y=i(79299),Y=i(72946),f=i(48316),S=i(17437);const A=100,k=80,T={blue:{tile:"#EAF1FF",caption:"#4A7BF6"},gray:{tile:"#F1F2F5",caption:"#4A7BF6"},orange:{tile:"#FFEAD6",caption:"#F08A24"},green:{tile:"#E2F4EA",caption:"#3DA068"}},x=e=>{let{x:t,y:i,title:a,caption:o,icon:n,theme:l="blue"}=e;const r=t+50,{tile:s,caption:c}=T[l];return(0,S.Y)("g",null,(0,S.Y)("rect",{x:t,y:i,width:A,height:k,rx:10,fill:"#FFFFFF",stroke:"#E5E8F0",strokeWidth:"1"}),(0,S.Y)("rect",{x:r-13,y:i+9,width:"26",height:"26",rx:"6",fill:s}),(0,S.Y)("g",{transform:`translate(${r-9}, ${i+13}) scale(0.75)`},n),Array.isArray(a)?a.map((e,t)=>(0,S.Y)("text",{key:t,x:r,y:i+50+10*t,textAnchor:"middle",fontFamily:"'Poppins', sans-serif",fontSize:"9",fontWeight:"700",fill:"#152232"},e)):(0,S.Y)("text",{x:r,y:i+55,textAnchor:"middle",fontFamily:"'Poppins', sans-serif",fontSize:"9",fontWeight:"700",fill:"#152232"},a),(0,S.Y)("text",{x:r,y:i+(Array.isArray(a)?72:68),textAnchor:"middle",fontFamily:"monospace",fontSize:"6",fontWeight:"700",fill:c,letterSpacing:"0.08em"},o))},L=e=>{let{x:t,y:i,w:a,h:o,lines:n,scheme:l="gray"}=e;const r={gray:{fill:"#f1efe8",stroke:"#b4b2a9",text:"#5f5e5a"},blue:{fill:"#e6f1fb",stroke:"#85b7eb",text:"#185fa5"},purple:{fill:"#eeedfe",stroke:"#afa9ec",text:"#534ab7"},teal:{fill:"#e1f5ee",stroke:"#5dcaa5",text:"#0f6e56"},coral:{fill:"#faece7",stroke:"#f0997b",text:"#993c1d"}}[l];return(0,S.Y)("g",null,(0,S.Y)("rect",{x:t,y:i,width:a,height:o,rx:6,fill:r.fill,stroke:r.stroke,strokeWidth:"0.5"}),n.map((e,o)=>(0,S.Y)("text",{key:o,x:t+a/2,y:i+13+13*o,textAnchor:"middle",fontFamily:"'Poppins', sans-serif",fontSize:"8",fill:r.text},e)))},M=e=>{let{x1:t,y1:i,x2:a,y2:o}=e;return(0,S.Y)("line",{x1:t,y1:i,x2:a,y2:o,stroke:"#9ca3af",strokeWidth:"0.5",markerEnd:"url(#cb-arrow-memo)"})},_=(0,S.Y)("g",{fill:"none",stroke:"#4A7BF6",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round"},(0,S.Y)("path",{d:"M12 3 C10 3 9 4 9 6 L9 12 C9 14 10 15 12 15 C14 15 15 14 15 12 L15 6 C15 4 14 3 12 3 Z",fill:"#FFFFFF"}),(0,S.Y)("path",{d:"M6 11 C6 14 8 17 12 17 C16 17 18 14 18 11"}),(0,S.Y)("line",{x1:"12",y1:"17",x2:"12",y2:"21"}),(0,S.Y)("line",{x1:"9",y1:"21",x2:"15",y2:"21"})),P=(0,S.Y)("g",{fill:"none",stroke:"#4A7BF6",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round"},(0,S.Y)("circle",{cx:"12",cy:"12",r:"9",fill:"#FFFFFF"}),(0,S.Y)("path",{d:"M8 12 L11 15 L16 9",stroke:"#4A7BF6",strokeWidth:"1.8"})),N=(0,S.Y)("g",{fill:"none",stroke:"#4A7BF6",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round"},(0,S.Y)("path",{d:"M4 5 H20 A2 2 0 0 1 22 7 V15 A2 2 0 0 1 20 17 H10 L6 21 V17 H4 A2 2 0 0 1 2 15 V7 A2 2 0 0 1 4 5 Z",fill:"#FFFFFF"}),(0,S.Y)("line",{x1:"7",y1:"10",x2:"17",y2:"10"}),(0,S.Y)("line",{x1:"7",y1:"13",x2:"14",y2:"13"})),F=(0,S.Y)("g",{fill:"none",stroke:"#4A7BF6",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round"},(0,S.Y)("path",{d:"M3 9 L8 9 L13 4 L13 20 L8 15 L3 15 Z",fill:"#4A7BF6",stroke:"#4A7BF6"}),(0,S.Y)("path",{d:"M16 9 Q19 12 16 15"}),(0,S.Y)("path",{d:"M19 6 Q24 12 19 18"})),C=(0,S.Y)("g",{fill:"none",stroke:"#F08A24",strokeWidth:"1.6",strokeLinejoin:"round",strokeLinecap:"round"},(0,S.Y)("rect",{x:"6",y:"6",width:"12",height:"12",rx:"2",fill:"#FFFFFF"}),(0,S.Y)("rect",{x:"9",y:"9",width:"6",height:"6",rx:"1",fill:"#F08A24",stroke:"#F08A24"}),(0,S.Y)("line",{x1:"3",y1:"9",x2:"6",y2:"9"}),(0,S.Y)("line",{x1:"3",y1:"12",x2:"6",y2:"12"}),(0,S.Y)("line",{x1:"3",y1:"15",x2:"6",y2:"15"}),(0,S.Y)("line",{x1:"18",y1:"9",x2:"21",y2:"9"}),(0,S.Y)("line",{x1:"18",y1:"12",x2:"21",y2:"12"}),(0,S.Y)("line",{x1:"18",y1:"15",x2:"21",y2:"15"}),(0,S.Y)("line",{x1:"9",y1:"3",x2:"9",y2:"6"}),(0,S.Y)("line",{x1:"12",y1:"3",x2:"12",y2:"6"}),(0,S.Y)("line",{x1:"15",y1:"3",x2:"15",y2:"6"}),(0,S.Y)("line",{x1:"9",y1:"18",x2:"9",y2:"21"}),(0,S.Y)("line",{x1:"12",y1:"18",x2:"12",y2:"21"}),(0,S.Y)("line",{x1:"15",y1:"18",x2:"15",y2:"21"})),B=(0,S.Y)("g",{fill:"none",stroke:"#4A7BF6",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round"},(0,S.Y)("circle",{cx:"12",cy:"8",r:"4",fill:"#4A7BF6",stroke:"#4A7BF6"}),(0,S.Y)("path",{d:"M4 22 C4 16 8 14 12 14 C16 14 20 16 20 22",fill:"#4A7BF6",stroke:"#4A7BF6"}));var R=()=>{const e=14,t=134,i=254,a=384,o=10,n=180,l=350,r=520,s=e=>e+18+40,c=e=>e+18;return(0,S.Y)("div",{style:{overflowX:"auto",maxWidth:"90%",margin:"0 auto"}},(0,S.Y)("svg",{width:"100%",viewBox:"0 0 660 700",fill:"none",xmlns:"http://www.w3.org/2000/svg",style:{minWidth:"600px",display:"block",maxWidth:"100%"},"aria-label":"On-device voice memo assistant pipeline diagram"},(0,S.Y)("defs",null,(0,S.Y)("marker",{id:"cb-arrow-memo",viewBox:"0 0 10 10",refX:"8",refY:"5",markerWidth:"6",markerHeight:"6",orient:"auto-start-reverse"},(0,S.Y)("path",{d:"M2 1L8 5L2 9",fill:"none",stroke:"#9ca3af",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}))),(0,S.Y)("rect",{x:"0",y:"0",width:660,height:700,rx:"14",fill:"#F4F7FF"}),(0,S.Y)("text",{x:e,y:20,fontFamily:"'Poppins', sans-serif",fontSize:"8",fill:"#9CA3AF"},"1 · Record memo"),(0,S.Y)(x,{x:e,y:c(o),title:["User",'"Hey Pico"'],caption:"",icon:B,theme:"blue"}),(0,S.Y)(M,{x1:116,y1:s(o),x2:130,y2:s(o)}),(0,S.Y)(x,{x:t,y:c(o),title:"Porcupine",caption:"WAKE WORD",icon:_,theme:"blue"}),(0,S.Y)(M,{x1:236,y1:s(o),x2:250,y2:s(o)}),(0,S.Y)(x,{x:i,y:c(o),title:"Rhino",caption:"SPEECH-TO-INTENT",icon:P,theme:"gray"}),(0,S.Y)(M,{x1:304,y1:c(o)+k+2,x2:304,y2:c(o)+k+8}),(0,S.Y)(L,{x:i,y:c(o)+k+10,w:A,h:22,lines:['"Start Recording"'],scheme:"purple"}),(0,S.Y)(M,{x1:356,y1:s(o),x2:380,y2:s(o)}),(0,S.Y)(x,{x:a,y:c(o),title:"Cheetah",caption:"STREAMING STT",icon:N,theme:"blue"}),(0,S.Y)(M,{x1:434,y1:c(o)+k+2,x2:434,y2:c(o)+k+8}),(0,S.Y)(L,{x:a,y:c(o)+k+10,w:240,h:34,lines:['"So um I wanted to follow up on the the','meeting we had yesterday with the client..."'],scheme:"blue"}),(0,S.Y)(M,{x1:486,y1:s(o),x2:504,y2:s(o)}),(0,S.Y)(x,{x:506,y:c(o),title:["User","Dictates memo"],caption:"",icon:B,theme:"blue"}),(0,S.Y)("text",{x:e,y:190,fontFamily:"'Poppins', sans-serif",fontSize:"8",fill:"#9CA3AF"},"2 · Rewrite"),(0,S.Y)(x,{x:e,y:c(n),title:["User",'"Hey Pico"'],caption:"",icon:B,theme:"blue"}),(0,S.Y)(M,{x1:116,y1:s(n),x2:130,y2:s(n)}),(0,S.Y)(x,{x:t,y:c(n),title:"Porcupine",caption:"WAKE WORD",icon:_,theme:"blue"}),(0,S.Y)(M,{x1:236,y1:s(n),x2:250,y2:s(n)}),(0,S.Y)(x,{x:i,y:c(n),title:"Rhino",caption:"SPEECH-TO-INTENT",icon:P,theme:"gray"}),(0,S.Y)(M,{x1:304,y1:c(n)+k+2,x2:304,y2:c(n)+k+8}),(0,S.Y)(L,{x:i,y:c(n)+k+10,w:A,h:22,lines:['"Rewrite Memo"'],scheme:"purple"}),(0,S.Y)(M,{x1:356,y1:s(n),x2:380,y2:s(n)}),(0,S.Y)(x,{x:a,y:c(n),title:["picoLLM","Rewrite"],caption:"ON-DEVICE LLM",icon:C,theme:"orange"}),(0,S.Y)(M,{x1:434,y1:c(n)+k+2,x2:434,y2:c(n)+k+8}),(0,S.Y)(L,{x:a,y:c(n)+k+10,w:240,h:34,lines:['"I wanted to follow up on the meeting we had','yesterday with the client..."'],scheme:"teal"}),(0,S.Y)("text",{x:624,y:c(n)+k+54,textAnchor:"end",fontFamily:"'Poppins', sans-serif",fontSize:"8",fill:"#0D9488"},"Grammar fixed · Fillers removed"),(0,S.Y)("text",{x:e,y:360,fontFamily:"'Poppins', sans-serif",fontSize:"8",fill:"#9CA3AF"},"3 · Summarize"),(0,S.Y)(x,{x:e,y:c(l),title:["User",'"Hey Pico"'],caption:"",icon:B,theme:"blue"}),(0,S.Y)(M,{x1:116,y1:s(l),x2:130,y2:s(l)}),(0,S.Y)(x,{x:t,y:c(l),title:"Porcupine",caption:"WAKE WORD",icon:_,theme:"blue"}),(0,S.Y)(M,{x1:236,y1:s(l),x2:250,y2:s(l)}),(0,S.Y)(x,{x:i,y:c(l),title:"Rhino",caption:"SPEECH-TO-INTENT",icon:P,theme:"gray"}),(0,S.Y)(M,{x1:304,y1:c(l)+k+2,x2:304,y2:c(l)+k+8}),(0,S.Y)(L,{x:i,y:c(l)+k+10,w:110,h:22,lines:['"Summarize Memo"'],scheme:"purple"}),(0,S.Y)(M,{x1:356,y1:s(l),x2:380,y2:s(l)}),(0,S.Y)(x,{x:a,y:c(l),title:["picoLLM","Summarize"],caption:"ON-DEVICE LLM",icon:C,theme:"orange"}),(0,S.Y)(M,{x1:434,y1:c(l)+k+2,x2:434,y2:c(l)+k+8}),(0,S.Y)(L,{x:a,y:c(l)+k+10,w:240,h:22,lines:['"Client wants pilot; revised proposal by next week."'],scheme:"coral"}),(0,S.Y)("text",{x:e,y:530,fontFamily:"'Poppins', sans-serif",fontSize:"8",fill:"#9CA3AF"},"4 · Read back"),(0,S.Y)(x,{x:e,y:c(r),title:["User",'"Hey Pico"'],caption:"",icon:B,theme:"blue"}),(0,S.Y)(M,{x1:116,y1:s(r),x2:130,y2:s(r)}),(0,S.Y)(x,{x:t,y:c(r),title:"Porcupine",caption:"WAKE WORD",icon:_,theme:"blue"}),(0,S.Y)(M,{x1:236,y1:s(r),x2:250,y2:s(r)}),(0,S.Y)(x,{x:i,y:c(r),title:"Rhino",caption:"SPEECH-TO-INTENT",icon:P,theme:"gray"}),(0,S.Y)(M,{x1:304,y1:c(r)+k+2,x2:304,y2:c(r)+k+8}),(0,S.Y)(L,{x:i,y:c(r)+k+10,w:A,h:22,lines:['"Read Memo"'],scheme:"purple"}),(0,S.Y)(M,{x1:356,y1:s(r),x2:380,y2:s(r)}),(0,S.Y)(x,{x:a,y:c(r),title:"Orca",caption:"TEXT-TO-SPEECH",icon:F,theme:"blue"}),(0,S.Y)(M,{x1:434,y1:c(r)+k+2,x2:434,y2:c(r)+k+8}),(0,S.Y)(L,{x:a,y:c(r)+k+10,w:120,h:22,lines:["Speaks memo aloud"],scheme:"blue"})))},W=i(15828),z=i(71283),O=i(50679),E=i(24366),H=i(32137),I=i(63275);const G=(0,v.LY)("on-device-voice-memo"),D=(0,S.Y)(a.Fragment,null,(0,S.Y)(p.A,{products:G.products}),(0,S.Y)(h.A,{platforms:G.platforms})),U=[{tag:"Sales and CRM capture",title:"On-device voice memo for sales reps and CRM capture",body:"Sales reps walk out of a meeting and record their notes into their phones or tablets on the way to another meeting or home. picoLLM structures the transcription into a summary with next steps, attendees, and follow-ups. The captured note can be pushed into the CRM. Customer voice and prospect details never leave the device."},{tag:"Healthcare",title:"HIPAA-compliant dictation for doctors and clinicians",body:"Doctors, nurses, and therapists can dictate patient encounter notes between visits, reducing time spent on documentation. picoLLM summarizes them into a SOAP-friendly structure. No audio or transcript is sent to a cloud, which removes BAA requirements under HIPAA. Porcupine, Cheetah, and Rhino all support custom medical vocabulary."},{tag:"Legal, journalism, FSI",title:"On-device dictation and notes in handling sensitive data",body:(0,S.Y)(a.Fragment,null,"Lawyers, journalists, and financial advisors capture interviews containing sensitive data that shouldn't be shared with third parties. Otter.ai and similar transcription services have faced scrutiny over how they handle audio data and hit the ",(0,S.Y)(w.A,{href:"/blog/gdpr-ccpa-voice-recognition-privacy/"},"news")," and ",(0,S.Y)(w.A,{href:"https://www.npr.org/2025/08/15/g-s1-83087/otter-ai-transcription-class-action-lawsuit"},"courtrooms"),". On-device AI is the only way to keep voice memos private.")},{tag:"Field service",title:"Offline voice notes for field service",body:"Service technicians inspect assets and capture issues on manufacturing lines and in the field, where connectivity is unreliable, and the content is commercially sensitive or source-protected. On-device processing ensures notes are captured securely and accurately without depending on a network connection."}],V=()=>(0,S.Y)(a.Fragment,null,(0,S.Y)(g.A.Step,null,(0,S.Y)(g.A.StepTitle,null,"Prerequisites"),(0,S.Y)(g.A.StepBody,null,"Picovoice AccessKey from ",(0,S.Y)(w.A,{href:"https://console.picovoice.ai/"},"Picovoice Console")," and ",(0,S.Y)(w.A,{href:"https://github.com/Picovoice/pico-cookbook"},"GitHub Repo Clone"),"."),(0,S.Y)(g.A.StepTitle,null,"Usage"),(0,S.Y)(g.A.StepBody,null,"These instructions assume your current working directory is ",(0,S.Y)("code",null,"recipes/voice-memo-assistant/python"),".")),(0,S.Y)(g.A.Step,{num:"1"},(0,S.Y)(g.A.StepTitle,null,"Create a virtual environment"),(0,S.Y)(g.A.StepBody,null,"Isolate the recipe's depen
1dencies from your system Python."),(0,S.Y)(g.A.StepCode,{language:"bash"},"python -m venv .venv")),(0,S.Y)(g.A.Step,{num:"2"},(0,S.Y)(g.A.StepTitle,null,"Activate the virtual environment"),(0,S.Y)(g.A.StepBody,null,"Activation makes ",(0,S.Y)("code",null,"pip")," install into ",(0,S.Y)("code",null,".venv")," ","instead of system Python."),(0,S.Y)(g.A.StepPlatformLabel,null,"Linux, macOS, or Raspberry Pi"),(0,S.Y)(g.A.StepCode,{language:"bash"},"source .venv/bin/activate"),(0,S.Y)(g.A.StepPlatformLabel,null,"Windows"),(0,S.Y)(g.A.StepCode,{language:"bash"},".venv\\Scripts\\activate")),(0,S.Y)(g.A.Step,{num:"3"},(0,S.Y)(g.A.StepTitle,null,"Install dependencies"),(0,S.Y)(g.A.StepBody,null,"Install the Porcupine, Rhino, Cheetah, picoLLM, Orca, PvRecorder, and PvSpeaker Python SDKs."),(0,S.Y)(g.A.StepCode,{language:"bash"},"pip install -r requirements.txt")),(0,S.Y)(g.A.Step,{num:"4"},(0,S.Y)(g.A.StepTitle,null,"Download the on-device LLM"),(0,S.Y)(g.A.StepBody,null,"Download ",(0,S.Y)("code",null,"llama-3.2-1b-instruct-385.pllm")," from the"," ",(0,S.Y)(w.A,{href:"https://console.picovoice.ai/"},"Picovoice Console"),". Summarization and rewriting run locally on this model with no cloud LLM call.")),(0,S.Y)(g.A.Step,{num:"5"},(0,S.Y)(g.A.StepTitle,null,"Train the Wake Word"),(0,S.Y)(g.A.StepBody,null,"In ",(0,S.Y)(w.A,{href:"https://console.picovoice.ai/"},"Picovoice Console"),", go to"," ",(0,S.Y)(w.A,{href:"/products/voice/wake-word/"},"Porcupine Wake Word"),", enter your wake phrase, train, and download the ",(0,S.Y)("code",null,".ppn")," file for your target platform.")),(0,S.Y)(g.A.Step,{num:"6"},(0,S.Y)(g.A.StepTitle,null,"Train the Speech-to-Intent model"),(0,S.Y)(g.A.StepBody,null,"In Picovoice Console, go to Rhino Speech-to-Intent, create an empty context, and import the"," ",(0,S.Y)(w.A,{href:"https://github.com/Picovoice/pico-cookbook/blob/main/recipes/voice-memo-assistant/res/context.yml"},"Rhino context YAML")," ","for this recipe. Intents include ",(0,S.Y)("code",null,"startMemo"),", ",(0,S.Y)("code",null,"readMemo"),","," ",(0,S.Y)("code",null,"summarizeMemo"),", and ",(0,S.Y)("code",null,"rewriteMemo"),". Download the generated"," ",(0,S.Y)("code",null,".rhn")," file.")),(0,S.Y)(g.A.Step,{num:"7"},(0,S.Y)(g.A.StepTitle,null,"Run the voice memo assistant demo"),(0,S.Y)(g.A.StepBody,null,"Pass your AccessKey and run the demo. The demo opens the microphone and runs the on-device voice memo assistant pipeline locally."),(0,S.Y)(g.A.StepCode,{language:"bash"},"python main.py \\\n  --access_key ${ACCESS_KEY} \\\n  --picollm_model_path ${PICOLLM_MODEL_PATH} \\\n  --keyword_path ${KEYWORD_PATH} \\\n  --context_path ${CONTEXT_PATH}"),(0,S.Y)(g.A.StepBody,null,"Have questions or looking for implementations in other languages? Visit the"," ",(0,S.Y)(w.A,{href:"https://github.com/Picovoice/pico-cookbook/tree/main/recipes/voice-memo-assistant"},"GitHub pico-cookbook Voice Memo Assistant Recipe"),", where you can find the open-source demo code and"," ",(0,S.Y)(w.A,{href:"https://github.com/Picovoice/pico-cookbook/issues"},"create an issue for demo-related technical questions"),"."))),q=[{label:"Difficulty",value:"Beginner"},{label:"Runtime",value:"100% on-device",variant:"blue"},{label:"Language",value:"Python"},{label:"Platforms supported",value:(0,S.Y)(h.A,{platforms:G.platforms,hideLabel:!0})}],K=[{question:"What is a voice memo assistant?",answer:"A voice memo assistant is a hands-free dictation app that lets users start, summarize, rewrite, and replay voice memos using only their voice. The wake word starts the flow, the user speaks the memo, and speech-to-text transcribes it. Depending on the user's preference, a local LLM can further summarize or rewrite the captured text, and Orca can read it back. Picovoice's on-device pipeline runs entirely on the device; no audio, transcript, or summary is sent to the cloud."},{question:"Is the LLM in voice memo assistant running locally?",answer:(0,S.Y)(a.Fragment,null,"Yes. ",(0,S.Y)(w.A,{href:"/products/language/llm/"},"picoLLM Inference")," runs compressed open-weight LLMs such as Llama 3.2 directly on-device. The summary and rewrite are produced locally — no cloud LLM API call, no third party seeing your memo content.")},{question:"Can the voice memo assistant work without an internet connection?",answer:(0,S.Y)(a.Fragment,null,"Yes. ",(0,S.Y)(w.A,{href:"/products/voice/wake-word/"},"Porcupine Wake Word"),","," ",(0,S.Y)(w.A,{href:"/products/voice/speech-to-intent/"},"Rhino Speech-to-Intent"),","," ",(0,S.Y)(w.A,{href:"/products/voice/streaming-speech-to-text/"},"Cheetah Streaming Speech-to-Text"),","," ",(0,S.Y)(w.A,{href:"/products/language/llm/"},"picoLLM Inference"),", and"," ",(0,S.Y)(w.A,{href:"/products/voice/streaming-text-to-speech/"},"Orca Streaming Text-to-Speech")," ","all run locally. The full record, transcribe, summarize, rewrite, and replay flow processes data locally without sending any data to the cloud.")},{question:"Can I customize the wake word and the intents?",answer:(0,S.Y)(a.Fragment,null,"Yes. Custom wake words compatible with"," ",(0,S.Y)(w.A,{href:"/products/voice/wake-word/"},"Porcupine Wake Word")," can be trained through ",(0,S.Y)(w.A,{href:"https://console.picovoice.ai/"},"Picovoice Console")," ","or the Porcupine Wake Word API powered by picoGYM. You can customize intents in"," ",(0,S.Y)(w.A,{href:"/products/voice/speech-to-intent/"},"Rhino Speech-to-Intent")," ",'context YAML files to add voice commands such as "start memo" or "read memo" on P
1icovoice Console or the Rhino API powered by picoGYM.')},{question:"Who uses this kind of on-device voice memo assistant?",answer:"Deskless workers who are on the go with no office desk, mobile professionals, field workers (utility, oil and gas, construction), journalists capturing source material, lawyers dictating case notes, doctors and clinicians dictating between patients, real-estate agents capturing showings, sales reps capturing post-call notes, researchers in the field, and consumers who simply prefer their voice notes to stay private."},{question:"How does the on-device voice memo assistant pipeline use a small on-device LLM responsibly?",answer:(0,S.Y)(a.Fragment,null,"The on-device voice memo assistant recipe uses a compact LLM such as Llama 3.2 compressed with ",(0,S.Y)(w.A,{href:"/technologies/ai-model-compression/"},"picoCompression"),", which preserves task accuracy more effectively than GPTQ at the same bit-width. Summarization and rewriting are scoped tasks where small LLMs perform well, and the user can review the output before saving. The recording and transcript itself remains the source of truth — the LLM operates on top, not in place of it.")},{question:"Can I build the on-device voice memo assistant on Android or iOS?",answer:(0,S.Y)(a.Fragment,null,"Yes. The on-device voice memo assistant recipe has Android and iOS implementations for developers to get started easily. For more implementations, visit the"," ",(0,S.Y)(w.A,{href:"https://github.com/Picovoice/pico-cookbook/tree/main/recipes/voice-memo-assistant"},"GitHub pico-cookbook Voice Memo Assistant Recipe"),".")},{question:"Does the on-device voice memo assistant send audio to a third-party cloud?",answer:"No. Audio and text are processed on the device. Picovoice has no data controller relationship with end users. This removes processing-agreement and breach-surface concerns, which are critical for memos that include client, patient, source, or commercially sensitive material when the data is sent to the cloud."},{question:"How is this different from Otter, Notta, or Wispr Flow?",answer:"Otter, Notta, and Wispr Flow transcribe audio on cloud servers, use cloud LLMs for formatting and rewriting, and are not completely hands-free. Picovoice's voice memo assistant runs the full pipeline — wake word, intent, STT, LLM summarization and rewriting, and TTS — entirely on-device."},{question:"How can I get technical support for the voice memo assistant demo?",answer:(0,S.Y)(a.Fragment,null,"Visit the"," ",(0,S.Y)(w.A,{href:"https://github.com/Picovoice/pico-cookbook/tree/main/recipes/voice-memo-assistant"},"GitHub pico-cookbook Voice Memo Assistant Recipe")," ","where you can find the open-source demo code and"," ",(0,S.Y)(w.A,{href:"https://github.com/Picovoice/pico-cookbook/issues"},"create an issue for demo-related technical questions")," ","or reach out to your Picovoice contact.")}];var Q=()=>(0,S.Y)(u.A,null,(0,S.Y)(o.Helmet,null,(0,S.Y)("meta",{charSet:"utf-8"}),(0,S.Y)("title",null,"On-Device Voice Memo Assistant with Local LLM"),(0,S.Y)("meta",{name:"description",content:"On-device voice memo assistant complete guide with example code. Record, rewrite, summarize, and replay voice memos with wake word, LLM, and voice synthesis."}),(0,S.Y)("meta",{property:"og:title",content:"On-Device Voice Memo Assistant with Local LLM"}),(0,S.Y)("meta",{property:"og:description",content:"On-device voice memo assistant complete guide with example code. Record, rewrite, summarize, and replay voice memos with wake word, LLM, and voice synthesis."}),(0,S.Y)("meta",{property:"og:url",content:"https://picovoice.ai/cookbook/on-device-voice-memo/"}),(0,S.Y)("meta",{property:"og:image",content:"https://picovoice.ai/og_images/og_picovoice_logo.png"}),(0,S.Y)("meta",{property:"og:type",content:"article"}),(0,S.Y)("meta",{name:"keywords",content:"on-device voice memo assistant, on-device AI voice memo, on-device voice memo app, on-device voice notes app, AI dictation, on-device voice memo summarizer, hands-free voice notes, on-device voice memo, Otter alternative, Notta alternative, Wispr Flow alternative, Apple Voice Memos AI, on-device voice memo summary, on-device AI rewrite memo, on-device LLM voice, private voice notes, on-device voice memo for journalists, on-device voice memo for lawyers, on-device voice memo for doctors"}),(0,S.Y)("meta",{name:"robots",content:"index, follow"}),(0,S.Y)("link",{rel:"canonical",href:"https://picovoice.ai/cookbook/on-device-voice-memo/"})),(0,S.Y)("div",{className:"cookbook"},(0,S.Y)(y.A,null,(0,S.Y)(m.A,{caption:"Voice Memo Assistant",title:(0,S.Y)(a.Fragment,null,"On-Device"," ",(0,S.Y)("span",{className:m.Q}
1,"Voice Memos and Notes")," ","with Wake Word, LLM Summarization, and Voice Playback"),subtitle:"Build apps that record, transcribe, summarize, rewrite, and replay voice memos hands-free. Wake word activation, voice commands, real-time transcription, LLM summarization, and spoken playback. All on-device. No audio or text data ever leaves the device.",demo:(0,S.Y)(I.A,{mp4Link:"/video_assets/cookbook/on-device-voice-memo-pc.mp4",webmLink:"/video_assets/cookbook/on-device-voice-memo-pc.webm",controls:!0}),ctaButtons:(0,S.Y)(a.Fragment,null,(0,S.Y)(s.Ay,{to:"https://console.picovoice.ai/signup",text:"Start Building",variant:s.Sv.Secondary,size:s.q6.Medium}),(0,S.Y)(n.N_,{to:"/contact/"},(0,S.Y)(s.Ay,{text:"Talk to Sales",size:s.q6.Medium})))},D)),(0,S.Y)(y.A,null,(0,S.Y)("div",{className:"logos"},(0,S.Y)(r.A,{hideLabel:!0}))),(0,S.Y)(y.A,null,(0,S.Y)(d.A,{background:!0,caption:"How on-device voice memo assistant works",title:"Five on-device AI SDKs to record, summarize, rewrite, and replay voice notes.",subtitle:(0,S.Y)(a.Fragment,null,"On-device voice memo assistant combines"," ",(0,S.Y)(w.A,{href:"/products/voice/wake-word/"},"Porcupine Wake Word"),","," ",(0,S.Y)(w.A,{href:"/products/voice/speech-to-intent/"},"Rhino Speech-to-Intent"),","," ",(0,S.Y)(w.A,{href:"/products/voice/streaming-speech-to-text/"},"Cheetah Streaming Speech-to-Text"),", ",(0,S.Y)(w.A,{href:"/products/language/llm/"},"picoLLM"),", and"," ",(0,S.Y)(w.A,{href:"/products/voice/streaming-text-to-speech/"},"Orca Streaming Text-to-Speech")," ","into a single local pipeline that records, summarizes, rewrites, and replays voice notes. Porcupine listens for the wake word, Rhino captures intents such as start, summarize, rewrite, or read the memo. Cheetah transcribes the dictation. picoLLM produces the summary or rewrite locally. Orca speaks playback. Memo content never leaves the device."),body:(0,S.Y)(R,null)})),(0,S.Y)(y.A,null,(0,S.Y)(d.A,{borderTop:!0,caption:"Why Porcupine Wake Word?",title:"Always-listening wake word with very low CPU and battery cost.",body:(0,S.Y)(a.Fragment,null,(0,S.Y)(Y.A,{compact:!0,stats:W.io}),(0,S.Y)("p",{className:"cb-section-lede"},"Porcupine Wake Word is lightweight, accurate, customizable, and production-ready. It enables an always-listening wake word with very low CPU and battery cost, which is critical for a voice memo app that lives in the background and needs to be activated without draining the battery of mobile devices. With Porcupine, enterprises can train branded wake words and always-listening commands in seconds and deploy them across platforms. Industry-leading accuracy that fits on MCUs."),(0,S.Y)("div",{className:"cb-section-button-wrapper"},(0,S.Y)(n.N_,{to:"/products/voice/wake-word/"},(0,S.Y)(s.Ay,{text:"Porcupine Wake Word →",variant:s.Sv.OutlineBlue,size:s.q6.Medium}))),(0,S.Y)(l.Ay,{collapsible:!0,reportLink:"/docs/benchmark/wake-word/",reportText:"See Open-source Wake Word Benchmark →"},W.E,W.FT))})),(0,S.Y)(y.A,null,(0,S.Y)(d.A,{borderTop:!0,background:!0,caption:"Why Rhino Speech-to-Intent?",title:"End-to-end intent. No transcript. No hallucinations.",body:(0,S.Y)(a.Fragment,null,(0,S.Y)(Y.A,{compact:!0,stats:O.fD}),(0,S.Y)("p",{className:"cb-section-lede"},'Rhino Speech-to-Intent maps spoken commands, such as "Start memo" and "Read memo," directly to actions with no intermediate transcript. Most voice command systems run a two-step pipeline: speech-to-text converts audio to a transcript, then a separate NLU model parses that transcript for intent. Every step accumulates error and compounds latency. Rhino achieves 6× higher accuracy than STT-plus-cloud-NLU stacks offered by Big Tech, even in noisy environments.'),(0,S.Y)("div",{className:"cb-section-button-wrapper"},(0,S.Y)(n.N_,{to:"/products/voice/speech-to-intent/"},(0,S.Y)(s.Ay,{text:"Rhino Speech-to-Intent →",variant:s.Sv.OutlineBlue,size:s.q6.Medium}))),(0,S.Y)(l.Ay,{collapsible:!0,reportLink:"/docs/benchmark/nlu/",reportText:"See Open-source NLU Benchmark →"},O.s2,O.Lu,O.DB,O.yy))})),(0,S.Y)(y.A,null,(0,S.Y)(d.A,{borderTop:!0,caption:"Why Cheetah Streaming Speech-to-Text?",title:"Real-time dictation transcription with custom vocabulary.",body:(0,S.Y)(a.Fragment,null,(0,S.Y)(Y.A,{compact:!0,stats:z.hY}),(0,S.Y)("p",{className:"cb-section-lede"},"Cheetah transcribes the memo dictation in real time as the user speaks. Cheetah matches or beats cloud STT API accuracy and supports custom vocabulary for industry jargon and proper nouns, which is important for memos that include client names, drug names, case numbers, or part numbers. Cheetah emits words at 590 ms average latency, typically one word behind the speaker, and requires less compute than any other local engine tested. The result: no tradeoff on accuracy, latency, or privacy."),(0,S.Y)("div",{className:"cb-section-button-wrapper"},(0,S.Y)(n.N_,{to:"/products/voice/streaming-speech-to-text/"},(0,S.Y)(s.Ay,{text:"Cheetah Streaming Speech-to-Text →",variant:s.Sv.OutlineBlue,size:s.q6.Medium}))),(0,S.Y)(l.Ay,{collapsible:!0,reportLink:"/docs/benchmark/real-time-transcription/",reportText:"See Open-source Real-time Transcription Benchmark →"},z.Sk,z.ci,z.pq,z.Yl,z.yP,z.WW,z.Ul,z.mk))})),(0,S.Y)(y.A,null,(0,S.Y)(d.A,{borderTop:!0,background:!0,caption:"Why picoLLM?",title:"Local LLM summarization and rewriting with no cloud dependency.",body:(0,S.Y)(a.Fragment,null,(0,S.Y)(Y.A,{compact:!0,stats:H.dN}),(0,S.Y)("p",{className:"cb-section-lede"},"picoCompression quantizes language models to run on phones, browsers, and embedded boards with 
1no cloud dependency while preserving task accuracy, making it well-suited for memo summarization and rewriting. picoLLM's minimal memory footprint allows the model to run alongside Cheetah, Rhino, and Orca in a single session without introducing network latency or privacy exposure."),(0,S.Y)("div",{className:"cb-section-button-wrapper"},(0,S.Y)(n.N_,{to:"/products/language/llm/"},(0,S.Y)(s.Ay,{text:"picoLLM On-device LLM →",variant:s.Sv.OutlineBlue,size:s.q6.Medium}))),(0,S.Y)(l.Ay,{collapsible:!0,reportLink:"/docs/benchmark/llm/",reportText:"See Open-source LLM Compression Benchmark →"},H.Eo,H.jt,H.f3,H.OL))})),(0,S.Y)(y.A,null,(0,S.Y)(d.A,{borderTop:!0,caption:"Why Orca Streaming Text-to-Speech?",title:"Natural-sounding TTS at 41 MB peak memory.",body:(0,S.Y)(a.Fragment,null,(0,S.Y)(Y.A,{compact:!0,stats:E.mk}),(0,S.Y)("p",{className:"cb-section-lede"},"Orca reads back the memo, the summary, or the rewritten version with a natural-sounding voice. Orca Streaming TTS is built for real-time LLM applications. It starts reading LLM responses as soon as LLMs create a meaningful word or phrase, achieving first-token-to-speech latency of 106 ms. Orca's 41 MB peak memory allows it to run alongside Cheetah, picoLLM, Porcupine, and Rhino with no performance issues. Most high-quality TTS engines require hundreds of megabytes of RAM, which limits where they can deploy."),(0,S.Y)("div",{className:"cb-section-button-wrapper"},(0,S.Y)(n.N_,{to:"/products/voice/streaming-text-to-speech/"},(0,S.Y)(s.Ay,{text:"Orca Text-to-Speech →",variant:s.Sv.OutlineBlue,size:s.q6.Medium}))),(0,S.Y)(l.Ay,{collapsible:!0,reportLink:"/docs/benchmark/tts/",reportText:"See Open-source Text-to-Speech Benchmark →"},E.Eo,E.Vt,E.k7,E.Am))})),(0,S.Y)(y.A,null,(0,S.Y)(d.A,{borderTop:!0,background:!0,caption:"On-device voice memo assistant use cases",title:"From sales reps to clinicians",body:(0,S.Y)(f.A,{useCases:U})})),(0,S.Y)(y.A,null,(0,S.Y)(d.A,{borderTop:!0,caption:"Get started",title:"On-device voice memo assistant: Python code example",subtitle:"A complete working recipe in Python. Open-source on GitHub. Runs 100% on-device.",body:(0,S.Y)(a.Fragment,null,(0,S.Y)(g.A,{recipeId:"voice-memo-assistant",meta:q,tabs:[{id:"readme",label:"README.md",content:(0,S.Y)(V,null)}]}),(0,S.Y)("aside",{className:"cb-upsell"},(0,S.Y)("h4",{className:"cb-upsell__title"},"Looking for a more advanced voice memo assistant app?"),(0,S.Y)("ul",{className:"cb-upsell__list"},(0,S.Y)("li",{className:"cb-upsell__item"},(0,S.Y)("span",null,"Add"," ",(0,S.Y)(w.A,{href:"/products/voice/speaker-recognition/"},"Eagle Speaker Recognition")," ","to keep memos cleanly separated by who recorded them on shared devices.")),(0,S.Y)("li",{className:"cb-upsell__item"},(0,S.Y)("span",null,"Add"," ",(0,S.Y)(w.A,{href:"/products/voice/spoken-language-identification/"},"Bat Spoken Language Identification")," ","and"," ",(0,S.Y)(w.A,{href:"/products/language/translation/"},"Zebra Translate")," ","to capture memos in multiple languages, translate them into the target language, and produce summaries in different languages.")),(0,S.Y)("li",{className:"cb-upsell__item"},(0,S.Y)("span",null,"Add"," ",(0,S.Y)(w.A,{href:"/products/voice/noise-suppression/"},"Koala Noise Suppression")," ","for memos captured in cars, factories, and busy public spaces.")))))})),(0,S.Y)(y.A,null,(0,S.Y)(d.A,{borderTop:!0,background:!0,caption:"On-device AI cookbook examples",title:"More recipes from picoCookbook",body:(0,S.Y)(b.A,null)})),(0,S.Y)(y.A,null,(0,S.Y)(d.A,{borderTop:!0,caption:"Frequently asked questions",title:"FAQ",body:(0,S.Y)(c.A,{questions:K})}))))}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.