pcm

package
v0.0.0-...-9faf157 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 8, 2023 License: Apache-2.0 Imports: 14 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func NewOpusProvider

func NewOpusProvider(encoder *opus.Encoder, pcmProvider FrameProvider) (voice.OpusFrameProvider, error)

NewOpusProvider creates a new voice.OpusFrameProvider which gets PCM frames from the given FrameProvider and encodes the PCM frames into Opus frames. You can pass your own *opus.Encoder or nil to use the default Opus encoder(48000hz sample rate, 2 channels, opus.ApplicationAudio & 64kbps bitrate).

func NewPCMOpusReceiver

func NewPCMOpusReceiver(decoderCreateFunc func() (*opus.Decoder, error), pcmFrameReceiver FrameReceiver, userFilter voice.UserFilterFunc) voice.OpusFrameReceiver

NewPCMOpusReceiver creates a new voice.OpusFrameReceiver which receives Opus frames and decodes them into PCM frames. A new decoder is created for each user. You can pass your own *opus.Decoder by passing a decoderCreateFunc or nil to use the default Opus decoder(48000hz sample rate, 2 channels). You can filter users by passing a voice.ShouldReceiveUserFunc or nil to receive all users.

Types

type CombinedFrameReceiver

type CombinedFrameReceiver interface {
	// ReceiveCombinedPCMFrame is called when a new CombinedPacket is received.
	ReceiveCombinedPCMFrame(userIDs []snowflake.ID, packet *CombinedPacket) error

	// Close is called when the CombinedFrameReceiver is no longer needed. It should close any open resources.
	Close()
}

CombinedFrameReceiver is an interface for receiving Packet(s) from multiple users as one CombinedPacket.

func NewCombinedWriter

func NewCombinedWriter(w io.Writer) CombinedFrameReceiver

NewCombinedWriter creates a new CombinedFrameReceiver which writes the CombinedPacket to the given io.Writer.

func NewFrameChannelConverterCombinedReceiver

func NewFrameChannelConverterCombinedReceiver(receiver CombinedFrameReceiver, rate int, inputChannels int, outputChannels int) CombinedFrameReceiver

type CombinedPacket

type CombinedPacket struct {
	Sequences  []uint16
	Timestamps []uint32
	SSRCs      []uint32
	PCM        []int16
}

CombinedPacket is a Packet which got created by combining multiple Packet(s).

type FrameProvider

type FrameProvider interface {
	// ProvidePCMFrame is called to get a PCM frame.
	ProvidePCMFrame() ([]int16, error)

	// Close is called when the provider is no longer needed. It should close any open resources.
	Close()
}

FrameProvider is an interface for providing PCM frames.

func NewBufferPCMProvider

func NewBufferPCMProvider(provider FrameProvider) FrameProvider

func NewCustomReader

func NewCustomReader(r io.Reader, rate int, channels int) FrameProvider

NewCustomReader creates a new FrameProvider which reads PCM frames from the given io.Reader. You can specify the sample rate and number of channels.

func NewPCMFrameChannelConverterProvider

func NewPCMFrameChannelConverterProvider(Provider FrameProvider, rate int, inputChannels int, outputChannels int) FrameProvider

func NewPCMVolumeFrameProvider

func NewPCMVolumeFrameProvider(pcmFrameProvider FrameProvider, volumeProvider func() float32) FrameProvider

func NewPauseablePCMFrameProvider

func NewPauseablePCMFrameProvider(provider FrameProvider, pauseProvider func() bool) FrameProvider

func NewReader

func NewReader(r io.Reader) FrameProvider

NewReader creates a new FrameProvider which reads PCM frames from the given io.Reader.

func NewVariablePCMFrameProvider

func NewVariablePCMFrameProvider(providerFunc func() FrameProvider) FrameProvider

type FrameReceiver

type FrameReceiver interface {
	// ReceivePCMFrame is called when a PCM frame is received.
	ReceivePCMFrame(userID snowflake.ID, packet *Packet) error

	// CleanupUser is called when a user is disconnected. This should close any resources associated with the user.
	CleanupUser(userID snowflake.ID)

	// Close is called when the receiver is no longer needed. It should close any open resources.
	Close()
}

FrameReceiver is an interface for receiving PCM frames.

func NewPCMCombinerReceiver

func NewPCMCombinerReceiver(logger log.Logger, pcmCombinedFrameReceiver CombinedFrameReceiver) FrameReceiver

NewPCMCombinerReceiver creates a new FrameReceiver which combines multiple Packet(s) into a single CombinedPacket. You can process the CombinedPacket by passing a CombinedFrameReceiver.

func NewPCMFrameChannelConverterReceiver

func NewPCMFrameChannelConverterReceiver(receiver FrameReceiver, rate int, inputChannels int, outputChannels int) FrameReceiver

func NewWriter

func NewWriter(w io.Writer, userFilter voice.UserFilterFunc) FrameReceiver

NewWriter creates a new FrameReceiver which writes PCM frames to the given io.Writer. You can filter which users should be written by passing a voice.ShouldReceiveUserFunc.

type Packet

type Packet struct {
	SSRC      uint32
	Sequence  uint16
	Timestamp uint32
	PCM       []int16
}

Packet is a 20ms PCM frame with a ssrc, sequence and timestamp.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL