Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何确定mp3文件的长度';s头球?_C#_Mp3_Id3 - Fatal编程技术网

C# 如何确定mp3文件的长度';s头球?

C# 如何确定mp3文件的长度';s头球?,c#,mp3,id3,C#,Mp3,Id3,我正在为diff编写一个程序,并根据两端的更改复制整个文件或片段(Rsync风格…但更像Unison)。其主要思想是在多个位置保持我的音乐文件夹(所有MP3)最新 我想发送分段更新,如果只有一小部分的文件已更改,而不是复制整个文件。为此,我需要一种区分文件段的方法 我最初尝试为每个文件的块生成散列(每n个字节我将散列该段)。我注意到,当我更改一个属性(mp3上的id3v2标记)时,所有散列块都会更改。这是有道理的,因为我猜标题在获取新信息时正在增长 这就引出了我真正的问题。我想知道如何确定mp3

我正在为diff编写一个程序,并根据两端的更改复制整个文件或片段(Rsync风格…但更像Unison)。其主要思想是在多个位置保持我的音乐文件夹(所有MP3)最新

我想发送分段更新,如果只有一小部分的文件已更改,而不是复制整个文件。为此,我需要一种区分文件段的方法

我最初尝试为每个文件的块生成散列(每n个字节我将散列该段)。我注意到,当我更改一个属性(mp3上的id3v2标记)时,所有散列块都会更改。这是有道理的,因为我猜标题在获取新信息时正在增长

这就引出了我真正的问题。我想知道如何确定mp3头的长度,这样我就可以创建两个可比较的散列

1) 文件的元信息(头)

2) 带音频的实际mpeg流(如果我所做的只是更改标记信息,则此哈希应保持不变)

我还缺什么吗

谢谢


Ty

如果要确定标题信息,您可以:

  • a) 需要使用可以为您进行解析的mp3库,或者
  • b) 转到并根据需要解析它

如果您只想检查id3v2标签的长度,那么您可以在上找到有关其结构的信息


如果读取前3个字节,并且它们等于“ID3”,则跳到第7个字节,然后读取标题大小。不过要小心,因为大小存储为“synchsafe整数”。

我最后使用了TagLibSharp。developer.novell.com/wiki/index.php/TagLib_Sharp

您考虑过使用二进制diff实用程序/库吗?我最后使用了TagLibSharp。