Skip to content

whishi47/codex-voice-input

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

16 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Codex Voice Input

Codex Voice Input

Codex++ ่ฏญ้Ÿณ่พ“ๅ…ฅๆ’ไปถ โ€” ๆ‚ฌๆตฎ้บฆๅ…‹้ฃŽๆŒ‰้’ฎ๏ผŒ็‚นๅ‡ปๅฝ•้Ÿณ๏ผŒ่‡ชๅŠจ่ฝฌๆ–‡ๅญ—ๅกซๅ…ฅ่พ“ๅ…ฅๆก†ใ€‚

License Python Codex++

English ยท ๅŠŸ่ƒฝ ยท ๅฟซ้€Ÿๅผ€ๅง‹ ยท ้…็ฝฎ ยท ๅธธ่ง้—ฎ้ข˜


โœจ ๅŠŸ่ƒฝ

  • ๐ŸŽค ไธ€้”ฎๅฝ•้Ÿณ โ€” Codex ๅฏน่ฏๆก†ๅ†…ๆ‚ฌๆตฎ้บฆๅ…‹้ฃŽๆŒ‰้’ฎ๏ผŒ็‚นๆŒ‰ๅณๅฝ•
  • ๐Ÿ”ค ่‡ชๅŠจ่ฝฌๅฝ• โ€” ๅฝ•้Ÿณ็ป“ๆŸ่‡ชๅŠจๅ‘้€ๅˆฐๆœฌๅœฐ่ฏ†ๅˆซๅผ•ๆ“Ž๏ผŒๆ–‡ๅญ—ๅณๅˆปๅกซๅ…ฅ่พ“ๅ…ฅๆก†
  • ๐Ÿ”’ ๅฎŒๅ…จ็ฆป็บฟ โ€” ๅŸบไบŽ faster-whisper ๆœฌๅœฐ่ฟ่กŒ๏ผŒ่ฏญ้Ÿณๆ•ฐๆฎไธๅ‡บๆœฌๆœบ
  • ๐ŸŒ ไธญ่‹ฑๅŒ่ฏญ โ€” ไธญๆ–‡ + ่‹ฑๆ–‡่ฏ†ๅˆซ๏ผŒๅฏ้…็ฝฎ่ฏญ่จ€ๅๅฅฝ
  • โŒจ๏ธ ้”ฎ็›˜ๅฟซๆท้”ฎ โ€” Ctrl+Shift+V ๅˆ‡ๆขๅฝ•้Ÿณ
  • ๐ŸŽจ ๆฏ›็Žป็’ƒ UI โ€” ๆทฑ่‰ฒๅŠ้€ๆ˜ŽๆŒ‰้’ฎ๏ผŒๅฎŒ็พŽ่žๅ…ฅ Codex ๅŽŸ็”Ÿ็•Œ้ข
  • ๐Ÿช„ ๆ‚ฌๆตฎ่œๅ• โ€” ้ผ ๆ ‡็งปๅˆฐๆ‚ฌๆตฎๆŒ‰้’ฎๅฏๆ‰“ๅผ€ๅฝ•้Ÿณใ€ๆ˜พ็คบๆจกๅผใ€ๅฎ‰่ฃ…ๅฏๅŠจๅ’Œ GitHub ไฝฟ็”จ่ฏดๆ˜Žๅ…ฅๅฃ
  • ๐Ÿ“ก ็ฆป็บฟๆ„Ÿ็Ÿฅ โ€” ่ฏ†ๅˆซๆœๅŠกๆ–ญๅผ€ๆ—ถๆŒ‰้’ฎ่‡ชๅŠจ็ฐๆ˜พ๏ผŒๆขๅคๅŽ่‡ชๅŠจ้‡่ฟž

๐Ÿš€ ๅฟซ้€Ÿๅผ€ๅง‹

ไธ€้”ฎๅฎ‰่ฃ…ๅนถๅฏๅŠจ

ๅœจ PowerShell ไธญ่ฟ่กŒไธ‹้ขๅ‘ฝไปคใ€‚ๅฎƒไผšไผ˜ๅ…ˆไฝฟ็”จๅฝ“ๅ‰็›ฎๅฝ•็š„ๆœฌๅœฐๅฎ‰่ฃ…ๅ™จ๏ผ›ๅฆ‚ๆžœไธๅœจไป“ๅบ“็›ฎๅฝ•ไธญ๏ผŒๅˆ™ไผšไปŽ GitHub ไธ‹่ฝฝๅฎ‰่ฃ…ๅ™จ๏ผŒ่‡ชๅŠจ้ƒจ็ฝฒ็”จๆˆท่„šๆœฌๅนถๅฏๅŠจๆœฌๅœฐ่ฏ†ๅˆซๆœๅŠกใ€‚

powershell -NoProfile -ExecutionPolicy Bypass -Command '$ErrorActionPreference=''Stop''; $localInstaller=Join-Path (Get-Location) ''tools\install-and-start.ps1''; $cachedRoot=Join-Path $env:APPDATA ''Codex++\codex-voice-input''; $cachedInstaller=Join-Path $cachedRoot ''tools\install-and-start.ps1''; $cachedUserScript=Join-Path $cachedRoot ''codex-voice-input.js''; $cachedHelper=Join-Path $cachedRoot ''tools\voice-helper.py''; if (Test-Path $localInstaller) { & powershell -NoProfile -ExecutionPolicy Bypass -File $localInstaller; } else { $u=''https://github.com/whishi47/codex-voice-input/raw/master/tools/install-and-start.ps1''; $p=Join-Path $env:TEMP (''codex-voice-input-install-'' + [guid]::NewGuid().ToString(''N'') + ''.ps1''); try { Invoke-WebRequest -UseBasicParsing -Uri $u -OutFile $p; } catch { if ((Test-Path $cachedInstaller) -and (Test-Path $cachedUserScript) -and (Test-Path $cachedHelper)) { Write-Host ''[Codex Voice Input] ๆ— ๆณ•ไปŽ GitHub ไธ‹่ฝฝๅฎ‰่ฃ…ๅ™จ๏ผŒๆ”น็”จๆœฌๅœฐ็ผ“ๅญ˜ๅฎ‰่ฃ…ๅ™จใ€‚'' -ForegroundColor Yellow; & powershell -NoProfile -ExecutionPolicy Bypass -File $cachedInstaller; return; } throw ''ๆ— ๆณ•ไปŽ GitHub ไธ‹่ฝฝๅฎ‰่ฃ…ๅ™จ๏ผŒไนŸๆฒกๆœ‰ๆ‰พๅˆฐๅฎŒๆ•ด็š„ๆœฌๅœฐ็ผ“ๅญ˜้กน็›ฎใ€‚่ฏทๆฃ€ๆŸฅ็ฝ‘็ปœ๏ผŒๆˆ–ๅ…ˆๅœจ้กน็›ฎ็›ฎๅฝ•้‡Œ่ฟ่กŒ tools\install-and-start.ps1ใ€‚่ฏฆ็ป†ไฟกๆฏ: '' + $_.Exception.Message; } & powershell -NoProfile -ExecutionPolicy Bypass -File $p; }'

้ฆ–ๆฌก่ฏ†ๅˆซไผšไธ‹่ฝฝ faster-whisper ๆจกๅž‹ๆ–‡ไปถใ€‚ไธ‹่ฝฝๅฎŒๆˆๅ‰ๆœๅŠกๅฏ่ƒฝๅทฒ็ปๅœจ็บฟ๏ผŒไฝ†็ฌฌไธ€ๆฌก่ฝฌๅฝ•ไผšๆฏ”่พƒๆ…ขใ€‚

1. ๅฎ‰่ฃ…็”จๆˆท่„šๆœฌ

ๅฐ† codex-voice-input.js ๅคๅˆถๅˆฐ Codex++ ็”จๆˆท่„šๆœฌ็›ฎๅฝ•๏ผš

copy /Y codex-voice-input.js "%APPDATA%\Codex++\user_scripts\"

้‡ๅฏ Codex ๅŽ็”Ÿๆ•ˆใ€‚

2. ๅฏๅŠจ่ฏ†ๅˆซๆœๅŠก

pip install -r requirements.txt
python tools/voice-helper.py --port 17420 --model small

้ฆ–ๆฌก่ฟ่กŒไผš่‡ชๅŠจไธ‹่ฝฝ faster-whisper small ๆจกๅž‹๏ผˆ็บฆ 1.3 GB๏ผ‰๏ผŒ่ฏทไฟๆŒ็ฝ‘็ปœ้€š็•…ใ€‚

ไธ€้”ฎๅฏๅŠจ๏ผš

tools\start-voice-helper.bat

3. ๅผ€ๅง‹ไฝฟ็”จ

ๅœจ Codex ๅฏน่ฏๆก†ๅบ•้ƒจๅทฅๅ…ทๆ ๆ‰พๅˆฐ ๐ŸŽค ๆŒ‰้’ฎ๏ผŒ็‚นๅ‡ปๅผ€ๅง‹ๅฝ•้Ÿณ๏ผŒๅ†ๆฌก็‚นๅ‡ปๅœๆญข โ€” ๆ–‡ๅญ—่‡ชๅŠจๅกซๅ…ฅ่พ“ๅ…ฅๆก†ใ€‚

ๅฆ‚ๆžœๆŒ‰้’ฎๆ˜พ็คบ็ฐ่‰ฒๅนถๆ็คบใ€ŒๆœๅŠกๆœช่ฟžๆŽฅใ€๏ผŒ่ฏดๆ˜Ž่ฏญ้Ÿณ่ฏ†ๅˆซๆœๅŠกๆœชๅฏๅŠจใ€‚่ฟ่กŒ python tools/voice-helper.py ๅŽๆŒ‰้’ฎไผš่‡ชๅŠจๆขๅคใ€‚

Demo

โ”Œโ”€ Codex ๅฏน่ฏๆก† โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                                                    โ”‚
โ”‚  ็”จๆˆท้—ฎ้ข˜:  ๅธฎๆˆ‘ๅ†™ไธ€ไธช็™ปๅฝ•ๆŽฅๅฃ...                    โ”‚
โ”‚                                                    โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚
โ”‚  โ”‚  [่พ“ๅ…ฅไฝ ็š„้œ€ๆฑ‚...]                  ๐ŸŽค โ† ็‚นๆˆ‘  โ”‚  โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚
โ”‚                                                    โ”‚
โ”‚  โ‘  ็‚นๅ‡ป ๐ŸŽค โ†’ ๆŒ‰้’ฎๅ˜็บข่„‰ๅ†ฒ โ†’ ่ฏด่ฏ                    โ”‚
โ”‚  โ‘ก ๅ†็‚น ๐ŸŽค โ†’ ๆŒ‰้’ฎๅ˜่“ๆ—‹่ฝฌ โ†’ ่ฏ†ๅˆซไธญ...               โ”‚
โ”‚  โ‘ข ๆ–‡ๅญ—่‡ชๅŠจๅกซๅ…ฅ่พ“ๅ…ฅๆก† โœจ                            โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

โŒจ๏ธ ไฝฟ็”จๆ–นๅผ

ๆ“ไฝœ ่ฏดๆ˜Ž
็‚นๅ‡ปๆŒ‰้’ฎ ๅผ€ๅง‹ / ๅœๆญขๅฝ•้Ÿณ
Ctrl+Shift+V ้”ฎ็›˜ๅฟซๆท้”ฎๅˆ‡ๆขๅฝ•้Ÿณ
้ผ ๆ ‡็งปๅˆฐๆ‚ฌๆตฎๆŒ‰้’ฎ ๆ‰“ๅผ€ๆ‚ฌๆตฎ่œๅ•
ๅณ้”ฎๆŒ‰้’ฎ ๆ‰“ๅผ€ๅŒไธ€ๅฅ—ๅŠŸ่ƒฝ่œๅ•
ๆ‹–ๆ‹ฝๆŒ‰้’ฎ ๆ‚ฌๆตฎๆจกๅผไธ‹ๅฏๆ‹–ๅŠจๅˆฐไปปๆ„ไฝ็ฝฎ

ๆ‚ฌๆตฎ่œๅ•

ๆ‚ฌๆตฎ่œๅ•ๅŒ…ๅซ๏ผš

  • ๅผ€ๅง‹ / ๅœๆญขๅฝ•้Ÿณ
  • ๅˆ‡ๆขๅ†…่”ๆ˜พ็คบ / ๆ‚ฌๆตฎๆ˜พ็คบ
  • ๅคๅˆถไธ€้”ฎๅฎ‰่ฃ…ๅฏๅŠจๅ‘ฝไปค
  • ๆ‰“ๅผ€ GitHub ้กน็›ฎๅ’Œไฝฟ็”จ่ฏดๆ˜Ž

โš™๏ธ ้…็ฝฎ

็ผ–่พ‘ config/config.json๏ผš

{
  "language": "zh",       // ่ฏ†ๅˆซ่ฏญ่จ€: auto / zh / en
  "model": "small",       // ๆจกๅž‹ๅคงๅฐ: tiny / base / small / medium / large-v3
  "helperPort": 17420     // ๆœฌๅœฐ่ฏ†ๅˆซๆœๅŠก็ซฏๅฃ
}

๐Ÿง  ๆจกๅž‹้€‰ๆ‹ฉ

ๆจกๅž‹ ไฝ“็งฏ ไธญๆ–‡ๅ‡†็กฎ็އ ้€Ÿๅบฆ๏ผˆ10s ้Ÿณ้ข‘๏ผ‰
tiny 390 MB ไธ€่ˆฌ ๅฎžๆ—ถ
base 580 MB ่พƒๅฅฝ ๅฎžๆ—ถ
small 1.3 GB ไผ˜็ง€ ~7s
medium 2.6 GB ๆ›ดไผ˜ ~20s
large-v3 5.7 GB ๆœ€ไฝณ ~35s

ๆŽจ่้ป˜่ฎคไฝฟ็”จ small๏ผŒๅ…ผ้กพ้€ŸๅบฆไธŽๅ‡†็กฎ็އใ€‚

๐Ÿ— ๆžถๆž„

Codex Electron ๆธฒๆŸ“่ฟ›็จ‹
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  codex-voice-input.js (Codex++ ๆ’ไปถ)     โ”‚
โ”‚                                          โ”‚
โ”‚  ๐ŸŽค โ†’ AudioContext 16kHz PCM โ†’ WAV      โ”‚
โ”‚         โ”‚                                โ”‚
โ”‚         โ”‚  fetch POST                    โ”‚
โ”‚         โ–ผ                                โ”‚
โ”‚  ๆ–‡ๅญ— โ† JSON  โ† localhost:17420          โ”‚
โ”‚         โ”‚                                โ”‚
โ”‚  ๆณจๅ…ฅ Codex ่พ“ๅ…ฅๆก†                        โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                   โ”‚ HTTP (ๆœฌๆœบๅ›ž็Žฏ)
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  tools/voice-helper.py (Python ่ฟ›็จ‹)     โ”‚
โ”‚                                          โ”‚
โ”‚  HTTP Server โ†’ faster-whisper (small)    โ”‚
โ”‚  ๆŽฅๆ”ถ WAV โ†’ ่ฝฌๅฝ• โ†’ ่ฟ”ๅ›žๆ–‡ๅญ— JSON          โ”‚
โ”‚                                          โ”‚
โ”‚  ๐Ÿ”’ ไธ่”็ฝ‘ ยท ไธๅ‡บๆœฌๆœบ ยท ๆ—  API Key        โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

โ“ ๅธธ่ง้—ฎ้ข˜

ๆŒ‰้’ฎๆ˜พ็คบ็ฐ่‰ฒๆ€ŽไนˆๅŠž๏ผŸ

่ฏญ้Ÿณ่ฏ†ๅˆซๆœๅŠกๆœชๅฏๅŠจใ€‚่ฟ่กŒ python tools/voice-helper.py ๅฏๅŠจๅŽ๏ผŒๆŒ‰้’ฎไผšๅœจ 30 ็ง’ๅ†…่‡ชๅŠจๆขๅคใ€‚

้บฆๅ…‹้ฃŽๆƒ้™่ขซๆ‹’็ป๏ผŸ

ๅœจ Windows ่ฎพ็ฝฎ โ†’ ้š็งๅ’Œๅฎ‰ๅ…จๆ€ง โ†’ ้บฆๅ…‹้ฃŽไธญ๏ผŒๅ…่ฎธ Codex ่ฎฟ้—ฎ้บฆๅ…‹้ฃŽใ€‚

่ฏ†ๅˆซๅ‡†็กฎ็އไธๅคŸ้ซ˜๏ผŸ

ๅœจ config/config.json ไธญๅฐ† model ๆ”นไธบ medium ๆˆ– large-v3ใ€‚ๆณจๆ„๏ผšๆ›ดๅคง็š„ๆจกๅž‹้œ€่ฆๆ›ดๅคšๅ†…ๅญ˜ๅ’Œ็ฃ็›˜็ฉบ้—ดใ€‚

ๅฏไปฅๆข็ซฏๅฃๅ—๏ผŸ

ๅฏไปฅใ€‚ๅฏๅŠจ helper ๆ—ถๆŒ‡ๅฎš --port 8080๏ผŒๅนถๅŒๆญฅไฟฎๆ”น config.json ไธญ็š„ helperPortใ€‚

่ฏ†ๅˆซๆœๅŠกๅ ็”จๅคšๅฐ‘ๅ†…ๅญ˜๏ผŸ

small ๆจกๅž‹็บฆๅ ็”จ 2 GB ๅ†…ๅญ˜๏ผŒmedium ็บฆ 3 GB๏ผŒlarge-v3 ็บฆ 6 GBใ€‚

๐Ÿ”— ็›ธๅ…ณ้กน็›ฎ

๐Ÿค ่ดก็ŒฎไธŽๅฎกๆ ธ

ๆฌข่ฟŽๆไบค issue ๅ’Œ pull requestใ€‚ไธบไบ†ไฟ่ฏ็”จๆˆท่„šๆœฌๅฎ‰ๅ…จ๏ผŒๆ‰€ๆœ‰ๅค–้ƒจไปฃ็ ๆไบค้ƒฝ้œ€่ฆ็ปดๆŠค่€…ๅฎกๆ ธๅŽๅ†ๅˆๅนถใ€‚

  • ไธ่ฆๆไบค API Keyใ€Tokenใ€็œŸๅฎž็”จๆˆท็›ฎๅฝ•ใ€้‚ฎ็ฎฑใ€็ง็ฝ‘ๅœฐๅ€ๆˆ–ๅธฆๅ‡ญๆฎ็š„ URL
  • ไฟฎๆ”น codex-voice-input.js ๅŽ๏ผŒ่ฏท่ฟ่กŒ npm test
  • ๆถ‰ๅŠๅฎ‰่ฃ…ใ€ๅฏๅŠจใ€ไพ่ต–ๆˆ–ๆœฌๅœฐ่ฟ›็จ‹็š„ๆ”นๅŠจ๏ผŒ้œ€่ฆ่ฏดๆ˜Žๅฎ‰ๅ…จๅฝฑๅ“
  • ็ปดๆŠค่€…ไผšๆฃ€ๆŸฅไปฃ็ ใ€ๆต‹่ฏ•็ป“ๆžœๅ’Œๆ˜ฏๅฆๅŒ…ๅซ้š็งๆ•ฐๆฎๅŽๅ†ๅˆๅนถ

๐Ÿ“„ ่ฎธๅฏ่ฏ

MIT License

About

๐ŸŽค Codex++ voice input plugin โ€” floating microphone button with local offline Whisper transcription. Click to record, auto-transcribe to text.

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors