オーディオ合成とデジタル信号処理のための無料 C++ API

先進的なオープンソース C++ ライブラリ STK(Synthesis ToolKit)は、ソフトウェア開発者がオーディオ合成とデジタル信号処理を行えるようにします。その主な機能、リアルタイムオーディオ機能、そして開発者向けの実用的なコード例をご覧ください。

STK(Synthesis ToolKit)とは?

C++ 用 Synthesis ToolKit (STK) は、オーディオ信号処理とアルゴリズム音楽合成のために設計された、権威あるオープンソースライブラリです。スタンフォード大学 CCRMA で開発され、開発者に複雑なオーディオソフトウェアの作成を簡素化する堅牢な C++ クラス群を提供します。単一の大規模アプリケーションとは異なり、STK はユニットジェネレータのコレクション—モジュラーな構成要素—であり、シンセサイザー、エフェクトプロセッサ、楽器の迅速な開発を可能にします。STK ライブラリは、デジタル楽器、オーディオエフェクトソフトウェア、ゲームオーディオエンジン、音合成研究、教育用 DSP プロジェクトなどに取り組む開発者にとって価値があります。

C++ 用 Synthesis ToolKit (STK) は、オーディオ信号処理、デジタル合成、楽器モデリングのための再利用可能なクラスを提供するオープンソースの C++ ライブラリです。その移植性と使いやすさに重点を置いている点が特に有用です。クロスプラットフォームのオーディオドライバや MIDI の取り扱いに伴う低レベルの複雑さから開発者を保護し、サウンドデザインの創造的な側面に集中できるようにします。プロフェッショナルなプラグインを構築する場合でも教育用ツールを作成する場合でも、STK は高性能リアルタイムオーディオに必要な安定性と柔軟性を提供します。大規模なオーディオフレームワークとは異なり、STK はアーキテクチャをシンプルかつ透明に保ちます。開発者はオーディオアルゴリズムの動作を容易に理解し、独自の実験のために変更できます。また、フルート、クラリネット、弦楽器のピッキングシミュレーションなど、すぐに使用できる楽器モデルも提供しており、ソフトウェアシンセサイザー構築の優れた出発点となります。

Previous Next

STK の入門

完全なインストールのために、以下のコマンドを使用してください。

GitHub から STK をインストール

 git clone https://github.com/thestk/stk.git

リアルタイム音声合成

STK の最も強力な機能の一つは、リアルタイム音声生成をサポートしていることです。開発者は、事前に録音されたサンプルに依存するのではなく、プログラム実行中に動的にオーディオ信号を生成できます。これは、デジタルシンセサイザー、音楽制作ツール、ライブオーディオパフォーマンスソフトウェアなどのアプリケーションにとって不可欠です。STK は、低レイテンシを維持しながらオーディオフレームを継続的に生成する効率的な処理機能を提供します。この機能のおかげで、STK は応答性の高いオーディオ合成が求められる研究や音楽技術の環境で頻繁に使用されます。以下は、STK がプログラム的に音を生成できることを示す簡単な例です。

C++ ライブラリを使用してプログラムで音を生成する方法は?

#include \"SineWave.h\"
#include "RtAudio.h"

int main() { stk::SineWave oscillator; oscillator.setFrequency(440.0); // A4 note

for (int i = 0; i < 100; i++) { double sample = oscillator.tick(); std::cout << sample << std::endl; }

return 0; } 

物理モデリング楽器

オープンソースの STK ライブラリには、物理モデリングアルゴリズムを使用して実際の楽器をシミュレートする組み込みクラスが含まれています。これらのモデルは、楽器が物理的な世界でどのように振る舞うかを再現します。例えば、フルート、クラリネット、マンドリン、そして弓を使用する弦楽器などがあります。物理モデリングは、呼吸圧、弓の力、弦の振動といった表現パラメータを開発者が制御できるため、有用です。

STK ライブラリでリアルなデジタル楽器を作成する方法は?

#include "Clarinet.h"

int main() { stk::Clarinet clarinet;
    
clarinet.noteOn(440.0, 0.8);

for(int i = 0; i < 200; i++) { double sound = clarinet.tick(); std::cout << sound << std::endl; }

clarinet.noteOff(0.5);

return 0; }  

組み込みオーディオと MIDI のサポート

STK ライブラリは、リアルタイムオーディオおよび MIDI の入出力もサポートしています。これにより、アプリケーションは MIDI キーボードやオーディオインターフェースなどの外部デバイスとやり取りできます。MIDI 統合により、開発者は合成パラメータをリアルタイムで制御でき、ソフトウェアシンセサイザー、インタラクティブ音楽アプリケーション、ライブパフォーマンスツールなどを作成することが可能になります。以下の例は、受信した MIDI メッセージをリッスンするプログラムを作成します。

C++ アプリ内で MIDI メッセージを受信・保存する方法は?

#include "RtMidi.h"

int main() { RtMidiIn midi;

if (midi.getPortCount() == 0) { std::cout << "利用可能なMIDIポートがありません!" << std::endl; return 0; }

midi.openPort(0);

std::cout << "MIDI入力を待機しています..." << std::endl;

while (true) { std::vector message; midi.getMessage(&message);

if (!message.empty()) { std::cout << "MIDIメッセージを受信しました!" << std::endl; } }

return 0; }

 

C++ によるモジュラー・ユニットジェネレータ

STK ライブラリはモジュラー設計哲学に従い、膨大な数の「ユニットジェネレータ」(UGens)を提供します。これらには、オシレーター、フィルター、エンベロープ、ディレイエフェクトが含まれ、仮想モジュラーシンセサイザーのようにパッチ接続できます。この粒度により、開発者はシグナルチェーンを完全にコントロールできます。各クラスはオーディオフレームを効率的に処理するよう設計されているため、シンプルな正弦波ジェネレータから複雑な多段階粒子合成エンジンまで、異なる STK オブジェクトを接続するだけで構築できます。

 日本