Compare commits
No commits in common. "master" and "2021-07-02" have entirely different histories.
master
...
2021-07-02
14
README.md
14
README.md
@ -2,19 +2,7 @@
|
|||||||
|
|
||||||
A program that extracts the individual tracks from an Ogg/Vorbis or mp3 radio stream. Written in go without any non-standard dependencies.
|
A program that extracts the individual tracks from an Ogg/Vorbis or mp3 radio stream. Written in go without any non-standard dependencies.
|
||||||
|
|
||||||
## Obtaining the binary
|
## Building
|
||||||
|
|
||||||
### Via [releases](https://git.nobrain.org/r4/radio-stream-recorder/releases/latest)
|
|
||||||
|
|
||||||
- Download the binary for your system from https://git.nobrain.org/r4/radio-stream-recorder/releases/latest
|
|
||||||
|
|
||||||
- (__*nix only__) Make executable `chmod +x <EXECUTABLE PATH>`
|
|
||||||
|
|
||||||
- That should be it, just open a terminal and run it; see usage
|
|
||||||
|
|
||||||
### From source
|
|
||||||
|
|
||||||
- Clone the git repo and cd into it
|
|
||||||
|
|
||||||
- Install [go](https://golang.org/) (preferably a recent version)
|
- Install [go](https://golang.org/) (preferably a recent version)
|
||||||
|
|
||||||
|
11
mp3/mp3.go
11
mp3/mp3.go
@ -38,8 +38,8 @@ func NewExtractor(respHdr http.Header) (*Extractor, error) {
|
|||||||
func (d *Extractor) ReadBlock(r io.Reader, w io.Writer) (isFirst bool, err error) {
|
func (d *Extractor) ReadBlock(r io.Reader, w io.Writer) (isFirst bool, err error) {
|
||||||
var musicData bytes.Buffer
|
var musicData bytes.Buffer
|
||||||
|
|
||||||
// We want to write everything except the metadata to the output and to
|
// We want to write everything to the output, as well as musicData for
|
||||||
// musicData for calculating the checksum.
|
// calculating the checksum.
|
||||||
multi := io.MultiWriter(w, &musicData)
|
multi := io.MultiWriter(w, &musicData)
|
||||||
|
|
||||||
// Read until the metadata chunk. The part that is read here is also what
|
// Read until the metadata chunk. The part that is read here is also what
|
||||||
@ -57,8 +57,8 @@ func (d *Extractor) ReadBlock(r io.Reader, w io.Writer) (isFirst bool, err error
|
|||||||
// Read metadata blocks.
|
// Read metadata blocks.
|
||||||
if numBlocks > 0 {
|
if numBlocks > 0 {
|
||||||
// Metadata is only actually stored in the first metadata chunk
|
// Metadata is only actually stored in the first metadata chunk
|
||||||
// of a given file. Therefore, every metadata chunk with more than 0
|
// of a given file. Therefore, every metadata chunk with more than 1
|
||||||
// blocks always marks the beginning of a file.
|
// block always marks the beginning of a file.
|
||||||
isBOF = true
|
isBOF = true
|
||||||
|
|
||||||
// Each block is 16 bytes in size. Any excess bytes in the last block
|
// Each block is 16 bytes in size. Any excess bytes in the last block
|
||||||
@ -84,7 +84,8 @@ func (d *Extractor) ReadBlock(r io.Reader, w io.Writer) (isFirst bool, err error
|
|||||||
t = t[1 : len(t)-1]
|
t = t[1 : len(t)-1]
|
||||||
if t == "Unknown" {
|
if t == "Unknown" {
|
||||||
// If there is no stream title, use format:
|
// If there is no stream title, use format:
|
||||||
// Unknown_<crc32 checksum of first block>
|
// Unknown_<crc32 checksum>
|
||||||
|
// Where the checksum is only that of the first block.
|
||||||
sumStr := strconv.FormatInt(int64(crc32.ChecksumIEEE(musicData.Bytes())), 10)
|
sumStr := strconv.FormatInt(int64(crc32.ChecksumIEEE(musicData.Bytes())), 10)
|
||||||
d.streamTitle = "Unknown_" + sumStr
|
d.streamTitle = "Unknown_" + sumStr
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
Reference in New Issue
Block a user