我正在尝试制作播放MP3歌曲的应用。我的程序流程是这样的:
我的网站上有一个XML文件:http://jeewanaryal.web44.net/SongsXML/songsListXML.xml。它有歌曲标题和互联网上这些歌曲的实际URL。我的Pop歌曲部分有以下代码:
NSString *urlString = @"http://jeewanaryal.web44.net/SongsXML/songsListXML.xml";
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:urlString]];
NSDictionary *dict = [XMLReader dictionaryForXMLData:data error:nil];
NSArray *arrayOfSongs = [[NSArray alloc] initWithArray:[[[dict objectForKey:@"list"] objectForKey:@"songs"] objectForKey:@"song"]];
StartStopSound = [UIButton buttonWithType:UIButtonTypeRoundedRect];
StartStopSound.frame = CGRectMake(60, 360, 200, 30);
[StartStopSound setTitle:@"बजाउनुहोस" forState:UIControlStateNormal];
[StartStopSound addTarget:self action:@selector(playSong) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:StartStopSound];
back = [UIButton buttonWithType:UIButtonTypeRoundedRect];
back.frame = CGRectMake(20, 320, 100, 30);
[back setTitle:@"पछाडीको गीत " forState:UIControlStateNormal];
[back addTarget:self action:@selector(playSong) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:back];
next = [UIButton buttonWithType:UIButtonTypeRoundedRect];
next.frame = CGRectMake(200, 320, 100, 30);
[next setTitle:@"अगाडीको गीत" forState:UIControlStateNormal];
[next addTarget:self action:@selector(playSong) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:next];
NSData *myData = [[NSData alloc] init ];
NSString *urlString1 = [[NSString alloc] init];
for (NSDictionary *fruitDict in arrayOfSongs) {
UILabel *songTitle = [[UILabel alloc] initWithFrame:CGRectMake(40, 200, 300, 40)];
songTitle.text = [NSString stringWithFormat:@"%@",[[fruitDict objectForKey:@"title"] objectForKey:@"text"]];
[self.view addSubview:songTitle];
urlString1 = [NSString stringWithFormat:@"%@",[[fruitDict objectForKey:@"url"] objectForKey:@"text"]];
//NSLog(@"\n\n -- URL STRING : %@ \n\n",urlString);
}
myData = [NSData dataWithContentsOfURL:[NSURL URLWithString:urlString1]];
player = [[AVAudioPlayer alloc] initWithData:myData error:nil];
[player play];
[player numberOfLoops];
[player currentTime];
这适用于一首歌;也就是说,它只播放我的XML文件的最后一个URL。我想让所有歌曲逐一播放,在我的应用上制作一个“下一个”和“上一个”按钮。
请您告诉我如何实现这一点?我正在使用XMLReader.h和XMLReader.m文件将XML中的数据解析到我的应用程序中。
答案 0 :(得分:0)
您需要将arrayOfSongs存储在类中的某个位置。 “后退”和“下一步”按钮需要单独的操作(例如playPreviousSong
,playNextSong
)。这些方法看起来像这样:
-(void) playPreviousSong
{
NSString *url = [[self songs] objectAtIndex:[self songIndex] - 1];
[self playSong:url];
[self setSongIndex:[self songIndex - 1];
}
这是一个粗略的实现,只是为了说明它是如何组合在一起的。基本上你需要存储歌曲列表并跟踪哪首歌曲被“选中”/播放,然后只需选择下一首/上一首歌。
编辑:要在评论中回答您的问题,您已经提取了歌曲网址数组,您只需要在课程中保留对它的引用。 E.g。
@interface AudioPlayer {
NSArray *_songs;
NSUInteger *_songIndex;
}
然后在@implementation
而不是创建arrayOfSongs变量,只需从实例变量引用数组:
_songs = [[NSArray alloc] initWithArray:[[[dict objectForKey:@"list"] objectForKey:@"songs"] objectForKey:@"song"]];
然后在例如playPreviousSong方法中:
-(void) playPreviousSong
{
NSString *url = [_songs objectAtIndex:_songIndex - 1];
[self playSong:url];
_songIndex--;
}