リナザウのソフトウェア開発


○ 第3章 マルチメディアを使ってみる「サウンドを一通り使う」






まずはサウンド関連からはじめてみましょう。

とはいえ、むずかしいので、ちょっと放棄。




<CPPファイル名 main.cpp>

#include <qpe/qpeapplication.h>   // 使用するクラスを指定する

#include "mainwindow.h"   // 使用するプログラムを指定する

int main(int argc, char *argv[])
{
	QPEApplication a(argc,argv);
	Mainwindow *mw = new Mainwindow();
	a.showMainWidget(mw);
	return a.exec();
}


(解説は、かきかけ)



<ヘッダーファイル名 mainwindow.h>

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <qmainwindow.h>   // 使用するクラスを指定する
#include <qapplication.h>
#include <qpushbutton.h>
#include <qtextcodec.h>
#include <qfont.h>
#include <qsound.h>
#include <qlabel.h>

class Mainwindow : public QWidget{
	Q_OBJECT

public:
	Mainwindow(QWidget *parent = 0, const char *name = 0);

private:
	QTextCodec *codec; // テキストコーデック
	QPushButton *play1, *play2, *play3, *stop; // ボタン「play1」「play2」「play3」「stop」をまとめて用意する
	QLabel *label; // ラベル

private:  // スロットではない
	void play(int play_no);  // 呼び出された音声を再生する機能を作成する
	void soundsupport();  // サウンドサポートが利用できるかどうかをラベル「label」に表示する機能を作成する

private slots:  // スロット
	void slot_pre_play();  // 音声を再生するためのスロットを作成する
	void slot_start();  // サウンドを再生するためのスロットを作成する
};

#endif //MAINWINDOW_H


(解説は、かきかけ)



<CPPファイル名 mainwindow.cpp>

#include "mainwindow.h"  // mainwindow.cpp のヘッダーファイル mainwindow.h を読み込み

Mainwindow::Mainwindow(QWidget *parent, const char *name)
		: QWidget(parent, name)
{
	// テキストコーデック「codec」を作成
	// 以降、codec->toUnicode("ここに書いたことは日本語で表示できる")
	codec = QTextCodec::codecForName("ShiftJIS");

	// ウィンドウのタイトルを設定
	setCaption(codec->toUnicode("サンプル4「音声を再生する」"));

	// 使用するフォントを設定
	QFont f("lcfont",18);
	setFont(f);

	// ボタン「play1」を作成
	play1 = new QPushButton(codec->toUnicode("音声1"), this);
	// ボタン「play1」の配置位置を指定
	play1 -> setGeometry(20, 80, 70, 25);
	
	// ボタン「play2」を作成
	play2 = new QPushButton(codec->toUnicode("音声2"), this);
	// ボタン「play2」の配置位置を指定
	play2 -> setGeometry(100, 80, 70, 25);
	
	// ボタン「play3」を作成
	play3 = new QPushButton(codec->toUnicode("音声3"), this);
	// ボタン「play3」の配置位置を指定
	play3 -> setGeometry(180, 80, 70, 25);
	
	// ボタン「stop」を作成
	stop = new QPushButton(codec->toUnicode("再生"), this);
	// ボタン「stop」の配置位置を指定
	stop -> setGeometry(20, 170, 70, 25);
	
	// ラベル「label」を作成
	label = new QLabel(codec->toUnicode("ステータス"), this);
	// ラベル「label」の配置位置を指定
	label -> setGeometry(20, 130, 400, 25);

	soundsupport();  // soundsupport() を実行する。

	QObject::connect( play1, SIGNAL(pressed()), this, SLOT(slot_pre_play()) );  // 「play1」が「clicked()」押されたら「this(=Mainwindow)」に対して「slot_pre_play()」を実行させる
	QObject::connect( play2, SIGNAL(pressed()), this, SLOT(slot_pre_play()) );
	QObject::connect( play3, SIGNAL(pressed()), this, SLOT(slot_pre_play()) );
	
	QObject::connect( stop, SIGNAL(clicked()), this, SLOT(slot_start()) );
}


// 音声を再生するためのスロット「slot_pre_play()」を作成
void Mainwindow::slot_pre_play()
{
	if( play1->isDown() )  // <条件>もしボタン「play1」が「isDown(=押される)」されたら
	{
		play(1);  // playに「1」をわたして実行
	} else if( play2->isDown() ){  // <条件>そうでなく、もしボタン「play2」が「isDown(=押される)」されたら
		play(2);  //  playに「2」をわたして実行
	} else if( play3->isDown() ){  // <条件>そうでなく、もしボタン「play3」が「isDown(=押される)」されたら
		play(3);  //  playに「3」をわたして実行
	}
}


// 呼び出された音声を再生する機能を作成
void Mainwindow::play(int play_no=0)
{
	if( play_no == 1 )  // <条件>もしplay_noが「1」なら
	{
		QSound::play("/mnt/card/1.wav");  // 「/mnt/card/1.wav」を再生する
	} else if( play_no == 2 ){  // <条件>そうでなく、もしplay_noが「2」なら
		QSound::play("/mnt/card/2.wav");  // 「/mnt/card/2.wav」を再生する
	} else if( play_no == 3 ){  // <条件>そうでなく、もしplay_noが「3」なら
		QSound::play("/mnt/card/3.wav");  // 「/mnt/card/3.wav」を再生する
	}
}


// サウンドサポートが利用できるかどうかをラベル「label」に表示する機能を作成
void Mainwindow::soundsupport()
{
	if(QSound::available() == 1)  // <条件>もしサウンドの「available()(=利用可能)」かどうかが「TRUE(=1)」なら
	{
		label -> setText(codec->toUnicode("サウンドサポートは利用できます。"));  // ラベル「label」の表示を「サウンドサポートは利用できます。」にする。
	} else {  // <条件>そうでなければ
		label -> setText(codec->toUnicode("サウンドサポートは利用できません。"));  // ラベル「label」の表示を「サウンドサポートは利用できません。」にする。
	}
}


// サウンドを再生するためのスロット「slot_start()」を作成
void Mainwindow::slot_start()
{
	QSound bucket3("/mnt/card/1.wav");
	bucket3.play();
}


(解説は、かきかけ)




というわけで、さっそくコンパイルして実行してみましょう。
ここでは、「~/SLZaurus/」以下に「sample0004」フォルダを作成し、その中にソースがあることを前提にしています。


Cygwinを起動して、次のコマンドを実行してください。



. ~/SLZaurus/bin/dev-arm-qpe.sh
cd ~/SLZaurus/sample0004
progen -o sample0004.pro
tmake -o Makefile sample0004.pro
make



これでエラーが出なければ、「sample0004」というファイルがソースと同一のフォルダに作成されているので、それをリナザウに移してターミナルから実行してみてください。
エラーが出た場合は、もう一度ソースを見直して、問題のある個所を修正しましょう。問題のある個所は、「make」後のエラー情報でも最低限のことは提供されます。




実行する場合は、サウンドファイルを「/mnt/card/」においてください。
サウンドの再生ができるようになりましたが、どうもいろいろ制限があるみたいで、使いかってはあまりよくありません。
もっと、いろんなことができる方法を探してみたいものですね。




<リファレンス>

QSound クラスリファレンス



<ソース>

sample0004.tar.gz




前へ ○○○ 「リナザウのソフトウェア開発」 ○○○ 次へ






inserted by FC2 system