Releases: discordjs/voice
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.0
Voice Receive
v0.6.0 makes voice receive useable with many utility additions. You can see a run-down below, or view the full recorder example.
Audio receive streams automatically close when their attached voice connection is destroyed.
// Join with selfDeaf set to false to receive audio
const voiceConnection = joinChannel({ ...options, selfDeaf: false });
voiceConnection.receiver.speaking.on('start', userId => console.log(`User ${userId} started speaking`));
voiceConnection.receiver.speaking.on('end', userId => console.log(`User ${userId} stopped speaking`));
// A Readable object mode stream of Opus packets
// Will only end when the voice connection is destroyed
voiceConnection.receiver.subscribe(userId);
// A Readable object mode stream of Opus packets
// Will end when the voice connection is destroyed, or the user has not said anything for 100ms
const opusStream = voiceConnection.receiver.subscribe(userId, {
end: {
behavior: EndBehaviorType.AfterSilence,
duration: 100,
},
});
// -------------------------
// You can re-use the Opus stream, e.g. to play in another channel as an echo
const resource = createAudioResource(opusStream, { inputType: StreamType.Opus });
// You can decode the Opus stream to raw audio using prism-media
const rawAudio = opusStream.pipe(new prism.opus.Decoder({ frameSize: 960, channels: 2, rate: 48000 }));
// You can save the stream to an Ogg file using [email protected]
const oggWriter = new opus.OggLogicalBitstream({
opusHead: new opus.OpusHead({
channelCount: 2,
sampleRate: 48000,
}),
pageSizeControl: {
maxPackets: 10,
},
});
pipeline(opusStream, oggWriter, createWriteStream('./myfile.ogg'), callback);
Commit log
-
chore: update conventional commit URL (#167)
-
test(DataStore): add missing tests (#165)
-
tests(DataStore): add missing tests
-
test(DataStore): add function spys for frame prep
-
-
refactor(AudioPlayer): use this.once instead of events.once (#162)
-
feat(Util): support AbortSignal in entersState (#171)
-
refactor(Util): use AbortSignal in entersState
-
chore(CI): drop Node v14 from CI
-
refactor(Util): remove unnecessary function
-
test(Util): add tests for abortAfter
-
test(Util): add test for entersState
-
-
refactor(Examples): remove unused imported binding (#172)
-
feat(VoiceReceive)!: improve usability (#136)
-
refactor(VoiceReceiver): begin refactor
-
feat(SSRCMap): resolve function
-
feat(VoiceConnection): close all streams in non-ready state
-
refactor(VoiceReceiver): map by user ID
-
feat(VoiceReceiver): allow specifying end type for streams
-
feat(VoiceReceiver): add SpeakingMap
-
refactor(SSRCMap): remove unused resolve method
-
test(VoiceReceiver): add test for SpeakingMap
-
test(VoiceReceiver): add tests for AudioReceiveStream
-
test(AudioReceiver): strengthen AudioReceiveStream tests
-
test(VoiceReceiver): remove inapplicable tests
-
test(VoiceConnection): fix test errors
-
test(VoiceConnection): test receiver bindings tracking
-
test(VoiceReceiver): decrypt
-
chore: remove unused code
-
fix(AudioReceiveStream): close normally
-
feat(Examples): update receiver example
-
feat(Examples): create recorder example
-
docs(VoiceReceiver): add docs for receive classes
-
refactor: suggestions from code review
Co-authored-by: Antonio Román [email protected]
Co-authored-by: Antonio Román [email protected]
-
-
chore(Release): v0.6.0
0.5.6
0.5.5
-
chore(Deps): update
discord-api-types
to0.19.0
(#154) -
fix(Examples): change guildID to guildId (#155)
-
refactor(ConnectionOptions): change
xID
toxId
(#156)-
refactor(Networking): change xID to xId
-
fix: tests
-
fix: correct method names
-
-
refactor(Examples): update events and fix compilation errors on newer versions of TypeScript (#159)
-
message and interaction event updated in examples
-
message event in other examples
-
subscription setTimeout and error type fix
-
Update package.json
-
subscription fix 2
-
-
fix(Examples): destroy discord.js v12 adapter less readily (#160)
-
fix(Examples): destroy discord.js v12 adapter less readily
-
refactor(Examples): delete adapters instead of setting empty set
-
refactor(Examples): consistent Id/ID casing
-
-
chore(Release): v0.5.5
0.5.4
New feature
- Can now use groups (namespaces) for voice connections, allowing you to have multiple bots connect to the same guild's voice channels:
joinVoiceChannel({ ...options }); // group defaults to "default"
joinVoiceChannel({ ...options1, group: bot1.user.id });
joinVoiceChannel({ ...options2, group: bot2.user.id });
joinVoiceChannel({ ...options3, group: bot3.user.id });
getVoiceConnection(options.guildId); // the first voice connection
getVoiceConnection(options.guildId, bot3.user.id); // the last voice connection
getVoiceConnections(bot3.user.id); // get all voice connections in the group = bot3.user.id
getVoiceConnections(); // get all voice connections in the group = "default"
getGroups(); // get all groups/namespaces
-
feat: voice channel groups (#147)
-
feat: add group discriminator to voice connections
-
feat(DataStore): expose voice connections map
-
feat(DataStore): use 2D map to store voice connections
-
chore(Examples): update ytdl-core dependency
-
refactor(DataStore): remove unnecessary type
-
refactor(DataStore): allow optional return type for getVoiceConnections
-
test(DataStore): check default and custom groups work
-
-
chore(Release): v0.5.4