記事一覧

MIDI Note Receiver

MIDIのノートNo.で映像のパラメータをコントロールできるようなパッチができるといいなと思って取り組んでるんですが、そのための入力パッチというと MIDI Note Receiver ですよね。
でもこれ、各ノートNo.がそれぞれ独立したアウトプットに割り振られていて、

my_parameter = recieved_MIDI_NoteNo * aRate;

みたいなことをやろうとするとえらい面倒くさいことに・・
誰かいい方法知らないっすかね?


I want to control movie with MIDI controllers, and making a patch to do that.
In my patch I want to control a parameter of a movie with MIDI note value so that I can control the movie with my MIDI keyboard.
To receive MIDI signals using MIDI Note Receiver seems to be the only way, but taking a look at the MIDI Note Receiver's panel to find all the notes are separate in individual outputs, so it's quite difficult to do the thing like this:

my_parameter = recieved_MIDI_NoteNo * aRate;

Does anybody know a good way to do this?

MPMusicPlayer : Rewind and standby at song's end

自分のアプリはいちどに一つの曲しか扱わないのだけど、MPMusicPlayerは基本的に複数の曲を扱う仕様になってる。
これがちょっと面倒なんだな;

再生してる曲が終わると MPMusicPlayerController は次の曲に行こうとする。次の曲がキューにあれば nowPlayingItem に次の曲の mediaItem がセットされるのだけど、次の曲が無い場合は nowPlayingItem は nil になる。
queueに1曲しか無い場合、曲が最後まで行ったまま放っておくと必ず nil になってしまうわけで、そのままだともう一度その曲をプレイすることができなくなってしまう。

解決策は簡単っちゃあ簡単で、曲が終わったのを検知して nowPlayingItem をセットし直せば良い。ただ、そのためには
MPMusicPlayerControllerNowPlayingItemDidChangeNotification を扱うセレクタを記述して、あと通知センター登録とかごにょごにょしなきゃいけないし、あと mediaItem をインスタンス変数として保持したりしなきゃいけない。
こういうのって Bad Access の原因になるからイヤなんだよなぁ・・・

MPMusicRepeatMode に MPMusicRepeatModeOne_RewindAndStop みたいのがありさえすればすごく楽なんだけどな・・・

My app deals with only one song at a time, while MPMusicPlayer is designed for playing multiple songs;
This mismatch makes my app slightly more complex.

When the currently playing song comes to its end MPMusicPlayerController tries to move to the next song.
If there is the next song in the queue nowPlayingItem will be set to its mediaItem variable, but if there is none nowPlayingItem will be set to nil.
The problem here is, my queue always contains only one song, so nowPlayingItem will be reset to nil everytime you play a song to the end, and you cannot replay the song.

The solution is pretty simple to say : reset the nowPlayingItem when the player has finished playing, but to do this you have to write the selector to receive MPMusicPlayerControllerNowPlayingItemDidChangeNotification and some other codes to make it work.
And you also have to retain the mediaItem variable of the song as the instance variable.
I don't like this kind of thing because it often causes the Bad Access error...

It will be much easier only if MPMusicRepeatMode had something like MPMusicRepeatModeOne_RewindAndStop.