用那个函数可以获得 mp3 格式的 时长(在 mpg123.el) 里找不到(水平不够)

那位指点下, 我只想知道用那个函数可以返回一个 mp3 文件格式的时长, 或者是有相应的包,现在读了 emacsmirror/mpg123: A front-end program to mpg123/ogg123 https://github.com/emacsmirror/mpg123 没有找到相应的函数(主要是太复杂了, 看不懂)。 再多说一点, 我现在是做这样的一个功能,复制一大段英文,转到一个临时的缓冲区内,调用 mpg123.exe 播放当前的单词来朗读它,因每个单词对应的 mp3 时长是不一样的,目前只能按 10 秒自动向前转到下一个单词,想要是知道那个函数可以返回对应单词的 mp3 格式时长来自动向前。对应的单词 mp3 是我用 audacity来录制的(windows平台)。 那位如有告知,十分感谢!

实际上都没看懂你的需求……你到底要怎么播放单词…… 只是emacs朗读的话,有emacspeak,单词句子什么的都没问题 你说的不定长单词10秒下一个什么的……好乱

这个想法挺有意思,也许你需要的不是获取时长,而是找到一个播放器,支持音乐list

非 IT 人士,描述的不专业,见谅。

What will he take with him to California? He will take some shirts.

He will take some socks. He will not take old socks. Old socks have holes in them. 比如有这几句英文,选择后,复制到一个新建的临时缓冲区,接着取得当前单词(如第一个单词 “what"), 然后调用 mpg123.exe,来播放“ e:/word_read/what.mp3”,当 mpg123.exe 播放完后,forward-word ,到下一个 “wil”,接着再次调用 mpg123.exe,来播放”e:/word_read/will.mp3“,播放完后,又 forward-word, 到下一个 “he", 如些循环到最后,现在自己胡乱弄了的几个函数,基本可以达到。但是不好用的是,因为第一个“what" 如有12秒,还没播放完,就到了下一个单词(现用的是 “keyboard-macro-timer”来 10 秒一次 forward-word,因为不会取得对应 mp3文件的时长)。 不知描述的可否清楚。

这个有点啰嗦, 你可以将这一段话中的 空格 替换为回车,然后将单词加后缀,最后将文本保存到 一个 temp.lst 文件中, 调用一个命令: 播放器 temp.lst 不就可以了?

1 个赞

mpg123. 我能用起啊,但是我不是来听音乐的,我是用来学习的,顺便也可学英文,不是只 IT 类的喔!是机械方面的专业术语!因为现在自动化机器较多,各类英文标识太多,且太多的是缩写词。

Emacspeak 算是一个针对视力残障人士的辅助桌面吧,估计功能有点多过头了。看起来题主是只要朗读选项的文字。

然后我看了一遍, mpg123 并没有直接提供读取文件时长的函数,它是读取歌曲信息的字符串之后用正则搜索时长,需要自己写一个。

然后我觉得你没必要造轮子,有VC开发经验的话可以调用windows的TTS API来朗读文字。

或许可以试试 espeak

对于可以看显示器的我们来说, Emacspeak 确实有点功能过头, 但对于盲人来说,这就叫功能全。。。。。 Emacspeak 朗读引擎需要单独安装,甚至购买,开源的引擎朗读效果太机械了。。。。听着痛苦

忽然觉得macOS在这点上还是不错的。

macOS 里面有一个 say 命令,能用系统内建朗读程序读文本,下了语音库以后能读多国语言。

嗯, 你那个钱确实没有白花

可能我描述的还不全面,以下都是口水话,不看也可(我只是想找个函数可以返回对应的 mp3文件的时长) emacs 不是也可以用来放 PPT, 比如说这个 CMM 这个缩写 Coordinate Measureing Machine (三次元,是机械加工中用到的一个检测工具), 在展示时,出现一行 ”CMM“, 再下一行,出现 ”Coordinate Measureing Machine“, 再一行出现 “三次元,日文汉字,中文基本名 ”三坐标检测机“,简称” 三坐标“ 同时话外音播放相应的对应的 mp3 文件,“ e:/word_read/CMM.mp3"。 其中“Coordinate Measureing Machine”,要用不同的声音来重复三至四次,此为其中的一种具体应用场景。

(mpg123:get-music-info mpg123*cur-music-number 'length) 可以试试这个

先谢了! 因还有别的工作忙, 有空试了再回复您结果!