Getting Started
Let’s start your mimium experiences
実行環境
mimiumは現在以下の環境で利用可能です。
- macOS(x86のみ)
- Linux(ALSAを利用します)
- Windows 10
Visual Studio Code拡張ではじめる
もっとも簡単にmimiumを利用する方法は無料のテキストエディタ/IDEであるVisual Studio Codeを利用する方法です。
- Visual Studio Code を公式Webサイトからインストールする。
- Visual Studio Codeを起動したら、拡張機能メニューを開く。 (Cmd+Shift+X).
- 検索欄から"mimium"と検索し、出てきた拡張をインストールする。
- `hello.mmm’という名前でファイルを作成し、以下のコードを貼り付けて保存し、再度開く。
- 最新版のmimiumバイナリをダウンロード、インストールするか聞くダイアログが現れるのでインストールする。
- Cmd+Shift+P でコマンドパレットを開き、“mimium"で検索する。 “Run currently opening file” を選択すると、ターミナルが新たに立ち上がり、現在開いているファイルを実行してくれる。
- Ctrl+Cを押すこと音を止めることができる。
// hello.mmm
fn dsp(){
output = sin(now*440*2*3.141595/48000)
return (output,output)
}
その他のインストール方法
GitHub Releaseより最新版のバイナリをダウンロードできます。bin/mimium
を適当な場所(macOS/Linuxであれば/usr/local/bin
など)にコピーしてください。
macOS,Linuxユーザーの場合はHomebrew/Linuxbrewを利用してインストールができます。
brew install mimium-org/mimium/mimium
手動ビルドなどより詳しい情報は インストールページを参照してください。
また、エディタにVisual Studio Codeを利用している場合は拡張機能の検索からmimium-languageをインストールすることでシンタックスハイライトが利用できます。これ以外の環境の場合はRustのシンタックスハイライトを利用すると概ね正しく表示してくれます。
実行
コマンドラインからmimium
を実行することでmimiumを利用できます。正しくインストールされていれば以下のコマンドからヘルプが参照できます。
現在の実行ディレクトリにhello.mmm
というファイルを作成し、上のコードをコピーして保存してください。
そして、ターミナルから以下のコマンドを実行してみましょう(スピーカーの音量に注意してください)。440Hzのサイン波が聞こえてくるはずです。
Making Soundのページからより詳しい文法の解説に進みましょう。
1 - インストール
mimiumをインストールしてみよう
Homebrewを使ったインストール
macOSとLinux向けのパッケージマネージャツール、Homebrewを利用すると、簡単にmimiumをインストールできます。
もしhomebrewをインストールしていない場合は、ターミナルアプリを開いて、以下の行をコピー&ペースト、Enterキーを押して実行してください。(より詳しい方法はhomebrewのドキュメントを参照してください。)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
brew
コマンドが使えるようになったら、以下のコマンドをコピー&ペースト、実行するとインストールされます。
brew tap mimium-org/mimium && brew install mimium
以下のコマンドを打ってバージョンが表示されたらインストール完了です!
mimium --version # will return mimium version:x.x.x
手動インストール
mimiumのビルド済みバイナリをGithub Release Pageからダウンロードすることが可能です。
mimium-vx.x.x-Darwin.zip がmacOS用、 mimium-vx.x.x-Linux.zip がLinux用、 mimium-vx.x.x-Windows.zip がWindows用です。
ダウンロードとzip展開が終わったら、bin
フォルダの中にあるmimium
プログラムを/usr/local/mimium
に、lib
フォルダにあるファイルすべてを/usr/local/lib
にコピー/移動/シンボリックリンクを貼るのいずれかを行ってください。GNU/Linuxにおいては/usr/local/lib
はデフォルトで動的リンクのライブラリパスに入っていないので、/usr/local/lib
を/etc/ld.so.conf.d/
配下のファイルに追記し、ldconfig
をroot権限で実行してください。Windowsでは適当な場所にダウンロードしたフォルダを配置して、環境設定からパスを通してください。
ソースからビルドする
mimiumの実行環境はC++で書かれていますので、ビルドにはC++のコンパイラーが必要です。
macOSの場合はxcode-select --install
を実行してインストールされるclang、Linuxの場合はGCC >= 9が推奨されています。(g++ on macやclang++ on Linuxでは標準ライブラリのリンクに競合を起こすことがあります)
Windowsの場合は、MSYS2のMinGW64環境を利用してビルドできます。
加えて、以下のツールやライブラリが必要になります。
macOSでは、xcode-select
でclangをインストールしたタイミングでcmakeとgitはインストールされています。
これらに加えて RtAudio(クロスプラットフォーム向けオーディオドライバライブラリ) にも依存しますが、RtAudioはcmakeが自動でダウンロード&ビルドするので手動でインストールする必要はありません。
これらのツールやライブラリを brew
やLinuxの場合は apt-get
、MSYS2ではpacman
を用いてインストールするのが簡単です。
Ubuntu 18.04(Bionic)では、
apt
でインストールできる
bison
は3.0.4と古いバージョンでこのプロジェクトに対応していません。手動でインストールする必要があります。
自動ビルド&テストのためのGithub Actions Workflow には依存パッケージのインストールや後述のビルド手順も含め、手動ビルドの手順が網羅されていますのでチェックしてみてください。
GitHubからソースコードをダウンロード
git clone https://github.com/mimium-org/mimium.git
cd mimium
# 'master' が安定版です。'dev'ブランチで開発版のビルドができます。他、v0.1.0などリリースバージョンのtagを用いてバージョンを変更することが可能です。
git checkout master
cmake -Bbuild . -DCMAKE_BUILD_TYPE=Debug
このステップでCMakeは自動でRtAudioをダウンロード&ビルドします。
cmake
コマンドには、-D
を先頭につけることで以下のようなオプションが渡せます。
-DCMAKE_INSTALL_PREFIX=/your/directory
後述のインストールステップのコピー先(標準では/usr/local)-DCMAKE_BUILD_TYPE=Debug
最適化のレベルの指定。 ‘Debug’, ‘Release’, ‘MinSizeRel’ , ‘RelWithDebinfo’から選べる-DCMAKE_CXX_COMPILER=/path/to/compiler
ビルドに使用するC++コンパイラの指定。-DBUILD_SHARED_LIBS=ON
ONにするとライブラリを動的リンクライブラリとしてビルドします(Linux、Windowsではうまく動かないケースがあります)。-DBUILD_TEST=ON
テストをビルド対象に含めます。-DENABLE_COVERAGE=ON
GCovを利用したカバレッジ計測のためのコンパイラオプションを有効化します。
ビルド
-j
はビルド時にCPUを並列で使用できる最大スレッド数を指定できます。-j8
なら最大8スレッド、番号なしの-j
は可能な限り多くのコア/スレッドを使用します。
インストール
cmake --build build target=install
アンインストール
cmake --build build --target uninstall
このアンインストールステップでは、先ほどのインストールステップで自動生成された build/install_manifest.txt
に書かれている情報を利用してファイルを削除します。もし失敗した場合はこのファイルの中身を確かめるか、もう一度ビルド、インストールを行ったあとアンインストールするを順番に行ってみてください。
バイナリでインストールした場合は/usr/local/bin/mimium
、/usr/local/lib/libmimium*
を削除してください。
ソースからビルドした場合は以下のコマンドでインストールできます。
Visual Studio Code向けシンタックスハイライト
シンタックスハイライトとして、クロスプラットフォームで動作するVisual Studio Code向けの拡張機能を用意しています。
vscode上でのextensionsパネルでmimium-language
と検索するか、以下のリンクよりインストールをしてください。
https://marketplace.visualstudio.com/items?itemName=mimium-org.mimium-language
より詳しい開発環境構築に関しては
環境構築を参照してください。
2 - サウンドを作る
ここではmimiumを使った基本的なサウンドの作り方を学びます。
440Hzのサイン波の音をつくろう
- 初めに「hello.mmm」というファイルを用意します。
- そのファイルに以下のスニペットを貼り付けて、ファイルを保存します。
fn dsp(){
output = sin(now*440*3.14*2/48000)
return (output,output)
}
- 最後にbashなどを使って、先程のプログラムを起動します。
3 - サンプル例
mimium初心者のための例を交えた簡単な機能紹介。
- dsp系
- selfを使用した例
- シンプルなエフェクト
- composition系
- ドレミ音
- リズムパターン
サンプル: ドレミ音
下の例では、システムのオーディオドライバーのサンプルレートが48000Hzの時、ドレミファソラシドを1秒おきに鳴らします。
notes = [260.7,293.3,330,347.7,391.1,440,495]
index = 0
fn updateIndex(){
index = (index+1)%7
updateIndex()@(now+48000)
}
updateIndex()@48000
fn dsp(){
vol = 0.2
octave = 1
sec = now/48000
freq = notes[index]
out = vol * sin(octave*freq*3.14*2*sec)
return (0,out)
}
チェックポイント1「配列」
notes = [260.7,293.3,330,347.7,391.1,440,495] // 1行目
mimiumでは、配列を定義することができます。配列の定義は[]
でおこないます。インデックスの先頭は0です。
この例のドレミ音を作る1行目の配列には、ドレミファソラシ音の周波数を格納し、その後の処理で使用しています。
- ド音: 260.7Hz
- レ音: 293.3Hz
- ミ音: 330Hz
- ファ音: 347.7Hz
- ソ音: 391.1Hz
- ラ音: 440Hz
- シ音: 495Hz
配列の利用の仕方は、1,2行目のように配列名[インデックス]
で表現します。
freq = notes[index] // 1,2行目
チェックポイント2 継時再帰(Temporal Recursion)
// 3~7行目
fn updateIndex(){
index = (index+1)%7
updateIndex()@(now+48000)
}
updateIndex()@48000
v0.3.0現在の仕様では、一般的な言語がもつforループ文は採用していませんが、再帰関数を定義して、再帰ループを3~6行目のように表現することができます。
ドレミ音の例では、7行目で48000サンプル時にupdateIndex()
を実行した後、関数内でnow
キーワードと@
キーワードを併用して、現時点から48000サンプル時点にupdateIndex()
を実行しています(5行目)。
チェックポイント3「nowキーワードと@キーワードの併用」
updateIndex()@(now+48000) // 5行目
mimiumでは、現在のサンプル数をnow
で取得することができます。ユーザーは、v0.3.0現在の仕様では、now
キーワードが、リアルタイム時間を表していないことに注意してください。単位はサンプルです。
また、mimiumには、@
キーワードという演算子があります。
これは 「@
キーワード以降の式で算出されたサンプル数のときに、@
前の関数を実行する」 という意味になります。
さらに、@
の時間は、オーディオドライバが起動してからの絶対時間を示しており、7行目のようにupdateIndex()@48000
と書いた場合は、必ず起動してから48000サンプル後に1度だけupdateIndex()
を実行する形になります。
例の5行目では、now
と48000
を+
演算子で結ぶことで、現時点から先のサンプル時点を定めることができ、さらに@
を使うことでそのサンプル時点で関数を実行することができます。
チェックポイント4「オクターブ」
// 8~15行目
fn dsp(){
vol = 0.2
octave = 1
sec = now/48000
freq = notes[index]
out = vol * sin(octave*freq*3.14*2*sec)
return (0,out)
}
音階は、振動数(Hz)が倍になれば1オクターブ上がり、反対に半分になれば1オクターブ下がる関係性があります。例の8〜15行目では、octave = 1
と固定なので260.7Hz〜495Hzのドレミファソラシド音を鳴らすのですが、例えばこの値を2と変更すれば1オクターブ上がった音階を表現することができます。