本記事はJUCE Advent Calendar 2025 の12月1日向けに投稿した記事です。
はじめに
本記事は、C++言語向けマルチメディア系アプリケーションフレームワーク『JUCE』の入門者向けの記事になります。記事全体を通して、以下の内容について触れています。
- JUCEの紹介、特に技術的特徴やその背景について
- JUCEの開発環境のセットアップ手順について
- JUCEでプロジェクトを新規作成する手順について
本記事がJUCE入門者のサポートに役立つと幸いです。
本記事は過去に投稿したJUCEハンズオン2024 〜JUCEをはじめよう〜の改訂版になります。
過去の記事をベースに、2025年時点での情報を記載しております。
そのため、過去の記事と内容の多くが重複することをご了承ください。
本記事で対象とするバージョン
- JUCE 8.0.10
- Visual Studio 2022
- Xcode 26
- CMake 3.25以上
- Git 2.3以上
JUCEについて
JUCE (Jules' Utility Class Extensions) は、C++言語によるマルチメディア系アプリケーションの開発を支援するフレームワークです。
JUCEフレームワークは次の要素によって構成されます。
- JUCEライブラリ:C++言語で記述されたAPIを提供するクロスプラットフォーム設計のライブラリ
- Projucer:JUCE専用のプロジェクトジェネレータ、ソースファイルやビルド設定等を管理し、統合開発環境 (IDE = VisualStudio, Xcode)やビルドシステム(Makefile) 向けにプロジェクトファイルを出力する
- CMakeモジュール:JUCEライブラリをCMakeプロジェクトにインテグレーションするためのモジュールであり、Projucerと同等の機能(リソースのバイナリ化等)も提供する
上記ライブラリ、プロジェクトジェネレータを利用してプロジェクトを構築し、各プラットフォーム用のC++開発環境でビルドすることで、ワンソースからWindows, macOS, Linux, iOS, Android で動作するアプリケーションを作成することができます。
公式サイト
JUCEの特徴
JUCEの最大の特徴として、オーディオプラグインを開発するためのテンプレートが充実していることが挙げられます。VST3/AudioUnit/AAX/LV2/ARAプラグインといった、DTMユーザーにはお馴染みとなっているプラグインフォーマットをワンソースから開発することが挙げられます。効率良くオーディオプラグインを開発できることから、日本国内外で多くの採用事例があります。
2025年のJUCEのアップデート内容を振り返る
2025年には8.0.5から8.0.10まで継続的なアップデートが行われました。これらのアップデートでは、主にクロスプラットフォーム対応の強化、テキスト処理の改善、グラフィックス描画の安定化が図られています。以下では筆者が個人的に注目する項目について取り上げて紹介します。
GitHub: JUCE 8.0.10 CHANGE LIST
プラットフォーム対応の拡充
Windows Armサポート(8.0.5)により、Windows on ARM環境でのJUCEアプリケーション開発が正式にサポートされました。また、macOS/iOS 26への対応(8.0.9)や、iOS 13以降でのUISceneライフサイクル対応(8.0.9)など、最新OS環境への追従が継続的に行われています。
テキスト・フォント機能の大幅強化
8.0.7以降、テキスト処理に関する大規模な改善が行われました。
- 設定可能なフォント機能の追加(8.0.9):合字(ligature)やカーニングなど、高度なタイポグラフィ機能をプログラムから制御できるようになりました
- TextEditorのUnicode処理とパフォーマンス改善(8.0.7, 8.0.8):多言語テキストの扱いがより安定し、処理速度も向上しています
- テキスト行間隔の制御オプション(8.0.8):より柔軟なテキストレイアウトが可能になりました
これらの改善により、JUCEアプリケーションでより洗練されたテキスト表現が実現できるようになっています。これらの内容は、DemoRunner に新たに追加された FontFeaturesDemo で確認することができます。
Direct2Dレンダラの継続的改善
JUCE 8 で追加されたDirect2Dレンダラに関して、継続的にバグ修正とパフォーマンス改善が行われています。Windows環境でのグラフィックス描画がより安定し、高速化されています。
モバイル開発の強化
Androidではウィンドウ処理の改善(8.0.9)やシステムテーマ変更時のActivity再起動回避(8.0.10)により、よりネイティブに近い動作が実現されています。iOSではiOS 18での外部デバイスサンプルレート処理(8.0.7)など、最新iOSへの対応が進められています。
JUCEライブラリ と Projucer
JUCEフレームワークは、各種機能のC++ APIを提供する『JUCEライブラリ』と、各種プラットフォーム向けのプロジェクトを出力するジェネレータ『Projucer』によって構成されます。
『JUCEライブラリ』には機能別に『モジュール』という単位で構成が分かれており、『Projucer』はプロジェクトに必要なモジュールを取り込んで、IDE用のプロジェクトファイルやビルドスクリプトに紐付ける作業を担当します。
JUCEライブラリ と CMake
2020年にリリースされたJUCE 6から、ビルドマネジメントツール『CMake』のサポートが追加されました。
『CMake』とは、主にC言語、C++言語などC系言語のビルドにおけるクロスプラットフォームビルド環境を提供するビルドマネジメントツールの一つです。様々なプロジェクトに採用されており、大きなエコシステムを形成しています。
JUCEがCMakeをサポートすることで以下のメリットを得ることができるようになりました。
- ビルド設定をCMake用のフォーマットで記述することができる
- CMakeのエコシステムの恩恵を受けることができる
- CMakeが独自に提供する機能を利用することができる
- CMakeに対応した他のライブラリとのインテグレーションが容易になる
- Projucerの使い方を習得する必要がなくなる
JUCEモジュールについて
JUCEライブラリは、機能毎のAPIがモジュールという単位で分離されて提供されます。例えば、オーディオデバイスとの接続を処理するモジュール、オーディオプラグインフォーマットの定義を持つモジュール、オーディオファイルを読み込む機能を持つモジュール、OSC(Open Sound Control)の機能を抽象化したモジュールなどが提供されます。開発者は、JUCEライブラリから必要なモジュールだけをリンクするように制御することができ、実行環境のOSのAPIやその他ライブラリとの依存関係を制御することができます。
■ JUCEライブラリに付属するモジュール一覧(JUCE 8.0.10時点)
| モジュール名 | 提供する機能やクラス群 |
|---|---|
| juce_analytics | アナリティクス機構(ユーザーの利用情報を収集する機能)を提供するクラス群 |
| juce_animation | 描画コンポーネントにアニメーション適用を実装するクラス群 |
| juce_audio_basics | オーディオバッファの操作、MIDIメッセージ処理、シンセサイザーなどのクラス群 |
| juce_audio_devices | オーディオインターフェースおよびMIDIインターフェースの制御や、再生と録音をするクラス群 |
| juce_audio_formats | さまざまなオーディオファイル形式を読み込み・書き込みするクラス群 |
| juce_audio_plugin_client | VST、VST3、AudioUnit、AAX、LV2、ARAプラグインを構築するためのクラス群 |
| juce_audio_processors | VST、AU、または内部で生成されたオーディオプロセッサのロードおよび再生をするクラス群 |
| juce_audio_utils | オーディオ関連のGUIおよびその他のタスク(MIDI over BLE含む)を処理するクラス群 |
| juce_box2d | Box2D物理エンジンといくつかのユーティリティクラス群 |
| juce_core | JUCEモジュールの基盤となる基本API(文字列、メモリ操作)を提供するクラス群 |
| juce_cryptography | RSA、Blowfish、MD5、SHAなどの暗号化処理の機能を提供するクラス群 |
| juce_data_structures | variantなデータ型を提供する、アンドゥ/リドゥなどを管理する、スマートなデータ構造を操作するクラス群 |
| juce_dsp | オーディオバッファ操作、デジタルオーディオ処理、フィルタリング、オーバーサンプリング、数学関数などを高速に実行するクラス群 |
| juce_events | アプリケーションのメインイベントループを実行し、メッセージ、タイマーなどを送受信するためのクラス群 |
| juce_graphics | 2Dベクトルグラフィックス、画像読み込み/保存、フォント処理などをするためのクラス群 |
| juce_gui_basics | 基本的なユーザーインターフェイスを作成するコンポーネントおよび関連するクラス群 |
| juce_gui_extra | 特定用途に特化したユーザーインターフェースの実装を提供するクラス群 |
| juce_javascript | Javascriptインタープリタを提供するクラス群 |
| juce_midi_ci | MIDI 2.0規格に含まれるMIDI Capability Inquiry (MIDI-CI)規格を実装するためのクラス群 |
| juce_opengl | JUCEウィンドウでOpenGLをレンダリングするためのクラス群 |
| juce_osc | OSC(Open Sound Control)を実装したクラス群 |
| juce_product_unlocking | プログラムに認証機構を実装するためのクラス群 |
| juce_video | ビデオ再生と、カメラ入力をキャプチャするためのクラス群 |
なお、JUCEモジュールのフォーマット仕様は公開されているので、ユーザーが独自のJUCEモジュール(3rd party JUCE module)を構築することができます。
ライセンスについて
ライセンスの詳細は公式サイトのEULAをご参照ください。公式: JUCE 8 EULA
JUCEには複数のライセンスオプションが用意されており、ユーザーの事情に応じて選択することができます。
■ライセンスオプション一覧
- Starter
- Indie
- Pro
- Educational
- AGPLv3
個人や企業が無料で利用することができるStarterライセンスとAGPLライセンスが設定されています。一定規模以上の事業者かつ配布・商流の形態に応じて、有料のIndieライセンスまたはProライセンスを取得する必要があります。また、大学などの教育機関における教育目的向けに、無料で利用可能なEducationalライセンスも設定されています。
ライセンスの選択は法的な判断を要しますが、「製品をリリースする予定が無く、JUCEを本格的に使うか否かは試用してから判断したい」という状況であれば、Starterライセンスを選択して学習目的の範囲内で使用することが提案できます。
なお、ライセンス条件は随時改定されることが有ります。使用する際には最新のライセンス条件を確認するようにしましょう。
| ライセンスタイプ | Starter | Indie | Pro | Educational | AGPLv3 |
|---|---|---|---|---|---|
| 年間の収入または資本金額の限度 | $20,000 | $300,000 | - | - | - |
| サブスクリプション最低契約期間 | - | 1ヶ月 | 12ヶ月 | - | - |
| サブスクリプションライセンス料金 | - | $40(1名1月当たり) | $175(1名1月当たり) | - | - |
| 永続ライセンス料金 | - | $800 | $3,500 | - | - |
JUCEライブラリはオープンソース
JUCE は GitHub 上のリポジトリで開発が行われており、ソースコードも開示されています。Issue やPull request を送ることで不具合報告や機能改善の要望、修正の提案などのプロジェクトに貢献することができます。また、develop ブランチをチェックアウトすることで、将来リリース予定の機能を先行して試すこともできます。
JUCEをはじめよう[Projucer版]
ここでは、パッケージに同梱されたサンプルプログラムである JUCE DemoRunner を、Projucerを使用する場合にビルドする手順について解説します。
JUCE DemoRunner をビルドできることを確認することで、JUCEフレームワークがサポートする基本的なJUCEアプリケーションの開発環境が整っていることを確認することができます。
開発環境をセットアップする
JUCEを使用したC++プロジェクトを実行可能なプログラムにコンパイルするには、C++言語の開発環境(コンパイラ、ビルドツール等)をセットアップする必要があります。
- Windows
- Visual Studio 2022をインストールする
- IDE本体をインストールする
- C++開発環境を追加インストールする
- Visual Studio 2022をインストールする
- macOS
- Xcodeをインストールする
- AppStoreまたはDeveloper Programから入手してください
- Xcodeをインストールする
- Building JUCE Projects
- C++ Standard: 17
- macOS/iOS: Xcode 12.4 (Intel macOS 10.15.4, Apple Silicon macOS 11.0)
- Windows: Visual Studio 2019 (Windows 10)
- Linux: g++ 7.0 or Clang 6.0 (for a full list of dependencies, see here).
- Android: Android Studio (NDK 26) on Windows, macOS or Linux
- Deployment Targets
- macOS: macOS 10.11 (x86_64, Arm64)
- Windows: Windows 10 (x86_64, x86, Arm64, Arm64EC)
- Linux: Mainstream Linux distributions (x86_64, Arm64/aarch64, (32 bit Arm systems like armv7 should work but are not regularly tested))
- iOS: iOS 12 (Arm64, Arm64e, x86_64 (Simulator))
- Android: Android 5 - Lollipop (API Level 21) (arm64-v8a, armeabi-v7a, x86_64, x86)
JUCEを入手する
JUCEを入手する方法として、本記事では2つの方法を紹介します。
- 公式サイトからダウンロード
- GitHub上のGitリポジトリをクローン
上記のうち、入門者には『公式サイトからダウンロード』する方法をお勧めします。
『GitHub上のGitリポジトリをクローン』する方法では、Projucerを自身の開発環境でセルフビルドする手順が追加される点にご注意ください。
A. 公式サイトからダウンロードする
本記事ではStarterライセンスを選択した場合のダウンロード手順について案内します。
読者がStarter以外のライセンスを選択する場合は、選択したライセンスに対応するダウンロード手順から入手してください。
JUCE公式サイトのダウンロードページにアクセスする
URL: https://www.juce.com/get-juce
サイト内の[Download]をクリックします
プラットフォームごとに用意されたリンクからダウンロードします
プラットフォーム用にビルド済みのProjucerが同梱されています
ダウンロードしたアーカイブファイルを展開すると、以下の画像のようにProjucer実行ファイルが同梱されています。
B. GitHub上のGitリポジトリをクローンする
Gitリポジトリをローカル環境にクローンする
$ git clone https://github.com/juce-framework/JUCE.git
Projucerをセルフビルドする
以下のディレクトリに置かれたIDE向けプロジェクトから Projucer をセルフビルドしてください。
ディレクトリ: JUCE/extras/Projucer/Builds/(プラットフォームまたはIDE名)
ここからは、JUCEフレームワークによるアプリケーション開発環境を準備する手順になります。
Projucerをセットアップする
ここでは、Projucerからアプリケーションプロジェクトを作成するまでのセットアップの手順について示します。
Projucerを起動する
Projucerの初回起動時には、プロジェクト制作画面が表示されます
JUCEライブラリのPathを設定する
以下の作業を実施して、ProjucerからJUCEモジュールのパスを認識できるようにします。
- Projucerを起動する
- [File]→[Global Paths...]メニューをクリックして『Global paths』ダイアログを開く
- [Path to JUCE]欄にJUCEのルートディレクトリのパスを入力する(入力欄横の[...]をクリックするとファイルダイアログが開きます)
- 公式サイトからDLした場合はアーカイブの解凍先ディレクトリ
- git cloneした場合はリポジトリのルートディレクトリ
- [JUCE Modules]欄にJUCEディレクトリの直下に置かれた『modules』ディレクトリのパスを入力する
■ Projucerの[File]メニューから[Global Paths...]を選択する

↓
■ JUCEのルートディレクトリとmodulesディレクトリを設定する

JUCE DemoRunnerのビルドと実行
JUCEライブラリのパッケージに含まれているデモアプリケーション『JUCE DemoRunner』をビルドすることができれば、JUCEとProjucerのセットアップは完了です。
- Projucerのメニューから[File]→[Open Example]→[Launch Demo Runner]を選択する
- 公式サイトからDLした場合、ビルド済みのDemoRunnerバイナリが同梱されているため、ビルドをスキップしてDemoRunnerが起動します
- git cloneした場合、DemoRunnerを新規にビルドする必要があります。この場合、Projucerのダイアログが表示されて「IDEでプロジェクトを開くか否か」を尋ねられます。それに従ってプロジェクトを開きビルドを実行します
- JUCEライブラリへのパス設定とDemoRunnerの実行ファイルのビルドが完了している場合に上記操作によってDemoRunnerが起動します
■ Projucerのメニューから[Launch Demo Runner]を選択する
↓ ビルド実行後に起動 or ビルド不要の場合はそのまま起動
■ JUCE DemoRunner
DemoRunnerのブラウジングメニューから様々なデモプログラムを起動してみましょう。
各デモプログラムからJUCEライブラリのリファレンス実装を確認することができます。
JUCEをはじめよう[CMake版]
ここでは、CMakeを使用してJUCE DemoRunnerをビルドするまでの手順について示します。
本記事では、CMake自体の使い方やAPI仕様についての詳細は解説を行わない点についてご了承ください。
開発環境のセットアップ
JUCEを使用したC++プロジェクトを実行可能なプログラムにコンパイルするには、C++言語の開発環境(コンパイラ、ビルドツール等)をセットアップする必要があります。
- Windows
- Visual Studio 2022をインストールする
- IDE本体をインストールする
- C++開発環境を追加インストールする
- CMakeをインストールする
- ダウンロードページから入手してインストールする 公式サイト
- CMakeのパスを環境変数に追加する
- Visual Studio 2022をインストールする
- macOS
- Xcodeをインストールする
- AppStoreまたはDeveloper Programから入手してください
- CMakeをインストールする
- Homebrewまたはダウンロードページから入手してインストールする 公式サイト
- CMakeのパスを環境変数に追加する
- Xcodeをインストールする
JUCEを入手する
この項目はProjucer版の説明と同じです。
- 公式サイトからダウンロードする
- GitHub上のGitリポジトリをクローンする
JUCE DemoRunnerのビルドと実行
Windows - Visual Studio 2022 の場合
コマンドプロンプトから以下のコマンドを実行してJUCE DemoRunnerをビルドします
REM JUCEディレクトリに移動する
cd (JUCEディレクトリの置かれた場所)/JUCE
REM CMakeのconfigureとgenerateを実行する
REM この時カレントディレクトリ直下に"build"ディレクトリを作成する
cmake -G "Visual Studio 17 2022" -B build -DJUCE_BUILD_EXAMPLES=ON
REM "build"ディレクトリ内に生成されたDemoRunnerプロジェクトのビルドを実行する
cmake --build build --target DemoRunner
JUCE/build/examples/DemoRunner/DemoRunner_artefacts/Debugディレクトリに実行ファイルDemoRunner.exeが生成されます。この実行ファイルを起動すると、JUCE DemoRunnerが立ち上がります。
macOS - Xcode の場合
ターミナルから以下のコマンドを実行してJUCE DemoRunnerをビルドします
# JUCEディレクトリに移動する
$ cd (JUCEディレクトリの置かれた場所)/JUCE
# CMakeのconfigureとgenerateを実行する
# この時カレントディレクトリ直下に"build"ディレクトリを作成する
$ cmake -G Xcode -B build -DJUCE_BUILD_EXAMPLES=ON
# "build"ディレクトリ内に生成されたDemoRunnerプロジェクトのビルドを実行する
$ cmake --build build --target DemoRunner
JUCE/build/examples/DemoRunner/DemoRunner_artefacts/Debugディレクトリに実行ファイルDemoRunner.appが生成されます。この実行ファイルを起動すると、JUCE DemoRunnerが立ち上がります。
ここからは、JUCEフレームワークでアプリケーション・プロジェクトを新規作成する手順について解説します。
JUCEでHello Sinewave!
JUCEアプリケーションの開発環境が整ったら、簡単なアプリケーションを作成してみましょう。
今回は、サイン波を鳴らす処理を実装するオーディオプログラミング版 Hello world! を作成します。
プロジェクト作成からコード編集まで [Projucer版]
新規プロジェクトを作成する
Projucerを起動したら、[File]→[New Project...]をクリックして、新規プロジェクト作成画面を表示します。
今回は [Application]→[Audio] テンプレートを選択します。
新規プロジェクト作成画面の[Exporters]の項目を確認します。ターゲットとするプラットフォームに合わせてチェックを入れます。
- macOS向け:
Xcodeにチェックを入れます - Windows向け:
Visual Studioにチェックを入れます(2022, 2019をサポート) - Linux向け:
Linux Makefileにチェックを入れます
新規プロジェクト作成画面の[Create Project]ボタンをクリックします。プロジェクトの保存先を選択するダイアログが開くので、保存先を選択してください。
新規プロジェクトを作成すると、Main.cpp, MainComponent.h, MainComponent.cpp の3つのソースファイルが作成されます。
プロジェクトの保存とIDEでプロジェクトを開く
Projucerで新規プロジェクトの保存と、IDE(VisualStudio、Xcode)でプロジェクトを開きます。
- Projucer上部のコンボボックスから、起動したいIDEを選択します
- IDEのアイコンが表示されているボタンをクリックします
- プロジェクトの保存とIDEの起動が実行されます
プロジェクト作成からコード編集まで [CMake版]
CMakeを使用してJUCEアプリケーションを作る場合、ソースファイルの作成や、ビルド設定の記述をCMakeLists.txtに記述していく作業を開発者自身で行う必要があります。
そのため、Projucerでプロジェクトを新規作成する場合と比べると、プロジェクトの最小の構成を組み上げるまでの手順が増えることになります。
本記事ではその手順を割愛して、私が作成した最小構成のCMake向けテンプレートを使用して説明をしていきます。
筆者作成のテンプレートを git clone する
筆者が作成したオーディオアプリケーションのテンプレートを以下のGitリポジトリに配置しました。
コマンドプロンプトやターミナルから次のコマンドを実行して、GitリポジトリのクローンとGitサブモジュールの初期化を実行してください。
Gitリポジトリ: juce_hands-on_2025.git
# Gitリポジトリのクローンと併せて内部のGitサブモジュールもクローンする
$ git clone --recursive https://github.com/COx2/juce_hands-on_2025
プロジェクトのファイル構成について
このテンプレートは以下のファイル構成になっています。
Sourceディレクトリに置かれたソースコードは、Projucer版の項目で説明したものと同一のファイルとなっています。
juce_hands-on_2025/
├ External/
│ └ JUCE/ # Gitサブモジュールとして取り込んだJUCEリポジトリ
├ Source/ # プロジェクトのソースコードを配置するディレクトリ
│ ├ Main.cpp
│ ├ MainComponent.h
│ └ MainComponent.cpp
├ CMakeLists.txt # CMakeで実行するビルド設定を記述するテキストファイル
└ LICENSE
上記のファイルのうち、CMakeLists.txtは以下の記述となっています。
CMakeのプロジェクトからJUCEライブラリを取り込むことで、JUCEライブラリ内に含まれるCMakeモジュールが読み込まれ、JUCE CMake APIが使えるようになります。
JUCE CMake APIについては JUCE/docs/CMake API.md にドキュメントが用意されています。
# CMakeの最低バージョンを特定する
cmake_minimum_required(VERSION 3.25)
# プロジェクト名を設定する
project(juce_hands-on_2025 VERSION 1.0.0)
# C++に関するオプション設定
enable_language(CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
# Visual Studioのコンパイラに文字エンコードをUTF-8であることを設定するコンパイルオプション
if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
add_compile_options(/utf-8)
endif()
# JUCEライブラリの場所を特定する
# JUCEライブラリ内に含まれるCMakeモジュールが読み込まれ、JUCE CMake APIが使えるようになる
add_subdirectory(External/JUCE)
# GUIアプリケーション版のJUCEプロジェクトを追加する
# プロジェクト名は"NewProject"にする
juce_add_gui_app(NewProject
PRODUCT_NAME "NewProject")
# "NewProject"のソース上で"#include <JuceHeader.h>"によるJUCEライブラリのインクルードを可能にする
juce_generate_juce_header(NewProject)
# "NewProject"にC++ソースファイルを追加する
target_sources(NewProject
PRIVATE
Source/Main.cpp
Source/MainComponent.h
Source/MainComponent.cpp)
# "NewProject"に適用するコンパイル定義を設定する
target_compile_definitions(NewProject
PRIVATE
JUCE_APPLICATION_NAME_STRING="$<TARGET_PROPERTY:NewProject,JUCE_PRODUCT_NAME>"
JUCE_APPLICATION_VERSION_STRING="$<TARGET_PROPERTY:NewProject,JUCE_VERSION>")
# "NewProject"にリンクするライブラリを決定する
target_link_libraries(NewProject
PRIVATE
juce::juce_audio_utils
PUBLIC
juce::juce_recommended_config_flags
juce::juce_recommended_lto_flags
juce::juce_recommended_warning_flags)
CMakeのconfigureとgenerateを実行する
コマンドプロンプトやターミナルから次のコマンドを実行すると、CMakeのconfigureとgenerateが実行され、IDE用のプロジェクトが生成されます。
なお、CMake --buildコマンドを実行することでコマンドラインからビルドを実行することもできます。
Windows - Visual Studio 2022 の場合
REM リポジトリのディレクトリに移動する
cd (リポジトリが置かれた場所)/juce_hands-on_2025
REM CMakeのconfigureとgenerateを実行する
REM この時カレントディレクトリ直下に"build"ディレクトリを作成する
cmake -G "Visual Studio 17 2022" -B build
REM "build"ディレクトリ内に生成されたプロジェクトのビルドを実行する
cmake --build build
macOS - Xcode の場合
# リポジトリのディレクトリに移動する
$ cd (リポジトリが置かれた場所)/juce_hands-on_2025
# CMakeのconfigureとgenerateを実行する
# この時カレントディレクトリ直下に"build"ディレクトリを作成する
$ cmake -G Xcode -B build
# "build"ディレクトリ内に生成されたプロジェクトのビルドを実行する
$ cmake --build build
IDEでプロジェクトを開く
CMakeのconfigureとgenerateを実行すると、juce_hands-on_2025/buildディレクトリにIDE向けのプロジェクトファイルが生成されます。プロジェクトファイルをIDEで開くことで、IDE上でソーコードの編集を始めることができます。
サイン波を鳴らすプログラムを実装する
プロジェクト内のソースコードを編集して、サイン波を鳴らす処理を実装してみましょう。
MainComponent.cppにある関数void getNextAudioBlock (const AudioSourceChannelInfo& bufferToFill) overrideの内部実装を以下のように編集します。
#include "MainComponent.h"
~~~中略~~~
void MainComponent::getNextAudioBlock (const juce::AudioSourceChannelInfo& bufferToFill)
{
bufferToFill.clearActiveBufferRegion();
const float level = 0.5f;
auto* buffer = bufferToFill.buffer;
for (int channel = 0; channel < buffer->getNumChannels(); channel++)
{
float* channelData = buffer->getWritePointer(channel);
for (int sample = 0; sample < buffer->getNumSamples(); sample++)
{
channelData[sample] = std::sin(juce::MathConstants<float>::twoPi * sample / buffer->getNumSamples() * 2) * level;
}
}
}
~~~中略~~~
このソースコードを記述すると、オーディオバッファを更新する度に、オーディオバッファ全体でサイン波一周分(360°=2π)を書き込む処理が実行されます。
ビルドと動作確認
上記のソースコードを記述したら、ビルドを実行します。
ビルドが成功したらアプリケーションを起動してみましょう。
アプリケーションを起動すると、ウインドウが表示されるとともに、オーディオデバイスとの連携が正常にできていれば、サイン波が鳴っているのが聞こえるはずです。
トラブルシューティング:音が鳴らない場合
プログラムとオーディオデバイスを正常に連携できていない可能性があります。
以下の記事を参考にオーディオデバイス設定の編集を試してみてください。
JUCEのことをもっと知りたくなったら
ドキュメントを読んでみよう
JUCEライブラリには沢山のAPIが用意されています。JUCE APIを理解することが快適なアプリケーション開発への近道と言えるでしょう。
・API:モジュール
https://docs.juce.com/master/index.html
・API:クラスリファレンス
https://docs.juce.com/master/classes.html
公式サイトには入門者向けのチュートリアルが提供されています。チュートリアルを一通り試してみると、JUCE APIの使い方について体系的に学習することができます。
・チュートリアル
https://juce.com/learn/tutorials
フォーラムサイトを覗いてみよう
JUCEは公式のフォーラムサイトを設置しています。
ユーザーからの疑問・質問にJUCEのメンテナが回答してくれたり、ユーザー間で知見の共有が行われています。
・JUCEフォーラム
https://forum.juce.com/
将来の追加予定の機能について:MIDI 2.0サポート
2025年6月、JUCEチームはMIDI 2.0サポートのプレビュー版をmidi2ブランチで公開しました。このプレビュー版では、全てのJUCE対応プラットフォームにおいてOS/ハードウェアレベルでのMIDI 2.0サポートが実装されています。
以下の解説は、JUCEフォーラムに投稿されたMIDI 2.0サポートのプレビュー版について、JUCEチームが解説した文章を引用したものとなります。
引用元: JUCEフォーラム
MIDI 2.0とは
MIDI 2.0は、従来のMIDI 1.0を大幅に拡張した新しい規格です。最大の特徴は、より高精度なメッセージフォーマット『Universal MIDI Packet (UMP)』の導入です。
従来のMIDI 1.0では、ベロシティやコントロールチェンジ(CC)の値は7ビット(0〜127)の範囲でしたが、MIDI 2.0では16ビット(0〜65,535)の高解像度での表現が可能になります。これにより、より繊細で表現豊かなMIDI制御が実現できます。
JUCE MIDI 2.0のロードマップ
JUCEチームは、MIDI 2.0サポートを『外側から内側へ』という方針で開発していることをフォーラムで示しました。これは、MIDIメッセージが通過する経路において、少なくとも2つのレイヤーのAPIが存在することを背景とするためです。
- OS API — コンピュータとハードウェア間でメッセージをやり取りするためのAPI
- プラグインAPI — プラグインとDAW間でメッセージを送信するためのAPI
今回のプレビューブランチでは、まずOS APIレベルのサポートが実装されています。将来的には、シンセサイザープラグイン開発者向けにAudioProcessorクラスがUMP(Universal MIDI Packets)をサポートするなど、さらなる機能拡張が予定されているようです。
新しいAPI構成
UMP対応の新しい入出力クラス
プレビュー版では、UMPフォーマットに対応したump::Inputおよびump::Outputクラスが追加されています。これらのクラスは、MIDI 1.0とMIDI 2.0の両方のチャンネルボイスメッセージを送受信できます。
また、特定の入出力デバイスが切断されたことを検出する機能など、使い勝手を向上させる改善も含まれています。
既存のMidiInputとMidiOutputクラスの内部実装刷新
新しいump::Input/ump::Outputクラスは、従来のMidiInput/MidiOutputクラスがサポートしていた機能(MIDI 1.0メッセージ)を全てカバーしています。そのため、既存のMidiInputおよびMidiOutputクラスは、内部的に新しいUMP対応クラスを使用する形で完全に再実装されました。
この大規模な内部変更により、既存のコードとの互換性を保ちながら、MIDI 2.0の恩恵を受けられる基盤が整えられています。
Session API
MIDI 2.0の入出力を管理する新しいSession APIが追加されました。
特にWindows環境では、Microsoftが開発中の新しいOS APIである『Windows Midi Services』を活用しています。これにより、複数のDAWセッションやブラウザタブなど、異なるドキュメントを独立して管理することが可能になります。
Endpoint API
MIDI 2.0では、接続されたMIDIデバイスの詳細情報を報告する新しい方式が導入されています。
Endpoints::getStaticDeviceInfoを使用すると、MIDI接続を確立する前に、製造元、製品名、トランスポートタイプなどの詳細な不変情報を取得できます。
接続後はEndpoints::getEndpointを通じて、さらに詳しい情報にアクセス可能です。これには、MIDI 2.0の『ファンクションブロックレイアウト』に関する高度な情報が含まれており、開発者はコネクタルーティングを扱う際に、ユーザーフレンドリーな名前を発見して表示することができます。
UmpDemoで動作確認
UMPのデバッグを支援するため、新しいデモプログラム『UmpDemo』がDemoRunnerに追加されています。
実際にMIDI 2.0の動作を確認したい場合は、DemoRunner > Audio > UmpDemoから起動して試すことができます。

























