MusicPlayer vol4 -MusicSequence-

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 を返します。