2012年3月26日月曜日

iphoneアプリの作り方(音楽の再生と停止)AVFoundation.framework

ちゃんと理解するために、しっかり音楽データの扱い方を復習しておこうと思います。

1、【利用するワークフレーム】AVFoundation.frameworkをインポートする。

.hファイルに記述
---------------------

#import

@interface atentionViewController : UIViewController {
IBOutlet UIButtom *playButtom;
}

@property (nonatomic, retain) UIButton *playButton;
@property (nonatomic, retain) AVAudioPlayer *audio;

-(IBAction)play:(id)sender;

@end

---------------------

解説

#import
AVFoundation.frameworkを使えるようにするために、インポートします。


IBOutlet UIButtom *playButtom;
音楽を再生したりストップしたりするために、
アウトレットを作成します。
ここで*マークをつけるのを忘れずに!

↓↓なんで*マークをつけるんだっけという方はこちら

oObjective-cでインスタンス変数を宣言するときに、
型が「クラスオブジェクト型」の場合は、
変数名の頭にアスタリスクをつける
という決まりになっています。

インスタンス変数っていうのは、
同じクラスに対する全てのインスタンスが同じ値を共有する変数のこと。


@property (nonatomic, retain) UIButton *playButton;
これは、アウトレットに設定したボタン用に設定します。


@property (nonatomic, retain) AVAudioPlayer *audio;
これは、音楽を再生するために設定します。

▼詳しくはこちら!アクセサメソッドについて


-(IBAction)play:(id)sender;
これはボタンが押されたときのアクションを設定する用です。

これで.hのファイルはおしまいです。
次は、.mファイルです。


.mファイルに記述
---------------------

#import "atentionViewController.h"

@implementation atentionViewController

@synthesize playButton;
@synthesize audio;

- (void)viewDidLoad {
[super viewDidLoad];
NSString *path = [[NSBundle mainBundle] pathForResource:@"jingle13" ofType:@"wav"];
NSURL *url = [NSURL fileURLWithPath:path];
audio = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
}

-(IBAction)play:(id)sender {
if( !audio.playing ){
[audio play];
[playButton setTitle:@"play" forState:UIControlStateNormal];
} else {
[audio pause];
[playButton setTitle:@"stop" forState:UIControlStateNormal];
}
}

- (void)dealloc {
[audio release];
[playButton release];
[super dealloc];
}

@end

---------------------


解説

@synthesize playButton;
@synthesize audio;
アクセサメソッド用にシンセサイズします。
ボタンと、音楽の再生用です。


- (void)viewDidLoad {
[super viewDidLoad];
NSString *path = [[NSBundle mainBundle] pathForResource:@"jingle13" ofType:@"wav"];
NSURL *url = [NSURL fileURLWithPath:path];
audio = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
}

- (void)viewDidLoadは、その名前の通り、
ビューが読み込まれた直後に読み込まれるファイル。

デフォルトで[super viewDidLoad]は書かれているので、
今回は、

NSString *path = [[NSBundle mainBundle] pathForResource:@"jingle13" ofType:@"wav"];
NSURL *url = [NSURL fileURLWithPath:path];
audio = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];

ここの解説です。

NSString *path = [[NSBundle mainBundle] pathForResource:@"jingle13" ofType:@"wav"];
音楽ファイルがどこにあるかファイルパスをpathに渡します。
今回は、jungle13.wavという音楽ファイルをresourceフォルダに入れました。
@"jingle13" ofType:@"wav"こんな感じで書きます。

NSURL *url = [NSURL fileURLWithPath:path];
先ほどpathに入れたファイルパスをURLとして渡し、初期化します。

audio = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
audioインスタンス変数に、音楽データが入っている場所を渡します。

ここはいつも同じなので、
おまじないとして覚えてしまってもいいかもです。


-(IBAction)play:(id)sender {
if( !audio.playing ){
[audio play];
[playButton setTitle:@"play" forState:UIControlStateNormal];
} else {
[audio pause];
[playButton setTitle:@"stop" forState:UIControlStateNormal];
}
}

-(IBAction)play:(id)sender {}

ボタンが押されたときのアクションをここのカッコの中に書きます。

if( !audio.playing ){
もし、音楽が再生されていなかったら
(!)っていうのは否定の意味になります。

[audio play];
音楽を再生します。
ここでの音楽の再生やストップは、
[audio play]、[audio stop]、[audio pause]になります。


[playButton setTitle:@"play" forState:UIControlStateNormal];
ボタンの表示をplayにします。
UIControlStateNormal ボタンが有効な時(通常の状態)
UIControlStateHighlighted ボタンが触られている間の状態
UIControlStateDisabled ボタンが無効な時(Disable状態)
です。

else以下はそうでなかったら(音楽が再生されていたら)
音楽を一時停止して、ボタンの表示をstopにするということです。


- (void)dealloc {
[audio release];
[playButton release];
[super dealloc];
}

最後はインスタンス変数とかをリリースしたら終了です!!!




最後に

後は、resorceファイルに音楽ファイルをいれること
interfacebuilderでボタンを設置し、アクションを設定すること

以上でアプリの完成です!

0 件のコメント:

コメントを投稿