linux - 如何使用 bash 脚本从 base64 转换的文件中播放声音?
问题描述
想使用 bash 脚本播放 base64 格式的 mp3 转换文件。
首先我做了这个:
base64 notification.mp3 > notification.b64
然后我尝试播放 notification.b4,但没有一个奏效:
play notification.b64
cat notification.b64 /dev/snd/pcmC0D3p
play < $(cat notification.b64 | base64 --decode)
我使用的是 Debian Buster,所以没有 /dev/audio 或 /dev/dsp。
我试图把它放在一个脚本中,以避免额外的文件并能够在变量中播放 base64。
解决方案
play 命令(来自 sox)使用文件扩展名来决定它正在处理什么类型的文件。
- 它不知道如何处理
.b64
扩展 - 如果您从管道或进程替代输入它,它没有文件名
解决方案是明确告诉它应该期望什么样的输入。为此提供了该-t
选项。因此,在您的情况下,您可以执行以下操作:
#!/bin/bash
read -d @ sound <<'EOD'
/+MYxAAHSAY1mADEAoG5jrkW2aFtGj0u7n/6Xfo/0v/Wz0f6f///9JzNKgW6
7P7E+nKHKgicW/7tOsdD/1n8v///1/+/0f9v/+MYxB0HwAadkACEAv+QBlsu
3t//+tD4Ok38Zg4EUmnBkJ1Zhfpm+tblDuoRkp1VGBcXsp03YO5ASaudJBBX
s//p/+7ff5vc/+MYxDkUWzKiWGlVMTn6EHgmin4mSv00b/vi71rJ///9glj3
c5UXrrXLZ9ZBZDQHcWtxqDKdMGY4NtDWXj3UiW1rOKP+ocR//+MYxCIUgzaR
mU1oAdS/6yTAwxsb1FZ5vX//9f6Dff6/pfprEKZpu1fMLeq7Og/61VMy7r2R
///+oGEpjyxsMjGTZncRYNGh/+MYxAsPg0qYIYVQAKxkDrB9liFLdJtf6zlT
4hXn9AHiRS7ZwUImG//////9ib/yg0/+rf///////sX//8p/lsAi+UlXNJX6
/+MYxAgIYAZqWcAYAIOJxFT9/z3qPcRHqP8t///O/lv/1HuCv+IlTEFNRTMu
MTAwVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
EOD
echo "$sound" | base64 --decode | play -t mp3 -
sox -h
应该显示您的版本可以理解的所有格式。(例如,在 ubuntu 上,处理 mp3 需要安装一个额外的库)。另请参阅 soxformat(7) 了解更多详细信息。
推荐阅读
- reportportal - gradle 多项目设置中的 Reportportal 属性文件
- android - java.lang.RuntimeException:清单合并失败,出现多个错误,
- go - 在 Go 中为 ID 使用新类型的包装器是惯用的吗?
- java - 从单个 Java 流中提取多个值
- python - 如何在 Windows 中将 python 3.7 更改为 3.6
- python - 通过 pymongo 从 mongodb 获取范围内的数据条目
- css - 计算 div 的高度并将该数字放在 ::after 伪元素内容中
- python - 将双引号写入 Csv Python CSV 模块时出错
- javascript - React/Firebase 用户注册承诺 - 无法在未安装的组件上调用 setState
- blueprism - 错误 - 突出显示结果 - 未找到匹配的窗口