网易首页 > 网易号 > 正文 申请入驻

我如何使用 Groovy 分析我的音乐目录 | Linux 中国

0
分享至

导读:为了简化 Java 的繁琐,我制作了一个 Groovy 工具来分析我的音乐目录。

本文字数:4007,阅读时长大约: 5分钟

为了简化 Java 的繁琐,我制作了一个 Groovy 工具来分析我的音乐目录。

最近,我一直在研究 Groovy 是如何简化略微繁琐的 Java 的。在这篇文章中,我开始了一个简短的系列,通过创建一个分析我的音乐目录的工具来演示 Groovy 脚本。

在本文中,我将演示groovy.File类如何扩展和精简java.File并简化其使用。这为查看音乐文件夹的内容提供了一个框架,以确保预期的内容(例如,cover.jpg文件)就位。我使用 www.jthink.net 来分析音乐文件的标签。

安装 Java 和 Groovy

Groovy 基于 Java,需要安装 Java。Java 和 Groovy 的最新和稳定的版本可能都在你的 Linux 发行版的仓库中。Groovy 也可以直接从 groovy.apache.org 安装。对于 Linux 用户来说,一个不错的选择是 opensource.com,它可用于获取 Java、Groovy 和许多其他相关工具的多个版本。对于本文,我使用以下 SDK 版本:

◈ Java:版本 11.0.12-open 的 OpenJDK 11

◈ Groovy:版本 3.0.8

音乐元数据

最近,我重整了我的音乐消费方式。我决定使用优秀的开源 opensource.com 音乐播放器,它是开源 www.musicpd.org 的一个前端。我所有的电脑的音乐都存储在/var/lib/mpd/music目录下。在该音乐目录下有艺术家子目录,在每个艺术家子目录下有专辑子目录,包含音乐文件、cover.jpg,偶尔还有 PDF 格式的内页说明。

我绝大部分的音乐文件都是 FLAC 格式的,有一些是 MP3 格式,可能还有一小部分是 OGG 格式。我选择 JAudiotagger 库的一个原因是它可以透明地处理不同的标签格式。当然,JAudiotagger 是开源的!

那么查看音频标签有什么意义呢?以我的经验,音频标签的管理极差。(提到音频标签,)我的脑海中浮现出“粗心”这个词。这是标签本身真正存在的问题,也可能是出于我自己的学究倾向。无论如何,这是一个可以通过使用 Groovy 和 JAudiotagger 解决的重要问题。不过,它不仅适用于音乐收藏。许多其他现实世界的问题也适用,如需要下沉到文件系统中的目录树来处理在那里找到的内容。

使用 Groovy 脚本

这是此任务所需的基本代码。我在脚本中加入了注释,这些注释反映了我通常留给自己的(相对简写的)“注释提醒”:

  1. 1 // 定义音乐库目录

  2. 2 def musicLibraryDirName = '/var/lib/mpd/music'

  3. 3 // 输出 CSV 文件标题行

  4. 4 println "artistDir|albumDir|contentFile"

  5. 5 // 迭代音乐库目录中的每个目录

  6. 6 // 这一层应该是艺术家目录

  7. 7 new File(musicLibraryDirName).eachDir { artistDir ->

  8. 8 // 迭代艺术家目录中的每个目录

  9. 9 // 这一层应该是专辑目录

  10. 10 artistDir.eachDir { albumDir ->

  11. 11 // 迭代专辑目录中的每个目录

  12. 12 // 这里应该是内容

  13. 13 // 或相关内容(如 `cover.jpg`,PDF 格式的内页说明)

  14. 14 albumDir.eachFile { contentFile ->

  15. 15 println "$artistDir.name|$albumDir.name|$contentFile.name"

  16. 16 }

  17. 17 }

  18. 18 }

如上所述,我使用groovy.File在目录树中移动。具体来说:

第 7 行创建一个新的groovy.File对象并在其上调用groovy.File.eachDir(),第 7 行的{和第 18 行的结尾的}之间的代码是传给eachDir()groovy.Colsue参数。

这意味着eachDir()为目录中找到的每个子目录执行该代码。这类似于 Java lambda(也称为“匿名函数”)。Groovy 闭包不会像 lambda 那样限制对调用环境的访问(在最新版本的 Groovy 中,如果你愿意,也可以使用 Java lambda)。如上所述,音乐库目录中的子目录应该是艺术家目录(例如,“Iron Butterfly” 或 “Giacomo Puccini”),因此artistDireachDir()传递给闭包的参数。

第 10 行对每个artistDir调用eachDir(),第 10 行的{和第 17 行的}之间的代码形成另一个处理albumDir的闭包。

第 14 行,在每个albumDir上调用eachFile(),第 14 行的{和第 16 行的}之间的代码形成了处理专辑内容的第三级闭包。

在本文的范围内,我对每个文件唯一需要做的就是开始构建信息表,我将其创建为一个以竖线分隔的 CSV 文件,它可以导入 opensource.com 或 opensource.com 或任何其他电子表格。现在,代码输出前三列:艺术家目录名、专辑目录名和内容文件名(同样,第 2 行输出 CSV 标题行)。

在我的 Linux 笔记本电脑上运行它会产生以下输出:

  1. $ groovy TagAnalyzer.groovy | head

  2. artistDir|albumDir|contentFile

  3. Habib Koite & Bamada|Afriki|02 - Ntesse.flac

  4. Habib Koite & Bamada|Afriki|08 - NTeri.flac

  5. Habib Koite & Bamada|Afriki|01 - Namania.flac

  6. Habib Koite & Bamada|Afriki|07 - Barra.flac

  7. Habib Koite & Bamada|Afriki|playlist.m3u

  8. Habib Koite & Bamada|Afriki|04 - Fimani.flac

  9. Habib Koite & Bamada|Afriki|10 - Massake.flac

  10. Habib Koite & Bamada|Afriki|11 - Titati.flac

  11. Habib Koite & Bamada|Afriki|03 – Africa.flac

  12. [...]

  13. Richard Crandell|Spring Steel|04-Japanese Lullaby [Richard Crandell].flac

  14. Richard Crandell|Spring Steel|Spring Steel.pdf

  15. Richard Crandell|Spring Steel|03-Zen Dagger [Richard Crandell].flac

  16. Richard Crandell|Spring Steel|cover.jpg

  17. $

在性能方面:

  1. $ time groovy TagAnalyzer.groovy | wc -l

  2. 9870

  3. real 0m1.482s

  4. user 0m4.392s

  5. sys 0m0.230s

  6. $

又好又快。它在一秒半内处理近 10,000 个文件!对我来说足够快。可观的性能、紧凑且可读的代码,还有什么不喜欢的?

在我的下一篇文章中,我会打开 JAudiotagger 并查看每个文件中的标签。

via:

作者: 选题: 译者: 校对:

本文由 原创编译, 荣誉推出

LCTT 译者 :geekpi

翻译: 1766.5 篇

贡献: 3237 天

2013-10-25

2022-09-05

https://linux.cn/lctt/geekpi

欢迎遵照 CC-BY-SA 协议规定转载,

如需转载,请在文章下留言 “ 转载:公众号名称”,

我们将为您添加白名单,授权“ 转载文章时可以修改”。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
顶流归来,尺度嗨爆,这部王牌美剧还是翻车了

顶流归来,尺度嗨爆,这部王牌美剧还是翻车了

肥罗大电影
2024-06-14 19:57:19
阿里竞赛天才不止姜萍,第26名是初中生,还有一个散修外卖员

阿里竞赛天才不止姜萍,第26名是初中生,还有一个散修外卖员

校长侃财
2024-06-15 17:23:13
查尔斯的生日阅兵仪式:夏洛特公主不能缺席,她跟国王爷爷最亲!

查尔斯的生日阅兵仪式:夏洛特公主不能缺席,她跟国王爷爷最亲!

小鹿姐姐情感说
2024-06-15 17:49:34
今晚!女排迎战世界第一土耳其,蔡斌或让朱婷休息?

今晚!女排迎战世界第一土耳其,蔡斌或让朱婷休息?

开心体育站
2024-06-15 13:21:20
天气预报|未来三天雨绵绵 明夜起部分地区大到暴雨

天气预报|未来三天雨绵绵 明夜起部分地区大到暴雨

上游新闻
2024-06-15 16:53:03
寿命长短,心跳知道?200万人研究发现:心跳快慢与寿命长短相关

寿命长短,心跳知道?200万人研究发现:心跳快慢与寿命长短相关

39健康网
2024-06-14 20:00:03
新规大限已过,仙宾礁上更嚣张!菲总长喊话:鱼照捕,撞他海警船

新规大限已过,仙宾礁上更嚣张!菲总长喊话:鱼照捕,撞他海警船

大风文字
2024-06-15 19:56:42
下家确定!周琦为了签约放弃签字费!广东豪赌彻底失败?

下家确定!周琦为了签约放弃签字费!广东豪赌彻底失败?

体育卡卡谈
2024-06-15 02:13:52
越战老照片 死于战场上的士兵 多少有点恐怖

越战老照片 死于战场上的士兵 多少有点恐怖

那些看得见的老照片
2024-06-07 07:00:02
央视看好的《海天雄鹰》口碑走低,被要求停播,为什么骂声一片?

央视看好的《海天雄鹰》口碑走低,被要求停播,为什么骂声一片?

娱记掌门
2024-06-14 18:25:36
广西柳州龙潭公园偷拍胸部事件:男子当场被抓,网友:给男人丢脸

广西柳州龙潭公园偷拍胸部事件:男子当场被抓,网友:给男人丢脸

三月柳
2024-06-14 11:19:36
医学奇迹!术后仅9天德约科维奇就已恢复训练,要打温网的节奏?

医学奇迹!术后仅9天德约科维奇就已恢复训练,要打温网的节奏?

搏击江湖
2024-06-15 16:36:46
曝黄一鸣生活拮据,给王思聪女儿买20元衣服,王思聪拒绝付抚养费

曝黄一鸣生活拮据,给王思聪女儿买20元衣服,王思聪拒绝付抚养费

180°视角
2024-06-13 09:25:20
现在不是北约担心俄军打过来,而是北约要攻俄,匈牙利人早有预言

现在不是北约担心俄军打过来,而是北约要攻俄,匈牙利人早有预言

青年的背包
2024-06-15 20:33:51
广东一家五口全中招,2人进ICU抢救!紧急提醒:此物剧毒!

广东一家五口全中招,2人进ICU抢救!紧急提醒:此物剧毒!

环球网资讯
2024-06-15 13:46:22
创造历史 问界M9销量超宝马X5两倍还多

创造历史 问界M9销量超宝马X5两倍还多

安兔兔
2024-06-12 23:28:24
超级巨大失误!梅西笑纳大礼,破240天球荒,创四大纪录

超级巨大失误!梅西笑纳大礼,破240天球荒,创四大纪录

奥拜尔
2024-06-15 08:16:39
女子在同学家借宿,半夜突然跑出来报警:我同学和她老公出事了

女子在同学家借宿,半夜突然跑出来报警:我同学和她老公出事了

华人星光
2024-06-14 17:02:42
中国年轻人疯狂涌进养老院,还不用付房租?花式躺平让日本人直呼:羡慕!

中国年轻人疯狂涌进养老院,还不用付房租?花式躺平让日本人直呼:羡慕!

东京新青年
2024-06-14 18:23:57
这……克莱个人社媒取关勇士队 并删除22年夺冠后与库里合照

这……克莱个人社媒取关勇士队 并删除22年夺冠后与库里合照

直播吧
2024-06-15 07:30:33
2024-06-15 21:18:44
Linux
Linux
Linux 中国开源社区
8016文章数 73123关注度
往期回顾 全部

科技要闻

TikTok开始找退路了?

头条要闻

美军被指曾在菲律宾开展行动抹黑中国疫苗 科兴回应

头条要闻

美军被指曾在菲律宾开展行动抹黑中国疫苗 科兴回应

体育要闻

残暴的德国战车,和苏格兰的祖传倒霉蛋

娱乐要闻

江宏杰秀儿女刺青,不怕刺激福原爱?

财经要闻

新情况!高层对人民币的态度180°转弯

汽车要闻

东风奕派eπ008售21.66万元 冰箱彩电都配齐

态度原创

数码
时尚
旅游
家居
公开课

数码要闻

联合创新“27M3U”27 英寸显示器上架:4K 60Hz,1699 元

伊姐周六热推:电影《爸爸是外星人》;电视剧《玫瑰的故事》......

旅游要闻

如何文艺消夏?乌镇10大活动开启古镇消夏节

家居要闻

空谷来音 朴素留白的侘寂之美

公开课

近视只是视力差?小心并发症

无障碍浏览 进入关怀版