如何在使用 ConTeXt 创建的 PDF 中嵌入音频?

如何在使用 ConTeXt 创建的 PDF 中嵌入音频?

如何将 MP3 文件放置在 PDF 页面中,以便它可以在装有 Adob​​e Acrobat Reader 的 Windows 机器上播放音频?

更新:2020 年 8 月 31 日

以下答案在 2020 年不再有效。我尝试了此代码:

\starttext
    \setupinteraction[state=start]
    \externalfigure[sample.mp3]
\stoptext

我将 mp3(sample.mp3)放在与 tex 文件相同的文件夹中。我进行了编译。没有出现任何错误。

当我查看它时,我看到一个灰色方块,上面写着:

name: sample.mp3
file: sample.mp3
state: unknown

我在 Adob​​e Acrobat Reader DC 和 Microsoft Edge 中都尝试过,结果都是相同的灰色方块。

然后我尝试更改代码以不包含文件扩展名,只是\externalfigure[sample打印此消息三次:

参见 samples.tex

我搜索了整个 ConTeXt 安装目录,找不到任何具有此名称的文件可以引用,ConTeXt Garden 中也没有提及它,我在邮件列表中也找不到任何内容。

更新:2020 年 9 月 2 日

我发现不支持 .mp3。正在查找这里,我发现 mov 是受支持的,但它显示“注意:电影包含功能仅在 Adob​​e Acrobat 中有效,在 Linux 上无效”。请注意,我在 Linux 中编译,但在 Windows 工作计算机上查看以在 Adob​​e 中测试。这可能是原因吗,或者文件应该在 Linux 中编译正常并且仍然​​可以在 Adob​​e 中查看?编译后,生成的文件只是空的,也是 5 kb,而视频是 700 kb,所以很明显 mov 没有放在 PDF 中。

\starttext
    \setupinteraction[state=start]
    \enabletrackers[graphics.locating]
    \externalfigure[sample.mov][width=10cm, height=10cm]
\stoptext

这至少会在 Adob​​e 中创建一个不可见的 10 厘米 x 10 厘米可点击框,因为当鼠标放在文档的左中间时,它会从光标变成手,但不会播放或听到任何内容。

更新:2020 年 9 月 2 日,更新 2

我尝试将 MOV 转换为 pdf,然后嵌入 PDF,但转换后创建的 PDF 在每张幻灯片上都有一张图片,而不是将视频放在可以嵌入到 ConTeXt 创建的 PDF 中的 PDF 中。

答案1

以下示例定义了\embedaudio。它实现了与 LaTeX 包相同的嵌入式媒体规范。MP3 格式的音频文件在随附的media9播放器组件中播放。在嵌入之前,会先下载指定为 URL 的 MP3 文件。播放需要 Windows 或 OSX 平台上的 Adob​​e Reader。APlayer.swfmedia9

请参阅 media9 手册,表4表 5了解如何通过 FlashVars 配置 APlayer 以及如何使用键盘控制播放。FlashVars 作为 的第一个参数传递\embedaudio

给出了使用 ConTeXt 嵌入视频的类似命令这里

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \embedaudio{<flashvars>}{<audio file | URL (MP3)>}{link text}
% flashvars documented in `texdoc media9`,  page 20
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\protected\def\pdfobj{\pdfextension obj }
\def\pdflastobj{\numexpr\pdffeedback lastobj\relax}
\protected\def\pdfstartlink{\pdfextension startlink }
\protected\def\pdfendlink{\pdfextension endlink\relax}
\let\pdfxform\saveboxresource
\let\pdflastxform\lastsavedboxresourceindex
\define[3]\embedaudio{%
  \ifdefined\aplayer\else%
    \immediate\pdfobj stream file {APlayer.swf}%
    \immediate\pdfobj{<<
      /Type/Filespec/F (APlayer.swf)/UF (APlayer.swf)
      /EF <</F \the\pdflastobj\space 0 R>>
    >>}%
    \edef\aplayer{\the\pdflastobj}%
  \fi%
  %
  \immediate\pdfobj stream file {#2}%
  \immediate\pdfobj{<<
    /Type/Filespec/F (#2)/UF (#2)
    /EF <</F \the\pdflastobj\space 0 R>>
  >>}%
  \edef\audio{(#2) \the\pdflastobj\space 0 R}%
  %
  \immediate\pdfobj{<<
    /Type/RichMediaInstance/Subtype/Sound
    /Asset \aplayer\space 0 R
    /Params <</Binding/Foreground/FlashVars (autoPlay=true&source=#2&#1)>>
  >>}%
  %
  \immediate\pdfobj{<<
    /Type/RichMediaConfiguration/Subtype/Sound
    /Instances [\the\pdflastobj\space 0 R]
  >>}%
  %
  \immediate\pdfobj{<<
    /Type/RichMediaContent
    /Assets <<
      /Names [(APlayer.swf) \aplayer\space 0 R \audio]
    >>
    /Configurations [\the\pdflastobj\space 0 R]
  >>}%
  \edef\rmcontent{\the\pdflastobj}%
  %
  \setbox0=\hbox{ }\immediate\pdfxform 0%
  \pdfstartlink user{
    /Subtype/RichMedia
    /BS <</W 0/S/S>>
    /Contents (audio file:#2)
    /NM (rma:#2)
    /AP <</N \the\pdflastxform\space 0 R>>
    /RichMediaSettings <<
      /Activation <<
        /Condition/XA
        /Presentation <<
          /Transparent true
          /Style/Embedded
          /PassContextClick false
        >>
      >>
      /Deactivation <</Condition/PC>>
    >>
    /RichMediaContent \rmcontent\space 0 R
  }#3\pdfendlink%
}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\starttext
\ConTeXt{} embedded audio example: \embedaudio{}{click.mp3}{\strut $\rightarrow$Click and listen!}

\ConTeXt{} audio-URL example: \embedaudio{}{http://www.openbsd.org/songs/song49.mp3}{\strut $\rightarrow$Click and listen!}
\stoptext

相关内容