Changed format Identify to fixed number of bytes
This commit is contained in:
parent
5241fcfde7
commit
3d1ca436e7
|
@ -7,6 +7,7 @@ import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"git.gammaspectra.live/S.O.N.G/Kirika/audio"
|
"git.gammaspectra.live/S.O.N.G/Kirika/audio"
|
||||||
|
"git.gammaspectra.live/S.O.N.G/Kirika/audio/format"
|
||||||
"git.gammaspectra.live/S.O.N.G/go-fdkaac/fdkaac"
|
"git.gammaspectra.live/S.O.N.G/go-fdkaac/fdkaac"
|
||||||
aacAdts "github.com/Eyevinn/mp4ff/aac"
|
aacAdts "github.com/Eyevinn/mp4ff/aac"
|
||||||
"github.com/Eyevinn/mp4ff/mp4"
|
"github.com/Eyevinn/mp4ff/mp4"
|
||||||
|
@ -503,7 +504,7 @@ func (f Format) Encode(source audio.Source, writer io.WriteCloser, options map[s
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f Format) Identify(_ []byte, extension string) bool {
|
func (f Format) Identify(_ [format.IdentifyPeekBytes]byte, extension string) bool {
|
||||||
//TODO: add .m4a/mp4 detection
|
//TODO: add .m4a/mp4 detection
|
||||||
return extension == "aac" || extension == "adts"
|
return extension == "aac" || extension == "adts"
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,6 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"git.gammaspectra.live/S.O.N.G/Kirika/audio"
|
"git.gammaspectra.live/S.O.N.G/Kirika/audio"
|
||||||
"git.gammaspectra.live/S.O.N.G/Kirika/vector"
|
"git.gammaspectra.live/S.O.N.G/Kirika/vector"
|
||||||
"git.gammaspectra.live/S.O.N.G/voaac-go"
|
|
||||||
"io"
|
"io"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -93,6 +92,6 @@ func (f Format) Encode(source audio.Source, writer io.WriteCloser, options map[s
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f Format) Identify(peek []byte, extension string) bool {
|
func (f Format) Identify(peek [format.IdentifyPeekBytes]byte, extension string) bool {
|
||||||
return extension == "aac" || extension == "adts"
|
return extension == "aac" || extension == "adts"
|
||||||
}
|
}
|
||||||
|
|
|
@ -136,6 +136,6 @@ func (f Format) Encode(source audio.Source, writer io.WriteCloser, options map[s
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f Format) Identify(_ []byte, extension string) bool {
|
func (f Format) Identify(_ [format.IdentifyPeekBytes]byte, extension string) bool {
|
||||||
return extension == "alac" || extension == "mp4" || extension == "m4a"
|
return extension == "alac" || extension == "mp4" || extension == "m4a"
|
||||||
}
|
}
|
||||||
|
|
|
@ -224,7 +224,7 @@ func (f Format) Encode(source audio.Source, writer io.WriteCloser, options map[s
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f Format) Identify(peek []byte, extension string) bool {
|
func (f Format) Identify(peek [format.IdentifyPeekBytes]byte, extension string) bool {
|
||||||
//No Ogg supported
|
//No Ogg supported
|
||||||
return bytes.Compare(peek[:4], []byte{'f', 'L', 'a', 'C'}) == 0 || (bytes.Compare(peek[:3], []byte{'I', 'D', '3'}) == 0 && extension != "mp3") || extension == "flac"
|
return bytes.Compare(peek[:4], []byte{'f', 'L', 'a', 'C'}) == 0 || (bytes.Compare(peek[:3], []byte{'I', 'D', '3'}) == 0 && extension != "mp3") || extension == "flac"
|
||||||
}
|
}
|
||||||
|
|
|
@ -161,6 +161,6 @@ func (f Format) Encode(source audio.Source, writer io.WriteCloser, options map[s
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f Format) Identify(peek []byte, extension string) bool {
|
func (f Format) Identify(peek [format.IdentifyPeekBytes]byte, extension string) bool {
|
||||||
return (bytes.Compare(peek[:4], []byte{'O', 'g', 'g', 'S'}) == 0 && extension != "opus" && extension != "vorbis") || bytes.Compare(peek[:4], []byte{'f', 'L', 'a', 'C'}) == 0 || (bytes.Compare(peek[:3], []byte{'I', 'D', '3'}) == 0 && extension != "mp3") || extension == "flac" || extension == "ogg"
|
return (bytes.Compare(peek[:4], []byte{'O', 'g', 'g', 'S'}) == 0 && extension != "opus" && extension != "vorbis") || bytes.Compare(peek[:4], []byte{'f', 'L', 'a', 'C'}) == 0 || (bytes.Compare(peek[:3], []byte{'I', 'D', '3'}) == 0 && extension != "mp3") || extension == "flac" || extension == "ogg"
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,9 +5,11 @@ import (
|
||||||
"io"
|
"io"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const IdentifyPeekBytes = 16
|
||||||
|
|
||||||
type Format interface {
|
type Format interface {
|
||||||
// Identify checks whether a format is of a type. peek includes a few first bytes, extension is the lowercase file extension without a dot.
|
// Identify checks whether a format is of a type. peek includes a few first bytes, extension is the lowercase file extension without a dot.
|
||||||
Identify(peek []byte, extension string) bool
|
Identify(peek [IdentifyPeekBytes]byte, extension string) bool
|
||||||
// Name returns the name of the codec or format
|
// Name returns the name of the codec or format
|
||||||
Name() string
|
Name() string
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,7 +37,7 @@ func (f NullFormat) Encode(audio.Source, io.WriteCloser, map[string]interface{})
|
||||||
return errors.New("null format")
|
return errors.New("null format")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f NullFormat) Identify([]byte, string) bool {
|
func (f NullFormat) Identify([format.IdentifyPeekBytes]byte, string) bool {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -103,8 +103,8 @@ func GetDecoders(r io.ReadSeekCloser, pathName string) (decoders []format.Decode
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
peek := make([]byte, 16)
|
var peek [format.IdentifyPeekBytes]byte
|
||||||
if _, err = r.Read(peek); err != nil {
|
if _, err = r.Read(peek[:]); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if _, err = r.Seek(startOffset, io.SeekStart); err != nil {
|
if _, err = r.Seek(startOffset, io.SeekStart); err != nil {
|
||||||
|
|
|
@ -5,6 +5,7 @@ package mp3
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"git.gammaspectra.live/S.O.N.G/Kirika/audio"
|
"git.gammaspectra.live/S.O.N.G/Kirika/audio"
|
||||||
|
"git.gammaspectra.live/S.O.N.G/Kirika/audio/format"
|
||||||
mp3Lib "git.gammaspectra.live/S.O.N.G/minimp3"
|
mp3Lib "git.gammaspectra.live/S.O.N.G/minimp3"
|
||||||
"golang.org/x/exp/slices"
|
"golang.org/x/exp/slices"
|
||||||
"io"
|
"io"
|
||||||
|
@ -53,7 +54,7 @@ func (f Format) Open(r io.ReadSeekCloser) (audio.Source, error) {
|
||||||
return source, nil
|
return source, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f Format) Identify(peek []byte, extension string) bool {
|
func (f Format) Identify(peek [format.IdentifyPeekBytes]byte, extension string) bool {
|
||||||
//match ID3 / sync header
|
//match ID3 / sync header
|
||||||
return peek[0] == 0xff && (peek[1]>>5) == 0b111 || (bytes.Compare(peek[:3], []byte{'I', 'D', '3'}) == 0 && extension != "flac") || extension == "mp3"
|
return peek[0] == 0xff && (peek[1]>>5) == 0b111 || (bytes.Compare(peek[:3], []byte{'I', 'D', '3'}) == 0 && extension != "flac") || extension == "mp3"
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ package mp3
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"git.gammaspectra.live/S.O.N.G/Kirika/audio"
|
"git.gammaspectra.live/S.O.N.G/Kirika/audio"
|
||||||
|
"git.gammaspectra.live/S.O.N.G/Kirika/audio/format"
|
||||||
mp3Lib "git.gammaspectra.live/S.O.N.G/go-mp3"
|
mp3Lib "git.gammaspectra.live/S.O.N.G/go-mp3"
|
||||||
"golang.org/x/exp/slices"
|
"golang.org/x/exp/slices"
|
||||||
"io"
|
"io"
|
||||||
|
@ -51,7 +52,7 @@ func (f Format) Open(r io.ReadSeekCloser) (audio.Source, error) {
|
||||||
return source, nil
|
return source, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f Format) Identify(peek []byte, extension string) bool {
|
func (f Format) Identify(peek [format.IdentifyPeekBytes]byte, extension string) bool {
|
||||||
//match ID3 / sync header
|
//match ID3 / sync header
|
||||||
return peek[0] == 0xff && (peek[1]>>5) == 0b111 || (bytes.Compare(peek[:3], []byte{'I', 'D', '3'}) == 0 && extension != "flac") || extension == "mp3"
|
return peek[0] == 0xff && (peek[1]>>5) == 0b111 || (bytes.Compare(peek[:3], []byte{'I', 'D', '3'}) == 0 && extension != "flac") || extension == "mp3"
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"git.gammaspectra.live/S.O.N.G/Kirika/audio"
|
"git.gammaspectra.live/S.O.N.G/Kirika/audio"
|
||||||
"git.gammaspectra.live/S.O.N.G/Kirika/audio/filter"
|
"git.gammaspectra.live/S.O.N.G/Kirika/audio/filter"
|
||||||
|
"git.gammaspectra.live/S.O.N.G/Kirika/audio/format"
|
||||||
libopus "git.gammaspectra.live/S.O.N.G/go-pus"
|
libopus "git.gammaspectra.live/S.O.N.G/go-pus"
|
||||||
"io"
|
"io"
|
||||||
"time"
|
"time"
|
||||||
|
@ -177,6 +178,6 @@ func (f Format) Encode(source audio.Source, writer io.WriteCloser, options map[s
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f Format) Identify(peek []byte, extension string) bool {
|
func (f Format) Identify(peek [format.IdentifyPeekBytes]byte, extension string) bool {
|
||||||
return bytes.Compare(peek[:4], []byte{'O', 'g', 'g', 'S'}) == 0 || extension == "opus" || extension == "ogg"
|
return bytes.Compare(peek[:4], []byte{'O', 'g', 'g', 'S'}) == 0 || extension == "opus" || extension == "ogg"
|
||||||
}
|
}
|
||||||
|
|
|
@ -180,6 +180,6 @@ func (f Format) Encode(source audio.Source, writer io.WriteCloser, options map[s
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f Format) Identify(peek []byte, extension string) bool {
|
func (f Format) Identify(peek [format.IdentifyPeekBytes]byte, extension string) bool {
|
||||||
return bytes.Compare(peek[:4], []byte{'T', 'T', 'A', '1'}) == 0 || extension == "tta"
|
return bytes.Compare(peek[:4], []byte{'T', 'T', 'A', '1'}) == 0 || extension == "tta"
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@ import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"fmt"
|
"fmt"
|
||||||
"git.gammaspectra.live/S.O.N.G/Kirika/audio"
|
"git.gammaspectra.live/S.O.N.G/Kirika/audio"
|
||||||
|
"git.gammaspectra.live/S.O.N.G/Kirika/audio/format"
|
||||||
libvorbis "git.gammaspectra.live/S.O.N.G/go-vorbis"
|
libvorbis "git.gammaspectra.live/S.O.N.G/go-vorbis"
|
||||||
"io"
|
"io"
|
||||||
)
|
)
|
||||||
|
@ -111,6 +112,6 @@ func (f Format) Encode(source audio.Source, writer io.WriteCloser, options map[s
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f Format) Identify(peek []byte, extension string) bool {
|
func (f Format) Identify(peek [format.IdentifyPeekBytes]byte, extension string) bool {
|
||||||
return bytes.Compare(peek[:4], []byte{'O', 'g', 'g', 'S'}) == 0 || extension == "vorbis" || extension == "ogg"
|
return bytes.Compare(peek[:4], []byte{'O', 'g', 'g', 'S'}) == 0 || extension == "vorbis" || extension == "ogg"
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ package vorbis
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"git.gammaspectra.live/S.O.N.G/Kirika/audio"
|
"git.gammaspectra.live/S.O.N.G/Kirika/audio"
|
||||||
|
"git.gammaspectra.live/S.O.N.G/Kirika/audio/format"
|
||||||
libvorbis "github.com/jfreymuth/oggvorbis"
|
libvorbis "github.com/jfreymuth/oggvorbis"
|
||||||
"io"
|
"io"
|
||||||
)
|
)
|
||||||
|
@ -53,6 +54,6 @@ func (f Format) Open(r io.ReadSeekCloser) (audio.Source, error) {
|
||||||
return source, nil
|
return source, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f Format) Identify(peek []byte, extension string) bool {
|
func (f Format) Identify(peek [format.IdentifyPeekBytes]byte, extension string) bool {
|
||||||
return bytes.Compare(peek[:4], []byte{'O', 'g', 'g', 'S'}) == 0 || extension == "vorbis" || extension == "ogg"
|
return bytes.Compare(peek[:4], []byte{'O', 'g', 'g', 'S'}) == 0 || extension == "vorbis" || extension == "ogg"
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue