2011/12/04

MusicEvent についての内容 ※間違いが含まれている場合があるので注意

MusicTrackNewMIDINoteEvent

/*!
    @function   MusicTrackNewMIDINoteEvent
    @abstract   Adds a MIDINoteMessage event to a track
    @discussion The event is added at the specified time stamp. The time stamp should not be less than zero.
    @param      inTrack         the track
    @param      inTimeStamp     the time stamp
    @param      inMessage       the event
*/
extern OSStatus
MusicTrackNewMIDINoteEvent(         MusicTrack                  inTrack,
                                    MusicTimeStamp              inTimeStamp,
                                    const MIDINoteMessage *     inMessage)      __OSX_AVAILABLE_STARTING(__MAC_10_0,__IPHONE_5_0);

トラックに MIDINoteMessage イベントを指定したタイムスタンプで追加します。 タイムスタンプは 0 より小さくすべきではありません。

MusicTrackNewMIDIChannelEvent

/*!
    @function   MusicTrackNewMIDIChannelEvent
    @abstract   Adds a MIDIChannelMessage event to a track
    @discussion The event is added at the specified time stamp. The time stamp should not be less than zero.
    @param      inTrack         the track
    @param      inTimeStamp     the time stamp
    @param      inMessage       the event
*/
extern OSStatus
MusicTrackNewMIDIChannelEvent(      MusicTrack                  inTrack,
                                    MusicTimeStamp              inTimeStamp,
                                    const MIDIChannelMessage *  inMessage)      __OSX_AVAILABLE_STARTING(__MAC_10_0,__IPHONE_5_0);

トラックに MIDIChannelMessage イベントを指定したタイムスタンプで追加します。 タイムスタンプは 0 より小さくすべきではありません。

MusicTrackNewMIDIRawDataEvent

/*!
    @function   MusicTrackNewMIDIRawDataEvent
    @abstract   Adds a MIDIRawData event to a track
    @discussion The event is added at the specified time stamp. The time stamp should not be less than zero.
    @param      inTrack         the track
    @param      inTimeStamp     the time stamp
    @param      inRawData       the event
*/
extern OSStatus
MusicTrackNewMIDIRawDataEvent(      MusicTrack                  inTrack,
                                    MusicTimeStamp              inTimeStamp,
                                    const MIDIRawData *         inRawData)      __OSX_AVAILABLE_STARTING(__MAC_10_0,__IPHONE_5_0);

トラックに MIDIRawData イベントを指定したタイムスタンプで追加します。 タイムスタンプは 0 より小さくすべきではありません。

MusicTrackNewExtendedNoteEvent

/*!
    @function   MusicTrackNewExtendedNoteEvent
    @abstract   Adds a ExtendedNoteOnEvent to a track
    @discussion The event is added at the specified time stamp. The time stamp should not be less than zero.
    @param      inTrack         the track
    @param      inTimeStamp     the time stamp
    @param      inInfo          the event
*/
extern OSStatus
MusicTrackNewExtendedNoteEvent(     MusicTrack                  inTrack,
                                    MusicTimeStamp              inTimeStamp,
                                    const ExtendedNoteOnEvent   *inInfo)        __OSX_AVAILABLE_STARTING(__MAC_10_0,__IPHONE_5_0);

トラックに ExtendedNoteOnEvent イベントを指定したタイムスタンプで追加します。 タイムスタンプは 0 より小さくすべきではありません。

MusicTrackNewParameterEvent

[cpp]
/*! @function MusicTrackNewParameterEvent @abstract Adds a ParameterEvent to a track @discussion The event is added at the specified time stamp. The time stamp should not be less than zero. @param inTrack the track @param inTimeStamp the time stamp @param inInfo the event */ extern OSStatus MusicTrackNewParameterEvent( MusicTrack inTrack, MusicTimeStamp inTimeStamp, const ParameterEvent * inInfo) __OSX_AVAILABLE_STARTING(__MAC_10_2,__IPHONE_5_0); トラックに ParameterEvent イベントを指定したタイムスタンプで追加します。 タイムスタンプは 0 より小さくすべきではありません。

MusicTrackNewExtendedTempoEvent

[cpp]
/*! @function MusicTrackNewExtendedTempoEvent @abstract Adds a tempo event to a track @discussion The event is added at the specified time stamp. The time stamp should not be less than zero. @param inTrack the track @param inTimeStamp the time stamp @param inBPM the event */ extern OSStatus MusicTrackNewExtendedTempoEvent( MusicTrack inTrack, MusicTimeStamp inTimeStamp, Float64 inBPM) __OSX_AVAILABLE_STARTING(__MAC_10_0,__IPHONE_5_0); トラックに tempo イベント(Float64)を指定したタイムスタンプで追加します。 タイムスタンプは 0 より小さくすべきではありません。

MusicTrackNewMetaEvent

[cpp]
/*! @function MusicTrackNewMetaEvent @abstract Adds a MIDIMetaEvent to a track @discussion The event is added at the specified time stamp. The time stamp should not be less than zero. @param inTrack the track @param inTimeStamp the time stamp @param inMetaEvent the event */ extern OSStatus MusicTrackNewMetaEvent( MusicTrack inTrack, MusicTimeStamp inTimeStamp, const MIDIMetaEvent * inMetaEvent) __OSX_AVAILABLE_STARTING(__MAC_10_0,__IPHONE_5_0); トラックに MIDIMetaEvent イベントを指定したタイムスタンプで追加します。 タイムスタンプは 0 より小さくすべきではありません。

MusicEventUserData

[cpp]
/*! @function MusicEventUserData @abstract Adds a MusicEventUserData event to a track @discussion The event is added at the specified time stamp. The time stamp should not be less than zero. @param inTrack the track @param inTimeStamp the time stamp @param inUserData the event */ extern OSStatus MusicTrackNewUserEvent( MusicTrack inTrack, MusicTimeStamp inTimeStamp, const MusicEventUserData * inUserData) __OSX_AVAILABLE_STARTING(__MAC_10_0,__IPHONE_5_0); トラックに MusicEventUserData イベントを指定したタイムスタンプで追加します。 タイムスタンプは 0 より小さくすべきではありません。

MusicTrackNewAUPresetEvent

[cpp]
/*! @function MusicTrackNewAUPresetEvent @abstract Adds a AUPresetEvent to a track @discussion The event is added at the specified time stamp. The time stamp should not be less than zero. @param inTrack the track @param inTimeStamp the time stamp @param inPresetEvent the event */ extern OSStatus MusicTrackNewAUPresetEvent( MusicTrack inTrack, MusicTimeStamp inTimeStamp, const AUPresetEvent * inPresetEvent) __OSX_AVAILABLE_STARTING(__MAC_10_3,__IPHONE_5_0); トラックに AUPresetEvent イベントを指定したタイムスタンプで追加します。 タイムスタンプは 0 より小さくすべきではありません。

  2011/12/04

MusicTrack についての内容 ※間違いが含まれている場合があるので注意

MusicTrackGetSequence

/*!
    @function   MusicTrackGetSequence
    @abstract   Gets the sequence which the track is a member of
    @param      inTrack     the track
    @param      outSequence the track's sequence
*/
extern OSStatus
MusicTrackGetSequence(  MusicTrack          inTrack,
                        MusicSequence       *outSequence)                       __OSX_AVAILABLE_STARTING(__MAC_10_0,__IPHONE_5_0);

トラックがメンバーになっているシーケンスを取得する。

MusicTrackSetDestNode

/*!
    @function   MusicTrackSetDestNode
    @abstract   Sets the track's target to the specified AUNode
    @discussion The node must be a member of the graph that the track's sequence is using. When played, the track
                will send all of its events to that node.
    @param      inTrack     the track
    @param      inNode      the new node
*/
extern OSStatus
MusicTrackSetDestNode(  MusicTrack          inTrack,
                        AUNode              inNode)                             __OSX_AVAILABLE_STARTING(__MAC_10_0,__IPHONE_5_0);

指定したノード(AUNode)に トラック(MusicTrack)のターゲットを設定する。 ノードは、利用されるトラックシーケンスであるグラフのメンバーを持たなければいけない。

MusicTrackSetDestMIDIEndpoint

/*!
    @function   MusicTrackSetDestMIDIEndpoint
    @abstract   Sets the track's target to the specified MIDI endpoint
    @discussion When played, the track will send all of its events to the specified MIDI Endpoint.
    @param      inTrack     the track
    @param      inEndpoint  the new MIDI endpoint
*/
extern OSStatus
MusicTrackSetDestMIDIEndpoint(  MusicTrack          inTrack,
                                MIDIEndpointRef     inEndpoint)                 __OSX_AVAILABLE_STARTING(__MAC_10_1,__IPHONE_5_0);

指定されたMIDIエンドポイント(MIDIEndpointRef)に、トラックのターゲットを設定する。 再生されたとき、トラック(MusicTrack)は指定された MIDI に全てのイベントを送信する。

MusicTrackGetDestNode

/*!
    @function   MusicTrackGetDestNode
    @abstract   Gets the track's target if it is an AUNode
    @discussion Returns kAudioToolboxErr_IllegalTrackDestination if the track's target is a MIDIEndpointRef 
                and NOT an AUNode
    @param      inTrack     the track
    @param      outNode     the node target for the track
*/
extern OSStatus
MusicTrackGetDestNode(          MusicTrack          inTrack,
                                AUNode *            outNode)                    __OSX_AVAILABLE_STARTING(__MAC_10_1,__IPHONE_5_0);

トラック(MusicTrack)から、AUNode を取得する。

MusicTrackGetDestMIDIEndpoint

/*!
    @function   MusicTrackGetDestMIDIEndpoint
    @abstract   Gets the track's target if it is a MIDI Endpoint
    @discussion Returns kAudioToolboxErr_IllegalTrackDestination if the track's target is an AUNode 
                and NOT a MIDI Endpoint
    @param      inTrack     the track
    @param      outEndpoint the MIDI Endpoint target for the track
*/
extern OSStatus
MusicTrackGetDestMIDIEndpoint(  MusicTrack          inTrack,
                                MIDIEndpointRef *   outEndpoint)                __OSX_AVAILABLE_STARTING(__MAC_10_1,__IPHONE_5_0);

トラック(MusicTrack)から、MIDIエンドポイント(MIDIEndpointRef) を取得する。

MusicTrackSetProperty

/*!
    @function   MusicTrackSetProperty
    @abstract   Sets the specified property value
    @discussion Property values are always get and set by reference
    @param      inTrack         the track
    @param      inPropertyID    the property ID
    @param      inData          the new property value
    @param      inLength        the size of the property value being set
*/
extern OSStatus
MusicTrackSetProperty(  MusicTrack          inTrack,
                        UInt32              inPropertyID,
                        void                *inData,
                        UInt32              inLength)                           __OSX_AVAILABLE_STARTING(__MAC_10_0,__IPHONE_5_0);

MusicTrack に指定されたプロパティを設定する。 プロパティ値は、常に参照による getter、setter である。

MusicTrackGetProperty

/*!
    @function   MusicTrackGetProperty
    @abstract   Gets the specified property value
    @discussion If outData is NULL, then the size of the data will be passed back in ioLength
                This allows the client to allocate a buffer of the correct size (useful for variable
                length properties -- currently all properties have fixed size)
                Property values are always get and set by reference
    @param      inTrack         the track
    @param      inPropertyID    the property ID
    @param      outData         if not NULL, points to data of size ioLength
    @param      ioLength        on input the available size of outData, on output the size of the valid data that outData
                                will then point too.
*/
extern OSStatus
MusicTrackGetProperty(  MusicTrack          inTrack,
                        UInt32              inPropertyID,
                        void                *outData,
                        UInt32              *ioLength)                          __OSX_AVAILABLE_STARTING(__MAC_10_0,__IPHONE_5_0);

MusicTrack から指定されたプロパティを取得する。 outData が NULL だった場合、データサイズは ioLength(UInt32)で受け渡される。 これにより、クライアントは正しいサイズのバッファ(現在、全てのプロパティがもつ固定サイズの可変長プロパティとして便利)に割り当てる事ができます。 プロパティ値は、常に参照による getter、setter である。

MusicTrackGetProperty

/*!
    @function   MusicTrackMoveEvents
    @abstract   Move events in a track
    @discussion Moves all of the events in the specified time range by the moveTime. MoveTime maybe negative to 
                move events backwards (towards zero).
                
                All time ranges are [starttime < endtime]
                
    @param      inTrack         the track
    @param      inStartTime     the start time for the range of events
    @param      inEndTime       the end time up to which will form the range of the events to move
    @param      inMoveTime      amount of beats to move the selected events.
*/
extern OSStatus
MusicTrackMoveEvents(   MusicTrack          inTrack,
                        MusicTimeStamp      inStartTime,
                        MusicTimeStamp      inEndTime,
                        MusicTimeStamp      inMoveTime)                         __OSX_AVAILABLE_STARTING(__MAC_10_0,__IPHONE_5_0);

移動時間で、指定した時間範囲内の全てのイベントを移動します。 移動時間は、イベント後方(0 に向かって)にマイナス移動します。 全ての時間範囲は、「starttime < endtime」です。

MusicTrackClear

/*!
    @function   MusicTrackClear
    @abstract   Removes all events within the specified range
    @discussion All time ranges are [starttime < endtime]
    @param      inTrack     the track
    @param      inStartTime the start time for the range of events
    @param      inEndTime   the end time up to which will form the range of the events to clear
*/
extern OSStatus
MusicTrackClear(        MusicTrack          inTrack,
                        MusicTimeStamp      inStartTime,
                        MusicTimeStamp      inEndTime)                          __OSX_AVAILABLE_STARTING(__MAC_10_0,__IPHONE_5_0);

指定した範囲内の、全てのイベントを削除します。

MusicTrackClear

/*!
    @function   MusicTrackCut
    @abstract   Removes all the events within the specified range
    @discussion Events that fall past the specified range will be moved back by the specified range time.
                
                All time ranges are [starttime < endtime]
                
    @param      inTrack     the track
    @param      inStartTime the start time for the range of events
    @param      inEndTime   the end time up to which will form the range of the events to cut out
*/
extern OSStatus
MusicTrackCut(          MusicTrack          inTrack,
                        MusicTimeStamp      inStartTime,
                        MusicTimeStamp      inEndTime)                          __OSX_AVAILABLE_STARTING(__MAC_10_0,__IPHONE_5_0);

指定した時間範囲でイベントを削除して、指定時間内に戻ります。

MusicTrackCopyInsert

/*!
    @function   MusicTrackCopyInsert
    @abstract   Copies events from one track and inserts them into another
    @discussion Copies all of the events with the specified time range of the source track. It then inserts
                those events into the destination track. All events at and after inDestInsertTime in inDestTrack 
                are moved forward by the range's duration
                
                All time ranges are [starttime < endtime]
                
    @param      inSourceTrack       the source track
    @param      inSourceStartTime   the start time for the range of events
    @param      inSourceEndTime     the end time up to which will form the range of the events to copy from the source track
    @param      inDestTrack         the destination track to copy too
    @param      inDestInsertTime    the time at which the copied events will be inserted.
*/
extern OSStatus
MusicTrackCopyInsert(   MusicTrack          inSourceTrack,
                        MusicTimeStamp      inSourceStartTime,
                        MusicTimeStamp      inSourceEndTime,
                        MusicTrack          inDestTrack,
                        MusicTimeStamp      inDestInsertTime)                   __OSX_AVAILABLE_STARTING(__MAC_10_0,__IPHONE_5_0);

元のトラック(MusicTrack)で指定した範囲時間で全てのイベントをコピーし、対象のトラック(MusicTrack)にコピーしたイベントを挿入します。 全てのイベントは、inDestTrack(MusicTrack)に、inDestInsertTime(MusicTimeStamp) 後に置かれます。

MusicTrackMerge

/*!
    @function   MusicTrackMerge
    @abstract   Copies events from one track and merges them into another
    @discussion Copies all of the events with the specified time range of the source track. It then merges
                those events into the destination track starting at inDestInsertTime.
                
                All time ranges are [starttime < endtime]
                
    @param      inSourceTrack       the source track
    @param      inSourceStartTime   the start time for the range of events
    @param      inSourceEndTime     the end time up to which will form the range of the events to copy from the source track
    @param      inDestTrack         the destination track to copy too
    @param      inDestInsertTime    the time at which the copied events will be merged.
*/
extern OSStatus
MusicTrackMerge(        MusicTrack          inSourceTrack,
                        MusicTimeStamp      inSourceStartTime,
                        MusicTimeStamp      inSourceEndTime,
                        MusicTrack          inDestTrack,
                        MusicTimeStamp      inDestInsertTime)                   __OSX_AVAILABLE_STARTING(__MAC_10_0,__IPHONE_5_0);

元のトラック(MusicTrack)で指定した範囲時間で全てのイベントをコピーし、対象のトラックに inDestInsertTime(MusicTImeStamp)でイベントをマージします。

  2011/12/03

MusicSequence についての内容 ※間違いが含まれている場合があるので注意

NewMusicSequence

/*!
    @function   NewMusicSequence
    @abstract   Create a new empty sequence
    @discussion A new music sequence will only have a tempo track (with a default tempo of 120 bpm), 
                and the default type is beat based.

                When a sequence is to be played by a player, it can play to either an AUGraph, a MIDI Destination or a
                mixture/combination of both. See MusicSequenceSetAUGraph and MusicSequenceSetMIDIEndpoint for the generic
                destination assignments. Specific tracks can also be assigned nodes of a graph or a MIDI endpoint as targets
                for the events that they contain; see MusicTrackSetDestNode and MusicTrackSetDestMIDIEndpoint.
                
    @param      outSequence     the new sequence
*/
extern OSStatus
NewMusicSequence(           MusicSequence       *outSequence)                   __OSX_AVAILABLE_STARTING(__MAC_10_0,__IPHONE_5_0);

新しい空のシーケンスを作成する。 新規シーケンスは、テンポトラックを持つ(デフォルトは120bpm) シーケンスがプレイヤーによって委細制された時、 AUGraph、MIDI Destination または mixiture/combination の両方のいずれかで再生される。 一般的なデスティネーションの割り当てには、MusicSequenceSetAUGraph と MusicSequenceSetMIDIEndpoint を参照。 具体的なトラックは、グラフのノードやイベントの為のターゲットとして MIDI endpoint にアサインする事ができる。 MusicTrackSetDestNode と MusicTrackSetDestMIDIEndpoint を参照。

DisposeMusicSequence

/*!
    @function   DisposeMusicSequence
    @abstract   Dispose the sequence
    @discussion  A sequence cannot be disposed while a MusicPlayer has it.
    @param      inSequence      the sequence
*/
extern OSStatus
DisposeMusicSequence(       MusicSequence       inSequence)                     __OSX_AVAILABLE_STARTING(__MAC_10_0,__IPHONE_5_0);

シーケンスを処分するが、MusicPlayer がシーケンスを持っている間は処分できない。

MusicSequenceNewTrack

/*!
    @function   MusicSequenceNewTrack
    @abstract   Add a new (empty) track to the sequence
    @param      inSequence      the sequence
    @param      outTrack        the new track (it is always appended to any existing tracks)
*/
extern OSStatus
MusicSequenceNewTrack(      MusicSequence       inSequence,
                            MusicTrack          *outTrack)                      __OSX_AVAILABLE_STARTING(__MAC_10_0,__IPHONE_5_0);

新規(空の)トラックを、シーケンスに追加する。 新規トラックは常にどこかのトラックに付随している。

MusicSequenceDisposeTrack

[cpp]
/*! @function MusicSequenceDisposeTrack @abstract Remove and dispose a track from a sequence @param inSequence the sequence @param inTrack the track to remove and dispose */ extern OSStatus MusicSequenceDisposeTrack( MusicSequence inSequence, MusicTrack inTrack) __OSX_AVAILABLE_STARTING(__MAC_10_0,__IPHONE_5_0); シーケンスからトラックを削除し処分する。

MusicSequenceGetTrackCount

[cpp]
/*! @function MusicSequenceGetTrackCount @abstract The number of tracks in a sequence. The track count and accessors exclude the tempo track (which is treated as a special case) @param inSequence the sequence @param outNumberOfTracks the number of tracks */ extern OSStatus MusicSequenceGetTrackCount( MusicSequence inSequence, UInt32 *outNumberOfTracks) __OSX_AVAILABLE_STARTING(__MAC_10_0,__IPHONE_5_0); トラック数を取得し、テンポトラック(特別な扱い)を除外したアクセッサー

MusicSequenceGetIndTrack

[cpp]
/*! @function MusicSequenceGetIndTrack @abstract Get a track at the specified index @discussion Index is zero based. It will return kAudio_ParamError if index is not in the range: 0 < TrackCount The track count and accessors exclude the tempo track (which is treated as a special case) @param inSequence the sequence @param inTrackIndex the index @param outTrack the track at that index */ extern OSStatus MusicSequenceGetIndTrack( MusicSequence inSequence, UInt32 inTrackIndex, MusicTrack *outTrack) __OSX_AVAILABLE_STARTING(__MAC_10_0,__IPHONE_5_0); シーケンスから明示的なインデックスでトラックを取得 インデックスの基本は 0 で、インデックスが 0 〜 トラック数出ない場合は、kAudio_ParamError を返すでしょう。

MusicSequenceGetTrackIndex

[cpp]
/*! @function MusicSequenceGetTrackIndex @abstract Get the index for a specific track @discussion Index is zero based. It will return an error if the track is not a member of the sequence. The track count and accessors exclude the tempo track (which is treated as a special case) @param inSequence the sequence @param inTrack the track @param outTrackIndex the index of the track */ extern OSStatus MusicSequenceGetTrackIndex( MusicSequence inSequence, MusicTrack inTrack, UInt32 *outTrackIndex) __OSX_AVAILABLE_STARTING(__MAC_10_0,__IPHONE_5_0); シーケンスから明示的なトラックでインデックスを取得 インデックスの基本は 0 で、トラックがシーケンスのメンバーでない場合、エラーを返すでしょう。 トラックのカウントとテンポトラック(特別なケースとして取り扱い)を除くアクセッサー

MusicSequenceGetTempoTrack

[cpp]
/*! @function MusicSequenceGetTempoTrack @abstract Get the tempo track of the sequence @discussion Each sequence has a single tempo track. All tempo events are placed into this tempo track (as well as other appropriate events (time sig for instance from a MIDI file). The tempo track, once retrieved can be edited and iterated upon as any other track. Non-tempo events in a tempo track are ignored. @param inSequence the sequence @param outTrack the tempo track of the sequence */ extern OSStatus MusicSequenceGetTempoTrack( MusicSequence inSequence, MusicTrack *outTrack) __OSX_AVAILABLE_STARTING(__MAC_10_1,__IPHONE_5_0); シーケンスからテンポトラックを取得 それぞれのシーケンスは、テンポトラックを1つだけ持つ。 全てのテンポイベントは、テンポトラック(MIDIファイルからの時間信号)インスタンス他の適切なイベント同様に配置される。 テンポトラックは一度取得されると、編集や他のトラック上にイテレートされる。 テンポトラックの中で、テンポが無いイベントは、無視される。

MusicSequenceSetAUGraph

[cpp]
/*! @function MusicSequenceSetAUGraph @abstract Set the graph to be associated with the sequence @discussion A sequence can be associated with an AUGraph and this graph will be used to render the events as controlled by the sequence when it is played. By default, all of the tracks of a sequence will find the first AUNode that is an instance an Apple MusicDevice audio unit. This audio unit is a software synthesiser that is compatible with the GM and GS MIDI standards.

            Specific nodes of the graph can be targeted for different tracks as well (MusicTrackSetDestNode)
@param      inSequence      the sequence
@param      inGraph         the graph

*/ extern OSStatus MusicSequenceSetAUGraph( MusicSequence inSequence, AUGraph inGraph) __OSX_AVAILABLE_STARTING(__MAC_10_0,__IPHONE_5_0); シーケンスにAUGraph を設定する。 シーケンスはAUGraph と一緒に構成され、グラフはシーケンスが制御するようなイベントを描画するのに利用される。 通常、全てのシーケンストラックは、Apple Music Device のオーディオ単位である AUNode を最初に検知する。 このオーディオ単位は、GM と GS MIDI スタンダードと互換のあるソフトウェアシンセである。

MusicSequenceGetAUGraph

[cpp]
/*! @function MusicSequenceGetAUGraph @abstract Gets the graph currently associated with a sequence @discussion By default if no graph is assigned to a sequence then the sequence will create a default graph. This default graph contains a MusicDevice and a DynamicsProcessor and all tracks will be targeted to the MusicDevice.

            This call will thus either return the graph as set by the user, or this default graph.
@param      inSequence      the sequence
@param      outGraph        the graph

*/ extern OSStatus MusicSequenceGetAUGraph( MusicSequence inSequence, AUGraph *outGraph) __OSX_AVAILABLE_STARTING(__MAC_10_0,__IPHONE_5_0); シーケンスから AUGraph を取得する。 デフォルトで、シーケンスにアサインされているグラフがない場合、デフォルトグラフを作成する。 このデフォルトグラフは、MusicDevice や ダイナミックプロセッサーを含み、全てのトラックは MusicDevice に結びつきます。

MusicSequenceSetMIDIEndpoint

[cpp]
/*! @function MusicSequenceSetMIDIEndpoint @abstract Makes the target of all of the tracks in the sequence a MIDI endpoint @discussion This is a convenience function, and is equivalent to iterating through all of the tracks in a sequence and targeting each track to the MIDI endpoint

@param      inSequence      the sequence
@param      inEndpoint      the MIDI endpoint

*/ extern OSStatus MusicSequenceSetMIDIEndpoint( MusicSequence inSequence, MIDIEndpointRef inEndpoint) __OSX_AVAILABLE_STARTING(__MAC_10_1,__IPHONE_5_0); シーケンスから、MIDIエンドポイントを設定する。 シーケンス中の全てのトラックのターゲットを作成 便利なファンクションで、シーケンス内の全てのトラックを通してイテレートする事と同等で、MIDIエンドポイントにそれぞれのトラックを対象にしている。

MusicSequenceSetMIDIEndpoint

[cpp]
/*! @function MusicSequenceSetSequenceType @abstract Set the sequence type (the default is beats) @discussion These two calls allow you to get and set a MusicSequence type; specifying kMusicSequenceType_Beats = 'beat', kMusicSequenceType_Seconds = 'secs', kMusicSequenceType_Samples = 'samp'

            The sequence type can be set to beats at any time. The sequence type can only be set to 
            seconds or samples if there are NO tempo events already in the sequence.

            For beats - it can have as many tempo events as you want
            For Samples and Seconds - you should add a single tempo event after setting the type
                Samples - the tempo is the desired sample rate - e.g. 44100 and each "beat" in the sequence will be
                    interpreted as a sample count at that sample rate (so beat == 44100 is a second)
                Seconds - the tempo should be set to 60 - a beat is a second.

            Beats is the default (and is the behaviour on pre 10.5 systems)

            A meta event of interest for Seconds based MIDI files is the SMPTE Offset meta event - stored in the tempo track.
            The sequence doesn&#039;t do anything with this event (except store/write it)   
@param      inSequence  the sequence
@param      inType      the sequence type

*/ extern OSStatus MusicSequenceSetSequenceType( MusicSequence inSequence, MusicSequenceType inType) __OSX_AVAILABLE_STARTING(__MAC_10_5,__IPHONE_5_0);

MusicSequenceGetSequenceType

[cpp]
/*! @function MusicSequenceGetSequenceType @abstract Get the sequence type @discussion See SetSequence for a full description @param inSequence the sequence @param outType the type */ extern OSStatus MusicSequenceGetSequenceType( MusicSequence inSequence, MusicSequenceType * outType) __OSX_AVAILABLE_STARTING(__MAC_10_5,__IPHONE_5_0); シーケンスから、シーケンスタイプを取得する。 MisicSequenceType は、拍、秒、サンプル数

MusicSequenceFileLoad

[cpp]
/*! @function MusicSequenceFileLoad @abstract Load the data contained within the referenced file to the sequence @discussion This function will parse the file referenced by the URL and add the events to the sequence. @param inSequence the sequence @param inFileRef a file:// URL that references a file @param inFileTypeHint provides a hint to the sequence on the file type being imported @param inFlags flags that can control how the data is parsed in the file and laid out in the tracks that will be created and added to the sequence in this operation */ extern OSStatus MusicSequenceFileLoad (MusicSequence inSequence, CFURLRef inFileRef, MusicSequenceFileTypeID inFileTypeHint, // can be zero in many cases MusicSequenceLoadFlags inFlags) __OSX_AVAILABLE_STARTING(__MAC_10_5,__IPHONE_5_0); シーケンスからにファイルをロードする。 URL参照(CFURLRef)のファイルをパースし、シーケンスイベントの追加をする。 inFileTypeHint(MusicSequenceFileTypeID)はインポートされるファイルタイプシーケンスするヒントを提供。多くの場合は、0 とする。 inFlags(MusicSequenceLoadFlags) は ファイルをパースやトラック上の配置方法等をコントロールするフラグだが、現在は kMusicSequenceLoadSMF_ChannelsToTracks しかない。

MusicSequenceFileLoadData

[cpp]
/*! @function MusicSequenceFileLoadData @abstract Load the data to the sequence @discussion This function will parse the data and add the events to the sequence. The data provided needs to be of a particular file type as specified by the fileTypeHint. @param inSequence the sequence @param inData the contents of a valid file loaded into a CFData object @param inFileTypeHint provides a hint to the sequence on the file type being imported @param inFlags flags that can control how the data is parsed in the file and laid out in the tracks that will be created and added to the sequence in this operation */ extern OSStatus MusicSequenceFileLoadData (MusicSequence inSequence, CFDataRef inData, MusicSequenceFileTypeID inFileTypeHint, // can be zero in many cases MusicSequenceLoadFlags inFlags) __OSX_AVAILABLE_STARTING(__MAC_10_5,__IPHONE_5_0); データをパースして、シーケンスにイベントを追加する。 データは、fileTypeHint によって指定された特別のファイルタイプを提供。 inData(CFDataRef)は、 CFData オブジェクトにロードされた有効なファイルのコンテンツ。 inFileTypeHint(MusicSequenceFileTypeID)は、インポートされたファイルタイプ上のシーケンスにヒントを提供する。 inFlags(MusicSequenceLoadFlags) は ファイルをパースやトラック上の配置方法等をコントロールするフラグだが、現在は kMusicSequenceLoadSMF_ChannelsToTracks しかない。

MusicSequenceSetSMPTEResolution

[cpp]
/*! @function MusicSequenceSetSMPTEResolution @abstract Helper function to establish the SMPTE based MIDI file resolution for the specified ticks @discussion SMPTE resolution helpers for dealing with the interpretation and creation of tick values for standard MIDI files (see MusicSequenceFileCreate) @param fps the frames per second @param ticks the ticks per quarter note @result the resolution that can be used when creating a MIDI file derived from the two parameters */ CF_INLINE SInt16 MusicSequenceSetSMPTEResolution (SignedByte fps, Byte ticks) { SInt16 res = fps < 0 ? fps : -fps; res = res << 8; res += ticks; return res; } 指定されたティックスのMIDIファイル解像度をベースとしたSMTPE を確立するヘルパーファンクション SMTPE 解像度ヘルパーは スタンダードMIDIファイルの為の解釈とティックス値作成(MusicSequenceFileCreate参照) fps(SignedByte)は、1秒間のフレーム ticks(Byte)は、4分音符間のティックス 解像度は、2つのパラメータからMIDIファイルを作成するときに利用する事ができる。

MusicSequenceGetSMPTEResolution

[cpp]
/*! @function MusicSequenceGetSMPTEResolution @abstract Helper function to get the fps and ticks from their representation in a SMPTE based MIDI file @discussion SMPTE resolution helpers for dealing with the interpretation and creation of tick values for standard MIDI files (see MusicSequenceFileCreate) @param inRes the resolution from a MIDI file @param fps the frames per second @param ticks the ticks per quarter note */ CF_INLINE void MusicSequenceGetSMPTEResolution (SInt16 inRes, SignedByte * fps, Byte * ticks) { *fps = (SignedByte)((0xFF00 & inRes) >> 8); *ticks = 0x7F & inRes;
} MIDIファイルをベースとしたSMTPE 内の表現から、fps(SingnedByte)と、ticks(Byte)を取得

MusicSequenceFileCreate

[cpp]
/*! @function MusicSequenceFileCreate @abstract Create a file from a sequence @discussion This function can be (and is most commonly) used to create a MIDI file from the events in a sequence. Only MIDI based events are used when creating the MIDI file. MIDI files are normally beat based, but can also have a SMPTE (or real-time rather than beat time) representation.

            inResolution is relationship between "tick" and quarter note for saving to Standard MIDI File
                - pass in zero to use default - this will be the value that is currently set on the tempo track
                - see the comments for the set track property&#039;s time resolution

            The different Sequence types determine the kinds of files that can be created:

            Beats
                When saving a MIDI file, it saves a beats (PPQ) based axis

            Seconds
                When saving a MIDI file, it will save it as a SMPTE resolution - so you should specify this resolution
                when creating the MIDI file. 
                If zero is specified, 25 fps and 40 ticks/frame is used (a time scale of a millisecond)

            Samples
                You cannot save to a MIDI file with this sequence type

            The complete meaning of the 16-bit "division" field in a MIDI File&#039;s MThd chunk.

            If it is positive, then a tick represents 1/D quarter notes.

            If it negative:

            bits 14-8 are a signed 7-bit number representing the SMPTE format:
                -24, -25, -29 (drop), -30
            bits 7-0 represents the number of ticks per SMPTE frame
                typical values: 4, 10, 80, 100

            You can obtain millisecond resolution by specifying 25 frames/sec and 40 divisions/frame.

            30 fps with 80 bits (ticks) per frame: 0xE250  ((char)0xE2 == -30)

@param      inSequence      the sequence
@param      inFileRef       the location of the file to create
@param      inFileType      the type of file to create
@param      inFlags         flags to control the file creation
@param      inResolution    the resolution (depending on file type and sequence type)

*/ extern OSStatus MusicSequenceFileCreate (MusicSequence inSequence, CFURLRef inFileRef, MusicSequenceFileTypeID inFileType, MusicSequenceFileFlags inFlags, SInt16 inResolution) __OSX_AVAILABLE_STARTING(__MAC_10_5,__IPHONE_5_0);

シーケンス内のイベントからMIDIファイルを作る、最も一般的な関数です。 イベントベースのMIDI だけ、MIDIファイルが作成されたときに利用できる。 MIDI ファイルは通常、拍ベースで用いられるが、SMPTE (拍の時間よりリアルタイム) 表現も利用可能です。 inResolution(SInt16)は、スタンダードMIDIファイルの保存用に、ティックスと4分音符の間に関係する。 ・デフォルトを利用では 0 を受け渡す。これはテンポトラック上の現在の設定値となります ・トラックのプロパティの時間解像度を設定する為には、コメントを参照

異なるシーケンスタイプは、作成されたファイルの種類を決定する。 拍: MIDIファイルが保存されたときに、軸を基本とした拍(PPQ)を保存する。 秒:MIDIファイルが保存されたときに、SMTPE 解像度として保存される(解像度を指定する必要がある) サンプル:シーケンスタイプと一緒に、MIDIファイルにに保存する事はできません。

MIDIファイル内の、16ビット MThdチャンク内の division の完全な意味、 もし、Positive だったら、ティックスは 1/D (四分音符) を表します。 もし、Negative だったら、 ・14から8ビットは、SMPTEフォーマットを表す符号付き7ビットの番号:-24, -25, -29 (drop), -30 ・7から0ビットは、SMPTEフレームごとのティック数を表す:典型的な値:4、10、80、100

25フレーム/秒、40分割/フレームの指定による、ミリセカンド解像度を取得する事ができます。 80ビット(ティックス)/秒 での 30 fps :0xE250 ((char)0xE2 == -30)

MusicSequenceFileCreateData

[cpp]
/*! @function MusicSequenceFileCreateData @abstract Create a data object from a sequence @discussion The same basic parameters apply to this as with the MusicSequenceFileCreate function. The difference being that that function will create a file on disk, whereas this one will create a CFData object that is a file in memory. The CFData object should be released by the caller. @param inSequence the sequence @param inFileType the type of file to create @param inFlags flags to control the file creation @param inResolution the resolution (depending on file type and sequence type) @param outData the resulting data object */ extern OSStatus MusicSequenceFileCreateData (MusicSequence inSequence, MusicSequenceFileTypeID inFileType, MusicSequenceFileFlags inFlags, SInt16 inResolution, CFDataRef * outData) __OSX_AVAILABLE_STARTING(__MAC_10_5,__IPHONE_5_0); シーケンスファイルから、データオブジェクトを作成する。 基本はMusicSequenceFileCreate と同様のパラメータを提供。 違いは、1つはメモリ内にCFDataオブジェクトを作成するのに対して、ディスク上にファイルを作成する。 CFDataオブジェクトは呼び出し側で解放する必要があります。

MusicSequenceReverse

[cpp]
/*! @function MusicSequenceReverse @abstract Reverse in time all events in a sequence, including the tempo events @param inSequence the sequence */ extern OSStatus MusicSequenceReverse( MusicSequence inSequence) __OSX_AVAILABLE_STARTING(__MAC_10_0,__IPHONE_5_0); テンポイベントを含むシーケンス内の全てのイベントを、元にもどします。

MusicSequenceGetSecondsForBeats

[cpp]
/*! @function MusicSequenceGetSecondsForBeats @abstract Returns a seconds value that would correspond to the supplied beats @discussion Uses the sequence's tempo events @param inSequence the sequence @param inBeats the beats @param outSeconds the seconds (time from 0 beat) */ extern OSStatus MusicSequenceGetSecondsForBeats( MusicSequence inSequence, MusicTimeStamp inBeats, Float64 * outSeconds) __OSX_AVAILABLE_STARTING(__MAC_10_2,__IPHONE_5_0); 提供されている拍:inBeats(MusicTimeStamp)に相応した、秒:outSeconds(Float64)の値を返します。

MusicSequenceGetBeatsForSeconds

[cpp]
/*! @function MusicSequenceGetBeatsForSeconds @abstract Returns a beat value that would correspond to the supplied seconds from zero. @discussion Uses the sequence's tempo events @param inSequence the sequence @param inSeconds the seconds @param outBeats the corresponding beat */ extern OSStatus MusicSequenceGetBeatsForSeconds( MusicSequence inSequence, Float64 inSeconds, MusicTimeStamp * outBeats) __OSX_AVAILABLE_STARTING(__MAC_10_2,__IPHONE_5_0); 提供されている秒:outSeconds(Float64)に相応した、拍:inBeats(MusicTimeStamp)の値を返します。

MusicSequenceSetUserCallback

[cpp]
/*! @function MusicSequenceSetUserCallback @abstract Establish a user callback for a sequence @discussion This call is used to register (or remove if inCallback is NULL) a callback that the MusicSequence will call for ANY UserEvents that are added to any of the tracks of the sequence.

            If there is a callback registered, then UserEvents will be chased when
            MusicPlayerSetTime is called. In that case the inStartSliceBeat and inEndSliceBeat
            will both be the same value and will be the beat that the player is chasing too.

            In normal cases, where the sequence data is being scheduled for playback, the
            following will apply:
                inStartSliceBeat <= inEventTime < inEndSliceBeat

            The only exception to this is if the track that owns the MusicEvent is looping.
            In this case the start beat will still be less than the end beat (so your callback
            can still determine that it is playing, and what beats are currently being scheduled),
            however, the inEventTime will be the original time-stamped time of the user event. 
@param      inSequence      the sequence
@param      inCallback      the callback
@param      inClientData    client (user supplied) data provided back to the callback when it is called by the sequence

/ extern OSStatus MusicSequenceSetUserCallback( MusicSequence inSequence, MusicSequenceUserCallback inCallback, void inClientData) __OSX_AVAILABLE_STARTING(__MAC_10_3,__IPHONE_5_0); シーケンス用のユーザコールバックを設定します。 MusicSequenceがシーケンストラックに追加したユーザイベント用にコールバックを登録するすることで、この呼び出しは利用されます。(もし inCallback が NULL だったら削除)

登録されたコールバックがあれば、MusicPlayerSetTIme で呼ばれたときに、ユーザイベントはクラッシュするかも知れません。 inStartSliceBeat と inEndSliceBeat の両方に同じ値の時や、プレイヤーもクラッシュする拍の場合です。

通常の場合、再生のスケジュールされたシーケンスデータの位置は、以下のように適用されます。

inStartSliceBeat <= inEventTime < inEndSliceBeat

MusicEvent を所有しているトラックがループしている場合は例外です。 最初の拍が最後の拍(コールバックがまだ再生中と判断し、何ビートかが現在管理されている)より小さくなるまでの場合でも、inEventTime はユーザイベントのオリジナルのタイムスタンプ時間になります。

MusicSequenceBeatsToBarBeatTime

/*!
    @function   MusicSequenceBeatsToBarBeatTime
    @abstract   Convenience function to format a sequence's beat time to its bar-beat time
    @discussion see . The sequence's tempo track Time Sig events are used to 
                to calculate the bar-beat representation. If there are no Time Sig events added to the sequence
                4/4 is assumed. A Time Sig event is a MIDI Meta Event as specified for MIDI files.
    @param      inSequence      the sequence
    @param      inBeats         the beat which should be represented by the bar-beat
    @param      inSubbeatDivisor    The denominator of the fractional number of beats.
    @param      outBarBeatTime  the formatted bar/beat time
*/
extern OSStatus
MusicSequenceBeatsToBarBeatTime(MusicSequence               inSequence,
                                MusicTimeStamp              inBeats,
                                UInt32                      inSubbeatDivisor,
                                CABarBeatTime *             outBarBeatTime)     __OSX_AVAILABLE_STARTING(__MAC_10_5,__IPHONE_5_0);

シーケンサーのbeat time(MusicTimeStamp)をbar-beat time(CABarBeatTime) に変換する。 シーケンスのTime Sig イベントテンポトラックは、bar-beat time 表現で計算するのに用いられる。 もしシーケンスに追加するTime Sig イベントが無ければ、4/4 拍子が指定される。 TIme Sig イベントは、MIDIファイル用に指定されるMIDI Meta Event です。

MusicSequenceBarBeatTimeToBeats

/*!
    @function   MusicSequenceBarBeatTimeToBeats
    @abstract   Convenience function to format a bar-beat time to a sequence's beat time
    @discussion see . The sequence's tempo track Time Sig events are used to 
                to calculate the bar-beat representation. If there are no Time Sig events added to the sequence
                4/4 is assumed. A Time Sig event is a MIDI Meta Event as specified for MIDI files.
    @param      inSequence      the sequence
    @param      inBarBeatTime   the bar-beat time
    @param      outBeats        the sequence's beat time for that bar-beat time
*/
extern OSStatus
MusicSequenceBarBeatTimeToBeats(MusicSequence               inSequence,
                                const CABarBeatTime *       inBarBeatTime,
                                MusicTimeStamp *            outBeats)           __OSX_AVAILABLE_STARTING(__MAC_10_5,__IPHONE_5_0);

シーケンサーの bar-beat time(CABarBeatTime)を beat time(MusicTimeStamp)に変換する。 シーケンスのTime Sig イベントテンポトラックは、bar-bea 表現で計算するのに用いられる。 もしシーケンスに追加するTime Sig イベントが無ければ、4/4 拍子が指定される。 TIme Sig イベントは、MIDIファイル用に指定されるMIDI Meta Event です。

MusicSequenceGetInfoDictionary

/*!
    @function   MusicSequenceGetInfoDictionary
    @abstract   Returns a dictionary containing meta-data derived from a sequence
    @discussion The dictionary can contain one or more of the kAFInfoDictionary_* 
                keys specified in 
                
                The caller should release the returned dictionary. If the call fails it will return NULL

    @param      inSequence      the sequence
    @result     a CFDictionary or NULL if the call fails.
*/
extern CFDictionaryRef
MusicSequenceGetInfoDictionary( MusicSequence               inSequence)         __OSX_AVAILABLE_STARTING(__MAC_10_5,__IPHONE_5_0);

シーケンスから導出される meta data を dictionary で返す。 dictionary は、1つないし、複数の <AudioToolbox/AudioFile.h> で指定されたキー kAFInfoDictionary_ を含む事ができる。 呼び出しで返された dictionary は release すべきです。 もし、呼び出しが失敗した場合は NULL を返します。

OCR

  2011/12/02

svn checkout http://tesseract-ocr.googlecode.com/svn/trunk/ tesseract-ocr sh autogen.sh

libtoolize →glibtoolize ./configure

http://tinsuke.wordpress.com/2011/02/17/how-to-cross-compiling-libraries-for-ios-armv6armv7i386/

http://tinsuke.wordpress.com/2011/11/01/how-to-compile-and-use-tesseract-3-01-on-ios-sdk-5/

http://www.malcolmhardie.com/ocr/xcode4.html

# svn checkout http://tesseract-ocr.googlecode.com/svn/trunk/ tesseract-ocr

http://code.google.com/p/tesseract-ocr/issues/detail?id=340#c0

http://mousecradle.wordpress.com/2011/05/17/compiling-svn-tesseract-on-osx/

sudo port install leptonica swig

./autogen.sh

configure 書き換え

./configure

make

sudo make install

Error opening data file /usr/local/share/tessdata/eng.traineddata

cp *.traineddata /usr/local/share/tessdata/

tesseract test.png test -l eng

wget http://leptonica.googlecode.com/files/leptonica-1.68.tar.gz

http://code.google.com/p/python-tesseract/wiki/HowToCompilePythonTesseract

tar jxvf leptonica-1.68.tar.gz

http://robertcarlsen.net/2009/12/06/ocr-on-iphone-demo-1043

http://samuraism.jp/diary/2007/04/14/1176560157667.html

http://tinsuke.wordpress.com/2011/11/01/how-to-compile-and-use-tesseract-3-01-on-ios-sdk-5/

  2011/12/01

会社で、SVN から Git に移行する流れになってきたので、今更ながら Git の基本をメモ。 手当たり次第なので、ところどころ間違いがあるかと思います。

リモート(origin)でリポジトリ作成

$ mkdir プロジェクト名 $ cd プロジェクト名 $ git init --bare --shared=true $ git --bare update-server-info

これで空のリポジトリが作成と、WebDav経由での公開設定

ローカル(master)

Titanium Studio の Team で AptanaGit を利用しようとしたが、どうにもこうにも作業コピーできない(?)ので、手動でコマンドすることに。

$ git clone http://サーバ/git/プロジェクト名

ローカルで Commit

TitaniumStudio に戻り Team > Commit を選択 TitaniumStudio Git

コメントを入れて、Commit したいファイルを、Unstaged Changes から staged Changes に移動して【Commit】 TitaniumStudio Git

リモートに push

リモート(origin) を選択すると push、SVN で言うリポジトリへの Commit となります。 TitaniumStudio Git TitaniumStudio ではコンソール上で赤文字(デフォルト色)で表示されるので、エラーが出たかと勘違いしますが、問題なく push できました。

コマンドだと大体こういう流れになるでしょうか?

$ git add 追加ファイル $ git add . $ git commit -m 'コメント' $ git remote add origin http://リモートサーバ/git/プロジェクト名 $ git push origin master

  2011/11/29

以前は JSON ライブラリを利用してましたが、iOS5 から JSON が標準対応になりました。 JSONテキストファイルを読み込んで、オブジェクト化するのにたった4行と素晴らしい。 (ファイル存在チェックはしてませんが・・・)

リソースの test.txt(JSON) を読み込むサンプル

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"txt"]; 
NSFileHandle *fileHandle = [NSFileHandle fileHandleForReadingAtPath:filePath];
NSData *data =[fileHandle readDataToEndOfFile];
NSArray *results = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
NSLog("%@", results);

NSJSONSerialization の API は以下の通り、非常に少ないのでシンプルです。

NSJSONSerialization のヘッダファイル

#import 

@class NSError, NSOutputStream, NSInputStream, NSData;
enum {
    NSJSONReadingMutableContainers = (1UL << 0),
    NSJSONReadingMutableLeaves = (1UL << 1),
    NSJSONReadingAllowFragments = (1UL << 2)
};
typedef NSUInteger NSJSONReadingOptions;

enum {
    NSJSONWritingPrettyPrinted = (1UL << 0)
};
typedef NSUInteger NSJSONWritingOptions;

NS_CLASS_AVAILABLE(10_7, 5_0)
@interface NSJSONSerialization : NSObject {
@private
    void *reserved[6];
}

+ (BOOL)isValidJSONObject:(id)obj;
+ (NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError **)error;
+ (id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error;
+ (NSInteger)writeJSONObject:(id)obj toStream:(NSOutputStream *)stream options:(NSJSONWritingOptions)opt error:(NSError **)error;
+ (id)JSONObjectWithStream:(NSInputStream *)stream options:(NSJSONReadingOptions)opt error:(NSError **)error;

@end

参考サイト

詳細や実用は、以下のサイトが参考になるかもです。 NSJSONSerialization Class Reference Working with JSON in iOS 5 Tutorial

  2011/11/26

MusicPlayer についての内容 ※間違いが含まれている場合があるので注意

NewMusicPlayer

/*! @function NewMusicPlayer @abstract Create a new music player @discussion A music player is used to play a sequence back. This call is used to create a player When a sequence is to be played by a player, it can play to either an AUGraph, a MIDI Destination or a mixture/combination of both. @param outPlayer the newly created player */ extern OSStatus NewMusicPlayer( MusicPlayer *outPlayer) __OSX_AVAILABLE_STARTING(__MAC_10_0,__IPHONE_5_0);

MusicPlayer は シーケンスを演奏する為に使われる。 この呼び出しは、新規 MusicPlayer の作成で利用。 シーケンスがプレイヤーで再生されるとき、「AUGraph」もしくは、「MIDI Destination とMixture/Combination」の両方のいずれかで再生可能。

DisposeMusicPlayer

/*!
    @function   DisposeMusicPlayer
    @abstract   Dispose a music player
    @param      inPlayer    the player to dispose
*/
extern OSStatus
DisposeMusicPlayer(     MusicPlayer     inPlayer)                               __OSX_AVAILABLE_STARTING(__MAC_10_0,__IPHONE_5_0);

MusicPlayer の処分をする。

MusicPlayerSetSequence

/*!
    @function   MusicPlayerSetSequence
    @abstract   Set the sequence for the player to play
    @discussion A Sequence cannot be set on a player while it is playing. Setting a sequence
                will overide the currently set sequence.
    @param      inPlayer    the player
    @param      inSequence  the sequence for the player to play
*/
extern OSStatus
MusicPlayerSetSequence( MusicPlayer     inPlayer,
                        MusicSequence   inSequence)                             __OSX_AVAILABLE_STARTING(__MAC_10_0,__IPHONE_5_0);

MusicPlayer に シーケンスを設定する。

MusicPlayerGetSequence

/*!
    @function   MusicPlayerGetSequence
    @abstract   Get the sequence attached to a player
    @discussion If the player does not have a sequence set, this will return the _NoSequence error
    @param      inPlayer    the player
    @param      outSequence the sequence currently set on the player
 
*/
extern OSStatus
MusicPlayerGetSequence( MusicPlayer     inPlayer,
                        MusicSequence   *outSequence)                           __OSX_AVAILABLE_STARTING(__MAC_10_3,__IPHONE_5_0);

MusicPlayer の シーケンスを取得する。

MusicPlayerGetSequence

[cpp]
/*! @function MusicPlayerSetTime @abstract Set the current time on the player @discussion The Get and Set Time calls take a specification of time as beats. This positions the player to the specified time based on the currently set sequence. No range checking on the time value is done. This can be set on a playing player (in which case playing will be resumed from the new time). @param inPlayer the player @param inTime the new time value */ extern OSStatus MusicPlayerSetTime( MusicPlayer inPlayer, MusicTimeStamp inTime) __OSX_AVAILABLE_STARTING(__MAC_10_0,__IPHONE_5_0); MusicPlayer に MusicTimeStamp を設定する。

MusicPlayerGetTime

/*!
    @function   MusicPlayerGetTime
    @abstract   Get the current time of the player
    @discussion The Get and Set Time calls take a specification of time as beats. This retrieves the player's
                current time. If it is playing this time is the time of the player at the time the call was made. 
    @param      inPlayer    the player
    @param      outTime     the current time value
*/
extern OSStatus
MusicPlayerGetTime(     MusicPlayer     inPlayer,
                        MusicTimeStamp  *outTime)                               __OSX_AVAILABLE_STARTING(__MAC_10_0,__IPHONE_5_0);

MusicPlayer から MusicTimeStamp を取得する。

MusicPlayerGetHostTimeForBeats

/*!
    @function   MusicPlayerGetHostTimeForBeats
    @abstract   Returns the host time that will be (or was) played at the specified beat.
    @discussion This call is only valid if the player is playing and will return an error if the player is not playing
                or if the starting position of the player (its "starting beat") was after the specified beat.
                For general translation of beats to time in a sequence, see the MusicSequence calls for beat<->seconds.
                
                The call uses the player's sequence's tempo map to translate a beat time from the starting time and beat
                of the player.
    @param      inPlayer    the player
    @param      inBeats     the specified beat-time value
    @param      outHostTime the corresponding host time
*/
extern OSStatus
MusicPlayerGetHostTimeForBeats( MusicPlayer     inPlayer,
                                MusicTimeStamp  inBeats,
                                UInt64 *        outHostTime)                    __OSX_AVAILABLE_STARTING(__MAC_10_2,__IPHONE_5_0);

MusicPlayer に拍数(MusicTimeStamp)を設定して、ホストタイムを取得する。

MusicPlayerGetBeatsForHostTime

/*!
    @function   MusicPlayerGetBeatsForHostTime
    @abstract   Returns the beat that will be (or was) played at the specified host time. 
    @discussion This call is only valid if the player is playing and will return an error if the player is not playing
                or if the starting time of the player was after the specified host time.
                For general translation of beats to time in a sequence, see the MusicSequence calls for beat<->seconds.
                
                The call uses the player's sequence's tempo map to retrieve a beat time from the starting and specified host time. 
                
    @param      inPlayer    the player
    @param      inHostTime  the specified host time value
    @param      outBeats    the corresponding beat time
*/
extern OSStatus
MusicPlayerGetBeatsForHostTime( MusicPlayer     inPlayer,
                                UInt64          inHostTime,
                                MusicTimeStamp *outBeats)                       __OSX_AVAILABLE_STARTING(__MAC_10_2,__IPHONE_5_0);

MusicPlayer にホストタイムを設定して、拍数(MusicTimeStamp)を取得する。

MusicPlayerPreroll

/*!
    @function   MusicPlayerPreroll
    @abstract   Prepare the player for playing
    @discussion Allows the player to prepare its state so that starting is has a lower latency. If a player is started without
                being prerolled, the player will pre-roll itself and then start.
    @param      inPlayer    the player
*/
extern OSStatus
MusicPlayerPreroll(     MusicPlayer     inPlayer)                               __OSX_AVAILABLE_STARTING(__MAC_10_0,__IPHONE_5_0);

MusicPlayer の再生の準備をする。 再生する準備ができたプレイヤーは、ローレイテンシーを実現できる。 プリロールされずにスタートした場合、プレイヤーは自分自身をプリロールしてそれからスタートするかもしれない。

MusicPlayerStart

/*!
    @function   MusicPlayerStart
    @abstract   Start the player
    @discussion If the player has not been prerolled, it will pre-roll itself and then start.
    @param      inPlayer    the player
*/
extern OSStatus
MusicPlayerStart(       MusicPlayer     inPlayer)                               __OSX_AVAILABLE_STARTING(__MAC_10_0,__IPHONE_5_0);

MusicPlayer を再生する。

MusicPlayerStop

/*!
    @function   MusicPlayerStop
    @abstract   Stop the player
    @param      inPlayer    the player
*/
extern OSStatus
MusicPlayerStop(        MusicPlayer     inPlayer)                               __OSX_AVAILABLE_STARTING(__MAC_10_0,__IPHONE_5_0);

MusicPlayer を停止する。

MusicPlayerIsPlaying

// 
/*!
    @function   MusicPlayerIsPlaying
    @abstract   Returns the playing state of the player. "Is it playing?"
    @discussion This call returns a non-zero value in outIsPlaying if the player has been
                started and not stopped. It may have "played" past the events of the attached
                MusicSequence, but it is still considered to be playing (and its time value increasing)
                until it is explicitly stopped
    @param      inPlayer        the player
    @param      outIsPlaying    false if not, true (non-zero) if is playing
*/
extern OSStatus
MusicPlayerIsPlaying(   MusicPlayer     inPlayer,
                        Boolean *       outIsPlaying)                           __OSX_AVAILABLE_STARTING(__MAC_10_2,__IPHONE_5_0);

MusicPlayer が再生中か判断する。

MusicPlayerSetPlayRateScalar

/*!
    @function   MusicPlayerSetPlayRateScalar
    @abstract   Scale the playback rate of the player
    @param      inPlayer    the player
    @param      inScaleRate a scalar that will be applied to the playback rate. If 2, playback is twice as fast, if
                0.5 it is half as fast. As a scalar, the value must be greater than zero.
*/
extern OSStatus
MusicPlayerSetPlayRateScalar(   MusicPlayer     inPlayer,
                                Float64         inScaleRate)                    __OSX_AVAILABLE_STARTING(__MAC_10_3,__IPHONE_5_0);

MusicPlayer の再生スピードを変える。 inScaleRate が2なら2倍、0.5なら半分の速さとなる。 inScaleRate は必ず 0 より大きい値にする。

MusicPlayerGetPlayRateScalar

/*!
    @function   MusicPlayerGetPlayRateScalar
    @abstract   Get the playback rate scalar of the player
    @param      inPlayer        the player
    @param      outScaleRate    the current scalar being applied to the player. Default value is 1.0
*/
extern OSStatus
MusicPlayerGetPlayRateScalar(   MusicPlayer     inPlayer,
                                Float64 *       outScaleRate)                   __OSX_AVAILABLE_STARTING(__MAC_10_3,__IPHONE_5_0);

MusicPlayer の再生スピードを取得する。

  2011/11/24

Macports で久々アップデート&インストールしようと思ったら以下のエラー

Error: Dependency 'p5.12-locale-gettext' not found.

p5.12-locale-gettext をクリーンにする

sudo port clean p5.12-locale-gettext

再度インストールしようと思ったら今度は Perl のエラー

Error: Target org.macports.activate returned: Image error: /opt/local/bin/a2p is being used by the active perl5.8 port.

どうやら Perl が重複して Active になっているぽい

sudo port installed | grep perl perl5 @5.8.9_0 perl5 @5.12.3_1+perl5_12 perl5.8 @5.8.9_3 (active) perl5.12 @5.12.3_2 (active)

ので、perl5.8 を無効にする。

sudo port deactivate perl5.8

何のきっかけでこうなったのか不明だが、同じ現象が起きている人もちらほらいるみたいです。

  2011/11/24

Debian6 に Jenkins をインストールしてみた。 Java を入れてなかったので java6-sdk をインストールしようとしたら、2つ選択肢があったみたいなので、openjdk-6-jdk をインストールしてみた。

JAVA JDK のインストール

# aptitude install openjdk-6-jdk

Jenkins のインストール

参考ページ

# wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | apt-key add - # aptitude install jenkins

オートマチックにアップグレードするようキーを登録するそうです。

あっけなく起動完了! Jenkins

Jenkins のホームは以下のようです。

/var/lib/jenkins/

pngファイルの軽量化
Google DriveのIconを再起的に削除
php-markdownでバニラPHPなコードブロック処理
laravel-ffmpeg を使う
2021年版 Ubuntu + certbot + Let's Encrypt でサーバ証明書設定
GihHub のデフォルトでない master ブランチを checkout する
マルチログインで未認証のリダイレクト
Homebrew で Redis をインストール
CSS だけでスムーズスクロール
EC-CUBE4 で Gmail の smtp を利用する
Amazon Linux 2 の amazon-linux-extras とは
UNIQUE カラムのバリデーションで自分自身を除外して更新
フォーム有効期限切れで Page Expired をリダイレクト
ログを日付でローテーションやクリアや削除
Homebrew で PHP8.0 から PHP7.4 にダウングレード
Big sur で zsh 移行と Homebrew アップグレード
Mac に minikube をインストール
途中から .gitignore に追加する
Larevel 6.x から Laravel 8.x にバージョンアップ
Composer で Allowed memory size (メモリ不足)エラー
Blade でカスタムクラスを利用する
git push git pull にブランチ指定せずに実行する
git pull や git push できなくなったとき
Docker のコンテナからホストOS に接続
Mac で ローカル IP アドレス(ipv4)のみを表示する
ホストOS から Docker の MySQLコンテナに接続
caching_sha2_password のエラー
node-config で環境設定ファイルを利用する
rootパスワードを初期化(再設定)する
Git から clone したときのエラー対処
Mac に MySQL をインストール
Mac に PostgreSQL をインストール
Laravel 環境構築 - Mac ネイティブ編
Firebase 入門 - Firebase とは
Firebase 入門 - CLI インストールとデータベースの設定
AWS 無料枠(t2.micro)で容量とメモリエラー
Cloud9 を起動する -初心者編-
gcloud で GCEインスタンスを起動してみる
AWS CLI と jq でインスタンス一覧を整形して表示
React と Laravel7 のプロジェクトを作成する
Homebrewインストール-2020年版
3直線で囲まれた範囲塗りつぶし
PuLP で線形最適化問題を解く
カスタムのペジネーションを作る
node-sass を使って sass をコンパイルする
Log ファサードでSQLログを分離して書き出す
いちから始める Docker - 複数のコンテナを使う - (2020年)
いちから始める Docker - docker-compose を使う - (2020年)
AWS ECR を使ってみる
Laravel7 でマルチ認証