菜鸟教程小白 发表于 2022-12-12 11:12:20

ios - 使用 MusicTrackNewMIDINoteEvent 在播放时添加音符


                                            <p><p>我正在构建一个鼓机来学习如何在 iOS 上使用 MIDI。我设法让它工作到一个点,但是,我有以下问题。当用户点击某个按钮时,我需要在 MIDI 播放器播放时向我的 MIDI 循环添加声音,不幸的是我不能简单地这样做:</p>

<pre><code>MusicTrackNewMIDINoteEvent(track, 0, &amp;message);
</code></pre>

<p>虽然轨道是循环的并且有一个确定的长度,所以理论上它应该在某一点回到 0。我也试过这个:</p>

<pre><code>MusicTrackNewMIDINoteEvent(track, noteTimestamp, &amp;message);
</code></pre>

<p>其中 <code>noteTimestamp</code> 是我从播放器收到的时间戳。最后,我设法让它与这样的东西一起工作:</p>

<pre><code>MusicTrackNewMIDINoteEvent(track, noteTimestamp+.5, &amp;message);
</code></pre>

<p>但不用说 <code>.5</code> 延迟并不是我真正想要的鼓机,它应该尽可能响应。</p>

<p>那么,如何解决这个问题呢?如何尽快将音符推送到轨道上,而不会有任何延迟?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您正在轨道上放置一个事件,而当您放置该事件时,“播放头”已经过了它可以做任何事情的点。</p>

<p>所以继续做你正在做的事情(不改变时间)作为“记录”事件的一种手段,以便下次循环“出现”时,但你需要手动触发一条 midi 消息-- 除了轨道之外:</p>

<pre><code>(int) note = 60;
(int) velocuty = 127;
(int) offset = 0;
MusicDeviceMIDIEvent(_yourSamplerUnit, kMIDIMessage_NoteOn &lt;&lt; 4 | 0, note, velocity, offset);
</code></pre>

<p>同样,触发手动 midi 事件将允许听众听到声音,将事件放入轨道将允许您的轨道“录制”下一轮。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 使用 MusicTrackNewMIDINoteEvent 在播放时添加音符,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/16749606/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/16749606/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 使用 MusicTrackNewMIDINoteEvent 在播放时添加音符