ランダム演奏MIDIファイルを生成する

プログラミングと身体最終更新:

ランダムに音符を設定しMIDIファイルとして出力するアプリケーションを制作します。

MIDIファイルをゼロから作成するため、MIDIファイルの形式と知識、2進数と16進数のデータを確認しながらファイルを作っていく方法をご紹介します。

また、制作手段はC++でアプリケーションのコアを作り、Webアプリとして公開するためWebAssemblyを使用します。

1. MIDIファイルとは

MIDIファイルとは何かを簡単にご説明します。

MIDIについて

 MIDIは、Musical Instrument Digital Interfaceを略した言葉です。この形式は、音楽に関する情報、つまり音符を表現した情報を記録し、それを電子楽器の間で送受信できるようにする規格です。

MIDIファイルとは

MIDIファイルとは

記録したい音符の情報とは?

 上の写真は、筆者が使用するCubase(バージョン12)という音楽制作ソフトウェアです。ほとんどの音楽制作ソフトウェアは、画面下のピアノロールという領域に、音符を表現した「横の棒」を書き入れることで音を記録します。

 横の棒は、音程(音の高さ)と長さを持ち、鍵盤でいうならどれほど強く押したかに当たるVelocityという強さが記録できます。そのような情報をたくさん用意し、画面右に見えている楽器ソフトウェアに送ることで、最終的な音を作り出します。

制作物のイメージ

制作物のイメージ

プロジェクトの最終形

 このプロジェクトの最終形は、以下のリンクで確認できます。書き出されたMIDIファイルは音楽ソフトウェアで使用でき、基本設定のピアノ音色でもプレイヤによっては聴くことができます。

こちらでご確認ください

2. 制作のイメージ

プロジェクトの構成をイメージを中心にラフな形で考えます。

バイナリーデータをファイルに書き込もう

 それでは、まずはプログラミングでファイルにデータを書きこむことから始めましょう。C++言語で、ファイルに何らかのデータを書き込むには、C++が提供するofstreamという道具を使用します。

道具の準備

下のコードの最初に、
#include < iostream >
#include < fstream >
を入れましょう。

そうすることで、InputとOutput(io)を流れるデータのように?(Stream?)扱える道具を使えるようになり、また、ファイル(f)に関しても扱えるようになります。

ファイルを書き込むプログラム

//
#include < iostream >
#include < fstream >


int main () {

	// 入力を受け付けるための空間を準備
	char inputData[100];

	// OFSTREAMのオブジェクトを生成
	std::ofstream outputFile;

	// ファイル名を指定して開く
	outputFile.open("書き出したファイル.dat");

	// ユーザに指示を見せる
	std::cout << "何か入力してEnter!(100文字)" << std::endl;
	std::cout << ">> "; 

	// ユーザの入力を受け付ける
	// 一行分入力される、つまり改行文字が入っている箇所まで入力となる
	// または、
	// 区切り用の文字を指定して別の行にすることも可能
	std::cin.getline(inputData, 100);

	// 保存されたデータをファイルとして入れる
	outputFile << inputData << std::endl;


	// 書き込み用として開かれている
	// ファイルオブジェクトを閉じる
	outputFile.close();


	return 0;

}

コンパイルを行う

g++ main.cpp -o main

コンパイルと実行

g++ main.cpp -o main

は、main.cppファイルを、mainという名前の実行できるファイルに変換する命令です。

それで出来たmainというファイルを、./mainで実行しています。

実行ができるファイルは、WindowsやMac、Linuxなど、実行をする環境によって異なります。

例えば、Windowsでは実行できるファイルをEXEという拡張子をつけますし、MacやLinuxには拡張子がありません。

* 現在教材を執筆中です *

* 現在教材を執筆中です *
← コース一覧へ戻る ページの先頭へ ↑