Files
cuetools.net/taglib-sharp/examples/ReadFromUri.cs

172 lines
6.6 KiB
C#
Raw Normal View History

2012-04-13 23:27:50 +00:00
using System;
using TagLib;
using Gnome.Vfs;
public class ReadFromUri
{
public static void Write (string name, object value)
{
Console.WriteLine ("{0,20}: {1}",
name, value == null ? "" : value
);
}
public static void Write (string name, string [] values)
{
Console.WriteLine ("{0,20}: {1}",
name,
values == null ? "" : String.Join ("\n ", values)
);
}
public static void Main(string [] args)
{
if(args.Length == 0) {
Console.Error.WriteLine("USAGE: mono ReadFromUri.exe PATH [...]");
return;
}
Gnome.Vfs.Vfs.Initialize();
DateTime start = DateTime.Now;
int songs_read = 0;
try {
foreach (string path in args)
{
string uri = path;
Console.WriteLine (uri);
TagLib.File file = null;
try {
System.IO.FileInfo file_info = new System.IO.FileInfo(uri);
uri = Gnome.Vfs.Uri.GetUriFromLocalPath (file_info.FullName);
} catch {
}
try
{
file = TagLib.File.Create(new VfsFileAbstraction (uri));
}
catch (TagLib.UnsupportedFormatException)
{
Console.WriteLine ("UNSUPPORTED FILE: " + uri);
Console.WriteLine (String.Empty);
Console.WriteLine ("---------------------------------------");
Console.WriteLine (String.Empty);
continue;
}
Console.WriteLine("Tags on disk: " + file.TagTypesOnDisk);
Console.WriteLine("Tags in object: " + file.TagTypes);
Console.WriteLine (String.Empty);
Write ("Grouping", file.Tag.Grouping);
Write ("Title", file.Tag.Title);
Write ("TitleSort", file.Tag.TitleSort);
Write ("Album Artists", file.Tag.AlbumArtists);
Write ("Album Artists Sort", file.Tag.AlbumArtistsSort);
Write ("Performers", file.Tag.Performers);
Write ("Performers Sort", file.Tag.PerformersSort);
Write ("Composers", file.Tag.Composers);
Write ("Composers Sort", file.Tag.ComposersSort);
Write ("Conductor", file.Tag.Conductor);
Write ("Album", file.Tag.Album);
Write ("Album Sort", file.Tag.AlbumSort);
Write ("Comment", file.Tag.Comment);
Write ("Copyright", file.Tag.Copyright);
Write ("Genres", file.Tag.Genres);
Write ("BPM", file.Tag.BeatsPerMinute);
Write ("Year", file.Tag.Year);
Write ("Track", file.Tag.Track);
Write ("TrackCount", file.Tag.TrackCount);
Write ("Disc", file.Tag.Disc);
Write ("DiscCount", file.Tag.DiscCount);
Console.WriteLine("Lyrics:\n" + file.Tag.Lyrics + "\n");
Console.WriteLine("Media Types: " + file.Properties.MediaTypes + "\n");
foreach (TagLib.ICodec codec in file.Properties.Codecs)
{
TagLib.IAudioCodec acodec = codec as TagLib.IAudioCodec;
TagLib.IVideoCodec vcodec = codec as TagLib.IVideoCodec;
if (acodec != null && (acodec.MediaTypes & TagLib.MediaTypes.Audio) != TagLib.MediaTypes.None)
{
Console.WriteLine("Audio Properties : " + acodec.Description);
Console.WriteLine("Bitrate: " + acodec.AudioBitrate);
Console.WriteLine("SampleRate: " + acodec.AudioSampleRate);
Console.WriteLine("Channels: " + acodec.AudioChannels + "\n");
}
if (vcodec != null && (vcodec.MediaTypes & TagLib.MediaTypes.Video) != TagLib.MediaTypes.None)
{
Console.WriteLine("Video Properties : " + vcodec.Description);
Console.WriteLine("Width: " + vcodec.VideoWidth);
Console.WriteLine("Height: " + vcodec.VideoHeight + "\n");
}
}
if (file.Properties.MediaTypes != TagLib.MediaTypes.None)
Console.WriteLine("Length: " + file.Properties.Duration + "\n");
IPicture [] pictures = file.Tag.Pictures;
Console.WriteLine("Embedded Pictures: " + pictures.Length);
foreach(IPicture picture in pictures) {
Console.WriteLine(picture.Description);
Console.WriteLine(" MimeType: " + picture.MimeType);
Console.WriteLine(" Size: " + picture.Data.Count);
Console.WriteLine(" Type: " + picture.Type);
}
Console.WriteLine (String.Empty);
Console.WriteLine ("---------------------------------------");
Console.WriteLine (String.Empty);
songs_read ++;
}
} finally {
Gnome.Vfs.Vfs.Shutdown();
}
DateTime end = DateTime.Now;
Console.WriteLine ("Total running time: " + (end - start));
Console.WriteLine ("Total files read: " + songs_read);
if (songs_read > 0)
{
Console.WriteLine ("Average time per file: " + new TimeSpan ((end - start).Ticks / songs_read));
}
}
}
public class VfsFileAbstraction : TagLib.File.IFileAbstraction
{
private string name;
public VfsFileAbstraction(string file)
{
name = file;
}
public string Name {
get { return name; }
}
public System.IO.Stream ReadStream {
get { return new VfsStream(Name, System.IO.FileMode.Open); }
}
public System.IO.Stream WriteStream {
get { return new VfsStream(Name, System.IO.FileMode.Open); }
}
public void CloseStream (System.IO.Stream stream)
{
stream.Close ();
}
}