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

CBアプリ工房


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

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

更新 : 2009/01/05

 



再生中の英語ヒアリング学習ソフト

完成図:英語ヒアリング学習ソフト


ここでは英語のフレーズを繰り返し聞ける Sound Player の作成について解説します。
すでに公開してあるソフト、Replayer, Repeater の元になったコードです。実際のソフトでは、それなりに拡張してありますが、指定範囲を再生するという基本的な動きは同じものです。

VCL に付属の MediaPlayer はトラックの再生は簡単にできますが、ポジションの再生はちょっと工夫が必要です。とは言えそれなりのプロパティが用意されているのですぐにできます。
ポジションの指定は、英単語やフレーズの聴き取りや書き取りなど、短い範囲を何度も繰り返し再生したいときにかなり役に立ちます。もちろんギターのフレーズコピーや歌の練習にも利用できます。今回はそのベース部分を作成してみます。

なお、Tips(
CD のトラックを取得指定トラックを再生)で CD の再生に関して記述してありますので、今回はオーディオファイルを再生する場合を取り上げてみます。

英語のヒアリング学習ソフト作成のポイント
MediaPlayer でのポジションの扱い方
これを理解すれば作成できます。

ポイントは ファイルの任意ポジションをどうやって指定するか、です。VCL には便利なプロパティStartPos, EndPos, Position などがあります。
開始ポジションと終了ポジションを記録して、決めた回数だけ再生を繰り返せば、お題目の「英語のヒアリング学習ソフト」の出来上がりです。今回は、ストップポジションを記録して再生するところまでを解説してみます。任意のポジションからスタートさせる、希望の回数繰り返す、などでは、コードを追加する必要があります。各自工夫してみてください。

それではさっそくフォームの作成から取り掛かります。



今回は、指定範囲を再生することが目的ですので、MediaPlayer
の再生に関わる細かい制御には、言及していません。そのためコンポーネントは配置後、設定を変えずそのまま使っています。実際には、このあたりもコーディングが必要になるかと思います。

また、環境によっては、取得する時間や midi ファイルなどでずれが生じるようですので、補正が必要になる場合があるかもしれません(今回は無視)。

まず新規にアプリケーションを作成して、コンポーネントを以下のように配置します。
MediaPlayer1 を配置し、その下に、StartButton と StartLabel。 間隔を適当にあけて、 EndButton と EndLabel を置きます。横には、PositionLabel を Font サイズ 12 程度の太字で配置させます。その下に RepeatButton と Timer1 を置き、他に MainMenu と OpenDialog を配置させて終了です。

Form のサイズは Width = 370, Height = 255 にしてあります。各コンポーネントの大きさは、適宜調整してください。面倒な場合は、適当に配置してもぜんぜん OK です。

設計時の英語ヒアリング学習ソフト

 
コンポーネント Name 説明
TMediaPlayer MediaPlayer1 配置したまま、設定は変えてありません。
TButton StopBtn Captionを "ストップ時間を記録" にします。
TButton RepeatBtn Captionを "ストップ時間まで再生" にします。
TLabel StopLabel ストップポジションの表示に使います。
TLabel PositionLabel 再生の経過時間表示に使います。
TMainMenu MainMenu1 "File" の下に "Open" メニューを作成します。
TOpenDialog OpenDialog1 Filter に "オーディオ ファイル (*.wav;*.wma;*.mp3)"を設定します。
TTimer Timer1 再生の経過時間表示に使います。

コンポーネントの配置が済んだら、ヘッダーファイル Unit1.h のコーディングを行います。

ファイルのポジションを頻繁に取得することを考えて関数を用意しておきます。
PosToTime は、ポジションを時間に変換する関数です。 PosToTime を宣言して
Unit1.h は終了です。


private: // ユーザー宣言
    //ファイルのポジションを時間に変換する関数
    AnsiString PosToTime();

次に実際のコードを Unit1.cpp に書いていきます。
まず MediaPlayer の ポジション(ロードされているメディアの現在位置)から分と秒を計算して、文字列として返す関数 PosToTime をインプリメントします。動きを見ていきます。

最初に MediaPlayer の TimeFormat に tfMilliseconds を設定します。位置情報の形式を tfMilliseconds にすると、現在の位置はメディアに対してミリ秒で得られます。今回ファイルを扱っていますが、CD の分と秒及びフレームなどを取得する場合は、tfMSF, tfTMSF などを利用すると便利です。目的に応じてこれらの形式を上手く使い、必要な情報を取得してください。

次に取得したミリ秒を秒に変え、「分」「秒」を計算から求めています。表示用に文字列を整え、戻り値として返します。今回のアプリは、この関数だけで動いているようなもので、取得した値を上手く使いまわすかどうかがポイントになります。


//--------------------------------------------------------- 
//
// 機能 :オーディオファイルのポジションを時間に変換
//  戻り値:「分」「秒」の文字列を返す
//  備考 :*.wav, *mp3, *.wma などが再生可能
//
//--------------------------------------------------------- 
AnsiString TForm1::PosToTime()
{
    //位置情報で使う形式を指定
    //(ポジションをメディアに対してミリ秒で取得)
    MediaPlayer1->TimeFormat = tfMilliseconds;

    //ミリ秒なので秒に変える
    int tmp = MediaPlayer1->Position / 1000;

    //「分」「秒」を計算
    int min = tmp / 60;
    int sec = tmp % 60;

    //「分」「秒」の文字列を取得
    AnsiString ret = IntToStr(min) + " : " + IntToStr(sec);

    return ret;
}

続く・・・。



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