VBAからmp3ファイルを再生するには
mciSendStri
を使うものだそうだが、同じ音声ファイルを続けて再生する、となると不具合が起こる。
二回目以後、音が出ないのである。
とりあえず、一度目は
http://officetanaka.net/excel/vba/tips/tips22.htm
にある手法を使って
再生ファイル名 = Worksheets(データシート).Cells(i, 3).Value
SoundFile = Chr(34) & 再生ファイル名 & Chr(34)
rc = mciSendString("Open " & SoundFile, "", 0, 0)
rc = mciSendString("Play " & SoundFile & " wait", "", 0, 0)
rc = mciSendString("Close " & SoundFile, "", 0, 0)
で、再生
二回目は一般的な
Call mciSendString("play " & 再生ファイル名 , "", 0, 0)
で凌いできたが、問題は残る。
同じファイルを3回異常再生しようとすると黙るのだ。(黙らないこともある。)
ようやく解決策発見。
Worksheets("Player").Activate
というように、今表示しているワークシートでも再度表示する、という命令を加えるときちんと再生してくれるようになった。
なんでこんな特殊なことを、と思われるかもしれないが、説明すればわかってくれると思う。
英単語を覚えるために、
セルに単語を表示して
音声を再生(同時に日本語訳を表示)
大事なことなので2回続けて再生
ということをやっているのだ。
だから2回続けて同じファイルを再生する必要がある。
そして多義語の場合、その分続けて音声を再生するから3回以上再生しないといけない。
付属CD(ないしダウロード音声)を単語ごとに区切る際は、フリーソフトのmp3DirectCutのお世話になりました。「無音区間の検出」を使って区切るのだけれども、その際「無音区間の検出語のスキップ(秒)」を"0"に刷るのがポイントです。
区切った後、「分割保存」をやって、最後「バッチ処理」から自動トリムをして音声ファイルを用意します。
後は、厳密にではないけども各語の音節数を計算し、それに合わせて次の語を表示するまでの時間を調整。ソコソコ手の込んだプログラムになっているのですよ。