アプリケーション | Tips | ダウンロード | プログラム
| コラム

CBアプリ工房


ホーム > アプリケーション > ヒアリングソフトの作成 [ 1 | 2 ]

ヒアリングソフトの作成 - 2/2

更新 : 2009/01/05

 



その他のイベントハンドラを記述します。

コンストラクタでは、ファイルを読み込む前にタイマが動かないように停止させておきます。
インターバルを 500 ミリ秒に設定して、各 Label の Caption は表示しないようにします。


__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    //初期設定
    Timer1->Enabled  = false;
    Timer1->Interval = 500;

    StopLabel->Caption     = "";
    PositionLabel->Caption = "";
}

OnCloseQuery では、ファイルの再生中にアプリケーションを閉じても再生が終了するように処理しておきます。現在開いているマルチメディアデバイスのデバイス ID を調べ、開いていれば 0 以外が返ってくるので、停止しておきます。


void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)
{
    //デバイスが開いていれば停止
    if (MediaPlayer1->DeviceID != 0) MediaPlayer1->Stop();
}

イベントハンドラ Open1Click は、[ File ] - [ Open ] メニューに記述してください。

クリック後、OpenDialog1 を呼び出しています。
"キャンセル" ボタンがクリックされた場合、以降の処理を中止しています。
ファイルが指定され、"開く" ボタンがクリックされた時は、ファイルを MediaPlayer の FileName プロパティに引き渡します。こうすることで、MediaPlayer の Open メソッドで開くメディアファイルが決まります。取得したファイル名はパスを省いて、Form の Caption に表示します。

Open メソッドでメディアファイルを開き、経過時間を表示するためタイマを動かします。


void __fastcall TForm1::Open1Click(TObject *Sender)
{
    //キャンセルなら処理なし
    if (!OpenDialog1->Execute()) return;

    //ファイル名を取得
    MediaPlayer1->FileName = OpenDialog1->FileName;
    //パスを省いて表示
    Caption = ExtractFileName(MediaPlayer1->FileName);

    //開く
    MediaPlayer1->Open();
    Timer1->Enabled = true;
}

タイマが動き出すと、PosToTime 関数で現在のポジションを時間に変換し、PositionLabel に表示し続けます。

記録したストップ位置にポジションが達すると EndPos によって自動的に MediaPlayer は停止します。再生を続けたい場合や、複数のポジションを再生させる場合は、適宜コードを追加してください。


void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
    /*必要に応じて、適宜コードを追加してください。*/

    //時間に変換して表示
    PositionLabel->Caption = PosToTime();
}

StopBtnClick は、クリックされると、StartPos に値を代入して、現在のポジションをストップ時間として EndPos に記録します。記録した時間は、StopLabel に表示しておきます。

今回は StartPos, EndPos プロパティでお手軽にポジションを設定していますが、Position プロパティでも同様に行えます。コードの書き換えはためになりますので、時間があれば挑戦してみてください。


// ストップ時間を記録
void __fastcall TForm1::StopBtnClick(TObject *Sender)
{
    //スタート時間代入
    MediaPlayer1->StartPos = 0;

    //ストップ時間を保持
    MediaPlayer1->EndPos = MediaPlayer1->Position;
    //記録したストップ時間を表示
    StopLabel->Caption = PositionLabel->Caption;
}

最後は、記録したポジションの範囲を再生させるコードです。

StartPos, EndPos プロパティを使っていますので、Play メソッドを実行するだけで記録したスタート位置からストップ位置まで再生されるようになります。


// 指定範囲を再生
void __fastcall TForm1::RepeatBtnClick(TObject *Sender)
{
    //記録したスタート位置に移動して再生
    MediaPlayer1->Play();

    /*何度も繰り返したい場合は、コードを適宜追加してください。*/
}

以上でコーディングは終了です。コンパイルして実行してみてください。
思うようにアプリが機能していますか?

英語ヒアリング学習ソフトの作成はこれで終わりです。お疲れ様でした。


今後の課題
今回作成した英語ヒアリング学習ソフトは、ひとつの指定範囲を 1 度しか再生できません。少しコードを追加して、繰り返し再生できる、あるいは複数のポジションを記録できる、などに対応させると実用的になります。基本的な動きはできていますので、上手くコードを利用して拡張させてみてください。

自分を楽にするためのソフト作成は、アイデア次第でいろいろ見つかりそうです。
ちょっとした工夫を惜しまず、ソフト作りを楽しんでください。

DownLoad のページからソフトがダウンロードできます。参考にしてください。イメージ画像を貼り付けておきます(画像は近々アップする新バージョン)。

リスニング・ディクテーション支援ソフト Replayer

シェアウエア Replayer v1.5

リスニング・ディクテーション支援ソフト Repeater

フリーウエア Repeater v0.2

以上のコードは、ご自由にお使いいただいて結構です。ただし、コードを使用した結果、問題が生じても責任はいっさい負いかねますのでご了承ください。



[ ホーム | ページトップ | 前へ | ブック | リンク | サイトマップ ]
Copyright(c) 2003 Shibu All rights reserved.