Interface AudioManager


public interface AudioManager
AudioManager deals with creating, managing and severing audio connections to VoiceChannels. Also controls audio handlers.
See Also:
  • Field Details

    • DEFAULT_CONNECTION_TIMEOUT

      static final long DEFAULT_CONNECTION_TIMEOUT
      See Also:
    • LOG

      static final org.slf4j.Logger LOG
  • Method Details

    • openAudioConnection

      void openAudioConnection(AudioChannel channel)
      Starts the process to create an audio connection with an AudioChannel or, if an audio connection is already open, JDA will move the connection to the provided AudioChannel.
      Note: Currently you can only be connected to a single AudioChannel per Guild.

      This method will automatically move the current connection if one connection is already open in this underlying Guild.
      Current connections can be closed with closeAudioConnection().

      Parameters:
      channel - The AudioChannel to open an audio connection with.
      Throws:
      IllegalArgumentException -
      • If the provided channel was null.
      • If the provided channel is not part of the Guild that the current audio connection is connected to.
      UnsupportedOperationException - If audio is disabled due to an internal JDA error
      InsufficientPermissionException -
    • closeAudioConnection

      void closeAudioConnection()
      Close down the current audio connection of this Guild and disconnects from the AudioChannel.
      If this is called when JDA doesn't have an audio connection, nothing happens.
    • setSpeakingMode

      @Incubating void setSpeakingMode(@Nonnull Collection<SpeakingMode> mode)
      The SpeakingMode that should be used when sending audio via the provided AudioSendHandler from setSendingHandler(AudioSendHandler). By default this will use SpeakingMode.VOICE.
      Example: EnumSet.of(SpeakingMode.PRIORITY_SPEAKER, SpeakingMode.VOICE)
      Parameters:
      mode - The speaking modes
      Throws:
      IllegalArgumentException - If the provided collection is null or empty
      See Also:
      Incubating:
      Discord has not officially confirmed that this feature will be available to bots
    • setSpeakingMode

      @Incubating default void setSpeakingMode(@Nonnull SpeakingMode... mode)
      The SpeakingMode that should be used when sending audio via the provided AudioSendHandler from setSendingHandler(AudioSendHandler). By default this will use SpeakingMode.VOICE.
      Parameters:
      mode - The speaking modes
      Throws:
      IllegalArgumentException - If the provided array is null or empty
      See Also:
      Incubating:
      Discord has not officially confirmed that this feature will be available to bots
    • getSpeakingMode

      The SpeakingMode that should be used when sending audio via the provided AudioSendHandler from setSendingHandler(AudioSendHandler). By default this will use SpeakingMode.VOICE.
      Returns:
      The current speaking mode, represented in an EnumSet
      See Also:
      Incubating:
      Discord has not officially confirmed that this feature will be available to bots
    • setSpeakingDelay

      void setSpeakingDelay(int millis)
      Configures the delay between the last provided frame and removing the speaking indicator.
      This can be useful for send systems that buffer a certain interval of audio frames that will be sent. By default the delay is 200 milliseconds which is also the minimum delay.

      If the delay is less than 200 milliseconds it will use the minimum delay. The provided delay will be aligned to the audio frame length of 20 milliseconds by means of integer division. This means it will be rounded down to the next biggest multiple of 20.

      Note that this delay is not reliable and operates entirely based on the send system polling times which can cause it to be released earlier or later than the provided delay specifies.

      Parameters:
      millis - The delay that should be used, in milliseconds
      Since:
      4.0.0
    • getJDA

      @Nonnull JDA getJDA()
      Gets the JDA instance that this AudioManager is a part of.
      Returns:
      The corresponding JDA instance
    • getGuild

      @Nonnull Guild getGuild()
      Gets the Guild instance that this AudioManager is used for.
      Returns:
      The Guild that this AudioManager manages.
    • getConnectedChannel

      @Nullable AudioChannel getConnectedChannel()
      The AudioChannel that JDA currently has an audio connection to. If JDA currently doesn't have an audio connection to an AudioChannel this will return null.
      Returns:
      The AudioChannel the audio connection is connected to or null if not connected.
    • isConnected

      boolean isConnected()
      This can be used to find out if JDA currently has an active audio connection with a AudioChannel. If this returns true, then getConnectedChannel() will return the AudioChannel which JDA is connected to.
      Returns:
      True, if JDA currently has an active audio connection.
    • setConnectTimeout

      void setConnectTimeout(long timeout)
      Sets the amount of time, in milliseconds, that will be used as the timeout when waiting for the audio connection to successfully connect. The default value is 10 second (10,000 milliseconds).
      Note: If you set this value to 0, you can remove timeout functionality and JDA will wait FOREVER for the connection to be established. This is no advised as it is possible that the connection may never be established.
      Parameters:
      timeout - The amount of time, in milliseconds, that should be waited when waiting for the audio connection to be established.
    • getConnectTimeout

      long getConnectTimeout()
      The currently set timeout value, in milliseconds, used when waiting for an audio connection to be established.
      Returns:
      The currently set timeout.
    • setSendingHandler

      void setSendingHandler(@Nullable AudioSendHandler handler)
      Sets the AudioSendHandler that the manager will use to provide audio data to an audio connection.
      The handler provided here will persist between audio connection connect and disconnects. Furthermore, you don't need to have an audio connection to set a handler. When JDA sets up a new audio connection it will use the handler provided here.
      Setting this to null will remove the audio handler.

      JDA recommends LavaPlayer as an AudioSendHandler. It provides a demo targeted at JDA users.

      Parameters:
      handler - The AudioSendHandler used to provide audio data.
    • getSendingHandler

      @Nullable AudioSendHandler getSendingHandler()
      The currently set AudioSendHandler. If there is no sender currently set, this method will return null.
      Returns:
      The currently active AudioSendHandler or null.
    • setReceivingHandler

      void setReceivingHandler(@Nullable AudioReceiveHandler handler)
      Sets the AudioReceiveHandler that the manager will use to process audio data received from an audio connection.

      The handler provided here will persist between audio connection connect and disconnects. Furthermore, you don't need to have an audio connection to set a handler. When JDA sets up a new audio connection it will use the handler provided here.
      Setting this to null will remove the audio handler.

      Parameters:
      handler - The AudioReceiveHandler used to process received audio data.
    • getReceivingHandler

      @Nullable AudioReceiveHandler getReceivingHandler()
      The currently set AudioReceiveHandler. If there is no receiver currently set, this method will return null.
      Returns:
      The currently active AudioReceiveHandler or null.
    • setConnectionListener

      void setConnectionListener(@Nullable ConnectionListener listener)
      Sets the ConnectionListener for this AudioManager. It will be informed about meta data of any audio connection established through this AudioManager. Further information can be found in the ConnectionListener documentation!
      Parameters:
      listener - A ConnectionListener instance
    • getConnectionListener

      @Nullable ConnectionListener getConnectionListener()
      The currently set ConnectionListener or null if no ConnectionListener has been set.
      Returns:
      The current ConnectionListener instance for this AudioManager.
    • getConnectionStatus

      @Nonnull ConnectionStatus getConnectionStatus()
      The current ConnectionStatus.
      This status indicates represents the connection status of an audio connection.
      Returns:
      The current ConnectionStatus.
    • setAutoReconnect

      void setAutoReconnect(boolean shouldReconnect)
      Sets whether audio connections from this AudioManager should automatically reconnect or not. Default true
      Parameters:
      shouldReconnect - Whether audio connections from this AudioManager should automatically reconnect
    • isAutoReconnect

      boolean isAutoReconnect()
      Whether audio connections from this AudioManager automatically reconnect
      Returns:
      Whether audio connections from this AudioManager automatically reconnect
    • setSelfMuted

      void setSelfMuted(boolean muted)
      Set this to true if the current connection should be displayed as muted, this will cause the AudioSendHandler packages to not be ignored by Discord!
      Parameters:
      muted - Whether the connection should stop sending audio and display as muted.
    • isSelfMuted

      boolean isSelfMuted()
      Whether connections from this AudioManager are muted, if this is true packages by the registered AudioSendHandler will be ignored by Discord.
      Returns:
      Whether connections from this AudioManager are muted
    • setSelfDeafened

      void setSelfDeafened(boolean deafened)
      Sets whether connections from this AudioManager should be deafened.
      This does not include being muted, that value can be set individually from setSelfMuted(boolean) and checked via isSelfMuted()
      Parameters:
      deafened - Whether connections from this AudioManager should be deafened.
    • isSelfDeafened

      boolean isSelfDeafened()
      Whether connections from this AudioManager are deafened.
      This does not include being muted, that value can be set individually from setSelfMuted(boolean) and checked via isSelfMuted()
      Returns:
      True, if connections from this AudioManager are deafened