成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何使用iPhone 播放 MIDI 文件方法

移動開發 iOS
本文介紹的是如何使用iPhone 播放 midi 文件方法,很詳細的為友們介紹了實力步驟,我們先來看內容。

iPhone 播放 midi 文件方法是本文要介紹的內容,吸納來看內容。iPhone 默認不帶播放MIDI的框架,所以播放MIDI還得尋求第3方的庫幫忙。這里使用的庫就是大名鼎鼎的 FMOD ,許多火爆游戲使用的都是這個庫。開發者可以免費下載使用。

首先下載安裝 FMOD API FOR IPHONE:http://www.fmod.org/index.php/release/version/fmodapi42607iphone- installer.dmg。

安裝后可以在目錄中看到不少示范代碼,可惜沒有MIDI。

自己寫一個:)感謝強大的api,寫起來異常輕松。

新建一個基于view項目

修改項目屬性,添加 Other Linker Flags 為 -lfmodexL_$PLATFORM_NAME

添加 Header Search Paths :/Developer/FMOD Programmers API iPhone/api/inc (默認是這個位置,修改成自己FMOD安裝的目錄)

添加 Library Search Paths :/Developer/FMOD Programmers API iPhone/api/lib (同上)

把 appDelegate 修改成 .mm 的后綴

MIDI 播放需要一個 DLS 文件, 在osx 下沒找到,這里使用了xp 自帶的 gm.dls 文件(3M 有點大~),拷貝到項目中。

修改ViewController 代碼如下 ,隨便在xib文件中鏈接兩個按鈕action上即可

運行(真機有效)

主要代碼

  1.   //  
  2.   // PlayMidiDemoViewController.m  
  3.   // PlayMidiDemo  
  4.   //  
  5.   // Created by xhan on 9/9/09.  
  6.   // Copyright In-Blue 2009. All rights reserved.  
  7.   //  
  8.   #import "PlayMidiDemoViewController.h"  
  9.   @implementation PlayMidiDemoViewController  
  10.   @synthesize status;  
  11.   @synthesize time;  
  12.   void ERRCHECK(FMOD_RESULT result)  
  13.   {  
  14.   if (result != FMOD_OK)  
  15.   {  
  16.   fprintf(stderr, "FMOD error! (%d) %s ", result, FMOD_ErrorString(result));  
  17.   exit(-1);  
  18.   }  
  19.   }  
  20.   - (void)viewDidLoad {  
  21.   [super viewDidLoad];  
  22.   system = NULL;  
  23.   sound1 = NULL;  
  24.   sound2 = NULL;  
  25.   channel = NULL;  
  26.   }  
  27.   - (void)didReceiveMemoryWarning {  
  28.   // Releases the view if it doesn't have a superview.  
  29.     
  30.   [super didReceiveMemoryWarning];  
  31.   // Release any cached data, images, etc that aren't in use.  
  32.   }  
  33.   - (void)viewDidUnload {  
  34.   // Release any retained subviews of the main view.  
  35.   // e.g. self.myOutlet = nil;  
  36.   }  
  37.   - (void)dealloc {  
  38.   [status release], status = nil;  
  39.   [time release], time = nil;  
  40.   [super dealloc];  
  41.   }  
  42.   - (void)viewWillAppear:(BOOL)animated  
  43.   {  
  44.   FMOD_RESULT result = FMOD_OK;  
  45.   char buffer[200] = {0};  
  46.   unsigned int version = 0;  
  47.   /*  
  48.   Create a System object and initialize  
  49.   */  
  50.   result = FMOD::System_Create(&system);  
  51.   ERRCHECK(result);  
  52.   result = system->getVersion(&version);  
  53.   ERRCHECK(result);  
  54.   if (version < FMOD_VERSION)  
  55.   {  
  56.   fprintf(stderr, "You are using an old version of FMOD %08x. This program requires %08x ", version, FMOD_VERSION);  
  57.   exit(-1);  
  58.   }  
  59.   result = system->init(32, FMOD_INIT_NORMAL | FMOD_INIT_ENABLE_PROFILE, NULL);  
  60.   ERRCHECK(result);  
  61.   // set up DLS file  
  62.   FMOD_CREATESOUNDEXINFO soundExInfo;  
  63.   memset(&soundExInfo, 0, sizeof(FMOD_CREATESOUNDEXINFO));  
  64.   soundExInfo.cbsize = sizeof(FMOD_CREATESOUNDEXINFO);  
  65.   char dlsName[200] = {0};  
  66.   [[NSString stringWithFormat:@"%@/gm.dls", [[NSBundle mainBundle] resourcePath]] 
  67. getCString:dlsName maxLength:200 encoding:NSASCIIStringEncoding];  
  68.   soundExInfo.dlsname = dlsName;  
  69.   // midi one  
  70.   [[NSString stringWithFormat:@"%@/Bass_sample.mid", [[NSBundle mainBundle] resourcePath]] 
  71. getCString:buffer maxLength:200 encoding:NSASCIIStringEncoding];  
  72.   result = system->createSound(buffer, FMOD_SOFTWARE | FMOD_CREATESTREAM, &soundExInfo, &sound1);  
  73.   // ERRCHECK(result);  
  74.     
  75.   result = sound1->setMode(FMOD_LOOP_OFF);  
  76.   // ERRCHECK(result);  
  77.   // midi two  
  78.   [[NSString stringWithFormat:@"%@/Drum_sample.mid", [[NSBundle mainBundle] resourcePath]]
  79.  getCString:buffer maxLength:200 encoding:NSASCIIStringEncoding];  
  80.   result = system->createSound(buffer, FMOD_SOFTWARE | FMOD_CREATESTREAM, &soundExInfo, &sound2);  
  81.   result = sound2->setMode(FMOD_LOOP_OFF);  
  82.   // timer = [NSTimer scheduledTimerWithTimeInterval:0.05 target:self selector:@selector(timerUpdate:) userInfo:nil repeats:YES];  
  83.   }  
  84.   - (IBAction)playSound1:(id)sender  
  85.   {  
  86.   FMOD_RESULT result = FMOD_OK;  
  87.   result = system->playSound(FMOD_CHANNEL_FREE, sound1, false, &channel);  
  88.   ERRCHECK(result);  
  89.   }  
  90.   - (IBAction)playSound2:(id)sender  
  91.   {  
  92.   FMOD_RESULT result = FMOD_OK;  
  93.   result = system->playSound(FMOD_CHANNEL_FREE, sound2, false, &channel);  
  94.   ERRCHECK(result);  
  95.   }  
  96.   - (void)timerUpdate:(NSTimer *)timer  
  97.   {  
  98.   }  
  99.   @end 

 

小結:關于如何使用iPhone 播放 MIDI 文件方法介紹完了,希望本文讀你有所幫助!

責任編輯:zhaolei 來源: 互聯網
相關推薦

2011-07-22 15:59:15

iPhone 聲音 文件

2011-08-17 14:57:31

iPhone應用視頻播放

2011-08-02 16:58:15

iPhone AVAudioPla 音頻播放

2022-04-22 17:07:21

MIDI傳輸協議音樂技術

2009-06-14 21:47:14

MIDIJava程序

2011-08-10 15:58:58

iPhone視頻

2011-08-08 10:23:41

iPhone 流播放 文件

2011-07-18 15:32:14

iPhone 錄音 播放

2011-07-21 15:05:14

iPhone 數據庫

2011-08-18 13:37:57

iPhone項目靜態庫

2011-08-10 16:08:02

iPhoneProtocol協議

2011-08-15 09:58:25

iPhoneXib文件UITableView

2011-07-20 16:21:20

iPhone 視頻 播放器

2011-08-08 18:19:09

iPhone音頻播放

2011-07-27 09:50:31

iPhone AVAudioPla 音頻

2011-08-03 17:27:40

iPhone UIScrollVi

2011-08-08 14:07:49

iPhone開發 字體

2009-08-25 14:26:28

C#播放AVI文件

2011-07-26 16:33:56

iPhone Delegate

2011-08-12 13:35:23

iPhone文件流ASIHTTPRequ
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久青 | 国产精品久久久久久久久久 | 国产精品精品3d动漫 | 久久9视频 | 亚洲视频一区二区三区 | 天天看夜夜 | 久草.com| 国产a区| 日韩精品一区二区久久 | av激情影院 | 暖暖日本在线视频 | 99精品视频在线观看 | 国产精品91久久久久久 | 精品欧美一区二区三区久久久小说 | 国产精品久久久久久久久久三级 | 久久1区| 毛片在线看片 | 国产美女永久免费无遮挡 | 日韩中文字幕视频在线观看 | 国产福利在线小视频 | 日本免费一区二区三区四区 | 国产精品久久久乱弄 | 中文字幕 在线观看 | 国产视频一区二区 | 伊人久久大香线 | 亚洲精品丝袜日韩 | 亚洲码欧美码一区二区三区 | 亚洲精品456 | 日韩一级黄色片 | 国产精品亚洲一区二区三区在线 | 成人欧美一区二区三区黑人孕妇 | 亚洲国产片 | 色黄网站 | 97日日碰人人模人人澡分享吧 | 亚洲综合久久久 | 欧美一级在线免费观看 | 国产精品久久久久久久久免费樱桃 | 日本午夜精品一区二区三区 | 特黄毛片视频 | a在线免费观看 | 日本一二区视频 |