[Objective-C]iOSで、リソースファイルから音楽を再生する

リソースファイルから音楽を再生。

「再生」「一時停止」「停止」ができればOK。生のオーディオデータを加工したりはしない。という条件ならば、AVFoundationフレームワークのAVAudioPlayerを用いると簡便。

まずは、SingleApplicationでプロジェクトを作成。プロジェクト名はSampleAVAudioPlayerにしてみた。
2013-08-08_01.0createProject
2013-08-08_01.1createProject

AVFoundationフレームワークを加える。
2013-08-08_02addFramework

ViewController.hにAVFoundationフレームワークをimportする。
2013-08-09_02.1importFramework

ボタンを配置。
2013-08-08_03layoutBtn

ボタンとViewController.m間に、Actionを作成してつなげる。
2013-08-08_05action

使用するオーディオファイルをプロジェクトに加える。
2013-08-08_06addSound

オーディオプレイヤーを現すpropertyをViewController.mに加える。
2013-08-08_07addProperty

オーディオプレイヤーにオーディオファイルをセットするコード。
2013-08-08_08viewdidload

各ボタンのアクションに、「再生」「一時停止」「停止」機能を加える。
2013-08-08_09btnActionCord

Playボタンを押すと、オーディオファイルの再生。Pauseボタンで一時停止。Stopボタンで停止し、オーディファイルの再生位置を冒頭に戻します。

手を加えたソースコードは以下のようになります。
ViewController.h

//
//  ViewController.h
//  sampleAVAudioPlayer

#import 
#import 

@interface ViewController : UIViewController

@end

ViewController.m

//
//  ViewController.m
//  sampleAVAudioPlayer

#import "ViewController.h"

@interface ViewController ()
@property AVAudioPlayer* player;

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
	// Do any additional setup after loading the view, typically from a nib.
    
    // リソースファイルをAVAudioPlayerにセット。
    NSString *path = [[NSBundle mainBundle] pathForResource:@"testSound" ofType:@"mp3"];
    NSURL *url = [NSURL fileURLWithPath: path];
    self.player = [[AVAudioPlayer alloc] initWithContentsOfURL: url error:nil];
}

- (IBAction)pushPlay:(id)sender {
    if(!self.player.isPlaying){
        [self.player play];
    }
}
- (IBAction)pushPause:(id)sender {
    if(self.player.isPlaying){
        [self.player pause];
    }
}
- (IBAction)pushStop:(id)sender {
    if(self.player.isPlaying){
        [self.player stop];
        self.player.currentTime = 0.0;
    }
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

SiONさわってみた

SiONをさわってみた。SiONというのは、keim_at_Siさん作のflash用のサウンドライブラリです。

keim/SiON – Spark project  より

PSG/FM/WaveTable/PCM/物理音源,MMLコンパイラ/シーケンサ,サウンドエフェクタを備えた,統合サウンドライブラリになる予定です.
MMLを利用した音楽再生,音(波形)の生成/合成/加工,インタラクティブな同期再生,DisplayObject?との連携などが簡単に行えます.

ものすごい多機能で奥深いライブラリです。とはいえ、自分には、音楽、波形での音というもの、MMLと全般にわたって知識が乏しいので、初歩的な操作を色々調べながら、学んで生きたいと思います。

ということで、まずMML。Music Macro Languageのことで、”CDE”とかけばドレミと鳴るといった感じ。

Music Macro Language – Wikipedia

WikipediaのMMLのページで、MMLの読み方が一応分かるということで、SiONで使われている音楽のデータを見てみる。

MML Database | MMLTalks

ところが、どうやらMMLといっても、もっと拡張された言語で書かれているようだ。

TSSCPというのがあって、MMLを拡張して、制御命令など、さらに色々なことができるやつみたい。

TSSCP まとめwiki

 SiONでは、TSSCP/偽TSSCPのMMLをベースにして拡張したMMLが使用されているとのこと。

mmlの最前線に立ち続ける覚悟はあるか – Simple Inspiration

SiOPM MML reference (version 0.6.0) 

リファレンスを見ると、ほんとにものすごくいろいろ機能がある。音源やエフェクタなどなど、ちゃんとつかえるようになったら、ものすごくいろいろできそう!

実際に音を鳴らすには

2.SiON で音を鳴らす. – Simple Inspiration

keim_at_Si codes | wonderfl build flash online

を参考に色々いじくって、できたのがこれ。

まずは、音色を変更するというのをやってみた。

SiONさわってみた – wonderfl build flash online