⬥ ID3 encoding/decoding library in Go ⬥
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

132 lines
2.2 KiB

# ∙ ID3ED (ID3 - Encoder - Decoder)
## ⚬ Library for encoding/decoding ID3 tags
---
# Status of the package
**ID3v1**. can:
- read
- write
**ID3v1 Enhanced**. can:
- read
- write
**ID3v2**. can:
- read
3 years ago
- write
---
# ∙ Installation
To download package source:
```
go get github.com/Unbewohnte/id3ed/...
```
will be deprecated in 1.17 as far as I know
To donwload and compile package:
```
go install github.com/Unbewohnte/id3ed/...
```
---
3 years ago
# ∙ Example
3 years ago
## ⚬ Read/Write v1&&v2 tags
3 years ago
```
package main
import(
"fmt"
"github.com/Unbewohnte/id3ed"
id3v1 "github.com/Unbewohnte/id3ed/v1"
3 years ago
id3v2 "github.com/Unbewohnte/id3ed/v2"
3 years ago
)
func main() {
f, err := id3ed.Open("/path/to/mp3/myMP3.mp3")
if err != nil {
panic(err)
}
// reading and writing tags is easy and done by one struct !
3 years ago
// print all v2 frames
3 years ago
if f.ContainsID3v2 {
for_, frame := range f.ID3v2Tag.Frames{
fmt.Printf("%s\n", frame.Header.ID)
}
}
3 years ago
// create your own v2 tag from custom frames
myframe, _ := id3v2.NewFrame("TXXX", []byte("Very important data (ᗜˬᗜ)") ,true)
v2tag := id3v2.NewTAG([]id3v2.Frame{*myframe})
// replace v2 tag of the file
f.WriteID3v2(v2tag)
// create your own ID3v1 tag
3 years ago
tag := &id3v1.ID3v1Tag{
SongName: "mysong",
Artist: "me",
Album: "my album",
Year: 2021,
Comment: "Cool song",
Track: 1,
Genre: "Christian Gangsta Rap", // for list of genres see: "./v1/genres.go"
}
3 years ago
// write your v1 tag
3 years ago
err = f.WriteID3v1(tag)
if err != nil {
panic(err)
}
// etc.
}
```
---
# ∙ Testing
To test everything
```
go test ./...
```
or
```
go test -v ./...
```
to get a verbose output
OR
```
go test ./package_name_here
```
to test a specific package
3 years ago
---
# ∙ License
3 years ago
[MIT LICENSE](https://github.com/Unbewohnte/id3ed/blob/main/LICENSE)
# ∙ Note
This is **NOT** a fully tested and it is **NOT** a flawlessly working and edge-cases-covered package.
I work on it alone and I am **NOT** a professional who knows what he does.
Please, use with caution !