voice

package
v0.2.8 Latest Latest
Warning

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

Go to latest
Published: Aug 29, 2024 License: MIT Imports: 4 Imported by: 1

Documentation

Overview

package voice contains the types used by the SRS audio protocol to send and receive audio data over the network.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Frequency

type Frequency struct {
	// Frequency is the transmission frequency in Hz.
	// Example: 249.500MHz is encoded as 249500000.0
	//
	// Length: 8 bytes
	Frequency float64
	// Modulation is the transmission modulation mode.
	//
	// Length: 1 byte
	Modulation byte
	// Encryption is the transmission encryption mode.
	//
	// Length: 1 byte
	Encryption byte
}

Frequency describes an audio transmission channel. This struct is only for use in VoicePacket. For client information, use types.Radio instead. Length: 10 bytes

type VoicePacket

type VoicePacket struct {

	// PacketLength is the total packet length in bytes.
	//
	// Bytes: 0:2
	//
	// Length: 2 bytes
	PacketLength uint16
	// AudioSegmentLength is the length of the Audio segment struct.
	//
	// Bytes: 2:4
	//
	// Length: 2 bytes
	AudioSegmentLength uint16
	// FrequenciesSegmentLength is the length of the Frequencies segment.
	//
	// Bytes: 4:6
	//
	// Length: 2 bytes
	FrequenciesSegmentLength uint16

	/* Audio segment */
	// AudioBytes is the AudioPart1 byte array. This is the audio data  as an Opus bitstream, encoded as 16KHz Mono in 40ms frames.
	// The upstream name is directly mirrored from the IDirectSoundBuffer::Lock function in the legacy DirectSound API - Part2 is not used by SRS.
	//
	// Bytes: 6:6+AudioSegmentLength
	//
	// Length: AudioSegmentLength
	AudioBytes []byte

	// Frequencies is an array of information for each frequency, modulation and encryption combination the audio is transmitted on.
	//
	// Bytes: 6+AudioSegmentLength:6+AudioSegmentLength+FrequenciesSegmentLength
	//
	// Length: FrequenciesSegmentLength
	Frequencies []Frequency

	// UnitID is the ID of the in-game unit that originated the packet.
	//
	// Bytes: PacketLength-58:PacketLength-53
	//
	// Length: 4 bytes
	UnitID uint32
	// PacketID is the ID of this packet. Packets from the same transmitter increment by 1 for each transmission.
	//
	// Bytes: PacketLength-53:PacketLength-45
	//
	// Length: 8 bytes
	PacketID uint64
	// Hops is the number of retransmissions. This value is checked in SRS to limit retransmisisons.
	//
	// Bytes: PacketLength-45:PacketLength-44
	//
	// Length: 1 byte
	Hops byte
	// RelayGUID is the GUID of the last transmitter. This may differ from OriginGUID if this is a retransmission.
	//
	// Bytes: PacketLength-44:PacketLength-22
	//
	// Length: 22 bytes
	RelayGUID []byte
	// OriginGUID is the GUID of the original transmitter.
	//
	// Bytes: PacketLength-22:PacketLength
	//
	// Length: 22 bytes
	OriginGUID []byte
}

VoicePacket is a network packet containing: A header segment with packet and segment length headers An audio segment containing Opus audio A frequency segment containing each frequency the audio is transmitted on A fixed segment containing metadata

See SRS source code for packet encoding: https://github.com/ciribob/DCS-SimpleRadioStandalone/blob/master/DCS-SR-Common/Network/UDPVoicePacket.cs

func NewVoicePacket

func NewVoicePacket(audioBytes []byte, frequencies []Frequency, unitID uint32, packetID uint64, hops byte, relay []byte, origin []byte) VoicePacket

func NewVoicePacketFrom

func NewVoicePacketFrom(b []byte) VoicePacket

newVoicePacketFrom deserializes a voice packet from bytes to struct

func (*VoicePacket) Encode

func (vp *VoicePacket) Encode() []byte

Encode serializes a VoicePacket into a byte array.

func (*VoicePacket) String

func (vp *VoicePacket) String() string

Jump to

Keyboard shortcuts

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