我做了个音乐播放和管理软件,其中涉及到对音乐信息的处理。对于MP3,我已经能够处理其曲名,艺术家,专辑,年代等信息了(即ID3 TAG),但WMA似乎和MP3很不一样,找不到合适的方法。所以在这里提出此问题,我相信这里高手如云的环境一定可以解决的。
具体要求和简单,就是在VB中读取和写入WMA的那些信息即可。(曲名,艺术家,专辑,年代等)。如果有第三方控件能实现,也可以!
为这个问题我可头痛了很久了,感谢大家帮助!:)

解决方案 »

  1.   

    正规点的方法就是根据文件格式写不过,也可以用wmp.dll来实现,现在没时间了,晚上再说
      

  2.   

    '首先引用 Windows Media Player,注意,对应的文件名为wmp.dll
    '在窗体上添加一个按钮,一个listbox
    Private Sub Command1_Click()
        Dim media As WMPLib.IWMPMedia
        Dim mMediaPlayer As New WindowsMediaPlayer
        Dim mfile As String, i As Long, s As String
        Dim AttributeName As String, attributeCount As Long
        mfile = "e:\media\music.wma"
        Set media = mMediaPlayer.newMedia(mfile)
        attributeCount = media.attributeCount
        For i = 0 To attributeCount - 1
            AttributeName = media.getAttributeName(i)
            s = media.getItemInfo(AttributeName)
            List1.AddItem AttributeName + "=" + s
        Next
        Set media = Nothing
        Set mMediaPlayer = Nothing
    End Sub
      

  3.   

    MP3的读/写,倒是非常容易!就是WMA的读解决方法,多些,写就...麻烦多了..呵呵,WMA的格式好复杂!我找了好多资料,都没好好的找着!
      

  4.   

    see the MetadataEdit sample in Windows Media Format SDK
    http://msdn.microsoft.com/library/en-us/wmform95/htm/workingwithmetadata.asp
      

  5.   

    Windows Media Format SDK 这个有没有翻译过来的啊,E文不好难道就使用不了?这个方面BS一下微软,这个方面做的不如JAVA了
      

  6.   

    我试了试,用暴风雨的方法,即调用WMP.DLL也可以方便的更改信息。下面简单说一下:这里只改曲目名(Title属性),根据几次读取实验,Title熟悉的索引为28,故只要修改第28项即可(不过代码我用了INPUTBOX来取得任意的索引,你可以更改其它项目,默认为28)。下面在暴风雨的方法的基础上再添加一个按钮command2,还有两个文本框text1和txtTitle,代码如下:
    【注意:这里索引都是以0为起点的。另外,并非所有属性都可以改!】Private Sub Command2_Click() '修改信息
    Dim Media As WMPLib.IWMPMedia
    Dim mMediaPlayer As New WindowsMediaPlayer
    Dim i As Long, s As String, Itemname As String, mFile As String
    s = txtTitle.Text '设置的新title值
    '下面输入要更改的项目索引。第28项属性是WMA的TITLE,即曲目名称
    i = Val(InputBox("Enter the index for the attribute:", , 28))
    If i = 0 Then Exit Sub
    mFile = Text1.Text '设置wma文件路径
    Set Media = mMediaPlayer.newMedia(mFile)
    If Trim(s) = "" Then Exit Sub
    Itemname = Media.getAttributeName(i) '取得第28项属性的Itemname,因为下面必须用它才能更改
    Media.setItemInfo Itemname, s '根据上面的Itemname和新的曲目s来更改
    Set Media = Nothing
    Set mMediaPlayer = Nothing
    End Sub依照这种原理,对WMA的信息读取和写入都很简单了。不过,这里依赖着WMP.DLL,虽然WMP被微软捆绑再系统里,我们也不能保障每台机器上都有它的存在,如果要将它加入自己的程序安装包,那它4、5MB的体积确实有点...所以还是不很灵活。所以,问题还是没有完全解决,希望哪位知道如何按照文件格式写入wma信息的大侠给予指点!谢谢!PS.我也看了看那个MSDN信息,又多又难懂,我还只是个刚刚跨入大学校门的FRESHMAN,要把那些专业资料啃懂恐怕即使是中文的也很难...唉
      

  7.   

    //依照这种原理,对WMA的信息读取和写入都很简单了。晕,简单什么呀(当然你只改title之类的例外),你是使用setItemInfo进行修改,而有些属性是只读的(可用用Media.isReadOnlyItem判断),至少微软的SDK不会允许你修改版权之类的信息的,所以我建议你根据文件格式写(而不是根据SDK),虽然麻烦了点,但不受微软的限制
      

  8.   

    WMA或WMV文件,它们同属ASF格式,可以参考:
    http://dev.csdn.net/develop/article/68/68439.shtm