6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Raspberry PiとMIDIインターフェースでデバイス開発をする

Last updated at Posted at 2018-05-13

この記事では、Raspberry PiとMIDIインターフェースを組み合わせて一つの独立したデバイスを作ります。

Raspberry Piによる各センサーやインターフェース(ボタン・スイッチ・Webなど)のコントロールについては、多くの情報が比較的簡単に入手できますが、
それらを一つの製品としてくみ上げる過程を重点的に記載したいと思います。
コードの解説については比較的少なめになりますが、ご容赦ください。

シリーズ目次

  1. Raspberry PiとMIDIインターフェースでデバイス開発をする]
  2. RtMidiライブラリを使って、MIDIインターフェースを作成する
  3. SMF (Standard Midi Format)を解析し、MIDIインターフェースに流し込む(プロトタイプ編)
  4. SMF (Standard Midi Format)を解析し、MIDIインターフェースに流し込む(クラス編)

やりたいこと

  1. Raspberry PiにMIDIオーディオを演奏させる
  2. MIDIキーボードを接続し、1のオーディオを伴奏として演奏する
  3. 演奏しながら音色や伴奏の種類を変更できる

簡単なシーケンサだと思ってもらえればいいです。

必要な機能を列挙する

  1. MIDIファイルの解析
  2. オーディオ出力
  3. MIDIインターフェースのコントロール
  4. スイッチのコントロール

実現する方法を考える

今回の開発デバイスの中核として FluidSynth を選びました。
FluidSynthはオープンソースのソフトウェアシンセイザーで、これを選択した理由は次の通りです。

  1. コンソールベースで動作する
  2. 動作が軽い
  3. 起動後にコンソールでインタラクティブに、音量・音色の変更などの操作ができる

FluidSynthを核として、不足した機能を実現する方法を考えます。

  1. 接続するMIDIインターフェースとFluidSynthを中継するMIDIインターフェースエミュレータを実装する
  2. MIDIファイルを読み取り、エミュレータからMIDI信号をFluidSynthに流す
  3. MIDIインターフェースから信号を読み取り、FluidSynthに流す
    ※MIDIインターフェースエミュレータはMIDIインプット、MIDIアウトプットの両方を実装します。

この時点の(想定)システム図

MKT.png

実装する

MIDIインターフェースエミュレータを作成するためにRtMidiというライブラリを使います。
このライブラリを使いたいため、言語はC++を使うことにしました。

実際のコードは第2回に続きます。

ここまでの振り返り

ここまでの流れはRFLPという開発の流れに沿っています。
R: Requirement
F: Function
L: Logic
P: Physical(, Program, Product, ...)
開発の経験が多い人ほど、この流れが早く頭のリソースを使わずにこなせます。
特に今回は、MIDIへの理解が浅く、FluidSynthを核にするという方法に確定するまでにたくさんの試行錯誤を繰り返しました。

ナビ

なし RtMidiライブラリを使って、MIDIインターフェースを作成する
6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?