Skip to content

DSharpPlus.Voice#2404

Draft
akiraveliara wants to merge 88 commits intomasterfrom
voice-rewrite
Draft

DSharpPlus.Voice#2404
akiraveliara wants to merge 88 commits intomasterfrom
voice-rewrite

Conversation

@akiraveliara
Copy link
Member

@akiraveliara akiraveliara commented Dec 19, 2025

the initial pull request for DSharpPlus.Voice.

known issues:

  • currently, it will explode upon receiving RTCP packets.

todo:

  • receive
  • audio packet queuing for sending
  • reconnecting/resuming
  • rewire encoding to take advantage of opus' 24-bit and float support instead of (not very costly, but absolutely unreadable) normalization to 16-bit
  • user interface for sending/receiving audio
  • use a more sophisticated mechanism for audio enqueuing than Channel
  • reduce memory management overhead
  • handle RTCP packets
  • correctly track and send RTCP information
  • docs

optional:

  • port resampling to managed
  • expose received RTCP information to users?

open questions:

  • is it relevant that if we don't receive a user's SSRC in time, we can't decrypt their audio? do we have to buffer those frames?
  • do we need a whole native dependency (speexdsp, 616kb, for reference - everything else is about 16.5mb combined) for resampling 44.1KHz to 48KHz or does it make more sense to implement that ourselves? - is it feasible for users to use the resampler themselves
  • is it fine that if no more audio is available to send, we extrapolate silence, or is that something that can happen in the form of brief user-code-side lag and we should just not send anything? (essentially, is Channel fine as a queuing mechanism or do we need it to be more sophisticated)
  • is it fine that every connection has its own PeriodicTimer for timing sends? and - is it fine that it ticks every 20ms, even if opus theoretically supports shorter frames?

akiraveliara and others added 30 commits June 6, 2025 18:43
git-subtree-dir: lib/libaerith/inc/dave
git-subtree-split: 6e5ffbc1cb4eef6be96e8115c4626be598b7e501
still missing some methods, but
also makes the c++ nicer to interface with
and also fully delete vnext, not sure why it was still there
voicenext used the sodium status code as a length lmao
…tService. Changed TransportService to use ArrayPoolBufferWriter instead of MemoryStream.
…rt-service

Initial commit for transport service.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants