PowerPoint のノートを音声読み上げしてスライドに埋め込む


はじめに

遠隔授業用の動画をPowerPointで作るにあたり、ノートを合成音声で読み上げて、スライドにオーディオ・オブジェクトとして埋め込むマクロを作成しました。

Windows限定です。

開発環境

Windows 10 Home
Microsoft PowerPoint for Office 365 MSO (16.0.11929.20708) 32ビット

準備

マクロを使うので、スライドをマクロ有効プレゼンテーション(.pptm)で保存します。
PowerPointのメニューに「開発」がない場合は、「ファイル」→「オプション」→「リボンのユーザー設定」で「開発」にチェックを入れてください。

コードの入力

「開発」→「Visual Basic」でVBAエディタを開き、プロジェクト エクスプローラの「標準モジュール」を右クリックして、「挿入」→「標準モジュール」で新規モジュール(Module1)を作成します。

Module1をダブルクリックするとコードを入力するウィンドウが開くので、以下のコードを入力します。

Sub EmbedVoice()

    ' 現在のスライド番号を取得
    Dim n As Long
    n = ActiveWindow.Selection.SlideRange.SlideIndex

    ' 現在のスライドのノートを取得
    Dim strNote As String
    strNote = ActivePresentation.Slides(n).NotesPage.Shapes.Placeholders(2).TextFrame.TextRange.Text

    ' ノートが空白なら終了
    If strNote = "" Then
        Exit Sub
    End If

    ' 現在のフォルダを取得
    Dim cd As String
    cd = ActivePresentation.Path

    ' wavファイルのパスを作成
    Dim wavePath As String
    wavePath = cd & "\voice.wav"

    ' wavファイルが既にあれば削除
    ' 下の SSFMCreateForWrite = 3 で上書きできるはずだけど何故かできないので
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    If fso.FileExists(wavePath) Then Kill wavePath

    ' wavファイルに保存
    Const SAFT48kHz16BitStereo = 39
    Const SSFMCreateForWrite = 3

    Dim oFileStream, oVoice

    Set oFileStream = CreateObject("SAPI.SpFileStream")
    oFileStream.Format.Type = SAFT48kHz16BitStereo
    oFileStream.Open wavePath, SSFMCreateForWrite

    Set oVoice = CreateObject("SAPI.SpVoice")
    Set oVoice.AudioOutputStream = oFileStream
    oVoice.Speak strNote

    oFileStream.Close

    ' audioオブジェクトの埋め込み
    Dim oSlide As Slide
    Dim oShp As Shape
    Dim oEffect As Effect

    Set oSlide = ActivePresentation.Slides(n)

    Set oShp = oSlide.Shapes.AddMediaObject2(wavePath, False, True, 10, 10)

    With oShp.AnimationSettings.PlaySettings
        .HideWhileNotPlaying = True
    End With

    MsgBox "Done."

End Sub

使い方

音声を埋め込みたいスライドのノートに、読み上げるテキストを入力します。

「開発」→「マクロ」から、EmbedVoice を実行すると、スライドの左上にオーディオ・オブジェクトが挿入されます。

オーディオ・オブジェクトにマウスカーソルをあてると再生ボタンが表示されるので、実際に再生して音声を確認してください。

問題がある場合は、オーディオ・オブジェクトを削除し、ノートを修正してから、もう一度 EmbedVoice を実行してください。

埋め込みの時点で、「スライドショーを実行中にサウンドのアイコンを隠す」設定だけオンにしてあります。その他の設定は「再生」メニューや「アニメーション」メニューで行ってください。

備考

  • 音声はWindowsの音声読み上げ機能を使って作成しています。
  • 処理の過程で、スライドと同じフォルダにvoice.wavというファイルを作りますので、不要なら削除してください。
  • Webで調べながら作成したので、技術的な質問にはお答えできません。

参考にしたサイト