音のパイを使用してルビーと音楽を再生する



ステージの設定
マイRubyConf 2020 ルビーの話Coverage モジュールはライブ音楽を演奏する例を使用します.このように、私はプレゼンテーション中にいくつかの音楽のライブパフォーマンスを提供する野心的な目標を持っていた.これは、様々な理由(時間、ストリーミングプラットフォーム上でのオーディオの仕事に対する懸念、実際の作業になるには野心の現実)のカットを取得したが、私は、1つの楽器、ギターのためにこれをサポートするための構造を構築しました.これは、私がこれを支持するためにした仕事を記述する2つのポストの最初です.
最初に、私はそれが起こることが可能であるかどうか理解しなければなりませんでした.私は私の既存のコードサンプルにフックして、どうにか、彼らから音符を引き抜いて欲しかったです.このように、私はコンデンサを爆破することを恐れずに、事実上、私の最初のアンプを造ることに決めました.

パーツ一覧
以前の投稿では、私はPracticeAmplifier class これは何もしなかったので、“普通の”アンプではなくテストでそれを使用できました.
どのような“レギュラー”amplifier とのインタフェースですSonic Pi , サウンドと音楽をコードで駆動する素晴らしいソフトウェアです.ソニックパイはIDE あなたがプレイしたいの組成をプログラムするために使用することができますソートの種類、およびあなたのコードがオーディオに変換されている方法を聞いてからの即時のフィードバックを得る.それは夜または2つ(またはそれ以上)のための時間の経過を失うために素晴らしい方法です.しかし、私は直接コード例から私のオーディオを制御することを想像していました.IDE内で作業したくなかった.
IDEを直接使用するにはsonic-pi-cli ジェム.その主なユースケースは、直接に使われますterminal . しかし、それは宝石であり、ルビーで書かれ、コア機能はclass あなたのコードのいずれかで使用することができます.

配線図
十分な知識と確信を持って、私はアンプを配線した.CLIは、SOINT PI自体が実行されていることを要求し、最初にそれを通信することができます-そしてそうするために、それはソフトウェアが実行されているポートを知る必要があります.ソニックパイは常に同じポート上で実行するために使用;しかし、それ以来、Aで走るために変わりましたdynamically-determined ポート.
CLIは既に機能を実装していますfind the port 送るSonicPi クラスのため、デモ目的のために、コンストラクタでそれをコピーしました.
class Amplifier
  def initialize
    @port = find_port
    @speaker = SonicPi.new(@port)
  end

  private

  def find_port
    # Code from sonic-pi-cli
  end
end
ポートを見つける必要が今何かSonicPi クラスでできるby itself バージョンV 0以降.2.0 ;しかし、この仕事が先行した.
その他の機能Amplifier クラスは、現在のコマンドに@speaker .
class Amplifier
  def play(sound)
    @speaker.run(sound)
  end
end

ロックオン
このアンプを使用すると、すべての正しいを知っている必要がありますcommands ソニックパイに送信し、ソニックパイを実行する必要がありますただし、IDEの外部からこれらのコマンドを実行するようにすることもできます.Rubyコードからサウンドを送信する方法があります.
次のポストでは、ギターからアンプに送る音をどのように生成するかを見ていきます.

This post originally published on The Gnar Company blog.