annotate plugins/voicenote/voicenote.vim @ 22:c8ad85e95854 default tip

Some general updates
author Luka Sitas <lsitas@avatarasoftware.com>
date Thu, 16 Jul 2026 14:47:23 -0400
parents 203279635445
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
22
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
1 " Voicenote
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
2 " A very simple plugin for transcribing text and inserting it into vim at the
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
3 " cursor.
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
4 " Utilizes simple shell commands to record audio at the press of a key binding
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
5 " Then stops recording after another keybinding
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
6 " After recording sends the audio to an openai compatible audio transcription
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
7 " endpoint
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
8 " Finally parses the output and inserts the text at the cursor.
18
203279635445 Adding in the voice note ability. It's not perfect but it is working.
Luka Sitas <lsitas@avatarasoftware.com>
parents:
diff changeset
9
22
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
10 let g:record_job = -1
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
11 let g:record_job_running = -1
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
12 let g:record_file = ''
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
13
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
14
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
15 " Begin new recording.
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
16 function! StartRecording()
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
17 " Check for already running recording.
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
18 if g:record_job_running < 0
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
19 let l:file = tempname()
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
20 let g:record_file = l:file
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
21 let g:record_job = job_start(['arecord', '-f', 'cd', '-r', '44100', l:file])
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
22 let g:record_job_running = 1
18
203279635445 Adding in the voice note ability. It's not perfect but it is working.
Luka Sitas <lsitas@avatarasoftware.com>
parents:
diff changeset
23 endif
203279635445 Adding in the voice note ability. It's not perfect but it is working.
Luka Sitas <lsitas@avatarasoftware.com>
parents:
diff changeset
24 endfunction
203279635445 Adding in the voice note ability. It's not perfect but it is working.
Luka Sitas <lsitas@avatarasoftware.com>
parents:
diff changeset
25
22
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
26 " Stop the recording and transcribe.
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
27 function! StopRecording()
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
28 " Check if we're already starting recording.
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
29 if g:record_job_running > 0
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
30 call StopAndWait(g:record_job)
18
203279635445 Adding in the voice note ability. It's not perfect but it is working.
Luka Sitas <lsitas@avatarasoftware.com>
parents:
diff changeset
31
22
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
32 " Transcribe the text.
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
33 let l:response = system('curl -s "http://127.0.0.1:52625/v1/audio/transcriptions" -F "model=whisper-v3" -F file=@' . g:record_file)
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
34 if !empty(l:response)
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
35 let l:data = json_decode(l:response)
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
36 if has_key(l:data, 'text')
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
37 execute 'normal! a' . escape(l:data.text, '\')
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
38 endif
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
39 endif
18
203279635445 Adding in the voice note ability. It's not perfect but it is working.
Luka Sitas <lsitas@avatarasoftware.com>
parents:
diff changeset
40
22
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
41 " Clean up.
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
42 let g:record_job_running = -1
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
43 let g:record_job = -1
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
44 let g:record_file = ''
18
203279635445 Adding in the voice note ability. It's not perfect but it is working.
Luka Sitas <lsitas@avatarasoftware.com>
parents:
diff changeset
45
22
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
46 endif
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
47 endfunction
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
48
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
49 function! StopAndWait(job)
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
50 " If the job is already dead, nothing to do
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
51 if empty(a:job) || job_status(a:job) == 'dead'
18
203279635445 Adding in the voice note ability. It's not perfect but it is working.
Luka Sitas <lsitas@avatarasoftware.com>
parents:
diff changeset
52 return
203279635445 Adding in the voice note ability. It's not perfect but it is working.
Luka Sitas <lsitas@avatarasoftware.com>
parents:
diff changeset
53 endif
203279635445 Adding in the voice note ability. It's not perfect but it is working.
Luka Sitas <lsitas@avatarasoftware.com>
parents:
diff changeset
54
22
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
55 " Request the job to stop
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
56 call job_stop(a:job)
18
203279635445 Adding in the voice note ability. It's not perfect but it is working.
Luka Sitas <lsitas@avatarasoftware.com>
parents:
diff changeset
57
22
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
58 " Wait until the status reports it as dead
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
59 while job_status(a:job) != 'dead'
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
60 sleep 100m " adjust granularity if needed
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
61 endwhile
18
203279635445 Adding in the voice note ability. It's not perfect but it is working.
Luka Sitas <lsitas@avatarasoftware.com>
parents:
diff changeset
62 endfunction
203279635445 Adding in the voice note ability. It's not perfect but it is working.
Luka Sitas <lsitas@avatarasoftware.com>
parents:
diff changeset
63
22
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
64 nnoremap <leader>s :call StartRecording()<CR>
c8ad85e95854 Some general updates
Luka Sitas <lsitas@avatarasoftware.com>
parents: 18
diff changeset
65 nnoremap <leader>e :call StopRecording()<CR>