我正在开发一个 iOS 音乐应用程序(用 C++ 编写),我的模型看起来或多或少像这样:
--Song
----Track
----Track
------Pattern
------Pattern
--------Note
--------Note
--------Note
所以基本上 aSong有多个Tracks, aTrack可以有多个Patterns和 aPattern有多个Notes.这些东西中的每一个都由一个类表示,除了 Song 对象之外,它们都存储在向量中。
每个Note都有一个"frame"参数,以便我可以计算何时应该播放一个音符。例如,如果我有 44100 个样本/秒并且特定音符的帧是 132300,我知道在第三秒开始时我需要那个音符。
我的问题是我应该如何表示这些音符以获得最佳性能?现在我正在考虑将注释存储在每个模式的向量数据成员中,然后循环所有的Tracks,然后Song查看Patterns并循环Notes查看哪个具有大于 132300 且小于 176400 的帧数据成员(第 4 秒开始)。
如您所知,这是很多循环,一首歌可能长达 10 分钟。所以我想知道这是否足够快来计算所有帧并按时将它们发送到缓冲区。