为什么这位开发者编写了一款快速且响应灵敏的音乐播放器

GogglesMM 的开发者和维护者分享了他创建开源音乐播放器的原因。
137 位读者喜欢这篇文章。
Record player with an LP spinning

Opensource.com

最近写道,“GogglesMM 一直是我最喜欢的播放器之一,已经有一段时间了。” 因此,当我在考虑采访构建和维护开源音乐播放器的开发者时,Sander Jansen 很快浮现在我的脑海中。Sander 是 Goggles Music Manager (GogglesMM) 的开发者和维护者,这是一款非常出色的开源音乐播放器,特别适合以非常透明的方式将音乐流从计算机传输到数模转换器 (DAC)。

在本系列的第一篇文章中,我采访了 Guyadeque 音乐播放器的创建者 Juan Rios;以下是我与 Sander 对话的编辑版本。

认识 GogglesMM 开发者 Sander Jansen

问:您为什么决定创建和维护开源音乐播放器?关于 GogglesMM,有哪些方面对您来说真正重要?

答: 当时对可用的播放器不太满意(它们占用大量内存,或者启动速度慢,或者严重缺乏友好的用户界面),我想我可以尝试自己编写一个。起初,我主要关注音乐组织(典型的艺术家/专辑/曲目布局),同时保持较低的内存占用并保持快速。

问:您能详细介绍一下您面临的组织问题吗?我知道许多对古典音乐感兴趣的人也希望按作曲家排序;这是您考虑过的吗?以及分离指挥、独奏家和管弦乐队?

答: 组织音乐收藏的一个限制因素一直是文件格式及其支持的标签选项。我们将所有元数据存储在数据库中以实现快速检索,但这仅仅反映了文件本身的内容。

我的理念一直是,您应该能够复制文件,并且仍然拥有所有元数据,而无需也复制数据库。由于没有涵盖所有文件格式的元数据的标准,因此尝试支持最常见播放格式的播放器必须做出选择,而这些选择通常有利于支持标签方面的最低公分母。像 ID3v2 这样的格式支持各种元数据标签,并且可能可以嵌入到大多数文件中。这听起来可能是一个好主意,但您有在其他软件或设备中破坏播放的风险。在 GogglesMM 中,本机标签格式在写入新标签时始终具有优先权。

GogglesMM 确实支持指挥和作曲家标签。允许任意标签当然很好,但这确实使事情变得更加复杂,从数据库设计到用户界面选项。保持简单肯定是有道理的。

GogglesMM UI
GogglesMM 对 FOX UI 的使用。

问:请介绍一下 GogglesMM 使用的库。

答:我使用 FOX 库作为 GogglesMM 的图形用户界面。这是一个非常不错的库,尽管它近年来没有跟上较新的用户界面功能。在我之前的工作中,我们使用它将我们的应用程序移植到 Windows 和各种 Linux/Unix 版本。

GogglesMM 有自己的播放引擎,但依赖于常用的第三方库来解码各种音频编解码器。早期版本使用 xine,但由于缺乏对无缝播放的精细控制,我决定自己开发一个。

问:自 2016 年以来,您一直在 Launchpad 上构建 GogglesMM,甚至在那之前就开始开发它了。那么,为什么 Debian 和 Ubuntu 存储库中有一个非常旧版本的 GogglesMM,而不是您的版本?

答: GogglesMM 缺少更新的官方软件包可能有很多原因。在 Launchpad 上提供构建似乎是阻力最小的路径,因为没有人有兴趣维护软件包。Ubuntu 上的旧版本应该会慢慢消失,因为我停止分发的请求终于得到了承认。将来,我可能会将其作为 snap 软件包提供。

问:您白天的工作是软件开发人员吗?

答: 是的,我是 Baron 的软件开发人员,我的日常工作包括 Baron Weather API 的开发和维护,Baron Weather API 是一种通过互联网分发各种天气数据的服务。

自 2000 年代初期以来,我一直使用 Linux 作为我的主要平台,用于开发和桌面使用;首先是 Mandrake 发行版,然后是 Arch Linux,因为滚动发布发行版吸引了我,并且让我免于每年重新安装操作系统(并且它是我知道的最早的 686 优化发行版之一)。

问:您是音乐家吗?您喜欢如何听音乐?

答: 我不是音乐家。GogglesMM 是我在车里或外出时使用的主要音乐播放器,在这些情况下我使用手机。我在各种设置中使用 GogglesMM。在工作时,在我的笔记本电脑上,我主要通过耳机收听。根据活动的不同,可以是播客、背景音乐或我更专注地收听的东西。这一切都取决于我当时正在做什么。

在家里,我有一台媒体 PC 通过 HDMI 连接到我的 7.1 环绕声系统。它允许我播放一些多声道专辑以及常规立体声,当然。此外,我还有一台可以访问相同媒体文件的常规台式机。两者都使用 GogglesMM。

问:我尝试配置我的音乐播放器,以不变的形式将音乐数据传递到 DAC。似乎 GogglesMM 确实试图避免重新采样、更改字长等等。

答:是的,当我构建我的播放引擎时,我确保可以完成您尝试完成的完全相同的事情。

  • 目前,GogglesMM 本身不进行重新采样;有一些实验性代码,但它不完整,通常永远不会启用。
  • GogglesMM 将尝试将任何解码后的数据原样传递给其任何输出插件(ALSA、Open Sound System [OSS]、PulseAudio),这意味着解码器支持的任何本机格式。在无损编解码器的情况下,这通常意味着原始数据所采用的任何格式。
  • 如果输出插件/设备不支持特定的音频位深度或数据类型,则播放引擎将尝试将其转换为支持的类型(以尽可能少的精度损失)。
  • 之后,音频将传递到 Pulse、ALSA 或 OSS。PulseAudio 对于普通用户来说往往很简单,但可能会对音频进行一些转换。您最好的选择是 ALSA。
  • 根据您配置的 ALSA 设备,ALSA 可能会进行某种转换。GogglesMM 中有一个选项可以禁用 ALSA 重新采样。另一种方法是直接指定“hw”设备,而不是“default”或“plug”设备。这似乎是获得您想要的确切结果的最佳方法。请参阅 ALSA 关于其 设备命名方案 的文档。
  • 任何时候音频格式或采样率发生变化,GogglesMM 都会根据需要重新配置其输出设备,并且播放应正常继续。如果发生这种情况,曲目之间可能会有短暂的静音。(我们必须等到所有样本都播放完毕,然后停止播放,重新配置设备,然后恢复播放。)
GogglesMM preferences selecting ALSA output
查看更高级的调优选项并设置输入设备。

问:很多开源音乐播放器使用 GStreamer;虽然有人告诉我,除非音量发生变化或输出设备不支持采样率或字长,否则它不一定会干扰比特流,但这仍然让我感到不安,因为它可能会因为我不知道的某些奇怪的配置问题而“暗中”进行一些操作。

答: 这可能只是开发人员的懒惰!添加重采样器并在运行时进行格式转换和/或通道重映射需要时间。随着 PulseAudio 的广泛部署,您不需要任何这些功能(在播放器本身中)即可制作一个易于使用且开箱即用的音乐播放器。GogglesMM 引擎旨在避免做额外的工作。因此,Vorbis 解码器为我们提供的浮点样本将尽可能保持浮点,而 FLAC 解码器提供的 16 位样本将保持 16 位。只有当输出设备需要其他东西时,我们才会尝试转换它们。

这也表明,缓慢的开发可能是一件好事,因为您曾经认为需要的功能不再真正需要,因为它们已在上游实现。

问:我对 GogglesMM 的另一件非常欣赏的事情是它的速度,即使在我的旧双核台式机上也是如此。您能告诉我们您做了哪些工作来降低内存使用率并使 GogglesMM 快速且响应灵敏吗?

答: 老实说,不多。我确实花了很多时间确保 SQL(ite) 查询速度很快(尤其是那些经常使用的查询),并确保数据库中没有存储重复信息。随着计算机变得越来越快,我对此的关注越来越少,但对我来说,应用程序启动时,在几秒钟内显示出来并准备好使用仍然很重要。这也有助于我使用 FOX,它已经很快且轻量级。回到之前的话题,添加对任意标签之类的东西的支持肯定会对性能产生影响,并且可能需要重写数据库设计。

问:您对 GogglesMM 有任何未来的计划吗?

答: 没有短期计划,但对于未来的开发,我一直在考虑包括对 HDPI 显示器、音频交叉淡入淡出、均衡器以及将我的 audioconvert 实用程序集成到 GogglesMM 中。

问:audioconvert(音频同步和转换实用程序)的计划是什么?是将内容带入播放器、播放它、管理便携式设备上不同格式的集合,还是其他什么?

答: 最初,让它成为同一个软件包的一部分会很方便,因为它可以共享相同的内部 FOX 库。也许可以重用一些代码库来管理便携式设备上的集合,尽管老实说,我看不出有这么大的需求。例如,我的主要音乐收藏以 FLAC 格式存储,并且我在单独的文件夹中维护这些文件的 Opus 和 MP3 格式副本,这些副本使用 audioconvert 同步。(这非常简单;只需运行 audioconvert --flac=opus /data/music/flac /data/music/opus。)我使用文件管理器将我想要的文件复制到我的便携式设备上。


我很高兴与 Sander 的对话,并了解了有关 GogglesMM 内部工作原理的一些有趣的细节。对于任何想要对输出到 DAC 的处理管道进行可靠控制的人来说,它都是一个出色的音乐播放器。

还有音乐……

几天前,我正在播放一张从 CD 翻录的专辑,这张 CD 是我在一家著名的美国咖啡连锁店买的,那还是他们卖音乐 CD 的时候,我偶然发现了几首歌曲,这些歌曲启发我找到了艺术家并购买了几张专辑下载。

第一首是 One and One is One,作者是 Joi。让我找到 Joi 的歌曲是“Asian Vibes”,这是一种美妙的南亚和电子音乐的融合。我也非常喜欢它的其余部分;这是很棒的东西,我从对 Linux 友好的 7digital 下载供应商处以 FLAC 格式购买了它。

第二首是 Way Down Below Buffalo Hell,作者是 Jam Nation,也是从 7digital 购买的。我遇到的他们的第一部作品是 She Moved Through the Fair,这显然是为一个特定的录音项目而创作的,该项目汇集了一群非常强大的音乐家。他们的音乐出现在我在 1990 年代遇到的一些合辑中,我很想听到他们更多的音乐。

最后,Sander 在我们的对话中提供了一个很好的推荐:Blow Up Hollywood。他说,“他们是纽约的一支小乐队,刚刚发行了他们的最新专辑《Gold》(他们上一张专辑中的一首曲目在此处出现)。”

Chris Hermansen portrait Temuco Chile
自从 1978 年从不列颠哥伦比亚大学毕业以来,我就一直离不开各种计算机,从 2005 年开始成为全职 Linux 用户,从 1986 年到 2005 年成为全职 Solaris 和 SunOS 用户,在此之前是 UNIX System V 用户。

6 条评论

有趣的文章!以开源和著名的 c :) 为后盾

感谢分享

非常好的文章。我一定会尝试一下。

非常好的文章。

感谢您的友好评论,AshleeySafford。

Creative Commons License本作品根据 Creative Commons 署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.