音楽ファイルのタグ フィールドを設定する汎用関数をコーディングしたいのですが、「TagLib Sharp 」ライブラリを使用しています。「 TagLib Sharp Helper Class」と名づけられるものをコーディングしようとしています。
プロシージャを呼び出すには、次のような構文を使用してフィールド「Album」を設定します。
TagLibSharp.Set_Tag_And_Save( _
"C:\Test.mp3", _
Function() TagLib.File.Create("").Tag.Album, _
"Test album name" _
)
問題は、プロシージャ内のラムダ式をどうすればよいかわかりません...
すべてのコードは次のとおりです (問題がどこにあるかを説明するコメント行に注意してください)。
#Region " TagLib Sharp "
Public Class TagLibSharp
''' <summary>
''' Stores the Taglib object.
''' </summary>
Private Shared TagFile As TagLib.File = Nothing
''' <summary>
''' Sets a Tag field and saves the file changes.
''' </summary>
Public Shared Sub Set_Tag_And_Save(ByVal File As String, _
ByVal Field As Linq.Expressions.Expression(Of Func(Of Object)), _
ByVal Value As String)
TagFile = TagLib.File.Create(File)
Dim member As Linq.Expressions.MemberExpression = _
If(TypeOf Field.Body Is Linq.Expressions.UnaryExpression, _
DirectCast(DirectCast(Field.Body, Linq.Expressions.UnaryExpression).Operand, Linq.Expressions.MemberExpression), _
DirectCast(Field.Body, Linq.Expressions.MemberExpression))
MsgBox(member.Member.Name) ' Result: "Album"
' member.Member = Value ' Here is where I don't know what to do
'
' This would be the ewuivalent:
TagFile.Tag.Album = Value
TagFile.Save()
End Sub
End Class
#End Region
アップデート
Ben Allred ソリューションの手順に従って問題を解決しようとすると、例外が発生します。
TagLibSharp.Set_Tag_And_Save("c:\1.mp3", Function() TagLib.File.Create("").Tag.Album = "Test album name")
変更されたサブ:
Public Shared Sub Set_Tag_And_Save(ByVal File As String, _
ByVal FieldSetter As Action(Of TagLib.File))
TagFile = TagLib.File.Create(File)
FieldSetter(TagFile) ' Here throws an exception with this message: "taglib/"
' FieldSetter(TagLib.File.Create(File)) ' The same exception with this one.
TagFile.Save()
End Sub
更新 2:
例外は発生しませんが、タグ フィールドが設定されていません。
TagLibSharp.Set_Tag_And_Save("c:\Test.mp3", Function(tagLibFile) tagLibFile.Tag.Title = "Test title name")
変更されたサブ:
Public Shared Sub Set_Tag_And_Save(ByVal File As String, _
ByVal FieldSetter As Action(Of TagLib.File))
TagFile = TagLib.File.Create(File)
MsgBox(TagFile.Tag.Title) ' Result: Unbreakeable
FieldSetter(TagFile)
MsgBox(TagFile.Tag.Title) ' Result: Unbreakeable
' TagFile.Tag.Title = "Test title name"
' MsgBox(TagFile.Tag.Title) ' Result: "Test title name"
TagFile.Save()
End Sub