Releases: n10v/id3v2
1.0.1
- Fix parsing ID3v2.3 frame sizes. Earlier id3v2 didn't parse correctly v2.3 frame sizes. Huge thanks to @rstemmer for pointing to v2.3 size format #13, #34
- Reduce memory allocations in encoding operations 211759e
- Performance compared to v1.0.0:
name old time/op new time/op delta
ParseAllFrames-4 77.4µs ± 6% 77.1µs ± 5% -0.36% (p=0.690 n=5+5)
ParseAllFramesISO-4 78.7µs ± 3% 76.3µs ± 1% -3.01% (p=0.008 n=5+5)
ParseArtistAndTitle-4 2.40µs ±16% 2.45µs ±15% +2.06% (p=0.690 n=5+5)
Write-4 6.89µs ± 4% 6.79µs ± 2% -1.56% (p=0.310 n=5+5)
WriteISO-4 11.0µs ± 0% 9.4µs ± 0% -14.65% (p=0.016 n=4+5)
name old alloc/op new alloc/op delta
ParseAllFrames-4 263kB ± 0% 263kB ± 0% -0.01% (p=0.095 n=5+5)
ParseAllFramesISO-4 264kB ± 0% 264kB ± 0% -0.08% (p=0.008 n=5+5)
ParseArtistAndTitle-4 732B ± 1% 734B ± 1% +0.25% (p=0.460 n=5+5)
Write-4 2.55kB ± 0% 2.55kB ± 0% ~ (all equal)
WriteISO-4 6.99kB ± 0% 6.39kB ± 0% -8.58% (p=0.000 n=5+4)
name old allocs/op new allocs/op delta
ParseAllFrames-4 62.0 ± 0% 61.0 ± 0% -1.61% (p=0.029 n=4+4)
ParseAllFramesISO-4 76.6 ± 1% 66.0 ± 0% -13.84% (p=0.008 n=5+5)
ParseArtistAndTitle-4 14.6 ±11% 14.6 ±11% ~ (p=1.000 n=5+5)
Write-4 35.0 ± 0% 35.0 ± 0% ~ (all equal)
WriteISO-4 80.0 ± 0% 50.0 ± 0% -37.50% (p=0.008 n=5+5)
1.0.0
- id3v2 is exiting the beta and becoming stable, so the API will be changed only in major releases!
- Major internal improvements: reduced code and improved performance.
- Performance compared to v0.12.1:
name old time/op new time/op delta
ParseAllFrames-4 157µs ± 2% 155µs ± 2% -1.12% (p=0.008 n=8+9)
ParseAllFramesISO-4 161µs ± 4% 158µs ± 2% -1.63% (p=0.222 n=9+9)
ParseArtistAndTitle-4 37.6µs ±24% 37.7µs ±26% +0.33% (p=0.796 n=9+9)
Write-4 10.8ms ± 7% 7.3ms ±12% -32.77% (p=0.000 n=9+9)
WriteISO-4 9.70ms ±37% 7.01ms ± 5% -27.69% (p=0.000 n=9+9)
name old alloc/op new alloc/op delta
ParseAllFrames-4 264kB ± 0% 264kB ± 0% -0.08% (p=0.000 n=8+7)
ParseAllFramesISO-4 264kB ± 0% 264kB ± 0% -0.02% (p=0.234 n=8+8)
ParseArtistAndTitle-4 811B ± 2% 807B ± 1% -0.52% (p=0.127 n=9+9)
Write-4 4.54kB ± 1% 4.18kB ± 0% -7.97% (p=0.000 n=7+9)
WriteISO-4 8.63kB ± 4% 8.62kB ± 0% -0.11% (p=0.180 n=9+9)
name old allocs/op new allocs/op delta
ParseAllFrames-4 64.0 ± 0% 64.0 ± 0% ~ (all equal)
ParseAllFramesISO-4 79.0 ± 0% 79.0 ± 0% ~ (all equal)
ParseArtistAndTitle-4 17.0 ±12% 16.6 ± 9% -2.61% (p=0.519 n=9+9)
Write-4 52.0 ± 0% 52.0 ± 0% ~ (all equal)
WriteISO-4 97.0 ± 0% 97.0 ± 0% ~ (all equal)
0.12.1
- Now WriteTo methods return correct
n
values. - Significant performance improvements by writing:
- Performance compared to v0.12:
name old time/op new time/op delta
ParseAllFrames-4 284µs ± 6% 225µs ± 1% -20.86% (p=0.003 n=7+5)
ParseArtistAndTitle-4 26.1µs ±23% 21.8µs ±30% ~ (p=0.097 n=7+7)
AddTextFrame-4 1.29µs ± 2% 1.03µs ± 4% -20.39% (p=0.001 n=7+7)
AddEncodedTextFrame-4 2.43µs ± 1% 2.04µs ± 1% -15.99% (p=0.001 n=7+7)
ParseAndWrite-4 10.5ms ± 3% 8.7ms ±10% -17.38% (p=0.002 n=6+6)
ReuseTag-4 3.42µs ± 0% 3.39µs ± 8% ~ (p=0.508 n=6+7)
WriteBytesSize-4 28.9ns ± 3% 29.9ns ±15% ~ (p=0.466 n=6+7)
ParseSize-4 8.36ns ± 2% 8.37ns ± 3% ~ (p=0.876 n=7+7)
name old alloc/op new alloc/op delta
ParseAllFrames-4 527kB ± 0% 525kB ± 0% -0.46% (p=0.001 n=7+7)
ParseArtistAndTitle-4 810B ± 1% 808B ± 1% ~ (p=0.686 n=7+7)
AddTextFrame-4 419B ± 0% 418B ± 0% -0.24% (p=0.001 n=7+7)
AddEncodedTextFrame-4 1.35kB ± 0% 1.35kB ± 0% -0.21% (p=0.001 n=7+7)
ParseAndWrite-4 269kB ± 0% 269kB ± 1% ~ (p=0.902 n=7+7)
ReuseTag-4 2.29kB ± 0% 2.29kB ± 0% ~ (all equal)
WriteBytesSize-4 10.0B ± 0% 10.0B ± 0% ~ (all equal)
ParseSize-4 0.00B 0.00B ~ (all equal)
name old allocs/op new allocs/op delta
ParseAllFrames-4 98.6 ± 1% 95.4 ± 1% -3.19% (p=0.001 n=7+7)
ParseArtistAndTitle-4 17.0 ±12% 16.7 ±14% ~ (p=0.848 n=7+7)
AddTextFrame-4 5.00 ± 0% 5.00 ± 0% ~ (all equal)
AddEncodedTextFrame-4 20.0 ± 0% 20.0 ± 0% ~ (all equal)
ParseAndWrite-4 103 ± 0% 98 ± 1% -4.44% (p=0.000 n=6+7)
ReuseTag-4 20.0 ± 0% 20.0 ± 0% ~ (all equal)
WriteBytesSize-4 0.00 0.00 ~ (all equal)
ParseSize-4 0.00 0.00 ~ (all equal)
0.12
- Add full encoding conversion support. More in README #27
- Get rid of subpackages. Now id3v2 is only one flat package!
- Restore 32bit systems support #28
- Major performance improvement by parsing with set Options.ParseFrames 2378552
- Performance compared to v0.11:
name old time/op new time/op delta
ParseAllFrames-4 219µs ± 1% 222µs ± 2% ~ (p=0.051 n=7+6)
ParseArtistAndTitle-4 66.3µs ± 2% 18.9µs ±23% -71.51% (p=0.001 n=7+7)
ParseAndWrite-4 10.2ms ± 7% 10.2ms ± 3% ~ (p=0.805 n=7+7)
ReuseTag-4 3.13µs ± 1% 3.33µs ± 1% +6.35% (p=0.001 n=6+7)
name old alloc/op new alloc/op delta
ParseAllFrames-4 525kB ± 0% 525kB ± 0% +0.08% (p=0.001 n=7+7)
ParseArtistAndTitle-4 763B ± 0% 810B ± 1% +6.14% (p=0.001 n=7+7)
ParseAndWrite-4 267kB ± 0% 267kB ± 0% +0.30% (p=0.007 n=7+7)
ReuseTag-4 2.16kB ± 0% 2.29kB ± 0% +5.93% (p=0.001 n=7+7)
name old allocs/op new allocs/op delta
ParseAllFrames-4 95.6 ± 1% 96.0 ± 0% ~ (p=0.192 n=7+7)
ParseArtistAndTitle-4 25.0 ± 0% 17.0 ±12% -32.00% (p=0.001 n=7+7)
ParseAndWrite-4 101 ± 1% 102 ± 0% +0.71% (p=0.021 n=7+7)
ReuseTag-4 20.0 ± 0% 20.0 ± 0% ~ (all equal)
0.11
- Rename all encodings. E.g.
ENISO
→EncodingISO
- Add
NewEmptyTag
constructor. Thanks to @corneldamian! #22 - Return compatibility with old versions of Go. Thanks to @mro for report! #25
- Fix race condition in
util.FormSize
d911cfa - Add
tag.Reset
function 2ccdfea - Performance compared to v0.10:
name old time/op new time/op delta
ParseAllFrames-4 201µs ± 1% 212µs ± 2% +5.44% (p=0.001 n=6+7)
ParseArtistAndTitle-4 76.9µs ± 4% 56.9µs ± 2% -25.97% (p=0.001 n=7+7)
ParseAndWrite-4 10.1ms ± 1% 10.2ms ± 4% +0.68% (p=0.945 n=6+7)
name old alloc/op new alloc/op delta
ParseAllFrames-4 526kB ± 0% 525kB ± 0% -0.32% (p=0.001 n=7+7)
ParseArtistAndTitle-4 683B ± 0% 716B ± 0% +4.75% (p=0.001 n=7+7)
ParseAndWrite-4 299kB ± 0% 267kB ± 0% -10.65% (p=0.001 n=7+7)
name old allocs/op new allocs/op delta
ParseAllFrames-4 95.0 ± 0% 95.0 ± 0% ~ (all equal)
ParseArtistAndTitle-4 24.0 ± 0% 25.0 ± 0% +4.17% (p=0.001 n=7+7)
ParseAndWrite-4 101 ± 1% 102 ± 1% +0.99% (p=0.012 n=7+7)
0.10
0.9
I'm glad to introduce new minor release of id3v2! There is new feature, what is very useful for high-performance tag parsing. And it is id3v2.Options! You can specify, which frames do you want to parse, so id3v2 will not spend time and resources of your computer to parse frames, that you don't need. Or maybe you don't want to parse tags at all, when you can tag, err := id3v2.Open("file.mp3", id3v2.Options{Parse: false})
and that's it!
Also I made possible id3v2 to use in multiple goroutines! Earlier id3v2 had some global elements, so the usage of id3v2 in concurrent programs wasn't possible because of data races to these global elements.
0.8.10
Many memory consumption reduces. I can't attach benchcmp, because I also updated benchmark code to make them more honest, so the results are strongly different. Code of benchmarks is here. Here is benchmark results on my PC (MacBook Air 13" 2014 / 1,4 GHz Intel Core i5 / 4 GB 1600 MHz DDR3):
BenchmarkParseAllFrames-4 10000 252955 ns/op 525784 B/op 94 allocs/op
BenchmarkParseAndWriteCommonCase-4 200 9974345 ns/op 296208 B/op 61 allocs/op
BenchmarkParseAndWriteManyFrames-4 100 10037205 ns/op 297792 B/op 99 allocs/op
0.8.9
- Memory consumption and parsing performance improvements:
benchmark old ns/op new ns/op delta
BenchmarkParseAllFrames-4 226969 203528 -10.33%
BenchmarkParseAndWriteCommonCase-4 10028518 10054538 +0.26%
BenchmarkParseAndWriteManyFrames-4 10130233 10911758 +7.71%
benchmark old allocs new allocs delta
BenchmarkParseAllFrames-4 125 107 -14.40%
BenchmarkParseAndWriteCommonCase-4 89 84 -5.62%
BenchmarkParseAndWriteManyFrames-4 147 134 -8.84%
benchmark old bytes new bytes delta
BenchmarkParseAllFrames-4 546643 528189 -3.38%
BenchmarkParseAndWriteCommonCase-4 420651 414435 -1.48%
BenchmarkParseAndWriteManyFrames-4 434129 419882 -3.28%
- Remove
Body
method fromFramer