问题标签 [id3v2]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
flash - 如何确定图像埋藏在 ID3v2 标记中的哪个位置?
我正在尝试从 mp3 中加载 jpg(我在 Flash 中执行此操作,但这既不是这里也不是那里),我已经在十六进制编辑器中打开了一些 MP3,而标签的其余部分是很清楚,图像部分是一个谜。有一个标签“image/jpeg”,但随后我期望图像的字节长度或用于划分图像结尾的字符串键,但我什么也没看到,标签上的文档完全没有帮助。
希望得到一些关于我在这里寻找的指导。惊讶于结果是多么不直观!
TIA
php - 针对 mp3 文件中的 ID3v2 不同步方案的正则表达式?
我正在创建一段代码来检查我服务器上的 mp3 文件并获得结果,其中一些是否有错误同步。简而言之,我使用fread()函数在 PHP 中加载这些文件并获取变量中的流。在拆分该流以获得 id3v1 (不是必需的,它不是同步的主题)、id3v2 (主要问题)和音频的单独流之后,我必须针对 id3v2 流实现该方案。
根据ID3v2 官方文档:
“非同步方案”的唯一目的是使 ID3v2 标签尽可能与现有软件兼容。如果文件仅由新软件处理,则“不同步”标签没有用处。只能对 MPEG 2 层 I、II 和 III 以及 MPEG 2.5 文件进行不同步。
只要在标签中发现错误同步,就会在第一个错误同步字节之后插入一个零字节。ID3 编码器应更改的正确同步格式如下:
%11111111 111xxxxx
并且应该替换为:
%11111111 00000000 111xxxx
这具有必须更改所有 $FF 00 组合的副作用,因此它们不会受到解码过程的影响。因此,在不同步期间,所有 $FF 00 组合都必须替换为 $FF 00 00 组合。
为了指示不同步的使用,应该设置“ID3 flags”中的第一位(注意:我找到了那个位)。仅当标签包含现已更正的错误同步时,才应设置该位。仅当标签不包含任何错误同步时,该位才应被清除。
请记住,如果编码器使用压缩方案,则应在之后应用非同步方案。解码压缩的“未同步”文件时,应首先解析“未同步方案”,然后解压缩。
我的问题是:
- 如何搜索和替换这个位
%11111111 111xxxxx
模式%11111111 00000000 111xxxxx
? - 反之亦然,如何搜索和替换这个位
%11111111 00000000 111xxxxx
模式%11111111 111xxxxx
?
...使用preg_replace()。
到目前为止,我创建的代码运行良好,而且我只多了一行(嗯,正好两行)。
如何使用 preg_replace() 函数使这两行起作用?
PS我知道如何在某种循环中逐个字节地读取它,但我确信这可以使用正则表达式(顺便说一句,老实说,我很喜欢正则表达式)。
如果您需要更多详细信息,请告诉我。
还有一件事...
目前我正在使用这种模式
切断从第一个零字节开始直到结束的部分字符串。这是这样做的正确方法吗?
更新
(@mario 的回答)。
在前几次测试中……这段代码返回了正确的结果。
但是几分钟后,我发现了一个特定的情况,即一切看起来都像预期的结果,但流中仍然有 FFE0+ 对。
如果流包含类似的FF FF FF FF
内容,它将被替换为FF 00 FF FF 00 FF
,但它应该是FF 00 FF 00 FF 00 FF
。该FF FF
对将再次错误 mp3 同步,因此我的任务是避免FFE0+
音频流之前的每个模式(在 ID3v2 标记流中;因为 mp3 以FFE0+
字节对开头,它应该首先出现在音频数据的开头)。我发现我可以循环相同的正则表达式,直到我得到没有 FFE0+ 字节对的流。有没有不需要循环的解决方案?
干得好@mario,非常感谢!
c - 如何获得 ID3v2 标头的必要值?
我正在尝试读取 mp3 文件的 ID3V2 标头。我可以获取/打印 ID3 并想打印出 char 类型的“版本”和“颠覆”,但我无法得到我需要的东西。
这是代码:
一个。
c# - 解码长 ID3V2 帧
因此,我正在编写一个有趣的程序来收集存储在 ID3 标签中的 MP3 信息。(ID3v1 是微不足道的,这很麻烦!)
我使用的一般过程是读取 FrameID(4 个字节),然后是 Length(4 个字节),然后是 Data(Length Bytes)。
读取 Length 时,它是一个 Syncsafe 整数,所以本质上每个字节中的最高位应该是 0。这对于小数据帧来说似乎很好,但是当它们变长时,偶尔我会遇到长度中的一个字节最高位为 1 的字段。按照 ID3 规范的约定,我应该忽略此位,但这样做会导致算法搞砸,只能得到部分标签。
特别是标签的frhed转储:
此时,长度是$00 00 00 c6,作为 BigEndian int 是198,这在技术上是这里标签的长度。但是,二进制的c6是11000110。同步安全算法核对了第一位,然后计数变为70,这是不正确的。我已经让 Winamp 2.95 和 iTunes 10 用帧长度来做到这一点。我不明白。是否存在我应该寻找同步安全整数的条件,或者在阅读这些帧时保持原样?
源代码:
运行此示例后 i 和 j 的值分别为 198 和 70。
这是完整的标头(fhed 转储,它稍微进入 MP3 标头的开头):
c - 如何读取 id3v2 的帧?
我正在尝试阅读 id3 帧,但我的问题是我无法获得完整的标题。当 mp3 的标题很长时,我的结果是没有结尾且没有前 9 个字符的字符串。如果歌曲的标题很短,我的结果是没有前 9 个字符的标题。
java - 使用 jid3lib 将 Unicode 读/写到 ID3v2
我正在尝试使用 jid3lib 编写一个应用程序,并且在读/写 id3v1 方面几乎所有东西都可以工作,但是对于 v2 unicode,我无法找出将 unicode 转换为可用字符串然后重新编码的最佳操作过程写回框架。
我找到了 CharsetDecoder 和 CharsetEncoder 但它们似乎没有改变任何东西。
其中 convertCharset 是:
输出如下:http: //i.stack.imgur.com/RLbKe.png
非常感谢您的帮助。
windows-phone-7 - 覆盖 Windows Phone 7 中音频文件的元数据
我很想为我的音乐播放器提供一个修复元数据功能,但据我所知,没有库可以做到这一点。但是我发现一些 C# 应用程序可以做到这一点。
我需要一些建议,并且可能是一个很好的资源来开始这个项目。任何帮助将不胜感激。
谢谢。
编辑:我也发现了这个,这与我想做的非常相似,但是来源很少。 http://wmpoweruser.com/finally-mp3-tag-editor-for-windows-mobile-available/
php - PHP将变量更改为jpeg文件
我有以下代码使用 getid3 获取 mp3 的专辑封面,但问题是,如何复制此图像并将其放入指定目录?
这可能吗,如果是的话怎么办?谢谢你的帮助 :)
mp3 - 使用 TagLib 从 MP3 文件中提取 GUID
所以,我的最终游戏是从我的音频文件中获取专辑封面。我正在使用 taglib 和 c++。我找到了有关如何提取嵌入图像数据的信息,但似乎 windows 媒体播放器没有嵌入图像本身。相反,它会保存一个名为 AlbumArt_{E3208100-4FAA-4030-BB9D-6DA5F9D93D18}_Large.jpg 之类的 jpg。显然它使用的是 guid,我相信它保存在 PRIV 标签中。我对你们的问题是我怎么能得到它?我认为这样的事情可能会奏效:
但数据似乎没有任何用处。有任何想法吗?
c++ - 为什么同步安全整数?
我最近正在研究 ID3v2.4.0。阅读 2.4.0 文档,我发现了一个我无法理解的特定部分 - 同步安全整数。ID3v2为什么要用这种方式?
当然,我知道为什么 ID3v2 使用非同步方案,该方案用于防止 MPEG 解码器将 ID3 标签视为 MPEG 同步数据。但我无法理解的是,为什么同步安全整数而不是非同步方案(= 插入 00 美元)。
在表达标签大小而不是插入 $00 时,他们有什么理由采用同步安全整数?这两种方法产生完全相同的效果。
ID3v2 文档说未同步数据的大小是事先不知道的。但这种说法没有意义。如果标记数据存储在缓冲区中,只需将有问题的字符替换为 $FF 00 即可知道未同步数据的大小。
有谁能帮助我吗?