私はcoreMIDIとAudioToolBoxを使って音楽シーケンスを作成しましたが、今度はループしたシーケンスの現在のビート位置をUIに表示したいと思います。ループが4ビートしかない場合は、ディスプレイが1,2,3,4の間でトグルし、シーケンスループとして1に戻るようにしたいと思います(Logic Proのようなプログラムのトランスポートによく似ています)。私はMusicSequenceGetBeatsForSeconds()
を使って、プレイが押されてから経過した時間量(CFAbsoluteTimeGetCurrent()
を使用)に基づいてビートを計算する機能を作ったが、これは値が線形的に増加し続ける(ディスプレイが " 5.0 ")。シーケンスの現在のビートを読み取るにはどうすればよいですか?MusicSequence(coreMIDI/Swift)の現在のビート位置を表示します
答えて
トラックメッセージの最後をスキップします。あなたはそれに頼ることはできません。
代わりにMusicSequenceUserCallback
を作成してください。次に、ユーザーイベントを保持するトラックをシーケンスに追加します。イベントの実際のデータは重要ではありません。
var event = MusicEventUserData(length: 1, data: (0xAA))
let status = MusicTrackNewUserEvent(markerTrack, endBeat, &event)
コールバックで、この任意のデータ値を探して、やりたいことをします。
let d = eventData.memory
if d.data == 0xAA {
Swift 2.2では、コールバックをクロージャにすることはできません。だからグローバルな機能にしてください。
代わりにMuscPlayerのMusicPlayerGetTime関数を見てください。
目的に応じて、MusicSequenceのエンドポイントとして仮想宛先を設定し、その読み取りブロックでイベントが発生したときに応答することができます。
ありがとう@GeneDeLisa、私は 'MusicPlayerGetTime'関数を見落としました。以前は 'CFAbsoluteTime'を使って思いついた関数よりもはるかにクリーンですが、シーケンスが繰り返されているにもかかわらず、拍数が直線的に増加しています。私はMIDIPacketListから派生した情報に目を通し、測定の現在の位置を読み取れるようなものは見つけられませんでした。無関心を許す必要があります。プログラムを学ぶピアニストだけです。 – drockFai
または、ループ内でシーケンスのビート数を受け取り、ループが繰り返された後に1にリセットされる関数を作成する必要がありますか? – drockFai
仮想目的地に到着したトラックのMIDIメッセージの終わりを探し、カウンターを入手したらリセットすることができます。それは、4ビートのシーケンスだけでなく、どんな長さでも機能します。 –
- 1. 現在の位置に表示位置を表示+地図表示
- 2. MKMapView現在の位置表示
- 3. iOSのtableViewCellの現在の位置を表示するには
- 4. 現在の位置のピンを地図上に表示する
- 5. 現在の位置の注釈をデフォルトで表示する
- 6. Googleマップの現在の位置をプログラムで表示するandroid
- 7. 現在の位置許可アラートビューは表示されません。
- 8. iphone現在の位置は表示されません
- 9. 現在の位置を表示するピン注釈
- 10. osmdroidに現在の位置ポインタを表示する方法は?
- 11. Googleマップで私の現在の位置を表示
- 12. ngMapで現在位置のGoogleマップを表示
- 13. phoneGapでマップ上に現在の位置を表示
- 14. MKMapView iphoneに現在位置の青い円を表示
- 15. Googleマップはandoridの現在の位置を表示していませんか?
- 16. MKMapView現在の位置がカスタムピンとして表示されます
- 17. MKMapView:現在のズームレベルを現在の位置に従います
- 18. シミュレータの現在の位置
- 19. 現在のタッチ位置
- 20. AChartEngine現在の位置
- 21. WP35デバイスに現在の位置情報を表示できません
- 22. は「MapViewの」内の現在位置を示す
- 23. フラグメント内のGoogle Map APIでユーザーの現在の位置を表示
- 24. htmlプレーヤーで現在の位置(GPXファイル)を表示する方法
- 25. 現在のマウスの位置を取得
- 26. Geofence.GEOFENCE_TRANSITION_EXITの現在の位置を取得
- 27. アンドロイドの現在の位置を取得
- 28. 現在位置マーカー(青丸)
- 29. openal:ソースの現在の再生位置を取得します
- 30. 現在のモニタでコンポーネントの位置を取得します
はしばらくかかりましたが、最終的にユーザコールバックを設定する方法を考え出しました非常に感謝@GeneDeLisa – drockFai
あなたはそれがうまく動作するようになった。それらのユーザーイベントに関する1つのこと。私が別のトラックに入れた理由は、シーケンスをMDIファイルに保存してからSibeliusのような別のアプリケーションに読み込もうとすると、読み込みがうまくできなくなってしまうからです。 –
私は、心に留めておきます - ありがとう! – drockFai