WPF C#,从音频文件中获取信息

Posted

技术标签:

【中文标题】WPF C#,从音频文件中获取信息【英文标题】:WPF C#, Get informations from audio file 【发布时间】:2011-04-25 20:02:34 【问题描述】:

喂! 我想从 C# (wpf) 中的音频文件(标题、艺术家等)中获取一些信息。 MediaElement 没有提供这个选项,所以我使用了这段代码(直接读取字节):

public string[] GetAudioFileInfo(string path)
    
        path = Uri.UnescapeDataString(path);

        byte[] b = new byte[128];
        string[] infos = new string[5]; //Title; Singer; Album; Year; Comm;
        bool isSet = false;

        //Read bytes
        try
        
            FileStream fs = new FileStream(path, FileMode.Open);
            fs.Seek(-128, SeekOrigin.End);
            fs.Read(b, 0, 128);
            //Set flag
            String sFlag = System.Text.Encoding.Default.GetString(b, 0, 3);
            if (sFlag.CompareTo("TAG") == 0) isSet = true;

            if (isSet)
            
                infos[0] = System.Text.Encoding.Default.GetString(b, 3, 30); //Title
                infos[1] = System.Text.Encoding.Default.GetString(b, 33, 30); //Singer
                infos[2] = System.Text.Encoding.Default.GetString(b, 63, 30); //Album
                infos[3] = System.Text.Encoding.Default.GetString(b, 93, 4); //Year
                infos[4] = System.Text.Encoding.Default.GetString(b, 97, 30); //Comm
            
            fs.Close();
            fs.Dispose();
        
        catch (IOException ex)
        
            MessageBox.Show(ex.Message);
        

        return infos;
    

此代码的问题是,有时它没有给出完整的标题或只表示小立方体。 (如果我在 MeidaPlayer 中打开媒体,我可以看到完整的标题) 我不确定 GetString(byte[],int,int) 的参数,可能我在那里出错。

在我的计划中: 在媒体播放器中:

【问题讨论】:

什么文件格式?您从哪里获得在 GetString 调用中使用的数字? mp3 和 wav。我尝试了几次不同的值,但超过这个值我得到了立方体。 【参考方案1】:

您正在阅读ID3v1 header,它将标题限制为 30 个字符。此外,任何比这更短的内容都用空格或零填充,后者转换为您看到的框。您需要使用以下方法将其剥离:

myString = myString.Replace("\0", "")

媒体播放器可能正在读取 ID3v1 扩展标签,该标签位于您正在阅读的标题之前。有关更多信息,请参阅上面的链接。但实际上是您正在读取的 128 个字节之前的 227 个字节。

在扩展标题中,标题(和其他)限制为 60 个字符,而不是 30 个。

【讨论】:

以上是关于WPF C#,从音频文件中获取信息的主要内容,如果未能解决你的问题,请参考以下文章

如何从 WPF 中网格内的标签中获取行和列信息?

从音频文件C#中提取信息

获取父用户控件WPF C#的名称

如何在可可中获取音频文件的比特率

从数组中的音频字节获取音高或幅度等信息

如何从 C# 中的文件中获取元数据? [复制]