コンテンツへスキップ
ものがたり
戻る

C++でつくるオーディオ / Music Tech Meetup 2026.10

先月末頃に、「C++でつくる」というC++開発の解説書が新しく刊行されました。大きめの書店に行けば技術書コーナーに並んでいると思います。発売にあたって1册ご恵贈いただいたので、この紹介記事を書いています。

https://gihyo.jp/book/2026/978-4-297-15848-4

われわれ(?)C++オーディオクラスタにとっては、第4章と第5章のオーディオ開発に関する部分が重要なところです。書かれているのは塩澤さんとmigizoさんなので、日本語圏のJUCEアプリ開発者クラスタ的には馴染みがあるかもしれません。

この本の位置付け

C++は基本書の類で言語仕様や標準ライブラリについて学ぶことができますし、およそどのようなアプリケーションも開発できる器量をもつ言語である点においてC++以上の言語は存在しませんが、逆にC++でなくても良い場面は着実に増えてきており、特にRustなどシステムプログラミングに有用でC++より安全な言語もすっかり定着したため、現実のアプリケーション開発で使うべき局面はだいぶ限定的になってきたともいえます。そのような状況の中で、今でもC++を使うということは、それなりの理由があるということがいえるでしょう。

それは多様なアルゴリズム実装の資産がC++に集中しているから、かもしれませんし、JUCEのようにオーディオクラスタの開発者の大半が使っているライブラリが存在するから、かもしれませんし、組み込み環境等リソースが限られている環境にわざわざRustのランタイム機能を持ち込みたくないといった理由があるのかもしれません。あるいは(JUCEなんかもそうですが)どうせ一部をC++で実装しなければならないなら全部C++で書いたほうが早いから(あるいはJavaSriptランタイム等との相互運用が無駄に煩雑になったりコストを発生させたりするから)、かもしれません。

また、言語仕様や標準ライブラリの解説書では、基本知識をひと通りさらったり、逆に基礎を標準仕様に沿ってがっつり解説することはあっても、その応用(たとえば標準コンテナの開発)や新しい仕様の要素はカバーしきれないこともあります。本書ではstd::formatをカスタムフォーマッターで使い倒す話や、C++20のconceptがiteratorやrangeでどのように使われるかといった、応用的な解説も含まれています。

本書に固有のC++オーディオアプリ開発の栄養素

C++オーディオアプリケーション開発の技術書はこれまでにもいくつかあったといえますが、本書ではほぼJUCEを使った解説に全振りしているのが大きな特徴といえます。JUCE以外のフレームワークを使ったC++での開発ももちろん可能なのですが、説明すべき事項がいろいろ増える可能性があります。それならばJUCEの解説だと割り切ってJUCEに全振りして学ぶというのは1つのやり方です。どんなフレームワークやライブラリのやり方を学ぶにせよ、他の仕組みに応用できる知識になる部分は多いでしょう。

もしこれからオーディオ開発に5年携わるとしたら、JUCEに触れる場面がきっと出てくると思います。Visual Studioに触れること無く5年間過ごす可能性のほうが高いのではないでしょうか。自分はかなり非JUCE系オーディオ開発者クラスタであると自認していますが(JUCEではないプラグインホスティングライブラリをゼロから自作しているくらいなので)、それでもJUCEに触れることはかなり多いです。

本書のオーディオ部分の前半はJUCEの「アプリケーション」の例としてオーディオプレイヤーの作り方から入ることでJUCEを使ったオーディオアプリ開発の基礎知識を押さえて、後半のJUCEの「シンセサイザー」の作り方で、JUCEが最も得意とするオーディオプラグインの開発を学べる、という2部構成といえます。プラグインを開発しないなら第4章だけで十分なのですが、オーディオプレイヤーを作るだけならそれこそJUCEどころかC++である必然性も無いので、第5章までセットになってこそ、その価値が提供されているといえます。

ちなみに本書は全部で11章あって、オーディオの章はそのうちの2つに過ぎないのですが、ページ数で見ると第4章が125ページくらいあって圧倒的に長く、第5章も70ページ弱あって、本書のおよそ1/3はオーディオに関する解説であるといえるでしょう。

JUCE入門者ファースト

本書のJUCEの解説は全面的にProjucerを使ったものになっています。筆者のJUCE関連OSSウォッチャー視点では、現実のJUCE開発はあらかたCMakeに移行していると思うので、これは主としてJUCEの使い方をゼロから勉強する人がJUCEの複雑なCMakeセットアップに惑わされないようにする目的で選択されたアプローチなのだと思います。Projucerを使えば、アプリケーション アイコンやプラグインフォーマット、使用するJUCEモジュールのリストからの選択など、CMakeでは名前を覚えていないと手が出せないような設定項目をGUIだけで調整できるので、JUCE初心者(プログラミング初心者とは限らず)には優しい方法です。

残念ながら(?)本書でCMakeについて学べる章はどこにも無く(あってもいい気がするけど日本で書ける人いるんだろうか)、CMake自体の解説だけでそれなりにページ数を持っていかれてしまうことでしょう。CMakeに絶対的な抵抗が無いC++開発者はCMakeを使うべきです。Projucerを使っているとそれだけで「そこに書かれていないプラットフォーム向けにはビルドできない」プロジェクトになります。

本書にはJUCEでプロダクト開発しているとちょいちょいハマる問題もいろいろケアされています。たとえばJuceHeader.hとは何か、それをインクルードしないとどうなるのか、CMakeではデフォルトで生成されない、といった解説があるので、CMakeに移行したら参照が解決できなくなって困った、みたいな問題が手元で発生しても、juce_generate_juce_header()を呼び出すだけで解決する、みたいなことが読んでいれば分かります。

ただこれは初心者向けの「問題にハマらないための解説」なので、JUCEの知見が十分にある人は「ビルド時間を最小化するためにJuceHeader.hはむしろ参照しないほうが良い」みたいな判断を個別にしたほうが良いです(著者がこの辺を知らないはずはなく、本書の方針として書いているだけのはずです)。

第4章では基本的なオーディオファイル選択とEQ・音量設定など基本的な機能とGUIをもつオーディオプレイヤーを、第5章ではjuce::Synthesizerを使ったDSPと、それをコントロールするパラメーターをJUCEのAPVTS (AudioProcessorValueTreeState) に関連付けてGUI操作・状態保存/復元ができ、juce::MidiKeyboardやDSPのビジュアライザなどをGUIにもつシンセサイザーを、それぞれ実践しています。典型的なアプリケーションやプラグインの開発のとっかかりになるので、後は自分なりのコードを追加していくことができるでしょう。

GUIはどちらもjuce_gui_basicsに含まれるJUCEコンポーネントが用いられています(リサージュ描画などはjuce::Graphicsのレベル)。OpenGLやWebViewを使ったUIは難しいトピックなので、慣れてから学べば良い内容でしょう。そこまで来るとJUCE本体が提供していないGUIの選択肢にも手が出せるかもしれません。

JUCE以外のオーディオアプリケーション開発ライブラリ(iPlug2とかDPFとか、あるいはRust方面のライブラリとか)を使う場合にも、大同小異はあっても、ざっくり同じことを学ぶことになると思います。英語を知っていれば他のインド・ヨーロッパ語族の外国語を勉強しやすくなるような感じです。

自分の場合は、第4章でいえばjuce_audio_basicsに含まれているjuce::AudioSourceの各種クラスは全くいじったことがなかったので(普段プラグインまわりしかいじっていないため)、juce::AudioProcessor以外にもこんなところにDSPを差し込める場所があったんだな…という発見がありました。シンセを作るほうはもっと詳しくないので(普段はAndroidに移植したり呼び出したりしているだけなので)、第5章の内容は知らなかったことが多いです。

Music Tech Meetup 2026.10

そういうわけで(!?)、著者の塩澤さんに登壇をお願いして、本書の執筆まわりを契機にJUCE開発の近況などについて今月10/27(火)に半年ぶりのMusic Tech Meetupオフライン勉強会を開催します。5分程度のLTも公募していて、そのトピックはJUCEやC++に限られません。この辺のオーディオ技術・音楽ソフトの技術に興味のある方のご参加をお待ちしています。

https://connpass.com/event/408908/


この記事を共有:

次の記事
Eno'S Symphonia (9月の開発記録/2026)