1
1

More than 1 year has passed since last update.

VBA:同じ音声ファイルを連続して再生できないことの解決策

Last updated at Posted at 2023-03-19

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"に刷るのがポイントです。
区切った後、「分割保存」をやって、最後「バッチ処理」から自動トリムをして音声ファイルを用意します。

後は、厳密にではないけども各語の音節数を計算し、それに合わせて次の語を表示するまでの時間を調整。ソコソコ手の込んだプログラムになっているのですよ。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1