Interface AudioReceiveHandler
-
public interface AudioReceiveHandler
Interface used to receive audio from Discord through JDA.
-
-
Field Summary
Fields Modifier and Type Field Description static javax.sound.sampled.AudioFormat
OUTPUT_FORMAT
Audio Output Format used by JDA.
-
Method Summary
All Methods Instance Methods Default Methods Modifier and Type Method Description default boolean
canReceiveCombined()
If this method returns true, then JDA will generate combined audio data and provide it to the handler.default boolean
canReceiveEncoded()
If this method returns true, then JDA will provide raw OPUS encoded packets tohandleEncodedAudio(OpusPacket)
.default boolean
canReceiveUser()
If this method returns true, then JDA will provide audio data to thehandleUserAudio(UserAudio)
method.default void
handleCombinedAudio(CombinedAudio combinedAudio)
IfcanReceiveCombined()
returns true, JDA will provide aCombinedAudio
object to this method every 20 milliseconds.default void
handleEncodedAudio(OpusPacket packet)
IfcanReceiveEncoded()
returns true, JDA will provide rawOpusPackets
to this method every 20 milliseconds.default void
handleUserAudio(UserAudio userAudio)
IfcanReceiveUser()
returns true, JDA will provide aUserAudio
object to this method every time the user speaks. Continuing with the last statement: This method is only fired when discord provides us audio data which is very different from the scheduled firing time ofhandleCombinedAudio(CombinedAudio)
.default boolean
includeUserInCombinedAudio(User user)
This method is a filter predicate used by JDA to determine whether or not to include aUser
's audio when creating a CombinedAudio packet.
-
-
-
Method Detail
-
canReceiveCombined
default boolean canReceiveCombined()
If this method returns true, then JDA will generate combined audio data and provide it to the handler.
Only enable if you specifically want combined audio because combining audio is costly if unused.- Returns:
- If true, JDA enables subsystems to combine all user audio into a single provided data packet.
-
canReceiveUser
default boolean canReceiveUser()
If this method returns true, then JDA will provide audio data to thehandleUserAudio(UserAudio)
method.- Returns:
- If true, JDA enables subsystems to provide user specific audio data.
-
canReceiveEncoded
default boolean canReceiveEncoded()
If this method returns true, then JDA will provide raw OPUS encoded packets tohandleEncodedAudio(OpusPacket)
.
This can be used in combination with the other receive methods but will not be combined audio of multiple users.Each user sends their own stream of OPUS encoded audio and each packet is assigned with a user id and SSRC. The decoder will be provided by JDA but need not be used.
- Returns:
- True, if
handleEncodedAudio(OpusPacket)
should receive opus packets. - Since:
- 4.0.0
-
handleEncodedAudio
default void handleEncodedAudio(@Nonnull OpusPacket packet)
IfcanReceiveEncoded()
returns true, JDA will provide rawOpusPackets
to this method every 20 milliseconds. These packets are for specific users rather than a combined packet of all users likehandleCombinedAudio(CombinedAudio)
.This is useful for systems that want to either do lazy decoding of audio through
OpusPacket.getAudioData(double)
or for systems that can decode and transform the audio data manually without JDA involvement.- Parameters:
packet
- TheOpusPacket
- Since:
- 4.0.0
-
handleCombinedAudio
default void handleCombinedAudio(@Nonnull CombinedAudio combinedAudio)
IfcanReceiveCombined()
returns true, JDA will provide aCombinedAudio
object to this method every 20 milliseconds. The data provided by CombinedAudio is all audio that occurred during the 20 millisecond period mixed together into a single 20 millisecond packet. If no users spoke, this method will still be provided with a CombinedAudio object containing 20 milliseconds of silence andCombinedAudio.getUsers()
's list will be empty.The main use of this method is if you are wanting to record audio. Because it automatically combines audio and maintains timeline (no gaps in audio due to silence) it is an incredible resource for audio recording.
If you are wanting to do audio processing (voice recognition) or you only want to deal with a single user's audio, please consider
handleUserAudio(UserAudio)
.Output audio format: 48KHz 16bit stereo signed BigEndian PCM
and is defined by:AudioRecieveHandler.OUTPUT_FORMAT
- Parameters:
combinedAudio
- The combined audio data.
-
handleUserAudio
default void handleUserAudio(@Nonnull UserAudio userAudio)
IfcanReceiveUser()
returns true, JDA will provide aUserAudio
object to this method every time the user speaks. Continuing with the last statement: This method is only fired when discord provides us audio data which is very different from the scheduled firing time ofhandleCombinedAudio(CombinedAudio)
.The
UserAudio
object provided to this method will contain theUser
that spoke along with only the audio data sent by the specific user.The main use of this method is for listening to specific users. Whether that is for audio recording, custom mixing (possibly for user muting), or even voice recognition, this is the method you will want.
If you are wanting to do audio recording, please consider
handleCombinedAudio(CombinedAudio)
as it was created just for that reason.Output audio format: 48KHz 16bit stereo signed BigEndian PCM
and is defined by:AudioRecieveHandler.OUTPUT_FORMAT
- Parameters:
userAudio
- The user audio data
-
includeUserInCombinedAudio
default boolean includeUserInCombinedAudio(@Nonnull User user)
This method is a filter predicate used by JDA to determine whether or not to include aUser
's audio when creating a CombinedAudio packet.This method is especially useful in creating whitelist / blacklist functionality for receiving audio.
A few possible examples:
- Have this method always return false for Users that are bots.
- Have this method return false for users who have been placed on a blacklist for abusing the bot's functionality.
- Have this method only return true if the user is in a special whitelist of power users.
- Parameters:
user
- The user whose audio was received- Returns:
- If true, JDA will include the user's audio when merging audio sources when created packets
for
handleCombinedAudio(CombinedAudio)
-
-