オーディオアプリとプラグインのためのオープンソースC++ライブラリ
オーディオアプリとプラグインのための無料C++ API。クロスプラットフォームのデスクトップ、モバイル、オーディオプラグインアプリの構築方法を、主要機能とコード例のガイドで学びましょう。
JUCE とは?
シンセサイザーやデジタルオーディオワークステーション(DAW)、サウンド処理ツールなどの最新のオーディオソフトウェアは、複雑なオーディオプログラミングタスクを簡素化する効率的なフレームワークを必要とします。オーディオ開発業界で最も広く使用されているフレームワークの一つが JUCE で、クロスプラットフォームのオーディオアプリケーションやプラグインを構築するために設計されたオープンソースの C++ ライブラリです。オーディオ処理、プラグイン開発、GUI 作成、ハードウェア統合のための完全なツールキットを開発者に提供します。開発者はコードを一度書くだけで、Windows、macOS、Linux、iOS、Android を含む複数のプラットフォームにアプリケーションを展開できます。
JUCE(Jules’ Utility Class Extensions)は、デスクトップおよびモバイルアプリケーション、特にオーディオソフトウェアやプラグインの構築に使用されるオープンソースの C++ アプリケーションフレームワークです。オーディオ処理、MIDI 通信、GUI 作成、プラグイン開発、ファイル操作、ネットワークなどのタスクを簡素化する再利用可能なモジュールを提供します。JUCE は開発者やオーディオソフトウェア企業に広く利用され、VST、VST3、AU、AUv3、AAX、LV2 プラグインやスタンドアロンアプリケーションの構築に使用されています。オーディオアプリケーションの構築に伴う複雑さを大幅に削減します。各 OS 向けにプラットフォーム固有のコードを書く代わりに、開発者は JUCE の統一 API を使用してクロスプラットフォームソフトウェアを構築できます。
JUCE の入門
JUCE をインストールする最も簡単な方法は GitHub を使用することです。完全なインストールのために以下のコマンドをご利用ください。
NuGet から JUCE をインストール
git clone https://github.com/juce-framework/JUCE.git CMake 経由で JUCE をインストール
cd JUCE cmake . -B build cmake --build build オーディオ処理と DSP サポート
オープンソースのJUCEはデジタル信号処理(DSP)用の組み込みモジュールを提供し、開発者がオーディオエフェクト、シンセサイザー、サウンドプロセッサを構築できるようにします。フレームワークにはフィルタ、オシレーター、FFT解析、リアルタイムオーディオ処理のためのツールが含まれています。これにより、JUCEは音楽制作ツールやオーディオエフェクトプラグインの作成に最適です。以下はオーディオバッファを処理し、各サンプルの振幅を減衰させるコード例です。このような操作はゲインコントロールやオーディオエフェクトの実装によく使用されます。
C++ API を使用してオーディオバッファを処理し、振幅を減衰させる方法は?
void processBlock(juce::AudioBuffer& buffer) { for (int channel = 0; channel < buffer.getNumChannels(); ++channel) { auto* samples = buffer.getWritePointer(channel);
for (int i = 0; i < buffer.getNumSamples(); ++i) samples[i] *= 0.5f; // ボリュームを下げる } } C++ API を使用したオーディオプラグイン開発
JUCEライブラリはプロフェッショナルなオーディオプラグインの作成を簡素化します。開発者は単一のフレームワークを使用して、VST、VST3、AU、AUv3、AAX、LV2などの主要なオーディオ規格に対応したプラグインを構築できます。この機能により、コードを書き直すことなく多くのDAWにプラグインを配布できます。コードは、シグナルゲインを20%削減するシンプルなオーディオプラグインを示しています。実際のプロジェクトでは、開発者はパラメータ、オートメーション、複雑なDSPアルゴリズムを追加できます。
C++ API を使用してシンプルなオーディオプラグインを作成する方法は?
class GainProcessor : public juce::AudioProcessor { public: void processBlock(juce::AudioBuffer& buffer, juce::MidiBuffer&) override { buffer.applyGain(0.8f); } }; クロスプラットフォーム開発
JUCEの最も強力な機能の一つは、単一のC++コードベースで複数プラットフォーム向けのアプリケーションを構築できることです。開発者は、プラットフォーム固有のコードを書き直すことなく、Windows、macOS、Linux、iOS、Androidで動作するソフトウェアを作成できます。これにより開発時間が大幅に短縮され、OS間で一貫した動作が保証されます。以下の例は、ダイアログウィンドウを表示するシンプルなJUCEアプリケーションを作成します。JUCEがプラットフォーム抽象化を処理するため、同じコードが複数のOSで動作します。
C++ を使用してクロスプラットフォームの JUCE アプリを作成する方法は?
#include
class HelloWorld : public juce::JUCEApplication { public: const juce::String getApplicationName() override { return "JUCE デモ"; } const juce::String getApplicationVersion() override { return "1.0"; }
void initialise (const juce::String&) override { juce::AlertWindow::showMessageBoxAsync( juce::AlertWindow::InfoIcon, "JUCE アプリ", "クロスプラットフォームの JUCE アプリケーションからこんにちは!"); }
void shutdown() override {} };
START_JUCE_APPLICATION (HelloWorld) MIDI とオーディオデバイスの統合
JUCEにはオーディオデバイスやMIDIコントローラとやり取りするためのAPIも含まれています。開発者はフレームワークを通じてマイク、スピーカー、MIDIキーボードなどのハードウェアに直接アクセスできます。これはシンセサイザー、DAW、ライブパフォーマンスソフトウェアなどのアプリケーションにとって重要です。以下のコードは、MIDIメッセージの受信を監視し、MIDIキーが押されたときにノート番号を出力します。
C++ API を使用して受信 MIDI メッセージをリッスンする方法は?
void handleIncomingMidiMessage(juce::MidiInput*, const juce::MidiMessage& message) { if (message.isNoteOn()) { int note = message.getNoteNumber(); juce::Logger::writeToLog(\"ノートオン: \" + juce::String(note)); } }