当前位置:&&&&&&&&&&&&星界边境演奏音乐替换方法 怎么演奏自定义MIDI音乐星界边境演奏音乐替换方法 怎么演奏自定义MIDI音乐
??乐器演奏系统是玩家比较喜欢的项目,在这里给大家分享一下如何将midi文件转化为abc文件并导入游戏文件夹,最终在游戏中使用乐器演奏自己喜欢的自定义曲目。?乐器清单:首先我们需要StarboundComposer这个官方出的可以将midi文件转为abc文件的应用,下载地址:下载进入转好的abc文件的压缩包:下载进入Midi文件可以在Midishow网站上下载,点击进入曲子页面后,单击自定义下载,进入编辑页面,拉到最下面点击下载就可以免积分下载Midi文件了。将StarboundComposer安装好后,打开程序会首先需要设定Starbound的游戏路径。如果是steam版,路径如图:设定好路径后就可以转换midi文件为abc文件,以我选中的这首【触手猴】亡き王女の為のセプテット.midi为例。单击Starbound Composer第二行工具栏,第二项Import MIDI选项。在弹出的文件选择中选中触手猴】亡き王女の為のセプテット.midi,单击打开键。会出现下图:此时单击音轨左侧中间空白处select track按钮,选中音轨:单击第二层工具栏save selected。将文件重命名为B1 Pavane pourune infante défunte后,单击保存。注意保存的文件名必须为英文,不然进入游戏后无法读取。 打开保存B1 Pavane pourune infante &défunte的文件夹,将文件复制到SteamsteamappscommonStarboundssetsusersongs文件内。打开游戏后即可选择曲目进行演奏: 而有的MIDI文件未整合为一个音轨,如下面这个例子:打开后如下图,这样的MIDI文件必须先将所有音轨整合为一个音轨后再导出为abc文件。首先单击第一行工具栏的Track,选择select all,即可将所有音轨选中。 再选择Track项目中Merge Selected选项,将所有音轨合成为一条音轨,合成后的新音轨会出现在所有音轨的最下方。 此时单击第一行工具栏的Track,选择Deselect all,即可取消之前的选中音轨。最后选中最后一条合成音轨,将其导出为abc文件即可。
相关问答 13:54 14:41 14:52 14:34 14:18 14:15
手机游戏推荐
相关攻略相关补丁
本类最新更新 12345678910
热门动作冒险推荐星级:推荐星级:推荐星级:推荐星级:推荐星级:揭秘:游戏音乐是怎么制作出来的(三)
这里我不说作曲、编曲的事情了,那个实在没法说。简言之,面对一个游戏场景,你要做的第一件事情,就是根据公司的要求和自己的理解,在头脑中形成一首曲子,然后用电脑音乐的形式制作出来。
电脑音乐,或者说MIDI,不过是一种形式、一件工具,帮助我们把脑子里的音乐表现出来给别人听,至于你想做的音乐到底是怎样的,那只能问自己了。
下面我直接从电脑音乐制作讲起。
第一步当然是制作MIDI,制作MIDI当然需要音序器软件,我使用Cakewalk
Sonar。图1是我制作好的MIDI文件,大家看到了,一轨一轨的(废话)。
(图1 《加洲旅馆》的MIDI文件)
这一步,是制作的最基本的步骤,我想不用我多说了,如果你还不会制作MIDI,请先阅读音序器软件的使用说明。如果我们只是为了制作MIDI,给别人听我们做的.mid文件的话,那么,后期我们要对每一轨再根据需要添加效果。最常用的,当然就是各种控制轮。我简单说一下吧,如下图:在钢琴卷帘窗的左下角,有几个窗口,通过它们,就可以调用我们需要使用的控制轮。在钢琴卷帘窗的下半部分,有一个窗口,可以“画”出各种参数的变化。
(图2 控制轮)
(图3 控制轮)
我们看到了,在第一个下拉菜单里有几个选项,而选了"CONTROL"以后,第二个菜单里会出现很多控制轮:
力度(VELOCITY),顾名思义,用来调整音符的力度,就像我们演奏乐器一样,要表达不同的情感,使用的力度是不同的。很多初学者都容易认为它是控制音量大小的,其实这是不对的——当然,力度大小不同,音量也会不同。在MIDI里,我们感觉并不是很明显,但是,当我们调用音源音色的时候,这个东东的作用就大了,很多音色如GIGA的采样音色,都是有力度分层的,也就是说,在一个键位上,使用的力度不同,音色会有很大的差异。这一点在后面说到使用软音源的时候我会详细说明。
控制轮(CONTROL)常用的有:
颤音(MODULATION) 在钢琴卷帘窗的下部窗口里,输入一个时值长一点的弦乐音色,用铅笔工具画一条曲线,大家就可以听到效果了。
7 音量(VOLUME) 控制声音大小的变化。
10 相位(PAN) 就是能控制声音"在左边"还是"在右边"。
11表情(EXPRESSION) 这个东西说起来挺复杂,它很难和力度或音量区分开,但是,相信学过乐器的人,应该都知道"表情"是什么概念,大家也可以自己划一条曲线来听听效果。
、92、93、95几个轮都是控制混响深度、高音、合唱等效果的,一般做MIDI的时候,最后要给音轨上适量添加这几种的效果,使声音听起来不那么“干”。
OK,MIDI制作并不是我要说的重点,所以简单地一带而过,回到我们的主题上来,要说明的是,我做的这首《加洲旅馆》当时是MID格式传到站上的,所以为了提高效果,我使用了YAMAHA
SYXG100软音源,也就是说,不是GM的,而是XG格式的,如果要制成MP3,我还要把原来添加的很多参数都去掉,因为我要调用GIGA音色了,鸟枪换大炮了。如果你没有GIGA音色,只想用XG音色的话,那么就需要把各轨的音色、声音比例、混响、合唱等效果都调好,自己听上去觉得满意了,就可以直接跳到单轨录音那一章了。
最后,存盘的时候,要注意一点,因为你做的不再是MID文件,所以不要再保存为.MID格式,应该存为.CWP格式,否则的话,你的分轨以及调用软音源什么的,很多东西存成MID文件以后就都"丢"了。
好了,MIDI文件已经制作完成,下面,我们就要开始调用各种音色了。
准备好了么?
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。如何在游戏制作中使用MIDI 文件演奏音乐
如何在游戏制作中使用MIDI 文件演奏音乐
下面用 DirectX 8 来演奏音乐(MIDI 文件)。 DirectX 的标准声音文件好象是 t ,不过 MIDI 格式的文件也可以直接播放。 程序概要: 1. 从 WinMain() 中调用开始演奏的函数(InitDirectMusic),在这个函数中进行演奏音乐的全部处理,返回后只是打开 DialogBox(对话框) 让人欣赏音乐。 2. 关闭 DialogBox 时调用停止演奏的函数(FreeDirectMusic),释放所有 object(对象) 并退出程序。 3. 讲得好象还不是太清楚,这里再附加几条说明。(-.-;) (^_^; hr=CoInitialize(NULL); 初始化 DirectMusic 的 COM(Component Object Model|组件对象模型)。 InitializeSynth() 初始化 Software Synthesizer(软件合成) 的函数。 LoadSegment() 载入演奏文件的函数。 注意该函数中如下一段代码: wcscpy( ObjDesc.wszFileName, L"Midi.mid" ); 在这里设定要演奏的 MIDI 文件名。 自己准备个喜欢的 MIDI 文件,改名为 Midi.mid ,放进工程文件夹。 下面说明建立工程的步骤: 1. 新建一个 Win32 Application 空白工程,命名为 "Midi"。 2. 向工程中新建一个 C++ Source File ,命名为 "midi" ,向其中键入篇末附带的源程序。 3. 选择菜单 [Insert|插入]-[Resource...|资源...] 打开 [Insert Resource|插入资源] 面板,在左栏内选中 [Dialog|对话框] ,然后点击 [New|新建] : (参见 §06. 显示 Dialog Box (对话框)) 这回的 DialogBox 只需要一个 ID = IDC_CLOSE , Caption = CLOSE 的按扭: 保存资源文件,文件名 "dialog.rc" ,然后选择菜单 [Project|工程]-[Add To Project|添加到工程]-[Files...|文件...] ,向工程中添加下面两个文件: dialog.rc resource.h (参见 §06. 显示 Dialog Box (对话框)) 4. 选择菜单 [Project|工程]-[Settings...|设定...] 打开[Project Settings|工程设定] 面板,点击 [Link|链接] 标签,向 [Object/library modules|对象、库模块] 栏内添加下面一个库文件: dxguid.lib
5. 编译并执行! 源程序: /****************************************************/ /*★ 演奏音乐(MIDI 文件) 前田 稔 ★*/ /****************************************************/ #include #include #include "resource.h" #define ERRMSG(x) MessageBox(NULL, x, "PlayPri", MB_OK); // Global variables for the DirectMusic sample IDirectMusicLoader8* g_pLoader = NULL; IDirectMusicPerformance8* g_pPerformance = NULL; IDirectMusicSegment8* g_pSegment = NULL; // 函数类型说明 HRESULT InitDirectMusic(LPSTR lpCmdLine ); HRESULT InitializeSynth(); HRESULT LoadSegment(); HRESULT FreeDirectMusic(); //★ DlgProc() LRESULT CALLBACK DlgProc(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam) { switch (message) { case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_CLOSE: PostQuitMessage(0 ); } case WM_CLOSE: EndDialog(hDlg, TRUE ); return (TRUE); } return FALSE; } //★ Windows 主函数 int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { HRESULT hr = InitDirectMusic(lpCmdLine ); if (FAILED(hr)) { FreeDirectMusic(); return FALSE; } // Display the main dialog box. DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,(DLGPROC)DlgProc); FreeDirectMusic(); return TRUE; } //★ InitDirectMusic() HRESULT InitDirectMusic(LPSTR lpCmdLine ) { HRESULT // Initialize COM hr = CoInitialize(NULL); if (FAILED(hr)) { ERRMSG("Could not initialize COM"); } // Create loader object hr = CoCreateInstance(CLSID_DirectMusicLoader, NULL, CLSCTX_INPROC, IID_IDirectMusicLoader8, (void**)&g_pLoader ); if (FAILED(hr)) { ERRMSG("Could not create DMusic Loader"); } // Create performance object hr = CoCreateInstance(CLSID_DirectMusicPerformance, NULL, CLSCTX_INPROC, IID_IDirectMusicPerformance8, (void**)&g_pPerformance ); if (FAILED(hr)) { ERRMSG("Could not create DMusic Performance"); } // Initialize the software synthesizer hr = InitializeSynth(); if (FAILED(hr)) // Load the segment hr = LoadSegment(); if (FAILED(hr)) { ERRMSG("Could not load segment"); } // set the segment to repeat many times g_pSegment->SetRepeats(200); g_pPerformance->PlaySegment(g_pSegment, DMUS_SEGF_BEAT, 0, NULL ); return S_OK; } //★ InitializeSynth() HRESULT InitializeSynth() { HRESULT hr = g_pPerformance->Init(NULL,NULL,NULL); if (FAILED(hr)) { ERRMSG("Could not initialize performance"); } BOOL fAutoDownload = TRUE; g_pPerformance->SetGlobalParam(GUID_PerfAutoDownload,&fAutoDownload,sizeof(BOOL)); hr = g_pPerformance->AddPort(NULL ); if (FAILED(hr)) { ERRMSG("Could not add port to performance"); } return S_OK; } //★ LoadSegment() HRESULT LoadSegment() { HRESULT DMUS_OBJECTDESC ObjD // Object descriptor for pLoader->GetObject() // sections load as type Segment, as do MIDI files, for example. ObjDesc.guidClass = CLSID_DirectMusicS ObjDesc.dwSize = sizeof(DMUS_OBJECTDESC); // wcscpy(ObjDesc.wszFileName, L"t" ); wcscpy(ObjDesc.wszFileName, L"Midi.mid" ); ObjDesc.dwValidData = DMUS_OBJ_CLASS | DMUS_OBJ_FILENAME; hr = g_pLoader->GetObject(&ObjDesc, IID_IDirectMusicSegment, (void**)&g_pSegment ); } //★ FreeDirectMusic() HRESULT FreeDirectMusic() { // Release the Segment if (NULL != g_pSegment) { g_pSegment->Release(); g_pSegment = NULL; } // If there is any music playing, stop it. if (NULL != g_pPerformance) { g_pPerformance->Stop(NULL, NULL, 0, 0); // CloseDown and Release the performance object g_pPerformance->CloseDown(); g_pPerformance->Release(); g_pPerformance = NULL; } // Release the loader object if (NULL != g_pLoader) { g_pLoader->Release(); g_pLoader = NULL; } // Release COM CoUninitialize(); return S_OK; }
H3C认证Java认证Oracle认证
基础英语软考英语项目管理英语职场英语
.NETPowerBuilderWeb开发游戏开发Perl
二级模拟试题一级模拟试题一级考试经验四级考试资料
软件测试软件外包系统分析与建模敏捷开发
法律法规历年试题软考英语网络管理员系统架构设计师信息系统监理师
高级通信工程师考试大纲设备环境综合能力
路由技术网络存储无线网络网络设备
CPMP考试prince2认证项目范围管理项目配置管理项目管理案例项目经理项目干系人管理
职称考试题目
招生信息考研政治
网络安全安全设置工具使用手机安全
生物识别传感器物联网传输层物联网前沿技术物联网案例分析
Java核心技术J2ME教程
Linux系统管理Linux编程Linux安全AIX教程
Windows系统管理Windows教程Windows网络管理Windows故障
数据库开发Sybase数据库Informix数据库
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&}