mirror of
https://github.com/claunia/cuetools.net.git
synced 2025-12-16 18:14:25 +00:00
172 lines
6.6 KiB
C#
172 lines
6.6 KiB
C#
|
|
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 ();
|
||
|
|
}
|
||
|
|
}
|