こんにちは。新米エンジニアのnoyです。
これから自分の思考整理・言語化の練習のためQiitaを活用していきたいと思います。
今回は最近始めた趣味であるDTMについてです。
解決したい問題
Logic Pro Xでトラックを再生中に**「システムが過負荷です。」と表示され止まってしまう。**

原因
「オーディオエンジンが、必要なデータの一部を時間内に処理できませんでした。」と書いてあります。
つまり、データ処理が追いつかなくなって止まってしまうようです。
必要なデータとは何か?
コンピュータで音声を再生するとき、アナログデータは一定の時間単位で区切って、その時間ごとの信号レベルを標本として抽出してデジタルデータ化しています。(これを標本化、サンプリングという)
どのくらいの時間間隔で区切ってサンプリングしているかを表すのが**サンプルレート(サンプリング周波数)**です。
今回のプロジェクトのサンプルレートはいくつになっているかを確認します。
「ファイル」>「プロジェクト設定」>「オーディオ」と選択。

サンプルレート:44.1 kHzと書いてあります。
つまり**「1秒間に44100回、標本を取っている」**ということです。
ちなみにこの数値がどれくらいかというと一般の音楽CDと同じです。
サンプルレートは、他のオーディオデータと同じになっていないと再生スピードにズレが出てしまうので統一されています。
さらに「標本一つを何ビットのデータで表すか」を量子化ビット数と言います。
この値が大きいほど、より原音に近い音を再現することができます。
音楽CDでは16bitが一般的です。
今回のプロジェクトでは量子化ビット数はいくつになっているか確認します。
「Logic Pro X」>「環境設定」>「録音」と選択。

「24ビットレコーディング」にチェックが入っているためオーディオデータは量子化ビット数24ビットで録音されています。
このオーディオデータを再生する場合、1秒間に何ビット読み込む必要があるでしょうか。
サンプルレート × 量子化ビット数 = 一秒間のデータ量
44100 回 × 24ビット = 1058400ビット = 132300バイト = 約129キロバイト
約129キロバイトのデータ量になり、このようなオーディオデータを何個も何秒も再生していった結果、データ量がどんどん増えていき、CPUで処理できる限界に達したとき(ここの説明は勉強中)止まるということです。
解決策
**「I/Oバッファサイズを大きくする」**ことをLogic Pro Xが勧めてくれています。
I/Oバッファサイズとはコンピュータの処理が間に合わなくなり問題が発生することを防ぐためにデータを一時的に溜めておける量を表したものです。
現状のI/Oバッファサイズを確認します。
「Logic Pro X」>「環境設定」>「オーディオ」>「デバイス」と選択。

現在は128サンプルになっています。
このサンプルというのは先ほどのサンプルレートと同じサンプルです。
つまり、1/44100サンプル × 128のデータをバッファできます。
しかし、これでは足りないということでこのサイズを大きくします。

I/Oバッファサイズを128から256に一段階大きくしました。
これでトラックを再生すると先ほどよりもすぐに止まらなくなりました。
最後に
実は、今回の方法ではレイテンシ(音の遅延)が増えてしまうので、まだ解決すべき問題は残っていますが。。。
一旦調べたことの整理としてここまで記しておきます。
他にも方法はたくさんあってAppleからの公式記事がありますので、続きはこちらを参照ください。(すみません)
https://support.apple.com/ja-jp/HT203930
それにしてもDAWの原理、奥が深すぎて途方もない。
一歩ずつ分かることを増やしていくしかないですね。