使用 filecontents 环境写入二进制文件

使用 filecontents 环境写入二进制文件

这个答案我试图展示如何使用多媒体包将音频文件嵌入 pdf。生成的 MWE 不能独立存在,因为它需要一个示例音频文件。

我想我的第一个问题是,TeXLive 是否包含任何示例音频文件?第二个问题,也是可能不那么无趣的问题是,我可以使用环境filecontents或其他环境来创建二进制文件吗?

\documentclass{article}
\usepackage{graphicx}
\usepackage[implicit=false]{hyperref}
\usepackage{multimedia}

% What goes in here to produce a usable wav file. Happy to use a different environment.
\begin{filecontents}{\jobname.wav}
\end{filecontents}

\begin{document}
\sound[inlinesound]{\includegraphics{example-image}}{\jobname.wav}
\end{document}

答案1

如果使用 luatex,您可以从 Lua 编写二进制文件,这里我从 windows 目录中获取了一个 chimes.wav,并通过 base64(cygwin 实用程序,但任何 base 64 编码都可以)对其进行粉丝处理,以获得下面的长字符串。luatex 包含套接字库,其中包含一个 base64 解码器,因此您只需将其写出为 wav 文件以供以后使用。

不确定这对于发布到该网站有多大用处,因为即使是这个微小的声音文件,一旦进行 base 64 编码,也是该网站字符限制的 10 倍(您需要一些这样的编码才能嵌入到主文件中,否则字节将被解释为 UTF-8)所以我在下面的代码中截断了字符串(所以它不会像发布的那样工作)(但在我截断它之前它确实工作了:-)

\documentclass{article}
\usepackage{graphicx}
\usepackage[implicit=false]{hyperref}
\usepackage{multimedia}

\directlua{
io.output("\jobname.wav")
io.write((mime.unb64(
"UklGRiRNAwBXQVZFZm10IBAAAAABAAIARKwAABCxAgAEABAAZGF0YQBNAwAAAP////8AAAAA//8A
AAAAAAAAAP//AAAAAAAA//8AAAAAAAAAAP//AAAAAAAAAAAAAAAAAAD//wAA///////////
PQISAfcBYAGeAaABOQHPAdAA6gFqAPIBDQDnAbj/xwFw/5IBNf9JAQr/9ADw/pYA5v42AO3+2v8A
stuff omitted!!!!
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="
)))
}
\begin{document}
\sound[inlinesound]{\includegraphics{example-image}}{\jobname.wav}
\end{document}

相关内容