{"_id":"@boruto_vk7/voice","_rev":"3-0dbd73617b1d60cb6b072953c2645828","name":"@boruto_vk7/voice","dist-tags":{"latest":"1.0.2"},"versions":{"1.0.0":{"name":"@boruto_vk7/voice","version":"1.0.0","keywords":["discord","discord.js","audio","voice","streaming","opus","ogg","termux","android"],"license":"MIT","_id":"@boruto_vk7/voice@1.0.0","maintainers":[{"name":"eduh_dev021","email":"kentakakura021028@gmail.com"}],"dist":{"shasum":"2af813498322c97fe80b2ea2c9476a5c2d989aab","tarball":"https://registry.npmjs.org/@boruto_vk7/voice/-/voice-1.0.0.tgz","fileCount":6,"integrity":"sha512-LdfO2V/YEreJ4bUjWM+c/UgSXa6wtCTtYvkIvqPzY2tQIEgj6V7vmdZEO2NTAM6XT8+bMbFnkE8dosxxf/3qjg==","signatures":[{"sig":"MEQCIHaKBrYF2xAiD0u5Q/b8qz9EYBsNIzOzwcztj/67/CxzAiAPnDUT/gjqPqHSBmV0movucI9mHHKHYaZGZ9xZPY0p5g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":370530},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"scripts":{"build":"npx tsc && npx tsup src/index.ts --format cjs,esm --dts --clean"},"_npmUser":{"name":"eduh_dev021","email":"kentakakura021028@gmail.com"},"repository":{"url":"","type":"git"},"_npmVersion":"11.18.0","description":"Fork do @discordjs/voice otimizado para Termux. Usa @boruto_vk7/opus-ogg como engine de áudio. DAVE encryption (e2ee) é opcional.","directories":{"lib":"src"},"_nodeVersion":"24.17.0","dependencies":{"ws":"^8.20.0","tslib":"^2.8.1","@types/ws":"^8.18.1","discord-api-types":"^0.38.43","@boruto_vk7/opus-ogg":"^1.2.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"~5.9.3"},"peerDependencies":{"opusscript":"^0.0.7","prism-media":"^1.3.5","ffmpeg-static":"^4.2.7","@snazzah/davey":"^0.1.11","@discordjs/opus":"^0.4.0"},"peerDependenciesMeta":{"opusscript":{"optional":true},"prism-media":{"optional":true},"ffmpeg-static":{"optional":true},"@snazzah/davey":{"optional":true},"@discordjs/opus":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/voice_1.0.0_1783665232812_0.2513076449792997","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@boruto_vk7/voice","version":"1.0.1","keywords":["discord","discord.js","audio","voice","streaming","opus","ogg","termux","android"],"license":"MIT","_id":"@boruto_vk7/voice@1.0.1","maintainers":[{"name":"eduh_dev021","email":"kentakakura021028@gmail.com"}],"dist":{"shasum":"07ea96c782f879ed8f0e4731c030281ed27688de","tarball":"https://registry.npmjs.org/@boruto_vk7/voice/-/voice-1.0.1.tgz","fileCount":6,"integrity":"sha512-VvNm3h8W24ImttRkGeOvhc60O7DaPyKAbTE60CkOyGsiXewtAll/R8jOdG+D7OUhjNdyqTlWOTVupNI4pizGkw==","signatures":[{"sig":"MEUCIQDmkPyxq2DMJfvEP4Gmv/D4b6eAA9Rj+7uRxCCxjuwtngIgW2ji7Jt6j1YSGzss8VBQtPJyH8uQnW6+qt8eWRyeqvk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":370531},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"}}},"scripts":{"build":"npx tsc && npx tsup src/index.ts --format cjs,esm --dts --clean"},"_npmUser":{"name":"eduh_dev021","email":"kentakakura021028@gmail.com"},"repository":{"url":"","type":"git"},"_npmVersion":"11.18.0","description":"Fork do @discordjs/voice otimizado para Termux. Usa @boruto_vk7/opus-ogg como engine de áudio. DAVE encryption (e2ee) é opcional.","directories":{"lib":"src"},"_nodeVersion":"24.17.0","dependencies":{"ws":"^8.20.0","tslib":"^2.8.1","@types/ws":"^8.18.1","discord-api-types":"^0.38.43","@boruto_vk7/opus-ogg":"^1.2.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","typescript":"~5.9.3"},"peerDependencies":{"opusscript":"^0.0.7","prism-media":"^1.3.5","ffmpeg-static":"^4.2.7","@snazzah/davey":"^0.1.11","@discordjs/opus":">=0.8.0"},"peerDependenciesMeta":{"opusscript":{"optional":true},"prism-media":{"optional":true},"ffmpeg-static":{"optional":true},"@snazzah/davey":{"optional":true},"@discordjs/opus":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/voice_1.0.1_1783665553708_0.48474690774764073","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@boruto_vk7/voice","version":"1.0.2","description":"Fork do @discordjs/voice otimizado para Termux. Usa @boruto_vk7/opus-ogg como engine de áudio. DAVE encryption (e2ee) é opcional.","main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"require":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"}}},"directories":{"lib":"src"},"license":"MIT","keywords":["discord","discord.js","audio","voice","streaming","opus","ogg","termux","android"],"repository":{"type":"git","url":""},"dependencies":{"@boruto_vk7/opus-ogg":"^1.2.2","@types/ws":"^8.18.1","discord-api-types":"^0.38.43","tslib":"^2.8.1","ws":"^8.20.0"},"peerDependencies":{"@discordjs/opus":">=0.8.0","ffmpeg-static":"^4.2.7","opusscript":"^0.0.8","prism-media":"^1.3.5","@snazzah/davey":"^0.1.11"},"peerDependenciesMeta":{"@discordjs/opus":{"optional":true},"opusscript":{"optional":true},"ffmpeg-static":{"optional":true},"prism-media":{"optional":true},"@snazzah/davey":{"optional":true}},"engines":{"node":">=18.0.0"},"publishConfig":{"access":"public"},"scripts":{"build":"npx tsc && npx tsup src/index.ts --format cjs,esm --dts --clean"},"devDependencies":{"tsup":"^8.5.1","typescript":"~5.9.3"},"_id":"@boruto_vk7/voice@1.0.2","_nodeVersion":"24.17.0","_npmVersion":"11.18.0","dist":{"integrity":"sha512-4Bc8TvFj6r5JO41aGiTYVh97tg44RpMGYjT47hi7GPkCkRqKOVI4T0bJXMyOLTk9AT87DG7i9gVc8866X0eMLg==","shasum":"7f2d88fa454cd29cf1733ee1607cbf5e71e58512","tarball":"https://registry.npmjs.org/@boruto_vk7/voice/-/voice-1.0.2.tgz","fileCount":6,"unpackedSize":370531,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIF967LPu5NMyUDzmFaN2/Ag//C1yuLH9v0nHm07jbvaMAiEAmnpCkOxf4Q4kxWrUGtpko3S3F4Dg9aZfsgLg5n3gPiM="}]},"_npmUser":{"name":"eduh_dev021","email":"kentakakura021028@gmail.com"},"maintainers":[{"name":"eduh_dev021","email":"kentakakura021028@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/voice_1.0.2_1783665912912_0.7669149442736958"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-10T06:33:52.639Z","modified":"2026-07-10T06:45:13.189Z","1.0.0":"2026-07-10T06:33:52.948Z","1.0.1":"2026-07-10T06:39:13.841Z","1.0.2":"2026-07-10T06:45:13.075Z"},"license":"MIT","keywords":["discord","discord.js","audio","voice","streaming","opus","ogg","termux","android"],"repository":{"type":"git","url":""},"description":"Fork do @discordjs/voice otimizado para Termux. Usa @boruto_vk7/opus-ogg como engine de áudio. DAVE encryption (e2ee) é opcional.","maintainers":[{"name":"eduh_dev021","email":"kentakakura021028@gmail.com"}],"readme":"# @boruto_vk7/voice-ogg\n\n**Implementation of the Discord Voice API for Node.js, optimized for Termux.**\n\nThis is a fork of [`@discordjs/voice`](https://github.com/discordjs/discord.js/tree/main/packages/voice) that replaces `prism-media` with [`@boruto_vk7/opus-ogg`](https://www.npmjs.com/package/@boruto_vk7/opus-ogg) as the primary audio engine.\n\n---\n\n### Key Differences from @discordjs/voice\n\n- **No `prism-media` hard dependency**: The audio pipeline uses `@boruto_vk7/opus-ogg` for Ogg Opus demuxing, eliminating the need for `prism-media` as a core dependency.\n- **Termux Compatible**: Designed to work in Android environments via Termux with minimal native dependencies.\n- **Lower Node.js requirement**: Supports Node.js 18+ instead of 22.12.0+, making it compatible with more Termux setups.\n- **FFmpeg fallback**: Includes a built-in `child_process` fallback for FFmpeg, so `ffmpeg-static` is optional.\n\n---\n\n### Features\n\n- Send and receive audio in Discord voice-based channels\n- A strong focus on reliability and predictable behavior\n- Horizontal scalability with custom adapters\n- A robust audio processing system powered by `@boruto_vk7/opus-ogg`\n\n---\n\n### Installation\n\n```bash\nnpm install @boruto_vk7/voice-ogg\n```\n\n**Required Node.js:** 18.0.0 or newer\n\n**Termux Setup:**\n```bash\npkg install nodejs ffmpeg\nnpm install @boruto_vk7/voice-ogg\n```\n\n---\n\n### Dependencies\n\nThis library has several optional dependencies. Install one dependency from each category:\n\n**Encryption Libraries:**\n> Only needed if your system does not support `aes-256-gcm`.\n\n```bash\nnpm install sodium\n# or\nnpm install libsodium-wrappers\n# or\nnpm install @noble/ciphers\n```\n\n**Opus Libraries:**\n```bash\nnpm install @discordjs/opus\n# or\nnpm install opusscript\n```\n\n**FFmpeg:**\n```bash\n# Termux:\npkg install ffmpeg\n\n# Other platforms - ensure ffmpeg is in PATH, or:\nnpm install ffmpeg-static\n```\n\n---\n\n### Examples\n\n#### Basic Music Player\n\n```javascript\nconst { createAudioPlayer, createAudioResource, joinVoiceChannel, StreamType } = require('@boruto_vk7/voice-ogg');\nconst { EngineOgg, OggToOpusStream } = require('@boruto_vk7/opus-ogg');\n\n// Join a voice channel\nconst connection = joinVoiceChannel({\n  channelId: 'CHANNEL_ID',\n  guildId: 'GUILD_ID',\n  adapterCreator: voiceAdapterCreator,\n});\n\n// Create an audio player\nconst player = createAudioPlayer();\n\n// Create a resource using EngineOgg + OggToOpusStream\nconst oggStream = EngineOgg('https://example.com/audio.mp3', {\n  profile: 'audio',\n  forceStereo: true,\n});\n\nconst opusStream = OggToOpusStream(oggStream);\n\nconst resource = createAudioResource(opusStream, {\n  inputType: StreamType.Opus,\n});\n\n// Play the resource\nconnection.subscribe(player);\nplayer.play(resource);\n```\n\n#### Local File Playback\n\n```javascript\nconst { createAudioResource, StreamType } = require('@boruto_vk7/voice-ogg');\n\n// When you specify a file path, FFmpeg is used automatically\nconst resource = createAudioResource('./path/to/file.mp3');\n```\n\n#### WhatsApp-Compatible Voice (Mono)\n\n```javascript\nconst { EngineOgg, OggToOpusStream } = require('@boruto_vk7/opus-ogg');\nconst { createAudioResource, StreamType } = require('@boruto_vk7/voice-ogg');\n\nconst oggStream = EngineOgg('input.mp3', {\n  profile: 'voip',\n  forceStereo: false,  // Mono for WhatsApp iOS\n});\n\nconst opusStream = OggToOpusStream(oggStream);\n\nconst resource = createAudioResource(opusStream, {\n  inputType: StreamType.Opus,\n});\n```\n\n---\n\n### API\n\nThis fork maintains the same public API as `@discordjs/voice` v0.19.2. All exports remain identical:\n\n| Export | Description |\n|--------|-------------|\n| `createAudioPlayer` | Creates a new AudioPlayer |\n| `createAudioResource` | Creates an AudioResource from input |\n| `joinVoiceChannel` | Joins a Discord voice channel |\n| `StreamType` | Enum for stream types |\n| `TransformerType` | Enum for transformer types |\n| `demuxProbe` | Probes a stream to detect its type |\n| `generateDependencyReport` | Generates a dependency report |\n| `VoiceConnection` | Voice connection class |\n| `AudioResource` | Audio resource class |\n| `AudioPlayer` | Audio player class |\n\n---\n\n### License\n\nMIT\n\n---\n\n**Fork based on:** @discordjs/voice v0.19.2\n**Audio Engine:** @boruto_vk7/opus-ogg v1.2.2\n**Developed by:** eduh_dev021 ([Borutovk7](https://github.com/Borutovk7))\n","readmeFilename":"README.md"}