Mercurial > vim
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 |
| 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> |
