2006年01月26日

ogg playerを使う

702NKには標準でRealPlayerが搭載されており、iTunesのAACファイルも拡張子を.3g2に変更すれば再生できます。ただしmp3には未対応でトラックリストもいちいち作成する必要があるみたい。そこでフリーウェアのOggPlayerを導入。mp3対応、IDタグもiTunesでver.1.0にして渡せばOK。日本語表示もファイルの一部を修正するだけで可能になります。やっぱり曲名とか見られる方がいいよな。title, album, artist, genreのインデックスが付くし、使い勝手はiPod並みと言えましょう。シャッフルも出来るし。こうなると欲しくなるのは大容量のMMCと扱い易いヘッドフォン

mp3ファイルのIDタグの変換ですが、iTunesで対象のトラックを選択した状態でメニュー内 詳細設定>IDタグを変換 を選択し ID3 タグバージョンにチェックを入れ V1.0 を選択すればOKです。ちゃんと変換できたかどーかは対象トラックの「情報を見る」>概要で確認できます。

AudioEncoderというソフトでも、
mp3からoggに変換すると、タグがつきますね。
posted by シンビアン at 08:32| Comment(0) | TrackBack(1) | Vodafone 702NK / Nokia 6630 | このブログの読者になる | 更新情報をチェックする

ボーダフォンで音楽が聞きたい

702NKに音楽再生アプリ入れて MP3とOggの音楽ファイル聴いてます。

[1] 702NKに "OggPlayer"をインストールする
[2] PCを使用してCDから MP3またはOggの楽曲ファイルを作る
[3] 順番に再生したい場合 プレイリストのファイルを作る
[4] データをUSBかBlueTooth接続でPCから702NKのデータカードに書き込む
[5] 702NKのOggPlayerで音楽を再生する
posted by シンビアン at 08:22| Comment(0) | TrackBack(0) | Vodafone 702NK / Nokia 6630 | このブログの読者になる | 更新情報をチェックする

型定義 typedef

C言語の特徴であるデータを区別する型をプログラマが分かりやすい名称に定義し直すことができます。そのために用意されたキーワード(予約語)が typedef です。

■型定義(Type Definition)

typedef T my_type;

識別子my_type が型T を意味することになります。

* キーワード typedef は,便宜上,記憶域クラス指定子に含まれている。[C99, 6.7.1, 3] この結果,上は「式文」ではなく「宣言」に分類される。

次の場合,BOOLEAN は int を意味します。

typedef int BOOLEAN;
BOOLEAN true = 1;
BOOLEAN false = 0;

true や false は int型です。次の WEEK は要素数 7 の intの配列を意味します。

typedef int WEEK[7];
WEEK Jan1st = {4, 5, 6, 7, 8, 9, 10};

オブジェクト Jan1st は要素数 7 の int型配列です。

typedef struct list {
int n;
char str[20];
struct list *next;
} LIST;

LIST *head;

LIST は struct list型を意味し,したがって,ポインタ head は struct list型へのポインタです。
posted by シンビアン at 08:00| Comment(0) | TrackBack(0) | Symbian OS C++ 実践開発技法 | このブログの読者になる | 更新情報をチェックする

staticの使い方6〜C++における定数宣言〜

C言語では定数値をプログラムに埋め込む場合は #define をつかって定義しました。


/* C言語における定数宣言の例 */
#define MAX_VALUE 1000
#define MIN_VALUE 1

C++になり、型のチェックが厳しくなったため #define で定義した定数のように「型不定」のものはできれば使わないようにしよう、となりました。C++の参考書等を読むと定数値を扱う場合は const で変数を定義して使うように、と書いてあると思います。


// C++における定数宣言の例(駄目な例)
const int MAX_VALUE = 1000;
const int MIN_VALUE = 1;

ところがこれには欠点があります。上のような定義の仕方では、ヘッダファイル内に定数値を定義できないのです。これは、constで宣言した定数値は値の変更できないグローバル変数と同じ扱いである為、名称の衝突が起こるからだ。
そこで、C++で定数値を使いたい場合は次のように宣言の先頭にstaticをつけるとよい。


// C++における定数宣言の例
static const int MAX_VALUE = 1000;
static const int MIN_VALUE = 1;

一口メモ
const を使って定数値を宣言すると定数値を使うときに変数アクセスになるため実行速度が落ちると心配する方がいますが、その心配は無用です。よほど頭の悪いコンパイラで無い限り、コンパイル時に最適化が行われ #define で定義したマクロと同じ処理速度が得られます。
posted by シンビアン at 07:46| Comment(0) | TrackBack(0) | Symbian OS C++ 実践開発技法 | このブログの読者になる | 更新情報をチェックする

staticの使い方5〜静的メンバ変数(属性)〜

C++でプログラミングをしている時はたいていグローバル変数は使いません。グローバル変数はどこからでもアクセスできる為オブジェクト指向の「情報隠蔽」から道がそれてしまうからです。

それでも、いろいろなプログラムを実装していく上でクラス間の共通データの保持などでグローバル変数が欲しい状態があります。まぁ、あまりにもまれなので私にはそういった経験はありませんが、VCL等のGUI系のライブラリではグローバル変数を使って機能を実装している例をよくみかけます。
 
グローバル変数を使う必要がある例はまれですが、そのまれな例の中でさらにまれに「同一クラス間のみで共通する変数を持ちたい」場合があります。そういう時は、クラスの属性(メンバ変数)をstatic宣言し、静的メンバ変数にします。

静的メンバ変数を定義する方法は少し特殊でし。次の例のようにクラス宣言部の中で宣言し、クラス宣言部の外部で定義する必要があります。

// testclass.h ヘッダファイル
class testclass
{
:
static int FHandle; //静的メンバ変数の宣言
public:
:
:

};


// testclass.cpp 実装部
#include "testclass.h"

int testclass::FHandle; //静的メンバ変数の定義
posted by シンビアン at 07:45| Comment(0) | TrackBack(0) | Symbian OS C++ 実践開発技法 | このブログの読者になる | 更新情報をチェックする

staticの使い方4〜静的メンバ関数(メソッド)〜

時間クラスというものを考えてみてください。時間クラスは「時刻」を取り扱う物です。では、現在の時間を表すインスタンスを得たい場合にはどうしますか?現在の時間を得る関数でもつくりますか?それとも、「現在の時刻をセットする」メソッドを時間クラスのメンバ関数として定義しますか?

// 現在の時間を表す時間クラスのインスタンスを返す関数の例
TJikanClass GetNowTime( void )
{
:
:
return nowtime;
}

// 時間クラスのメンバ関数に「現在の時刻をセットする」ものを持つ例
class TJikanClass
{
:
:

public:
void SetNowTime( void ); // 現在の時間をセットする
   :
   :
};

どちらかというと、クラスのメンバ関数に実装するよりも、関数の戻り値として現在の時間を表すインスタンスを得る方がスマートだと思います。しかしできることならば時間クラスに関わる事なのだからクラス内のメソッドとして定義したい。でも、現在の時間を得るのにインスタンスを一度作成した後メソッドを呼ぶというのは面倒くさい。
 
そこで登場するのが 静的メンバ関数 です。静的メンバ関数は、クラスのインスタンスが無くても呼び出す事ができます。つまり普通の関数と一緒なのです。異なる所は呼び出し方法です。クラス TJikanClass の中の静的メンバ関数 GetNowTimeInstance() を実行したい場合は次のように呼び出します。


// クラス TJikanClass の中の静的メンバ関数 GetNowTimeInstance() を実行する方法
TJikanClass::GetNowTimeInstance();

静的メンバ関数を定義したい場合はクラス宣言の中の、関数宣言の前にstaticをつけます。関数定義の部分にはつける必要がありません。


// 静的メンバ関数の定義例
class TJikanClass;
class TJikanClass
{
:
:

public:
static TJikanClass GetNowTimeInstance( void );
};

TJikanClass TJikanClass::GetNowTimeInstance( void )
{
:
:
return nowtime;
}

なお、静的メンバ関数はたいてい、というか100% public部で宣言します。private部や protected部で宣言したらわざわざstaticにする意味が無いでしょ?
posted by シンビアン at 07:32| Comment(0) | TrackBack(0) | Symbian OS C++ 実践開発技法 | このブログの読者になる | 更新情報をチェックする

staticの使い方2〜関数外静的変数〜

今日は関数外でstaticをつけて変数を宣言した時の動作を紹介する。
 
通常ならば、関数の外で宣言した変数は「グローバル変数」「外部変数」「大域変数」とよばれ、どの関数からも参照できる事になっている。これは便利ではあるけれども、外部変数の数が多くなると管理がしっかりできず発見しづらいバグを生む原因として忌み嫌われている。しかし、どう考えても外部変数を使った方が効率がよいという場面は多々ある。そういう場合は当然の事ながら積極的に外部変数が利用されている。
 
staticを外部変数を宣言する時に使うと、その変数の有効範囲をファイル内のみ有効と狭める事ができます。この事で、外部変数の誤使用をある程度防ぐ事ができます。

/* main.c */

static int sGStatus; /* 他のファイルでは使って欲しくないので
静的変数として宣言した */

int main()
{
sGStatus = 100;
:
:
return 0;
}
/* test.c */

extern int sGStatus; /* リンク時にエラーが発生する。 */

:
:
:
posted by シンビアン at 07:24| Comment(0) | TrackBack(0) | Symbian OS C++ 実践開発技法 | このブログの読者になる | 更新情報をチェックする

staticの使い方1〜関数内静的変数〜

staticにはいくつかの使用方法がありますが、ここでは関数内で静的変数を使う方法を紹介します。
 
関数内静的変数とは何か。一言で言うと「内容をずっと保持している変数」となります。では、普通に宣言した場合の変数とstaticをつけて、静的変数として宣言した場合との挙動の差を見てみましょう。

#include

void testfunction( void )
{
int a = 0; /* 普通に宣言した場合の変数 */
static int b = 0; /* static をつけて静的変数として宣言したもの */

a++;
b++;

printf("a = %d , b = %d\n",a,b);

return;
}

int main()
{
testfunction();
testfunction();
testfunction();

return 0;
}
実行結果
a = 1 , b = 1
a = 1 , b = 2
a = 1 , b = 3

staticをつけるとどんな感じになるかのイメージはわかりましたか?
ちなみに、宣言の時

static int b = 0;

変数名の後についている「 = 0 」は、最初に一度だけ実行されます。つまり、静的変数の初期値ですね。静的変数は外部変数と扱いが似ているので、初期値は0なのですが、例え初期値が0でもわかりやすいように「 = 0 」を入れておいたほうが良いでしょう。
 
では、どのような時に関数内静的変数が使えるでしょうか?外部変数(グローバル変数)を使わないと作れないようなものの中で、ただ単純に前回の結果を保持しておきたいだけで外部変数を使っている関数は静的変数にできます。

/* 例:呼び出すたびに0、1を交互に返す関数 */
int alternatereturn( void )
{
static int data = 0;
int result = data;

if( data == 0 ){
data = 1;
} else {
data = 0;
}

return result;
}
posted by シンビアン at 07:22| Comment(0) | TrackBack(0) | Symbian OS C++ 実践開発技法 | このブログの読者になる | 更新情報をチェックする

staticの使い方3〜静的関数〜

static宣言された関数は静的関数と呼ばれ、関数外静的変数と同じように関数の有効範囲が定義されているファイル内のみ有効で、定義されているファイル外では利用できなくなります。
これは、オブジェクト指向のカプセル化(情報隠蔽)に似ています。

一口メモ
カプセル化というのは、誰でも利用できる関数や変数は極力少なくする事を言います。
これは、他の人(外部のファイル)は絶対に呼び出してはいけない、もしくは呼び出す必要が無いような関数は外部から見えなくしてしまった方が誤使用が減り、安全性が高くなるとい考えに基づいています。

静的変数を作る方法はいたって簡単で、プロトタイプ宣言の頭と関数定義の頭に static と書くだけです。注意点としては、静的関数のプロトタイプ宣言をヘッダファイルに書いてはいけません。これは静的関数の性質を考えれば当然の事ですが、一応頭に入れておいてください。


/* 静的関数の関数プロトタイプ宣言の例 */
static int testfunction( int value );


/* 静的関数の関数定義の例 */
static int testfunction( int value )
{
int a;
    :
    :
    :
return a;
}
posted by シンビアン at 07:19| Comment(0) | TrackBack(0) | Symbian OS C++ 実践開発技法 | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は1年以上新しい記事の投稿がないブログに表示されております。