发布网友 发布时间:2022-04-24 04:56
共5个回答
热心网友 时间:2022-05-06 15:16
如何控制插卡式小箱中SD卡音乐文件的播放顺序?
短版回答
严格按照向TF卡(我们有时候叫那种小的存储卡也叫SD卡)中写入文件的顺序播放。
长版回答
首先https://zhidao.baidu.com/question/411410719.html 中 poligong的回答是对的。
我自己实验了好久之后也发现了同样的规则。
探索的过程蛮曲折但也挺有意思。
我先后尝试了文件名、修改时间、创建时间、mp3-id3标签信息的track-number字段(即歌曲在专辑中的原始序号)……
折腾了几个小时……
最后发现我把问题想复杂了。
首先:音箱内芯片的文件遍历模型是非常原始和简单的。
那个几十元的小音箱应该不可能有什么(严格意义上的)计算机操作系统在里面的,至少没有我们所认为的那种操作系统:即那种可以对文件名、文件属性、字段进行排序(甚至还要它考虑中文文件名或标题或其它字段的编码问题?不可能的啦)。它内部只可能有一片或几片简单的芯片完成简单的存储空间地址顺序扫描(SD卡存储数据本质上是一个寻址空间)+MP3播放(这个有非常成熟和廉价的解决方案)功能。所以,我们所有的尝试,不管是文件名还是别的什么规则,在它面前通通被无视。所有尝试在SD卡上对文件直接重命名或修改属性的努力都是无用功。
其次,怎样控制播放顺序?
尝试多次都无法找到答案的原因是文件写入的顺序没有办法复现。这个顺序并不能从文件属性中获取。文件创建时间和文件写入时间并不一定一致。同时,使用各种文件管理器(如windows下的explorer即我的电脑,linux下的各种工具)在向sd卡中写入数据的过程是不可控的。这个过程因不同操作系统不同编码方案+不同文件管理器写入操作的具体实现不同。它在批量向sd卡中写入数据前已经对文件进行了排序,而这个排序显然不太可能和用户要求的播放顺序一致,而在文件名排序时又偶尔一致,从而导致困惑:)
那么该怎样做呢?
关键在于控制写入顺序。
首先是在本地端(写入SD卡之前的本地磁盘目录中)对文件以固定格式命名,常见的就是以补0数字作文件名前缀来排序(这可以规避不同操作系统的排序规则差异),然后使用脚本进行精确的写入控制。
例如以python为例,其内置的os.listdir函数并不是按文件名来排序的。需要先对其结果进行预排序,然后按排序结果一个一个地拷贝文件方可。
注意:sort/sorted函数对字符串排序的规则是按照字符的unicode码值大小作为依据的。
脚本参考如下:
import os,shutil
form pathlib import Path
src_dir = Path(input('源目录='))
dst_dir = Path(input('目标目录='))
src_files = sorted(os.listdir(src_dir))
for f in src_files:
print(f)
for f in src_files:
print(f'正在复制 {f} ...')
shutil.copy(src_dir / f, dst_dir)
热心网友 时间:2022-05-06 16:34
这个问题我在给孩子下载语音课文的时候也遇到了,我的是插卡移动蓝牙小音箱,只有几个按键没办法快速转到想要听得课文,而课文朗读加上解析有50多个音频文件想要跳到想听的课文需要连续按好多下(下一曲或上一曲)也不确定具体按几下才能到。我在网上搜寻了很多方法(如:给内存卡里的文件(歌曲)编序号1,2,3.......,和001,002,003........还有A,B,C........等)都试过了都不行,后来自己琢磨的一个一个复制到内存卡里(顺序不是按照1,2,3)后,发现完全是按照复制的顺序来播放的,这下找到了解决方法,然后我就按照课文顺序一个一个复制到卡里,完美解决了我的烦恼,而且想要听第几课只要按照当前是第几课推算出来按几下就可以到啦!热心网友 时间:2022-05-06 18:09
更改歌曲名称 简单地说,移动音箱默认排序方式是根据开头那个字的字母排列的 建议你在原来的歌曲名前面加 A B C D .......就能实现了 呵呵热心网友 时间:2022-05-06 20:00
建议在歌曲名称前加上“001、002、……、N”等序号。热心网友 时间:2022-05-06 22:08
什么牌子的移动音响,有了可以设置!