mp3tagID3V1read.rb
#!/usr/bin/ruby
if ARGV.size() == 0 then
print "need an argument."
else
if File.exist?(ARGV[0]) then
stat = File.stat(ARGV[0])
a = File.binread(ARGV[0], 128, stat.size-128)
if (a[0..2]=="TAG") then
title = a[ 3..32].force_encoding("Shift_JIS").rstrip
artist = a[33..62].force_encoding("Shift_JIS").rstrip
album = a[63..92].force_encoding("Shift_JIS").rstrip
yearStr = a[93..96].rstrip
trackMark = a[125]
genreNo = a[127]
if trackMark == "\0" then
# track info exists
comment = a[97..124].force_encoding("Shift_JIS").rstrip
trackNo = (a[126].bytes)[0].to_s
else
comment = a[97..126].force_encoding("Shift_JIS").rstrip
trackNo = ""
end
print "track : <" + trackNo + ">\n"
print "album : <" + album + ">\n"
print "artist: <" + artist + ">\n"
print "title : <" + title + ">\n"
print "year : <" + yearStr + ">\n"
print "comment: <" + comment +">\n"
end
end
end
I wrote Ruby after a long time.
The type of data obtained by binread
is not an array, but ASCII-8BIT
encoding string
, which is complicated.
However, the ease of writing and viewing the subscripts is good. If you get used to this, it will become dull to cut out with Substring
.
OS : Windows 10 Ruby 2.6.5 (C:\Ruby26-x64\bin\ruby.exe)
-IO.binread (Ruby 3.0.0 Reference Manual) -String # force_encoding (Ruby 3.0.0 Reference Manual) -String # bytes (Ruby 3.0.0 Reference Manual) --Read mp3 tags (ID3v1, ID3v2) (no library used) --Qiita
Recommended Posts