can't go to sleep

組み込み開発の多くをRubyで自動化することに興味があります

SofTalkでパワーポイントを読み上げる

Softalkでパワーポイントのノートを読み上げるスクリプトを書いてみた。
と言っても、下記リンクを組み合わせただけで、何も新しいことをしていないけれど・・・。

[Ruby] PowerPointのノート欄を全て出力 @sarunoie
http://blog.mesh.cx/2011/02/rubyolepowerpoint.html

使い方:

  • 適当にパワーポイントを作って、話したい内容をパワーポイントの下の欄(ノート部)に書く。
  • 下のコードを適当に貼り付けて、拡張子rbのファイルを作成して、コマンドプロンプトから呼び出す
  • その際、引数として上で作成したパワーポイントファイルを渡す(このあたりの作業はドラッグアンドドロップでやると楽)
  • ソフトークが勝手に、パワーポイントで書いた内容を読み上げる(ページもめくってくれる!)
  • 途中でパワポを閉じるとバグる。プロセスが残るかも。適当なので・・・。
require 'win32ole'

# 以下、softalk引数パラメータ
softalkPath = "C:/softalk" # softalkのパス
softalkSpeed = 100.to_s
softalkVolume = 100.to_s


if ARGV.count != 1
  puts "usage: pptcmt filename"
  exit
end

filename = ARGV[0]

fso = WIN32OLE.new('Scripting.FileSystemObject')

filename = fso.getAbsolutePathName(filename)

ppt = WIN32OLE.new('PowerPoint.Application')
ppt.Visible = true

prt = ppt.Presentations.Open(filename)
count = prt.Slides.Count

view = ppt.ActivePresentation.SlideShowSettings.Run().View
view.First
system(softalkPath + "/SofTalkw.exe  /X:1")

begin
  for i in 1..count do
    targetNote = prt.Slides(i).NotesPage.Shapes.Placeholders(2).TextFrame.TextRange.Text
    result = system(softalkPath + "/SofTalkw.exe  /S:" + softalkSpeed + " /V:" + softalkVolume + " /W:" + targetNote)
    if result == true
      view.Next
    end
  end
rescue
ensure
  prt.Close
  ppt.Quit
end

このスクリプト解説用のパワポも作ったけど、とりあえずそれは社内限定公開ということで。