Kirika/audio/packetizer/mp3.go
DataHoarder bd069cdf05
Some checks failed
continuous-integration/drone/push Build is failing
General code inspection cleanup
2022-10-03 11:34:56 +02:00

61 lines
1 KiB
Go

package packetizer
import (
"bufio"
mp3parser "github.com/sssgun/mp3"
"io"
)
type Mp3Packetizer struct {
decoder *mp3parser.Decoder
samples int64
}
type Mp3Packet struct {
sampleNumber int64
frame mp3parser.Frame
}
func (p *Mp3Packet) KeepMode() KeepMode {
return Discard
}
func (p *Mp3Packet) GetStartSampleNumber() int64 {
return p.sampleNumber
}
func (p *Mp3Packet) GetEndSampleNumber() int64 {
return p.sampleNumber + int64(p.frame.Samples())
}
func (p *Mp3Packet) Category() int64 {
return 0
}
func (p *Mp3Packet) GetData() []byte {
return p.frame.Bytes()
}
func (p *Mp3Packet) GetDataOffset(_ int64) []byte {
return p.GetData()
}
func NewMp3Packetizer(reader io.Reader) *Mp3Packetizer {
return &Mp3Packetizer{decoder: mp3parser.NewDecoder(bufio.NewReader(reader))}
}
func (o *Mp3Packetizer) GetPacket() Packet {
packet := &Mp3Packet{}
var skipped int
if err := o.decoder.Decode(&packet.frame, &skipped); err != nil {
return nil
}
packet.sampleNumber = o.samples
o.samples += int64(packet.frame.Samples())
return packet
}