gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:18:27 24 4
gpt4 key购买 nike

嗨!
我想从 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) 的参数,也许我在那里犯了错误。

在我的程序中:This is the result
在媒体播放器中:enter image description here

最佳答案

您正在阅读 ID3v1 header ,将标题限制为 30 个字符。此外,任何比它短的东西都会用空格或零填充,后者会转化为您看到的方框。您需要使用类似的方法将它们剥离:

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

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

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

关于c# - WPF C#,从音频文件中获取信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5782642/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com