如何使用 bash 脚本从 base64 转换的文件中播放声音?

Posted

技术标签:

【中文标题】如何使用 bash 脚本从 base64 转换的文件中播放声音?【英文标题】:How to play sound from base64 converted files using bash script? 【发布时间】:2019-04-11 15:36:02 【问题描述】:

想使用 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 来自哪个包? dpkg -S $(realpath $(which play)) play notification.mp3 工作吗? 是的,play 来自 sox。但这不是我想要的。 play notification.mp3 可以,我需要播放base64转换的音频文件。 ... | play -t mp3 -play -t mp3 &lt;( ... ) @jhnc 谢谢! base64 -d notification.b64 | play -t mp3 - 完美!请回答问题,不要发表评论,以便我投票并选择您的答案。 【参考方案1】:

播放命令(来自 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)。

【讨论】:

以上是关于如何使用 bash 脚本从 base64 转换的文件中播放声音?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 javascript 获取 base64 编码图像的地址

如何转换图像 base64 并使用 url 从服务器上传到项目?

如何在 Scriptable App 中将 Base64 转换为图像

如何将执行命令从 bash 脚本转换为 C?或如何在“W”模式下正确使用 popen()?

如何在 PHP 中将图像从 base 64 转换为它们的文件类型?

无法从 BASH 脚本中建立 Oracle SQL 会话