Android 架构或 API 中是不是存在阻止人们创建读取嵌入歌词的 MP3 播放器的东西?

Posted

技术标签:

【中文标题】Android 架构或 API 中是不是存在阻止人们创建读取嵌入歌词的 MP3 播放器的东西?【英文标题】:Is there something in the Android architecture or API that prevents people from creating MP3 players that read embedded lyrics?Android 架构或 API 中是否存在阻止人们创建读取嵌入歌词的 MP3 播放器的东西? 【发布时间】:2010-11-24 20:14:14 【问题描述】:

当我在 iPod Touch 上播放某些 MP3 文件(例如 JapanesePod101.com 的课程)时,嵌入在 MP3 文件中的歌词或脚本会显示在媒体播放器中。我相信,歌词在 MP3 元数据中存储为 ID3/ID4 标签。

我发现这是一个非常有用的功能,而且我相信我并不孤单。尽管如此,我从市场上下载的股票 android 媒体播放器和任何其他媒体播放器似乎都不支持这一点。我只是找不到任何方法来获得我的 Nexus One 的功能。

这个功能对我来说非常重要,我正在考虑学习 Android 开发,这样我就可以编写一个简单的媒体播放器来显示嵌入的歌词或注释。然而,似乎没有其他人这样做的事实让我想知道——这甚至可能吗? Android 架构或 API 中是否存在一些问题,导致难以或无法从 MP3 文件中读取和显示歌词信息?我不想深入学习过程并找出我的意思瞄准不容易。 (我的意思是,如果一切都失败了,我假设我可以编写自己的 MP3 解码器,但这比我现在愿意经历的麻烦更大。

我已经在Android Enthusiasts Stack Exchange Beta Site 上问过这个问题,但回想起来,我认为这更像是一个编程问题,并决定在这里问更好。

【问题讨论】:

不,没有技术限制。 【参考方案1】:

是的,肯定更多的是编程问题。仅从我阅读 ID3 规范的简要经验来看,我认为可能只是解码 ID3 标签是一个完整的 PITA。我确信可以做到,因为有适用于 Android 的 MP3 标签编辑应用程序(是否支持歌词,我不知道)。

ID3v2.3 似乎通过标头的 SYLT 和 USLT 帧支持同步和非同步歌词。我想这只是一个未被充分利用的功能,以至于大多数人不值得为此付出努力。购买的 MP3 不携带此信息(我一直想知道为什么不携带?),因此必须手动添加它们(或通过歌词服务 API 自动添加,但其中涉及更多编码)。

Here 是 ID3v2.3 规范,如果您想进一步研究...(放弃希望所有进入这里的人)

【讨论】:

【参考方案2】:

问题可能是大多数人会使用内置的mp3播放机制,这可能既不支持歌词显示,也不太容易与其他做歌词显示的东西保持同步。

所以可能需要编写一些东西来进行自己的 mp3 解码。

这很可能需要在本机代码中完成。另一方面,在 android 上,音频输出(除非你使用 opengl,视频显示)几乎必须从 java 完成。因此,您正在寻找大量工作来使用本机库解码数据,然后将其分派以从 java 播放和显示。

所以回答你的问题 - 有可能吗?绝对

android API 让这件事变得简单吗? - 不是真的

【讨论】:

是的,总结得差不多了。 :( 做很多工作,但可能的。【参考方案3】:

我刚刚添加了一个新功能请求,该请求将使 Android 支持读取 ID3 标记中的 USLT。这将使本地和第 3 方音乐播放器能够显示歌词。如果您想要此功能,请在下面的请求中加注星标,然后发布您的 cmets。

http://code.google.com/p/android/issues/detail?id=32547

【讨论】:

以上是关于Android 架构或 API 中是不是存在阻止人们创建读取嵌入歌词的 MP3 播放器的东西?的主要内容,如果未能解决你的问题,请参考以下文章

即使使用 Access-Control-Allow-Origin 也被 CORS 阻止的 API 调用:* 存在于标头中

微服务去中心化架构下为何还要用API网关

SecurityException - “调用者......不是范围委托阻止卸载的代表”(Android 8 - Java)

从 Play 商店中的不同帐户安装的应用程序未被 Android Management API 阻止

php开发api接口

谷歌钱包是不是提供 api 来在人与人之间汇款和/或批量支付?