Iphone 如何在音乐序列中访问MusicTrack?

Iphone 如何在音乐序列中访问MusicTrack?,iphone,c,ios,xcode,audio,Iphone,C,Ios,Xcode,Audio,所以,我想找出iOS的MusicLayer API。我已经能够得到一个MIDI来播放,所以我的序列在那里,并填充了一些有用的东西,但我似乎无法访问这些曲目,或者在这个例子中是曲目,因为只有一个音乐曲目,另一个是节奏曲目 如果我在我的序列上运行MusicSequenceGetTrackCount,则返回2;这是意料之中的 如果运行MusicSequenceGetInfoDictionary,它将返回3个条目: Printing description of sequenceInfo: {

所以,我想找出iOS的MusicLayer API。我已经能够得到一个MIDI来播放,所以我的序列在那里,并填充了一些有用的东西,但我似乎无法访问这些曲目,或者在这个例子中是曲目,因为只有一个音乐曲目,另一个是节奏曲目

如果我在我的序列上运行MusicSequenceGetTrackCount,则返回2;这是意料之中的

如果运行MusicSequenceGetInfoDictionary,它将返回3个条目:

Printing description of sequenceInfo:
{
    tempo = 120;
    "time signature" = "4/4";
    title = "RHand";
}
这是有意义的,因为所有这些信息都与我的轨迹相匹配

所以,所有这些都会让我想,如果我使用MusicSequenceGetIndTrackMusicSequenceInSequence,UInt32 inTrackIndex,MusicTrack*outTrack方法,我应该能够输出曲目,以便进行一些修改

这是到目前为止我的代码。如果有人能看看我哪里出了问题,那就太好了。此外,如果有人有一些关于使用MusicPlayer的好资源,我将非常感激。谢谢

ViewController.h

#import <UIKit/UIKit.h>
#import <AudioToolbox/MusicPlayer.h>

@interface ViewController : UIViewController

@property (strong, nonatomic) IBOutlet UILabel *noteDisplayLabel;
@property MusicSequence mySequence;
@property MusicPlayer player;
@property MusicEventIterator iterator;
@property MusicTrack RHand;
@property MusicTrack LHand;


- (IBAction)practiceLesson:(id)sender;
- (IBAction)changeTempo:(id)sender;

@end
编辑

尝试在viewDidLoad方法中执行以下操作,但无效:

UInt32 trackIndex = 1;
MusicTrack *track;
MusicSequenceGetIndTrack (mySequence,trackIndex,&track);
编辑

更新了上述代码以包含更改。我现在使用eventIterator,但似乎无法从中获取任何事件数据?运行该程序会得到以下输出:

2012-03-13 14:09:39.709 musicPlayerSandbox[61775:f803] Number of tracks: 2
2012-03-13 14:09:39.711 musicPlayerSandbox[61775:f803] Has Event: 1
2012-03-13 14:09:39.712 musicPlayerSandbox[61775:f803] Event 0.000000: Type = 7, Data = 0x0, Size = 4
2012-03-13 14:09:39.713 musicPlayerSandbox[61775:f803] More Events? : 1
2012-03-13 14:09:39.714 musicPlayerSandbox[61775:f803] Has Event: 1
2012-03-13 14:09:39.714 musicPlayerSandbox[61775:f803] Event 0.000000: Type = 7, Data = 0x0, Size = 4
2012-03-13 14:09:39.715 musicPlayerSandbox[61775:f803] More Events? : 1
2012-03-13 14:09:39.716 musicPlayerSandbox[61775:f803] Has Event: 1
2012-03-13 14:09:39.716 musicPlayerSandbox[61775:f803] Event 0.000000: Type = 7, Data = 0x0, Size = 4
2012-03-13 14:09:39.717 musicPlayerSandbox[61775:f803] More Events? : 1
2012-03-13 14:09:39.718 musicPlayerSandbox[61775:f803] Has Event: 1
2012-03-13 14:09:39.719 musicPlayerSandbox[61775:f803] Event 0.000000: Type = 7, Data = 0x0, Size = 4
2012-03-13 14:09:39.719 musicPlayerSandbox[61775:f803] More Events? : 1
2012-03-13 14:09:39.720 musicPlayerSandbox[61775:f803] Has Event: 1
2012-03-13 14:09:39.845 musicPlayerSandbox[61775:f803] Event 0.000000: Type = 6, Data = 0x0, Size = 8
2012-03-13 14:09:39.846 musicPlayerSandbox[61775:f803] More Events? : 1
2012-03-13 14:09:39.846 musicPlayerSandbox[61775:f803] Has Event: 1
2012-03-13 14:09:39.847 musicPlayerSandbox[61775:f803] Event 1.000000: Type = 6, Data = 0x0, Size = 8
2012-03-13 14:09:39.847 musicPlayerSandbox[61775:f803] More Events? : 1
2012-03-13 14:09:39.848 musicPlayerSandbox[61775:f803] Has Event: 1
2012-03-13 14:09:39.849 musicPlayerSandbox[61775:f803] Event 2.000000: Type = 6, Data = 0x0, Size = 8
2012-03-13 14:09:39.850 musicPlayerSandbox[61775:f803] More Events? : 1
2012-03-13 14:09:39.850 musicPlayerSandbox[61775:f803] Has Event: 1
2012-03-13 14:09:39.851 musicPlayerSandbox[61775:f803] Event 3.000000: Type = 6, Data = 0x0, Size = 8
2012-03-13 14:09:39.851 musicPlayerSandbox[61775:f803] More Events? : 1
2012-03-13 14:09:39.852 musicPlayerSandbox[61775:f803] Has Event: 1
2012-03-13 14:09:39.853 musicPlayerSandbox[61775:f803] Event 4.000000: Type = 6, Data = 0x0, Size = 8
2012-03-13 14:09:39.887 musicPlayerSandbox[61775:f803] More Events? : 1
2012-03-13 14:09:39.888 musicPlayerSandbox[61775:f803] Has Event: 1
2012-03-13 14:09:39.888 musicPlayerSandbox[61775:f803] Event 5.000000: Type = 6, Data = 0x0, Size = 8
2012-03-13 14:09:39.889 musicPlayerSandbox[61775:f803] More Events? : 1
2012-03-13 14:09:39.890 musicPlayerSandbox[61775:f803] Has Event: 1
2012-03-13 14:09:39.891 musicPlayerSandbox[61775:f803] Event 6.000000: Type = 6, Data = 0x0, Size = 8
2012-03-13 14:09:39.891 musicPlayerSandbox[61775:f803] More Events? : 1
2012-03-13 14:09:39.892 musicPlayerSandbox[61775:f803] Has Event: 1
2012-03-13 14:09:39.893 musicPlayerSandbox[61775:f803] Event 7.000000: Type = 6, Data = 0x0, Size = 8
2012-03-13 14:09:39.893 musicPlayerSandbox[61775:f803] More Events? : 1
2012-03-13 14:09:39.894 musicPlayerSandbox[61775:f803] Has Event: 1
2012-03-13 14:09:39.895 musicPlayerSandbox[61775:f803] Event 8.000000: Type = 6, Data = 0x0, Size = 8
2012-03-13 14:09:39.899 musicPlayerSandbox[61775:f803] More Events? : 1
2012-03-13 14:09:39.900 musicPlayerSandbox[61775:f803] Has Event: 1
2012-03-13 14:09:39.901 musicPlayerSandbox[61775:f803] Event 9.000000: Type = 6, Data = 0x0, Size = 8
2012-03-13 14:09:39.902 musicPlayerSandbox[61775:f803] More Events? : 1
2012-03-13 14:09:39.902 musicPlayerSandbox[61775:f803] Has Event: 1
2012-03-13 14:09:39.903 musicPlayerSandbox[61775:f803] Event 10.000000: Type = 6, Data = 0x0, Size = 8
2012-03-13 14:09:39.904 musicPlayerSandbox[61775:f803] More Events? : 1
2012-03-13 14:09:39.905 musicPlayerSandbox[61775:f803] Has Event: 1
2012-03-13 14:09:39.905 musicPlayerSandbox[61775:f803] Event 11.000000: Type = 6, Data = 0x0, Size = 8
2012-03-13 14:09:39.906 musicPlayerSandbox[61775:f803] More Events? : 1
2012-03-13 14:09:39.907 musicPlayerSandbox[61775:f803] Has Event: 1
2012-03-13 14:09:39.908 musicPlayerSandbox[61775:f803] Event 12.000000: Type = 6, Data = 0x0, Size = 8
2012-03-13 14:09:39.908 musicPlayerSandbox[61775:f803] More Events? : 1
2012-03-13 14:09:39.909 musicPlayerSandbox[61775:f803] Has Event: 1
2012-03-13 14:09:39.928 musicPlayerSandbox[61775:f803] Event 13.000000: Type = 6, Data = 0x0, Size = 8
2012-03-13 14:09:39.929 musicPlayerSandbox[61775:f803] More Events? : 1
2012-03-13 14:09:39.930 musicPlayerSandbox[61775:f803] Has Event: 1
2012-03-13 14:09:39.930 musicPlayerSandbox[61775:f803] Event 14.000000: Type = 6, Data = 0x0, Size = 8
2012-03-13 14:09:39.931 musicPlayerSandbox[61775:f803] More Events? : 1
2012-03-13 14:09:39.932 musicPlayerSandbox[61775:f803] Has Event: 1
2012-03-13 14:09:39.932 musicPlayerSandbox[61775:f803] Event 15.000000: Type = 6, Data = 0x0, Size = 8
2012-03-13 14:09:39.933 musicPlayerSandbox[61775:f803] More Events? : 1
2012-03-13 14:09:39.933 musicPlayerSandbox[61775:f803] Has Event: 1
2012-03-13 14:09:39.934 musicPlayerSandbox[61775:f803] Event 16.000000: Type = 6, Data = 0x0, Size = 8
2012-03-13 14:09:39.935 musicPlayerSandbox[61775:f803] More Events? : 0

要访问任何曲目,您首先需要访问musicSequence。在你的情况下,你有我的顺序 为此,您还知道音乐序列中的曲目总数为trackCount。现在,要访问特定的曲目,您只需使用

MusicTrack *track;
MusicSequenceGetIndTrack (mySequence,trackIndex,&track);
这将为您提供跟踪。另外,请确保trackIndex 更新

根据

音乐曲目和相关不透明类型在MusicPlayer.h头文件中声明

因此,您需要使用MusicTrack是不透明类型而不是类

MusicTrack track; //without star sign. rest remains the same.
EventIterator的更新

正如您所说的,MusicEventIteratorGetEventInfo方法为事件数据获取参数const void**outEventData,因此您需要将其作为&outEventData传递,而不仅仅是outEventData传递

因此,在您的代码更改中,请执行以下行:

MusicEventIteratorGetEventInfo(iter, &timestamp, &eventType, &eventData, &eventDataSize);

要访问任何曲目,您首先需要访问musicSequence。在你的情况下,你有我的顺序 为此,您还知道音乐序列中的曲目总数为trackCount。现在,要访问特定的曲目,您只需使用

MusicTrack *track;
MusicSequenceGetIndTrack (mySequence,trackIndex,&track);
这将为您提供跟踪。另外,请确保trackIndex 更新

根据

音乐曲目和相关不透明类型在MusicPlayer.h头文件中声明

因此,您需要使用MusicTrack是不透明类型而不是类

MusicTrack track; //without star sign. rest remains the same.
EventIterator的更新

正如您所说的,MusicEventIteratorGetEventInfo方法为事件数据获取参数const void**outEventData,因此您需要将其作为&outEventData传递,而不仅仅是outEventData传递

因此,在您的代码更改中,请执行以下行:

MusicEventIteratorGetEventInfo(iter, &timestamp, &eventType, &eventData, &eventDataSize);

嘿我尝试了这个,它给了我一个警告:不兼容的指针类型将'MusicTrack**'aka'struct OpaqueMusicTrack***'传递给'MusicTrack*'aka'struct OpaqueMusicTrack**'类型的参数。因此,我尝试删除&from-before轨迹,但这给了我另一个警告:变量“track”在这里使用时未初始化。因此,当我开始将track设置为NULL时,它不会给出任何警告,但也不起作用:嘿,这很有效,谢谢:我正在尝试从事件中获取eventData,但我似乎不知道如何格式化eventData变量。我已将代码更改添加到问题中。引用中说eventData类型是const void**outEventData,但我不确定这是什么意思。据我所知,你需要一个空指针?嘿。我尝试了这个,它给了我一个警告:不兼容的指针类型将'MusicTrack**'aka'struct OpaqueMusicTrack***'传递给'MusicTrack*'aka'struct OpaqueMusicTrack**'类型的参数。因此,我尝试删除&from-before轨迹,但这给了我另一个警告:变量“track”在这里使用时未初始化。因此,当我开始将track设置为NULL时,它不会给出任何警告,但也不起作用:嘿,这很有效,谢谢:我正在尝试从事件中获取eventData,但我似乎不知道如何格式化eventData变量。我已将代码更改添加到问题中。引用中说eventData类型是const void**outEventData,但我不确定这是什么意思。据我所知,你需要一个空指针?