Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Čtečka tagů hudby ve VB.NET

Imports TagLib
Imports Gnome.Vfs

Public Class ReadFromUri
	Public Shared Sub Write(name As String, value As Object)
		Console.WriteLine("{0,20}: {1}", name, If(value Is Nothing, "", value))
	End Sub

	Public Shared Sub Write(name As String, values As String())
		Console.WriteLine("{0,20}: {1}", name, If(values Is Nothing, "", [String].Join(vbLf & "            ", values)))
	End Sub

	Public Shared Sub Main(args As String())
		If args.Length = 0 Then
			Console.[Error].WriteLine("USAGE: mono ReadFromUri.exe PATH [...]")
			Return
		End If

		Gnome.Vfs.Vfs.Initialize()

		Dim start As DateTime = DateTime.Now
		Dim songs_read As Integer = 0
		Try
			For Each path As String In args
				Dim uri As String = path
				Console.WriteLine(uri)
				Dim file As TagLib.File = Nothing

				Try
					Dim file_info As New System.IO.FileInfo(uri)
					uri = Gnome.Vfs.Uri.GetUriFromLocalPath(file_info.FullName)
				Catch
				End Try

				Try
					file = TagLib.File.Create(New VfsFileAbstraction(uri))
				Catch generatedExceptionName As TagLib.UnsupportedFormatException
					Console.WriteLine("UNSUPPORTED FILE: " & uri)
					Console.WriteLine([String].Empty)
					Console.WriteLine("---------------------------------------")
					Console.WriteLine([String].Empty)
					Continue Try
				End Try

				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:" & vbLf + file.Tag.Lyrics & vbLf)

				Console.WriteLine("Media Types:     " + file.Properties.MediaTypes & vbLf)

				For Each codec As TagLib.ICodec In file.Properties.Codecs
					Dim acodec As TagLib.IAudioCodec = TryCast(codec, TagLib.IAudioCodec)
					Dim vcodec As TagLib.IVideoCodec = TryCast(codec, TagLib.IVideoCodec)

					If acodec IsNot Nothing AndAlso (acodec.MediaTypes And TagLib.MediaTypes.Audio) <> TagLib.MediaTypes.None Then
						Console.WriteLine("Audio Properties : " + acodec.Description)
						Console.WriteLine("Bitrate:    " + acodec.AudioBitrate)
						Console.WriteLine("SampleRate: " + acodec.AudioSampleRate)
						Console.WriteLine("Channels:   " + acodec.AudioChannels & vbLf)
					End If

					If vcodec IsNot Nothing AndAlso (vcodec.MediaTypes And TagLib.MediaTypes.Video) <> TagLib.MediaTypes.None Then
						Console.WriteLine("Video Properties : " + vcodec.Description)
						Console.WriteLine("Width:      " + vcodec.VideoWidth)
						Console.WriteLine("Height:     " + vcodec.VideoHeight & vbLf)
					End If
				Next

				If file.Properties.MediaTypes <> TagLib.MediaTypes.None Then
					Console.WriteLine("Length:     " + file.Properties.Duration & vbLf)
				End If

				Dim pictures As IPicture() = file.Tag.Pictures

				Console.WriteLine("Embedded Pictures: " + pictures.Length)

				For Each picture As IPicture In pictures
					Console.WriteLine(picture.Description)
					Console.WriteLine("   MimeType: " + picture.MimeType)
					Console.WriteLine("   Size:     " + picture.Data.Count)
					Console.WriteLine("   Type:     " + picture.Type)
				Next

				Console.WriteLine([String].Empty)
				Console.WriteLine("---------------------------------------")
				Console.WriteLine([String].Empty)

				songs_read += 1
			Next
		Finally
			Gnome.Vfs.Vfs.Shutdown()
		End Try

		Dim [end] As DateTime = DateTime.Now

		Console.WriteLine("Total running time:    " & ([end] - start))
		Console.WriteLine("Total files read:      " & songs_read)

		If songs_read > 0 Then
			Console.WriteLine("Average time per file: " & Convert.ToString(New TimeSpan(([end] - start).Ticks \ songs_read)))
		End If
	End Sub
End Class

Public Class VfsFileAbstraction
	Implements TagLib.File.IFileAbstraction
	Private m_name As String

	Public Sub New(file As String)
		m_name = file
	End Sub

	Public ReadOnly Property Name() As String
		Get
			Return m_name
		End Get
	End Property

	Public ReadOnly Property ReadStream() As System.IO.Stream
		Get
			Return New VfsStream(Name, System.IO.FileMode.Open)
		End Get
	End Property

	Public ReadOnly Property WriteStream() As System.IO.Stream
		Get
			Return New VfsStream(Name, System.IO.FileMode.Open)
		End Get
	End Property

	Public Sub CloseStream(stream As System.IO.Stream)
		stream.Close()
	End Sub
End Class

Reakce na odpověď

1 Zadajte svou přezdívku:
2 Napište svou odpověď:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět do poradny